@yoryoboy/bi-mcp 1.10.0 → 1.13.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 (239) hide show
  1. package/README.md +4 -5
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/index.js +398 -8
  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/mercadolibre-profile-store.js +25 -0
  9. package/dist/src/config/mercadolibre-profile-store.js.map +2 -2
  10. package/dist/src/config/meta-store.js +109 -0
  11. package/dist/src/config/meta-store.js.map +7 -0
  12. package/dist/src/config/meta.js +0 -2
  13. package/dist/src/config/meta.js.map +2 -2
  14. package/dist/src/meta/__tests__/meta-utils.test.js +155 -0
  15. package/dist/src/meta/__tests__/meta-utils.test.js.map +7 -0
  16. package/dist/src/services/mercadolibre/__tests__/mercadolibre-api.test.js +265 -0
  17. package/dist/src/services/mercadolibre/__tests__/mercadolibre-api.test.js.map +7 -0
  18. package/dist/src/services/mercadolibre/__tests__/mercadolibre-items.test.js +311 -0
  19. package/dist/src/services/mercadolibre/__tests__/mercadolibre-items.test.js.map +7 -0
  20. package/dist/src/services/mercadolibre/__tests__/mercadolibre-orders.test.js +220 -0
  21. package/dist/src/services/mercadolibre/__tests__/mercadolibre-orders.test.js.map +7 -0
  22. package/dist/src/services/meta/__tests__/meta-ads.test.js +126 -0
  23. package/dist/src/services/meta/__tests__/meta-ads.test.js.map +7 -0
  24. package/dist/src/services/meta/__tests__/meta-api.test.js +70 -0
  25. package/dist/src/services/meta/__tests__/meta-api.test.js.map +7 -0
  26. package/dist/src/services/meta/meta-ads.js +94 -40
  27. package/dist/src/services/meta/meta-ads.js.map +2 -2
  28. package/dist/src/services/meta/meta-api.js +8 -6
  29. package/dist/src/services/meta/meta-api.js.map +2 -2
  30. package/dist/src/services/vtex/__tests__/vtex-catalog-write-batch.test.js +165 -0
  31. package/dist/src/services/vtex/__tests__/vtex-catalog-write-batch.test.js.map +7 -0
  32. package/dist/src/services/vtex/__tests__/vtex-catalog-write-eans.test.js +92 -0
  33. package/dist/src/services/vtex/__tests__/vtex-catalog-write-eans.test.js.map +7 -0
  34. package/dist/src/services/vtex/__tests__/vtex-catalog-write-products.test.js +41 -0
  35. package/dist/src/services/vtex/__tests__/vtex-catalog-write-products.test.js.map +7 -0
  36. package/dist/src/services/vtex/__tests__/vtex-catalog.test.js +80 -0
  37. package/dist/src/services/vtex/__tests__/vtex-catalog.test.js.map +7 -0
  38. package/dist/src/services/vtex/__tests__/vtex-orders-write-http.test.js +85 -0
  39. package/dist/src/services/vtex/__tests__/vtex-orders-write-http.test.js.map +7 -0
  40. package/dist/src/services/vtex/__tests__/vtex-orders-write-state-validation.test.js +251 -0
  41. package/dist/src/services/vtex/__tests__/vtex-orders-write-state-validation.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-pricing-write.js +5 -0
  49. package/dist/src/services/vtex/vtex-pricing-write.js.map +2 -2
  50. package/dist/src/services/vtex/vtex-write.js +67 -1
  51. package/dist/src/services/vtex/vtex-write.js.map +2 -2
  52. package/dist/src/tools/config/list-profiles.js +85 -11
  53. package/dist/src/tools/config/list-profiles.js.map +2 -2
  54. package/dist/src/tools/index.js.map +2 -2
  55. package/dist/src/tools/mercadolibre/__tests__/helpers.test.js +37 -0
  56. package/dist/src/tools/mercadolibre/__tests__/helpers.test.js.map +7 -0
  57. package/dist/src/tools/mercadolibre/__tests__/profile-resolution.test.js +30 -0
  58. package/dist/src/tools/mercadolibre/__tests__/profile-resolution.test.js.map +7 -0
  59. package/dist/src/tools/mercadolibre/profile-resolution.js +4 -50
  60. package/dist/src/tools/mercadolibre/profile-resolution.js.map +2 -2
  61. package/dist/src/tools/meta/__tests__/pagination.test.js +133 -0
  62. package/dist/src/tools/meta/__tests__/pagination.test.js.map +7 -0
  63. package/dist/src/tools/meta/__tests__/profile-access.test.js +262 -0
  64. package/dist/src/tools/meta/__tests__/profile-access.test.js.map +7 -0
  65. package/dist/src/tools/meta/__tests__/read-tools.test.js +722 -0
  66. package/dist/src/tools/meta/__tests__/read-tools.test.js.map +7 -0
  67. package/dist/src/tools/meta/__tests__/schemas.test.js +103 -0
  68. package/dist/src/tools/meta/__tests__/schemas.test.js.map +7 -0
  69. package/dist/src/tools/meta/account-overview.js +37 -19
  70. package/dist/src/tools/meta/account-overview.js.map +2 -2
  71. package/dist/src/tools/meta/ad-account-info.js +31 -6
  72. package/dist/src/tools/meta/ad-account-info.js.map +2 -2
  73. package/dist/src/tools/meta/ads-performance.js +35 -21
  74. package/dist/src/tools/meta/ads-performance.js.map +2 -2
  75. package/dist/src/tools/meta/campaign-performance.js +35 -18
  76. package/dist/src/tools/meta/campaign-performance.js.map +2 -2
  77. package/dist/src/tools/meta/list-accessible-ad-accounts.js +39 -10
  78. package/dist/src/tools/meta/list-accessible-ad-accounts.js.map +2 -2
  79. package/dist/src/tools/meta/list-accessible-businesses.js +37 -13
  80. package/dist/src/tools/meta/list-accessible-businesses.js.map +2 -2
  81. package/dist/src/tools/meta/placement-mix.js +37 -22
  82. package/dist/src/tools/meta/placement-mix.js.map +2 -2
  83. package/dist/src/tools/meta/profile-access.js +215 -0
  84. package/dist/src/tools/meta/profile-access.js.map +7 -0
  85. package/dist/src/tools/meta/schema-helpers.js +19 -0
  86. package/dist/src/tools/meta/schema-helpers.js.map +7 -0
  87. package/dist/src/tools/meta/time-series.js +40 -23
  88. package/dist/src/tools/meta/time-series.js.map +2 -2
  89. package/dist/src/tools/vtex/__tests__/catalog-admin-batch.test.js +233 -0
  90. package/dist/src/tools/vtex/__tests__/catalog-admin-batch.test.js.map +7 -0
  91. package/dist/src/tools/vtex/__tests__/catalog-admin-categories.test.js +649 -0
  92. package/dist/src/tools/vtex/__tests__/catalog-admin-categories.test.js.map +7 -0
  93. package/dist/src/tools/vtex/__tests__/catalog-admin-product-specifications.test.js +339 -0
  94. package/dist/src/tools/vtex/__tests__/catalog-admin-product-specifications.test.js.map +7 -0
  95. package/dist/src/tools/vtex/__tests__/catalog-admin-products-skus.test.js +235 -0
  96. package/dist/src/tools/vtex/__tests__/catalog-admin-products-skus.test.js.map +7 -0
  97. package/dist/src/tools/vtex/__tests__/catalog-navigation-reads.test.js +372 -0
  98. package/dist/src/tools/vtex/__tests__/catalog-navigation-reads.test.js.map +7 -0
  99. package/dist/src/tools/vtex/__tests__/catalog-navigation-surface.test.js +57 -0
  100. package/dist/src/tools/vtex/__tests__/catalog-navigation-surface.test.js.map +7 -0
  101. package/dist/src/tools/vtex/__tests__/write-helpers.test.js +97 -0
  102. package/dist/src/tools/vtex/__tests__/write-helpers.test.js.map +7 -0
  103. package/dist/src/tools/vtex/activate-sku.js +1 -48
  104. package/dist/src/tools/vtex/activate-sku.js.map +2 -2
  105. package/dist/src/tools/vtex/associate-specification.js +3 -54
  106. package/dist/src/tools/vtex/associate-specification.js.map +2 -2
  107. package/dist/src/tools/vtex/attach-catalog-image.js +3 -57
  108. package/dist/src/tools/vtex/attach-catalog-image.js.map +2 -2
  109. package/dist/src/tools/vtex/catalog-admin-batch.js +298 -0
  110. package/dist/src/tools/vtex/catalog-admin-batch.js.map +7 -0
  111. package/dist/src/tools/vtex/catalog-admin-categories.js +542 -0
  112. package/dist/src/tools/vtex/catalog-admin-categories.js.map +7 -0
  113. package/dist/src/tools/vtex/catalog-admin-product-specifications.js +275 -0
  114. package/dist/src/tools/vtex/catalog-admin-product-specifications.js.map +7 -0
  115. package/dist/src/tools/vtex/catalog-admin-products-skus.js +475 -0
  116. package/dist/src/tools/vtex/catalog-admin-products-skus.js.map +7 -0
  117. package/dist/src/tools/vtex/catalog-navigation-reads.js +430 -0
  118. package/dist/src/tools/vtex/catalog-navigation-reads.js.map +7 -0
  119. package/dist/src/tools/vtex/create-brand.js +1 -64
  120. package/dist/src/tools/vtex/create-brand.js.map +2 -2
  121. package/dist/src/tools/vtex/create-category.js +1 -76
  122. package/dist/src/tools/vtex/create-category.js.map +2 -2
  123. package/dist/src/tools/vtex/create-product-with-sku.js +3 -114
  124. package/dist/src/tools/vtex/create-product-with-sku.js.map +2 -2
  125. package/dist/src/tools/vtex/create-specification-value.js +3 -47
  126. package/dist/src/tools/vtex/create-specification-value.js.map +2 -2
  127. package/dist/src/tools/vtex/create-specification.js +1 -80
  128. package/dist/src/tools/vtex/create-specification.js.map +2 -2
  129. package/dist/src/tools/vtex/deactivate-sku.js +1 -48
  130. package/dist/src/tools/vtex/deactivate-sku.js.map +2 -2
  131. package/dist/src/tools/vtex/delete-all-product-specifications.js +9 -0
  132. package/dist/src/tools/vtex/delete-all-product-specifications.js.map +7 -0
  133. package/dist/src/tools/vtex/delete-all-sku-specifications.js +9 -0
  134. package/dist/src/tools/vtex/delete-all-sku-specifications.js.map +7 -0
  135. package/dist/src/tools/vtex/delete-brand.js +9 -0
  136. package/dist/src/tools/vtex/delete-brand.js.map +7 -0
  137. package/dist/src/tools/vtex/delete-catalog-image.js +9 -0
  138. package/dist/src/tools/vtex/delete-catalog-image.js.map +7 -0
  139. package/dist/src/tools/vtex/delete-product-specification.js +9 -0
  140. package/dist/src/tools/vtex/delete-product-specification.js.map +7 -0
  141. package/dist/src/tools/vtex/delete-sku-price.js +55 -0
  142. package/dist/src/tools/vtex/delete-sku-price.js.map +7 -0
  143. package/dist/src/tools/vtex/delete-sku-specification.js +9 -0
  144. package/dist/src/tools/vtex/delete-sku-specification.js.map +7 -0
  145. package/dist/src/tools/vtex/get-brand.js +6 -0
  146. package/dist/src/tools/vtex/get-brand.js.map +7 -0
  147. package/dist/src/tools/vtex/get-category-tree.js +6 -0
  148. package/dist/src/tools/vtex/get-category-tree.js.map +7 -0
  149. package/dist/src/tools/vtex/get-category.js +6 -0
  150. package/dist/src/tools/vtex/get-category.js.map +7 -0
  151. package/dist/src/tools/vtex/get-product-specifications.js +9 -0
  152. package/dist/src/tools/vtex/get-product-specifications.js.map +7 -0
  153. package/dist/src/tools/vtex/get-product.js +6 -0
  154. package/dist/src/tools/vtex/get-product.js.map +7 -0
  155. package/dist/src/tools/vtex/get-sku.js +6 -0
  156. package/dist/src/tools/vtex/get-sku.js.map +7 -0
  157. package/dist/src/tools/vtex/index.js +23 -1
  158. package/dist/src/tools/vtex/index.js.map +2 -2
  159. package/dist/src/tools/vtex/list-brands.js +6 -0
  160. package/dist/src/tools/vtex/list-brands.js.map +7 -0
  161. package/dist/src/tools/vtex/list-categories.js +6 -0
  162. package/dist/src/tools/vtex/list-categories.js.map +7 -0
  163. package/dist/src/tools/vtex/list-products-by-category.js +6 -0
  164. package/dist/src/tools/vtex/list-products-by-category.js.map +7 -0
  165. package/dist/src/tools/vtex/list-products.js +6 -0
  166. package/dist/src/tools/vtex/list-products.js.map +7 -0
  167. package/dist/src/tools/vtex/list-skus-by-product.js +6 -0
  168. package/dist/src/tools/vtex/list-skus-by-product.js.map +7 -0
  169. package/dist/src/tools/vtex/list-specification-groups.js +9 -0
  170. package/dist/src/tools/vtex/list-specification-groups.js.map +7 -0
  171. package/dist/src/tools/vtex/move-category.js +6 -0
  172. package/dist/src/tools/vtex/move-category.js.map +7 -0
  173. package/dist/src/tools/vtex/profile-resolution.js +4 -51
  174. package/dist/src/tools/vtex/profile-resolution.js.map +2 -2
  175. package/dist/src/tools/vtex/update-brand.js +6 -0
  176. package/dist/src/tools/vtex/update-brand.js.map +7 -0
  177. package/dist/src/tools/vtex/update-category.js +6 -0
  178. package/dist/src/tools/vtex/update-category.js.map +7 -0
  179. package/dist/src/tools/vtex/update-product-basic-fields.js +3 -65
  180. package/dist/src/tools/vtex/update-product-basic-fields.js.map +2 -2
  181. package/dist/src/tools/vtex/update-sku-basic-fields.js +1 -87
  182. package/dist/src/tools/vtex/update-sku-basic-fields.js.map +2 -2
  183. package/dist/src/tools/vtex/update-sku-price.js +21 -1
  184. package/dist/src/tools/vtex/update-sku-price.js.map +2 -2
  185. package/dist/src/tools/vtex/write-helpers.js +104 -14
  186. package/dist/src/tools/vtex/write-helpers.js.map +2 -2
  187. package/dist/src/utils/provider-profile-selection.js +117 -0
  188. package/dist/src/utils/provider-profile-selection.js.map +7 -0
  189. package/dist/tests/meli/mercadolibre-tool-handlers-medium-batch4.test.js +678 -0
  190. package/dist/tests/meli/mercadolibre-tool-handlers-medium-batch4.test.js.map +7 -0
  191. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch5.test.js +564 -0
  192. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch5.test.js.map +7 -0
  193. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch6.test.js +387 -0
  194. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch6.test.js.map +7 -0
  195. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch7.test.js +368 -0
  196. package/dist/tests/meli/mercadolibre-tool-handlers-monster-batch7.test.js.map +7 -0
  197. package/dist/tests/meli/mercadolibre-tool-handlers-small.test.js +626 -0
  198. package/dist/tests/meli/mercadolibre-tool-handlers-small.test.js.map +7 -0
  199. package/dist/tests/meli/mercadolibre-tool-handlers-write-batch8.test.js +480 -0
  200. package/dist/tests/meli/mercadolibre-tool-handlers-write-batch8.test.js.map +7 -0
  201. package/dist/tests/setup.js +2 -0
  202. package/dist/tests/setup.js.map +7 -0
  203. package/dist/tests/smoke/test-harness.test.js +7 -0
  204. package/dist/tests/smoke/test-harness.test.js.map +7 -0
  205. package/dist/tests/vtex/read-only-utils.test.js +161 -0
  206. package/dist/tests/vtex/read-only-utils.test.js.map +7 -0
  207. package/dist/tests/vtex/vtex-catalog-admin-docs.test.js +24 -0
  208. package/dist/tests/vtex/vtex-catalog-admin-docs.test.js.map +7 -0
  209. package/dist/tests/vtex/vtex-catalog-admin-surface.test.js +30 -0
  210. package/dist/tests/vtex/vtex-catalog-admin-surface.test.js.map +7 -0
  211. package/dist/tests/vtex/vtex-catalog-write-tools.test.js +712 -0
  212. package/dist/tests/vtex/vtex-catalog-write-tools.test.js.map +7 -0
  213. package/dist/tests/vtex/vtex-catalog.service.test.js +51 -0
  214. package/dist/tests/vtex/vtex-catalog.service.test.js.map +7 -0
  215. package/dist/tests/vtex/vtex-inventory-tools.test.js +201 -0
  216. package/dist/tests/vtex/vtex-inventory-tools.test.js.map +7 -0
  217. package/dist/tests/vtex/vtex-logistics.service.test.js +134 -0
  218. package/dist/tests/vtex/vtex-logistics.service.test.js.map +7 -0
  219. package/dist/tests/vtex/vtex-order-details.tool.test.js +141 -0
  220. package/dist/tests/vtex/vtex-order-details.tool.test.js.map +7 -0
  221. package/dist/tests/vtex/vtex-order-write-tools.test.js +483 -0
  222. package/dist/tests/vtex/vtex-order-write-tools.test.js.map +7 -0
  223. package/dist/tests/vtex/vtex-orders-summary.tool.test.js +185 -0
  224. package/dist/tests/vtex/vtex-orders-summary.tool.test.js.map +7 -0
  225. package/dist/tests/vtex/vtex-orders.service.test.js +120 -0
  226. package/dist/tests/vtex/vtex-orders.service.test.js.map +7 -0
  227. package/dist/tests/vtex/vtex-pricing-write-tools.test.js +202 -0
  228. package/dist/tests/vtex/vtex-pricing-write-tools.test.js.map +7 -0
  229. package/dist/tests/vtex/vtex-pricing-write.service.test.js +106 -0
  230. package/dist/tests/vtex/vtex-pricing-write.service.test.js.map +7 -0
  231. package/dist/tests/vtex/vtex-pricing.service.test.js +88 -0
  232. package/dist/tests/vtex/vtex-pricing.service.test.js.map +7 -0
  233. package/dist/tests/vtex/vtex-small-tools.test.js +190 -0
  234. package/dist/tests/vtex/vtex-small-tools.test.js.map +7 -0
  235. package/dist/tests/vtex/vtex-write-simple-tools.test.js +647 -0
  236. package/dist/tests/vtex/vtex-write-simple-tools.test.js.map +7 -0
  237. package/dist/vitest.config.js +15 -0
  238. package/dist/vitest.config.js.map +7 -0
  239. package/package.json +6 -2
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../tests/meli/mercadolibre-tool-handlers-small.test.ts"],
4
+ "sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliGetAccountContextHandler } from \"../../src/tools/mercadolibre/get-account-context.js\";\nimport { meliValidateConnectionHandler } from \"../../src/tools/mercadolibre/validate-connection.js\";\nimport { meliPredictCategoryHandler } from \"../../src/tools/mercadolibre/predict-category.js\";\nimport { meliGetCategoryRequirementsHandler } from \"../../src/tools/mercadolibre/get-category-requirements.js\";\nimport { meliEstimateListingFeeHandler } from \"../../src/tools/mercadolibre/estimate-listing-fee.js\";\nimport { meliGetSiteCategoriesAndListingTypesHandler } from \"../../src/tools/mercadolibre/get-site-categories-and-listing-types.js\";\nimport { meliGetItemDetailsHandler } from \"../../src/tools/mercadolibre/get-item-details.js\";\nimport { meliSearchQuestionsHandler } from \"../../src/tools/mercadolibre/search-questions.js\";\nimport { meliAnswerQuestionHandler } from \"../../src/tools/mercadolibre/answer-question.js\";\nimport { meliGetListingQualityHandler } from \"../../src/tools/mercadolibre/get-listing-quality.js\";\nimport { meliGetItemVisitsHandler } from \"../../src/tools/mercadolibre/get-item-visits.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport {\n buildMercadoLibreWriteSuccessResponse,\n handleMercadoLibreWriteError,\n resolveMercadoLibreWriteProfile,\n} from \"../../src/tools/mercadolibre/write-helpers.js\";\nimport { getMercadoLibreAccessForProfile } from \"../../src/config/mercadolibre.js\";\nimport { getMercadoLibreConnectionRow } from \"../../src/config/mercadolibre-profile-store.js\";\nimport {\n buildMercadoLibrePaginationMetadata,\n formatMercadoLibreError,\n getMercadoLibreUsersMe,\n normalizeMercadoLibrePaging,\n} from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n getMercadoLibreCategoryAttributes,\n getMercadoLibreCategoryShippingPreferences,\n getMercadoLibreItemDetailsBatch,\n getMercadoLibreItemDetailsWithFallbackBatch,\n getMercadoLibreItemPerformance,\n getMercadoLibreItemVisitsWindow,\n getMercadoLibreSiteCategoriesAndListingTypes,\n getMercadoLibreUserItemsVisits,\n searchMercadoLibreDomainDiscovery,\n} from \"../../src/services/mercadolibre/mercadolibre-items.js\";\nimport {\n answerMercadoLibreQuestion,\n searchMercadoLibreQuestions,\n} from \"../../src/services/mercadolibre/mercadolibre-questions.js\";\nimport { buildMercadoLibreListingFeeEstimate } from \"../../src/tools/mercadolibre/listing-fee-helpers.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/tools/mercadolibre/write-helpers.js\", async () => {\n const { z } = await import(\"zod\");\n\n return {\n mercadolibreProfileIdSchemaField: z.string().optional(),\n resolveMercadoLibreWriteProfile: vi.fn(),\n buildMercadoLibreWriteSuccessResponse: vi.fn((payload: unknown) => ({ kind: \"success\", payload })),\n handleMercadoLibreWriteError: vi.fn(\n (err: unknown, fallback: string) => ({\n kind: \"error\",\n message: `write:${fallback}:${err instanceof Error ? err.message : String(err)}`,\n })\n ),\n };\n});\n\nvi.mock(\"../../src/config/mercadolibre.js\", () => ({\n getMercadoLibreAccessForProfile: vi.fn(),\n}));\n\nvi.mock(\"../../src/config/mercadolibre-profile-store.js\", () => ({\n getMercadoLibreConnectionRow: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-api.js\", () => ({\n getMercadoLibreUsersMe: vi.fn(),\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 buildMercadoLibrePaginationMetadata: vi.fn((metadata: unknown) => metadata),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-items.js\", () => ({\n searchMercadoLibreDomainDiscovery: vi.fn(),\n getMercadoLibreCategoryAttributes: vi.fn(),\n getMercadoLibreCategoryShippingPreferences: vi.fn(),\n getMercadoLibreSiteCategoriesAndListingTypes: vi.fn(),\n getMercadoLibreItemDetailsBatch: vi.fn(),\n getMercadoLibreItemDetailsWithFallbackBatch: vi.fn(),\n getMercadoLibreItemPerformance: vi.fn(),\n getMercadoLibreItemVisitsWindow: vi.fn(),\n getMercadoLibreUserItemsVisits: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-questions.js\", () => ({\n searchMercadoLibreQuestions: vi.fn(),\n answerMercadoLibreQuestion: vi.fn(),\n}));\n\nvi.mock(\"../../src/tools/mercadolibre/listing-fee-helpers.js\", () => ({\n buildMercadoLibreListingFeeEstimate: vi.fn(),\n}));\n\ndescribe(\"MercadoLibre small and medium tool handlers\", () => {\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(resolveMercadoLibreWriteProfile).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n\n vi.mocked(getMercadoLibreAccessForProfile).mockResolvedValue({\n sellerId: \"seller-99\",\n scopes: [\"read\", \"write\"],\n expiresAt: \"2026-07-01T00:00:00.000Z\",\n } as never);\n\n vi.mocked(getMercadoLibreUsersMe).mockResolvedValue({\n id: 12345,\n nickname: \"meli-store\",\n } as never);\n\n vi.mocked(buildMercadoLibrePaginationMetadata).mockImplementation((metadata) => metadata as never);\n vi.mocked(normalizeMercadoLibrePaging).mockImplementation((paging) => paging as never);\n });\n\n it(\"returns MercadoLibre account context with resolved profile access\", async () => {\n const result = await meliGetAccountContextHandler({ profileId: \"custom-profile\" });\n\n expect(resolveMercadoLibreProfileOrSelection).toHaveBeenCalledWith(\"custom-profile\");\n expect(getMercadoLibreAccessForProfile).toHaveBeenCalledWith(\"meli-profile-1\");\n expect(getMercadoLibreUsersMe).toHaveBeenCalledWith(\"meli-profile-1\");\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n seller_id: \"seller-99\",\n nickname: \"meli-store\",\n account_id: 12345,\n scopes: [\"read\", \"write\"],\n expires_at: \"2026-07-01T00:00:00.000Z\",\n },\n });\n });\n\n it(\"returns profile selection payload unchanged for read handlers\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true },\n } as never);\n\n const result = await meliGetAccountContextHandler({ profileId: undefined });\n\n expect(result).toEqual({ selection_required: true });\n expect(getMercadoLibreAccessForProfile).not.toHaveBeenCalled();\n });\n\n it(\"validates connection and reports refresh detection\", async () => {\n vi.mocked(getMercadoLibreConnectionRow)\n .mockResolvedValueOnce({\n expiresAt: new Date(\"2026-06-01T00:00:00.000Z\"),\n encryptedAccessToken: \"old-token\",\n } as never)\n .mockResolvedValueOnce({\n status: \"active\",\n expiresAt: new Date(\"2026-07-01T00:00:00.000Z\"),\n encryptedAccessToken: \"new-token\",\n } as never);\n\n const result = await meliValidateConnectionHandler({ profileId: \"meli-profile-1\" });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n validation_status: \"active\",\n refreshed: true,\n seller_id: \"seller-99\",\n account_id: 12345,\n nickname: \"meli-store\",\n expires_at: \"2026-07-01T00:00:00.000Z\",\n scopes: [\"read\", \"write\"],\n },\n });\n });\n\n it(\"predicts categories with normalized candidate payloads and defaults\", async () => {\n vi.mocked(searchMercadoLibreDomainDiscovery).mockResolvedValue([\n {\n category_id: \"MLA123\",\n category_name: \"Sneakers\",\n domain_id: \"MLA-SNEAKERS\",\n domain_name: \"Sneakers\",\n attributes_matched: \"4\",\n },\n ] as never);\n\n const result = await meliPredictCategoryHandler({\n profileId: \"meli-profile-1\",\n query: \"running shoes\",\n });\n\n expect(searchMercadoLibreDomainDiscovery).toHaveBeenCalledWith(\n \"meli-profile-1\",\n \"running shoes\",\n 5,\n \"MLA\"\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n query: \"running shoes\",\n site_id: \"MLA\",\n candidates: [\n {\n category_id: \"MLA123\",\n category_name: \"Sneakers\",\n domain_id: \"MLA-SNEAKERS\",\n domain_name: \"Sneakers\",\n attributes_matched: 4,\n },\n ],\n },\n });\n });\n\n it(\"splits required and recommended category requirements\", async () => {\n vi.mocked(getMercadoLibreCategoryAttributes).mockResolvedValue([\n {\n id: \"BRAND\",\n name: \"Brand\",\n value_type: \"string\",\n value_max_length: 255,\n tags: { required: true },\n },\n {\n id: \"MODEL\",\n name: \"Model\",\n value_type: \"string\",\n tags: {},\n },\n ] as never);\n vi.mocked(getMercadoLibreCategoryShippingPreferences).mockResolvedValue({\n mode: \"me2\",\n logistic_types: [\"drop_off\"],\n } as never);\n\n const result = await meliGetCategoryRequirementsHandler({\n profileId: \"meli-profile-1\",\n categoryId: \"MLA999\",\n });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n category_id: \"MLA999\",\n required_attributes: [\n {\n id: \"BRAND\",\n name: \"Brand\",\n value_type: \"string\",\n value_max_length: 255,\n },\n ],\n recommended_attributes: [\n {\n id: \"MODEL\",\n name: \"Model\",\n value_type: \"string\",\n },\n ],\n shipping_preferences: {\n mode: \"me2\",\n logistics: [\"drop_off\"],\n },\n },\n });\n });\n\n it(\"delegates listing fee estimation with the resolved profile\", async () => {\n vi.mocked(buildMercadoLibreListingFeeEstimate).mockResolvedValue({\n profile_id: \"meli-profile-1\",\n fee_amount: 1234,\n site_id: null,\n } as never);\n\n const result = await meliEstimateListingFeeHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA1\",\n query: \"running shoes\",\n price: 10000,\n categoryId: \"MLA123\",\n listingTypeId: \"gold_special\",\n shippingMode: \"me2\",\n logisticType: \"drop_off\",\n billableWeight: 1200,\n currencyId: \"ARS\",\n tags: [\"test-tag\"],\n });\n\n expect(buildMercadoLibreListingFeeEstimate).toHaveBeenCalledWith({\n profileId: \"meli-profile-1\",\n itemId: \"MLA1\",\n query: \"running shoes\",\n price: 10000,\n categoryId: \"MLA123\",\n listingTypeId: \"gold_special\",\n shippingMode: \"me2\",\n logisticType: \"drop_off\",\n billableWeight: 1200,\n currencyId: \"ARS\",\n tags: [\"test-tag\"],\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n fee_amount: 1234,\n },\n });\n });\n\n it(\"combines site categories and listing types metadata\", async () => {\n vi.mocked(getMercadoLibreSiteCategoriesAndListingTypes).mockResolvedValue({\n siteId: \"MLA\",\n categories: [{ id: \"MLA1\", name: \"Shoes\" }],\n listingTypes: [{ id: \"gold_special\", name: \"Cl\u00E1sica\" }],\n } as never);\n\n const result = await meliGetSiteCategoriesAndListingTypesHandler({ profileId: \"meli-profile-1\" });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n site_id: \"MLA\",\n categories: [{ id: \"MLA1\", name: \"Shoes\" }],\n listing_types: [{ id: \"gold_special\", name: \"Cl\u00E1sica\" }],\n metadata: {\n site_id: \"MLA\",\n categories_count: 1,\n listing_types_count: 1,\n pagination: \"No aplica. La tool consolida dos endpoints de cat\u00E1logo del sitio MLA en una sola respuesta.\",\n },\n },\n });\n });\n\n it(\"returns item details directly from multiget when all requested ids are found\", async () => {\n vi.mocked(getMercadoLibreItemDetailsBatch).mockResolvedValue([\n { id: \"MLA1\", title: \"Boots\", pictures: [{ id: \"1\" }], status: \"active\" },\n { id: \"MLA2\", title: \"Sneakers\", pictures: [{ id: \"2\" }], status: \"paused\" },\n ] as never);\n\n const result = await meliGetItemDetailsHandler({\n profileId: \"meli-profile-1\",\n itemIds: [\"MLA1\", \"MLA1\", \"MLA2\"],\n });\n\n expect(getMercadoLibreItemDetailsBatch).toHaveBeenCalledWith(\"meli-profile-1\", [\"MLA1\", \"MLA2\"]);\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n metadata: {\n profile_id: \"meli-profile-1\",\n requested: 2,\n successful: 2,\n failed: 0,\n source: \"items_multiget\",\n },\n items: [\n { id: \"MLA1\", title: \"Boots\", status: \"active\" },\n { id: \"MLA2\", title: \"Sneakers\", status: \"paused\" },\n ],\n },\n });\n });\n\n it(\"falls back to item-by-item details when multiget coverage is partial\", async () => {\n vi.mocked(getMercadoLibreItemDetailsBatch).mockResolvedValue([{ id: \"MLA1\", title: \"Boots\" }] as never);\n vi.mocked(getMercadoLibreItemDetailsWithFallbackBatch).mockResolvedValue({\n successful: [\n {\n id: \"MLA1\",\n document: { id: \"MLA1\", title: \"Boots\" },\n },\n ],\n failed: [\n {\n id: \"MLA2\",\n message: \"not found\",\n statusCode: 404,\n attempts: 2,\n retryable: false,\n },\n ],\n } as never);\n\n const result = await meliGetItemDetailsHandler({\n profileId: \"meli-profile-1\",\n itemIds: [\"MLA1\", \"MLA2\"],\n });\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 source: \"item_by_item_fallback\",\n },\n items: [{ id: \"MLA1\", title: \"Boots\" }],\n failures: [\n {\n item_id: \"MLA2\",\n message: \"not found\",\n status_code: 404,\n attempts: 2,\n retryable: false,\n },\n ],\n },\n });\n });\n\n it(\"searches questions with seller context and normalized pagination\", async () => {\n vi.mocked(searchMercadoLibreQuestions).mockResolvedValue({\n questions: [\n {\n id: 777,\n item_id: \"MLA1\",\n item: { title: \"Boots\" },\n status: \"unanswered\",\n text: \"Do you ship today?\",\n date_created: \"2026-03-10T14:45:55.000Z\",\n from: { id: 555, nickname: \"buyer\" },\n answer: { status: \"not_answered\" },\n },\n ],\n paging: { total: 1, limit: 20, offset: 0 },\n } as never);\n\n const result = await meliSearchQuestionsHandler({ profileId: \"meli-profile-1\" });\n\n expect(searchMercadoLibreQuestions).toHaveBeenCalledWith(\"meli-profile-1\", {\n sellerId: \"seller-99\",\n itemId: undefined,\n status: undefined,\n limit: 20,\n offset: 0,\n });\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n metadata: {\n total: 1,\n limit: 20,\n offset: 0,\n returned: 1,\n nextField: \"offset\",\n },\n questions: [\n {\n question_id: 777,\n item_id: \"MLA1\",\n item_title: \"Boots\",\n status: \"unanswered\",\n text: \"Do you ship today?\",\n date_created: \"2026-03-10 14:45\",\n from: { id: \"\", nickname: \"buyer\" },\n answer_status: \"not_answered\",\n },\n ],\n },\n });\n });\n\n it(\"routes question answers through write helpers\", async () => {\n vi.mocked(answerMercadoLibreQuestion).mockResolvedValue({ id: 777, status: \"answered\" } as never);\n\n const result = await meliAnswerQuestionHandler({\n profileId: \"meli-profile-1\",\n questionId: 777,\n text: \"Yes, we can ship today.\",\n });\n\n expect(resolveMercadoLibreWriteProfile).toHaveBeenCalledWith(\"meli-profile-1\");\n expect(answerMercadoLibreQuestion).toHaveBeenCalledWith(\n \"meli-profile-1\",\n 777,\n \"Yes, we can ship today.\"\n );\n expect(buildMercadoLibreWriteSuccessResponse).toHaveBeenCalledWith({\n profileId: \"meli-profile-1\",\n operation: \"answer_question\",\n resourceId: \"777\",\n message: \"MercadoLibre question answered successfully.\",\n after: { id: 777, status: \"answered\" },\n });\n expect(result).toEqual({\n kind: \"success\",\n payload: {\n profileId: \"meli-profile-1\",\n operation: \"answer_question\",\n resourceId: \"777\",\n message: \"MercadoLibre question answered successfully.\",\n after: { id: 777, status: \"answered\" },\n },\n });\n });\n\n it(\"formats listing quality summaries with warning normalization\", async () => {\n vi.mocked(getMercadoLibreItemPerformance).mockResolvedValue({\n score: \"85\",\n status: \"healthy\",\n health: \"good\",\n sales: 20,\n visits: 300,\n warnings: [{ id: \"photo\", text: \"Add more photos\", severity: \"medium\" }],\n item: { title: \"Boots\", status: \"active\" },\n } as never);\n\n const result = await meliGetListingQualityHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA1\",\n });\n\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n item_id: \"MLA1\",\n quality_score: 85,\n level: \"healthy\",\n health: \"good\",\n sales: 20,\n visits: 300,\n warnings: [\n {\n type: \"photo\",\n message: \"Add more photos\",\n severity: \"medium\",\n },\n ],\n raw_summary: {\n title: \"Boots\",\n status: \"active\",\n },\n },\n });\n });\n\n it(\"returns item-level visits windows when item ids are provided\", async () => {\n vi.mocked(getMercadoLibreItemVisitsWindow).mockResolvedValue({\n total_visits: 14,\n results: [{ date: \"2026-03-10\", visits: 14 }],\n } as never);\n\n const result = await meliGetItemVisitsHandler({\n profileId: \"meli-profile-1\",\n itemIds: [\"MLA1\", \"MLA1\"],\n last: 7,\n ending: \"2026-03-10\",\n });\n\n expect(getMercadoLibreItemVisitsWindow).toHaveBeenCalledTimes(1);\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n seller_id: \"seller-99\",\n total_visits: 14,\n items: [\n {\n item_id: \"MLA1\",\n total_visits: 14,\n last: 7,\n unit: \"day\",\n ending: \"2026-03-10\",\n time_window: [{ date: \"2026-03-10\", visits: 14 }],\n },\n ],\n },\n });\n });\n\n it(\"returns a validation error when visits are requested without item ids or date range\", async () => {\n const result = await meliGetItemVisitsHandler({ profileId: \"meli-profile-1\" });\n\n expect(result).toEqual({\n kind: \"error\",\n message: \"Provide itemIds, or provide both startDate and endDate for seller-level visits.\",\n });\n expect(getMercadoLibreUserItemsVisits).not.toHaveBeenCalled();\n });\n\n it(\"returns seller-level visits when a date range is provided\", async () => {\n vi.mocked(getMercadoLibreUserItemsVisits).mockResolvedValue({\n results: [\n { item_id: \"MLA1\", total_visits: 10 },\n { id: \"MLA2\", visits: 4 },\n ],\n } as never);\n\n const result = await meliGetItemVisitsHandler({\n profileId: \"meli-profile-1\",\n startDate: \"2026-03-01\",\n endDate: \"2026-03-10\",\n });\n\n expect(getMercadoLibreUserItemsVisits).toHaveBeenCalledWith(\n \"meli-profile-1\",\n \"seller-99\",\n \"2026-03-01\",\n \"2026-03-10\"\n );\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n profile_id: \"meli-profile-1\",\n seller_id: \"seller-99\",\n total_visits: 14,\n item_visit_rows: [\n { item_id: \"MLA1\", total_visits: 10 },\n { item_id: \"MLA2\", total_visits: 4 },\n ],\n },\n });\n });\n\n it(\"formats service failures through MercadoLibre error helpers\", async () => {\n vi.mocked(getMercadoLibreUsersMe).mockRejectedValue(new Error(\"boom\"));\n\n const result = await meliValidateConnectionHandler({ profileId: \"meli-profile-1\" });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to validate MercadoLibre connection\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to validate MercadoLibre connection:boom\",\n });\n });\n\n it(\"returns write-helper selection payloads unchanged and skips answer calls\", async () => {\n vi.mocked(resolveMercadoLibreWriteProfile).mockResolvedValue({\n ok: false,\n response: { selection_required: true, provider: \"mercadolibre\" },\n } as never);\n\n const result = await meliAnswerQuestionHandler({\n profileId: undefined,\n questionId: 777,\n text: \"Answer\",\n });\n\n expect(result).toEqual({ selection_required: true, provider: \"mercadolibre\" });\n expect(answerMercadoLibreQuestion).not.toHaveBeenCalled();\n });\n\n it(\"routes write failures through the MercadoLibre write error helper\", async () => {\n vi.mocked(answerMercadoLibreQuestion).mockRejectedValue(new Error(\"cannot-answer\"));\n\n const result = await meliAnswerQuestionHandler({\n profileId: \"meli-profile-1\",\n questionId: 888,\n text: \"Answer\",\n });\n\n expect(handleMercadoLibreWriteError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to answer MercadoLibre question 888\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"write:Failed to answer MercadoLibre question 888:cannot-answer\",\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,480 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { meliCreateItemHandler } from "../../src/tools/mercadolibre/create-item.js";
3
+ import {
4
+ meliUpdateItemBasicFieldsHandler,
5
+ meliUpdateItemBasicFieldsSchema
6
+ } from "../../src/tools/mercadolibre/update-item-basic-fields.js";
7
+ import { meliUpdateItemDescriptionHandler } from "../../src/tools/mercadolibre/update-item-description.js";
8
+ import { meliUpdateItemPicturesHandler } from "../../src/tools/mercadolibre/update-item-pictures.js";
9
+ import { meliPauseOrReactivateItemHandler } from "../../src/tools/mercadolibre/pause-or-reactivate-item.js";
10
+ import { resolveMercadoLibreProfileOrSelection } from "../../src/tools/mercadolibre/profile-resolution.js";
11
+ import { formatMercadoLibreError } from "../../src/services/mercadolibre/mercadolibre-api.js";
12
+ import {
13
+ addMercadoLibreItemPicture,
14
+ createMercadoLibreItem,
15
+ createMercadoLibreItemDescription,
16
+ getMercadoLibreItem,
17
+ getMercadoLibreItemDescription,
18
+ replaceMercadoLibreItemDescription,
19
+ updateMercadoLibreItem
20
+ } from "../../src/services/mercadolibre/mercadolibre-items.js";
21
+ vi.mock("mcp-use/server", () => ({
22
+ object: vi.fn((payload) => ({ kind: "object", payload })),
23
+ error: vi.fn((message) => ({ kind: "error", message }))
24
+ }));
25
+ vi.mock("../../src/tools/mercadolibre/profile-resolution.js", () => ({
26
+ resolveMercadoLibreProfileOrSelection: vi.fn()
27
+ }));
28
+ vi.mock("../../src/services/mercadolibre/mercadolibre-api.js", async () => {
29
+ const actual = await vi.importActual(
30
+ "../../src/services/mercadolibre/mercadolibre-api.js"
31
+ );
32
+ return {
33
+ ...actual,
34
+ formatMercadoLibreError: vi.fn(
35
+ (err, fallback) => `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`
36
+ )
37
+ };
38
+ });
39
+ vi.mock("../../src/services/mercadolibre/mercadolibre-items.js", () => ({
40
+ createMercadoLibreItem: vi.fn(),
41
+ createMercadoLibreItemDescription: vi.fn(),
42
+ getMercadoLibreItem: vi.fn(),
43
+ updateMercadoLibreItem: vi.fn(),
44
+ getMercadoLibreItemDescription: vi.fn(),
45
+ replaceMercadoLibreItemDescription: vi.fn(),
46
+ addMercadoLibreItemPicture: vi.fn()
47
+ }));
48
+ describe("MercadoLibre write tool handlers batch 8", () => {
49
+ beforeEach(() => {
50
+ vi.clearAllMocks();
51
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
52
+ ok: true,
53
+ value: { profileId: "meli-profile-1" }
54
+ });
55
+ });
56
+ it("creates an item with MercadoLibre defaults when description is omitted", async () => {
57
+ vi.mocked(createMercadoLibreItem).mockResolvedValue({ id: "MLA100", status: "active" });
58
+ const result = await meliCreateItemHandler({
59
+ profileId: "custom-profile",
60
+ title: "Running shoes",
61
+ categoryId: "MLA123",
62
+ price: 99999,
63
+ listingTypeId: "gold_special",
64
+ condition: "new",
65
+ availableQuantity: 4
66
+ });
67
+ expect(createMercadoLibreItem).toHaveBeenCalledWith("meli-profile-1", {
68
+ site_id: "MLA",
69
+ title: "Running shoes",
70
+ category_id: "MLA123",
71
+ price: 99999,
72
+ currency_id: "ARS",
73
+ buying_mode: "buy_it_now",
74
+ listing_type_id: "gold_special",
75
+ condition: "new",
76
+ available_quantity: 4,
77
+ attributes: void 0,
78
+ pictures: void 0,
79
+ shipping: void 0,
80
+ sale_terms: void 0,
81
+ channels: void 0
82
+ });
83
+ expect(createMercadoLibreItemDescription).not.toHaveBeenCalled();
84
+ expect(result).toEqual({
85
+ kind: "object",
86
+ payload: {
87
+ ok: true,
88
+ profile_id: "meli-profile-1",
89
+ operation: "create_item",
90
+ resource_id: "MLA100",
91
+ message: "MercadoLibre item created successfully.",
92
+ summary: {
93
+ after: { id: "MLA100", status: "active" }
94
+ },
95
+ details: {
96
+ description_created: false
97
+ }
98
+ }
99
+ });
100
+ });
101
+ it("creates the item description after item creation when the created id is available", async () => {
102
+ vi.mocked(createMercadoLibreItem).mockResolvedValue({ id: "MLA101", status: "paused" });
103
+ vi.mocked(createMercadoLibreItemDescription).mockResolvedValue({ plain_text: "Fresh copy" });
104
+ const result = await meliCreateItemHandler({
105
+ profileId: "meli-profile-1",
106
+ title: "Travel mug",
107
+ categoryId: "MLA456",
108
+ price: 25e3,
109
+ currencyId: "USD",
110
+ buyingMode: "auction",
111
+ listingTypeId: "gold_pro",
112
+ condition: "used",
113
+ availableQuantity: 1,
114
+ description: "Fresh copy",
115
+ pictures: [{ source: "https://img.example.com/1.png" }]
116
+ });
117
+ expect(createMercadoLibreItemDescription).toHaveBeenCalledWith(
118
+ "meli-profile-1",
119
+ "MLA101",
120
+ "Fresh copy"
121
+ );
122
+ expect(result).toEqual(
123
+ expect.objectContaining({
124
+ kind: "object",
125
+ payload: expect.objectContaining({
126
+ resource_id: "MLA101",
127
+ details: { description_created: true }
128
+ })
129
+ })
130
+ );
131
+ });
132
+ it("skips description creation when the created resource id is not a string", async () => {
133
+ vi.mocked(createMercadoLibreItem).mockResolvedValue({ id: 404, status: "active" });
134
+ const result = await meliCreateItemHandler({
135
+ profileId: "meli-profile-1",
136
+ title: "Bottle",
137
+ categoryId: "MLA789",
138
+ price: 15e3,
139
+ listingTypeId: "gold_special",
140
+ condition: "new",
141
+ availableQuantity: 8,
142
+ description: "Will not be created"
143
+ });
144
+ expect(createMercadoLibreItemDescription).not.toHaveBeenCalled();
145
+ expect(result).toEqual(
146
+ expect.objectContaining({
147
+ kind: "object",
148
+ payload: expect.objectContaining({
149
+ details: { description_created: true }
150
+ })
151
+ })
152
+ );
153
+ });
154
+ it("returns the shared selection response before creating an item", async () => {
155
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
156
+ ok: false,
157
+ response: { selection_required: true }
158
+ });
159
+ const result = await meliCreateItemHandler({
160
+ profileId: void 0,
161
+ title: "Bottle",
162
+ categoryId: "MLA789",
163
+ price: 15e3,
164
+ listingTypeId: "gold_special",
165
+ condition: "new",
166
+ availableQuantity: 8
167
+ });
168
+ expect(result).toEqual({ selection_required: true });
169
+ expect(createMercadoLibreItem).not.toHaveBeenCalled();
170
+ });
171
+ it("formats create item failures through the MercadoLibre write helper", async () => {
172
+ vi.mocked(createMercadoLibreItem).mockRejectedValue(new Error("boom"));
173
+ const result = await meliCreateItemHandler({
174
+ profileId: "meli-profile-1",
175
+ title: "Bottle",
176
+ categoryId: "MLA789",
177
+ price: 15e3,
178
+ listingTypeId: "gold_special",
179
+ condition: "new",
180
+ availableQuantity: 8
181
+ });
182
+ expect(formatMercadoLibreError).toHaveBeenCalledWith(
183
+ expect.any(Error),
184
+ "Failed to create MercadoLibre item"
185
+ );
186
+ expect(result).toEqual({
187
+ kind: "error",
188
+ message: "formatted:Failed to create MercadoLibre item:boom"
189
+ });
190
+ });
191
+ it("updates MercadoLibre basic item fields using the previous item snapshot", async () => {
192
+ vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: "MLA200", price: 1e4 });
193
+ vi.mocked(updateMercadoLibreItem).mockResolvedValue({ id: "MLA200", price: 12e3 });
194
+ const result = await meliUpdateItemBasicFieldsHandler({
195
+ profileId: "meli-profile-1",
196
+ itemId: "MLA200",
197
+ title: "Updated title",
198
+ price: 12e3,
199
+ availableQuantity: 5,
200
+ status: "paused",
201
+ listingTypeId: "gold_pro",
202
+ channels: ["marketplace"]
203
+ });
204
+ expect(getMercadoLibreItem).toHaveBeenCalledWith("meli-profile-1", "MLA200");
205
+ expect(updateMercadoLibreItem).toHaveBeenCalledWith("meli-profile-1", "MLA200", {
206
+ title: "Updated title",
207
+ price: 12e3,
208
+ available_quantity: 5,
209
+ attributes: void 0,
210
+ sale_terms: void 0,
211
+ shipping: void 0,
212
+ status: "paused",
213
+ listing_type_id: "gold_pro",
214
+ channels: ["marketplace"]
215
+ });
216
+ expect(result).toEqual(
217
+ expect.objectContaining({
218
+ kind: "object",
219
+ payload: expect.objectContaining({
220
+ operation: "update_item_basic_fields",
221
+ resource_id: "MLA200",
222
+ summary: {
223
+ before: { id: "MLA200", price: 1e4 },
224
+ after: { id: "MLA200", price: 12e3 }
225
+ }
226
+ })
227
+ })
228
+ );
229
+ });
230
+ it("returns the selection payload before updating MercadoLibre basic item fields", async () => {
231
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
232
+ ok: false,
233
+ response: { selection_required: true, provider: "mercadolibre" }
234
+ });
235
+ const result = await meliUpdateItemBasicFieldsHandler({
236
+ profileId: void 0,
237
+ itemId: "MLA200",
238
+ price: 12e3
239
+ });
240
+ expect(result).toEqual({ selection_required: true, provider: "mercadolibre" });
241
+ expect(getMercadoLibreItem).not.toHaveBeenCalled();
242
+ });
243
+ it("formats failures while updating MercadoLibre basic item fields", async () => {
244
+ vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: "MLA200" });
245
+ vi.mocked(updateMercadoLibreItem).mockRejectedValue(new Error("cannot update"));
246
+ const result = await meliUpdateItemBasicFieldsHandler({
247
+ profileId: "meli-profile-1",
248
+ itemId: "MLA200",
249
+ price: 12e3
250
+ });
251
+ expect(result).toEqual({
252
+ kind: "error",
253
+ message: "formatted:Failed to update MercadoLibre item MLA200:cannot update"
254
+ });
255
+ });
256
+ it("requires at least one MercadoLibre basic field update while allowing late optional fields", () => {
257
+ const invalid = meliUpdateItemBasicFieldsSchema.safeParse({
258
+ profileId: "meli-profile-1",
259
+ itemId: "MLA200"
260
+ });
261
+ const validWithFirstOptional = meliUpdateItemBasicFieldsSchema.safeParse({
262
+ profileId: "meli-profile-1",
263
+ itemId: "MLA200",
264
+ title: "Updated title"
265
+ });
266
+ const validWithLastOptional = meliUpdateItemBasicFieldsSchema.safeParse({
267
+ profileId: "meli-profile-1",
268
+ itemId: "MLA200",
269
+ channels: ["marketplace"]
270
+ });
271
+ expect(invalid.success).toBe(false);
272
+ expect(invalid.error?.issues[0]?.message).toBe("At least one item field must be provided.");
273
+ expect(validWithFirstOptional.success).toBe(true);
274
+ expect(validWithLastOptional.success).toBe(true);
275
+ });
276
+ it("replaces an existing MercadoLibre item description when it already exists", async () => {
277
+ vi.mocked(getMercadoLibreItemDescription).mockResolvedValue({ plain_text: "Old copy" });
278
+ vi.mocked(replaceMercadoLibreItemDescription).mockResolvedValue({ plain_text: "New copy" });
279
+ const result = await meliUpdateItemDescriptionHandler({
280
+ profileId: "meli-profile-1",
281
+ itemId: "MLA300",
282
+ plainText: "New copy"
283
+ });
284
+ expect(replaceMercadoLibreItemDescription).toHaveBeenCalledWith(
285
+ "meli-profile-1",
286
+ "MLA300",
287
+ "New copy"
288
+ );
289
+ expect(createMercadoLibreItemDescription).not.toHaveBeenCalled();
290
+ expect(result).toEqual(
291
+ expect.objectContaining({
292
+ kind: "object",
293
+ payload: expect.objectContaining({
294
+ summary: {
295
+ before: { plain_text: "Old copy" },
296
+ after: { plain_text: "New copy" }
297
+ }
298
+ })
299
+ })
300
+ );
301
+ });
302
+ it("falls back to creating a MercadoLibre item description when replace flow fails", async () => {
303
+ vi.mocked(getMercadoLibreItemDescription).mockResolvedValue({ plain_text: "Old copy" });
304
+ vi.mocked(replaceMercadoLibreItemDescription).mockRejectedValue(new Error("replace failed"));
305
+ vi.mocked(createMercadoLibreItemDescription).mockResolvedValue({ plain_text: "Fallback copy" });
306
+ const result = await meliUpdateItemDescriptionHandler({
307
+ profileId: "meli-profile-1",
308
+ itemId: "MLA301",
309
+ plainText: "Fallback copy"
310
+ });
311
+ expect(createMercadoLibreItemDescription).toHaveBeenCalledWith(
312
+ "meli-profile-1",
313
+ "MLA301",
314
+ "Fallback copy"
315
+ );
316
+ expect(result).toEqual(
317
+ expect.objectContaining({
318
+ kind: "object",
319
+ payload: expect.objectContaining({
320
+ summary: {
321
+ before: { plain_text: "Old copy" },
322
+ after: { plain_text: "Fallback copy" }
323
+ }
324
+ })
325
+ })
326
+ );
327
+ });
328
+ it("returns the selection payload before updating the MercadoLibre description", async () => {
329
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
330
+ ok: false,
331
+ response: { selection_required: true }
332
+ });
333
+ const result = await meliUpdateItemDescriptionHandler({
334
+ profileId: void 0,
335
+ itemId: "MLA300",
336
+ plainText: "New copy"
337
+ });
338
+ expect(result).toEqual({ selection_required: true });
339
+ });
340
+ it("formats MercadoLibre description update failures when fallback creation also fails", async () => {
341
+ vi.mocked(getMercadoLibreItemDescription).mockRejectedValue(new Error("not found"));
342
+ vi.mocked(createMercadoLibreItemDescription).mockRejectedValue(new Error("create failed"));
343
+ const result = await meliUpdateItemDescriptionHandler({
344
+ profileId: "meli-profile-1",
345
+ itemId: "MLA302",
346
+ plainText: "New copy"
347
+ });
348
+ expect(result).toEqual({
349
+ kind: "error",
350
+ message: "formatted:Failed to update description for MLA302:create failed"
351
+ });
352
+ });
353
+ it("replaces the full MercadoLibre item pictures array in replace mode", async () => {
354
+ vi.mocked(getMercadoLibreItem).mockResolvedValueOnce({ id: "MLA400", pictures: [{ id: "1" }] }).mockResolvedValueOnce({ id: "MLA400", pictures: [{ id: "2" }] });
355
+ vi.mocked(updateMercadoLibreItem).mockResolvedValue({ id: "MLA400", pictures: [{ id: "2" }] });
356
+ const result = await meliUpdateItemPicturesHandler({
357
+ profileId: "meli-profile-1",
358
+ itemId: "MLA400",
359
+ mode: "replace",
360
+ pictures: [{ source: "https://img.example.com/2.png" }]
361
+ });
362
+ expect(updateMercadoLibreItem).toHaveBeenCalledWith("meli-profile-1", "MLA400", {
363
+ pictures: [{ source: "https://img.example.com/2.png" }]
364
+ });
365
+ expect(addMercadoLibreItemPicture).not.toHaveBeenCalled();
366
+ expect(result).toEqual(
367
+ expect.objectContaining({
368
+ kind: "object",
369
+ payload: expect.objectContaining({
370
+ details: { mode: "replace", pictures_count: 1 }
371
+ })
372
+ })
373
+ );
374
+ });
375
+ it("adds pictures sequentially and reloads the item in add mode", async () => {
376
+ vi.mocked(getMercadoLibreItem).mockResolvedValueOnce({ id: "MLA401", pictures: [{ id: "1" }] }).mockResolvedValueOnce({ id: "MLA401", pictures: [{ id: "1" }, { id: "2" }, { id: "3" }] });
377
+ const result = await meliUpdateItemPicturesHandler({
378
+ profileId: "meli-profile-1",
379
+ itemId: "MLA401",
380
+ mode: "add",
381
+ pictures: [
382
+ { source: "https://img.example.com/2.png" },
383
+ { source: "https://img.example.com/3.png" }
384
+ ]
385
+ });
386
+ expect(addMercadoLibreItemPicture).toHaveBeenNthCalledWith(
387
+ 1,
388
+ "meli-profile-1",
389
+ "MLA401",
390
+ "https://img.example.com/2.png"
391
+ );
392
+ expect(addMercadoLibreItemPicture).toHaveBeenNthCalledWith(
393
+ 2,
394
+ "meli-profile-1",
395
+ "MLA401",
396
+ "https://img.example.com/3.png"
397
+ );
398
+ expect(result).toEqual(
399
+ expect.objectContaining({
400
+ kind: "object",
401
+ payload: expect.objectContaining({
402
+ details: { mode: "add", pictures_count: 2 }
403
+ })
404
+ })
405
+ );
406
+ });
407
+ it("formats MercadoLibre picture update failures", async () => {
408
+ vi.mocked(getMercadoLibreItem).mockRejectedValue(new Error("snapshot failed"));
409
+ const result = await meliUpdateItemPicturesHandler({
410
+ profileId: "meli-profile-1",
411
+ itemId: "MLA402",
412
+ mode: "replace",
413
+ pictures: [{ source: "https://img.example.com/2.png" }]
414
+ });
415
+ expect(result).toEqual({
416
+ kind: "error",
417
+ message: "formatted:Failed to update pictures for MLA402:snapshot failed"
418
+ });
419
+ });
420
+ it("returns the shared selection payload before updating MercadoLibre pictures", async () => {
421
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
422
+ ok: false,
423
+ response: { selection_required: true }
424
+ });
425
+ const result = await meliUpdateItemPicturesHandler({
426
+ profileId: void 0,
427
+ itemId: "MLA402",
428
+ mode: "add",
429
+ pictures: [{ source: "https://img.example.com/2.png" }]
430
+ });
431
+ expect(result).toEqual({ selection_required: true });
432
+ });
433
+ it("changes the MercadoLibre item status for pause or reactivate operations", async () => {
434
+ vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: "MLA500", status: "paused" });
435
+ vi.mocked(updateMercadoLibreItem).mockResolvedValue({ id: "MLA500", status: "active" });
436
+ const result = await meliPauseOrReactivateItemHandler({
437
+ profileId: "meli-profile-1",
438
+ itemId: "MLA500",
439
+ status: "active"
440
+ });
441
+ expect(updateMercadoLibreItem).toHaveBeenCalledWith("meli-profile-1", "MLA500", {
442
+ status: "active"
443
+ });
444
+ expect(result).toEqual(
445
+ expect.objectContaining({
446
+ kind: "object",
447
+ payload: expect.objectContaining({
448
+ operation: "pause_or_reactivate_item",
449
+ message: "MercadoLibre item status changed to active."
450
+ })
451
+ })
452
+ );
453
+ });
454
+ it("returns the shared selection payload before pausing or reactivating an item", async () => {
455
+ vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({
456
+ ok: false,
457
+ response: { selection_required: true, available_profiles: [] }
458
+ });
459
+ const result = await meliPauseOrReactivateItemHandler({
460
+ profileId: void 0,
461
+ itemId: "MLA500",
462
+ status: "paused"
463
+ });
464
+ expect(result).toEqual({ selection_required: true, available_profiles: [] });
465
+ });
466
+ it("formats MercadoLibre status change failures", async () => {
467
+ vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: "MLA500", status: "active" });
468
+ vi.mocked(updateMercadoLibreItem).mockRejectedValue(new Error("state failed"));
469
+ const result = await meliPauseOrReactivateItemHandler({
470
+ profileId: "meli-profile-1",
471
+ itemId: "MLA500",
472
+ status: "paused"
473
+ });
474
+ expect(result).toEqual({
475
+ kind: "error",
476
+ message: "formatted:Failed to change status for MLA500:state failed"
477
+ });
478
+ });
479
+ });
480
+ //# sourceMappingURL=mercadolibre-tool-handlers-write-batch8.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../tests/meli/mercadolibre-tool-handlers-write-batch8.test.ts"],
4
+ "sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { meliCreateItemHandler } from \"../../src/tools/mercadolibre/create-item.js\";\nimport {\n meliUpdateItemBasicFieldsHandler,\n meliUpdateItemBasicFieldsSchema,\n} from \"../../src/tools/mercadolibre/update-item-basic-fields.js\";\nimport { meliUpdateItemDescriptionHandler } from \"../../src/tools/mercadolibre/update-item-description.js\";\nimport { meliUpdateItemPicturesHandler } from \"../../src/tools/mercadolibre/update-item-pictures.js\";\nimport { meliPauseOrReactivateItemHandler } from \"../../src/tools/mercadolibre/pause-or-reactivate-item.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"../../src/tools/mercadolibre/profile-resolution.js\";\nimport { formatMercadoLibreError } from \"../../src/services/mercadolibre/mercadolibre-api.js\";\nimport {\n addMercadoLibreItemPicture,\n createMercadoLibreItem,\n createMercadoLibreItemDescription,\n getMercadoLibreItem,\n getMercadoLibreItemDescription,\n replaceMercadoLibreItemDescription,\n updateMercadoLibreItem,\n} from \"../../src/services/mercadolibre/mercadolibre-items.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/services/mercadolibre/mercadolibre-api.js\", async () => {\n const actual = await vi.importActual<typeof import(\"../../src/services/mercadolibre/mercadolibre-api.js\")>(\n \"../../src/services/mercadolibre/mercadolibre-api.js\"\n );\n\n return {\n ...actual,\n formatMercadoLibreError: vi.fn(\n (err: unknown, fallback: string) =>\n `formatted:${fallback}:${err instanceof Error ? err.message : String(err)}`\n ),\n };\n});\n\nvi.mock(\"../../src/services/mercadolibre/mercadolibre-items.js\", () => ({\n createMercadoLibreItem: vi.fn(),\n createMercadoLibreItemDescription: vi.fn(),\n getMercadoLibreItem: vi.fn(),\n updateMercadoLibreItem: vi.fn(),\n getMercadoLibreItemDescription: vi.fn(),\n replaceMercadoLibreItemDescription: vi.fn(),\n addMercadoLibreItemPicture: vi.fn(),\n}));\n\ndescribe(\"MercadoLibre write tool handlers batch 8\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: true,\n value: { profileId: \"meli-profile-1\" },\n });\n });\n\n it(\"creates an item with MercadoLibre defaults when description is omitted\", async () => {\n vi.mocked(createMercadoLibreItem).mockResolvedValue({ id: \"MLA100\", status: \"active\" } as never);\n\n const result = await meliCreateItemHandler({\n profileId: \"custom-profile\",\n title: \"Running shoes\",\n categoryId: \"MLA123\",\n price: 99999,\n listingTypeId: \"gold_special\",\n condition: \"new\",\n availableQuantity: 4,\n });\n\n expect(createMercadoLibreItem).toHaveBeenCalledWith(\"meli-profile-1\", {\n site_id: \"MLA\",\n title: \"Running shoes\",\n category_id: \"MLA123\",\n price: 99999,\n currency_id: \"ARS\",\n buying_mode: \"buy_it_now\",\n listing_type_id: \"gold_special\",\n condition: \"new\",\n available_quantity: 4,\n attributes: undefined,\n pictures: undefined,\n shipping: undefined,\n sale_terms: undefined,\n channels: undefined,\n });\n expect(createMercadoLibreItemDescription).not.toHaveBeenCalled();\n expect(result).toEqual({\n kind: \"object\",\n payload: {\n ok: true,\n profile_id: \"meli-profile-1\",\n operation: \"create_item\",\n resource_id: \"MLA100\",\n message: \"MercadoLibre item created successfully.\",\n summary: {\n after: { id: \"MLA100\", status: \"active\" },\n },\n details: {\n description_created: false,\n },\n },\n });\n });\n\n it(\"creates the item description after item creation when the created id is available\", async () => {\n vi.mocked(createMercadoLibreItem).mockResolvedValue({ id: \"MLA101\", status: \"paused\" } as never);\n vi.mocked(createMercadoLibreItemDescription).mockResolvedValue({ plain_text: \"Fresh copy\" } as never);\n\n const result = await meliCreateItemHandler({\n profileId: \"meli-profile-1\",\n title: \"Travel mug\",\n categoryId: \"MLA456\",\n price: 25000,\n currencyId: \"USD\",\n buyingMode: \"auction\",\n listingTypeId: \"gold_pro\",\n condition: \"used\",\n availableQuantity: 1,\n description: \"Fresh copy\",\n pictures: [{ source: \"https://img.example.com/1.png\" }],\n });\n\n expect(createMercadoLibreItemDescription).toHaveBeenCalledWith(\n \"meli-profile-1\",\n \"MLA101\",\n \"Fresh copy\"\n );\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n resource_id: \"MLA101\",\n details: { description_created: true },\n }),\n })\n );\n });\n\n it(\"skips description creation when the created resource id is not a string\", async () => {\n vi.mocked(createMercadoLibreItem).mockResolvedValue({ id: 404, status: \"active\" } as never);\n\n const result = await meliCreateItemHandler({\n profileId: \"meli-profile-1\",\n title: \"Bottle\",\n categoryId: \"MLA789\",\n price: 15000,\n listingTypeId: \"gold_special\",\n condition: \"new\",\n availableQuantity: 8,\n description: \"Will not be created\",\n });\n\n expect(createMercadoLibreItemDescription).not.toHaveBeenCalled();\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n details: { description_created: true },\n }),\n })\n );\n });\n\n it(\"returns the shared selection response before creating an item\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true },\n } as never);\n\n const result = await meliCreateItemHandler({\n profileId: undefined,\n title: \"Bottle\",\n categoryId: \"MLA789\",\n price: 15000,\n listingTypeId: \"gold_special\",\n condition: \"new\",\n availableQuantity: 8,\n });\n\n expect(result).toEqual({ selection_required: true });\n expect(createMercadoLibreItem).not.toHaveBeenCalled();\n });\n\n it(\"formats create item failures through the MercadoLibre write helper\", async () => {\n vi.mocked(createMercadoLibreItem).mockRejectedValue(new Error(\"boom\"));\n\n const result = await meliCreateItemHandler({\n profileId: \"meli-profile-1\",\n title: \"Bottle\",\n categoryId: \"MLA789\",\n price: 15000,\n listingTypeId: \"gold_special\",\n condition: \"new\",\n availableQuantity: 8,\n });\n\n expect(formatMercadoLibreError).toHaveBeenCalledWith(\n expect.any(Error),\n \"Failed to create MercadoLibre item\"\n );\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to create MercadoLibre item:boom\",\n });\n });\n\n it(\"updates MercadoLibre basic item fields using the previous item snapshot\", async () => {\n vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: \"MLA200\", price: 10000 } as never);\n vi.mocked(updateMercadoLibreItem).mockResolvedValue({ id: \"MLA200\", price: 12000 } as never);\n\n const result = await meliUpdateItemBasicFieldsHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA200\",\n title: \"Updated title\",\n price: 12000,\n availableQuantity: 5,\n status: \"paused\",\n listingTypeId: \"gold_pro\",\n channels: [\"marketplace\"],\n });\n\n expect(getMercadoLibreItem).toHaveBeenCalledWith(\"meli-profile-1\", \"MLA200\");\n expect(updateMercadoLibreItem).toHaveBeenCalledWith(\"meli-profile-1\", \"MLA200\", {\n title: \"Updated title\",\n price: 12000,\n available_quantity: 5,\n attributes: undefined,\n sale_terms: undefined,\n shipping: undefined,\n status: \"paused\",\n listing_type_id: \"gold_pro\",\n channels: [\"marketplace\"],\n });\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n operation: \"update_item_basic_fields\",\n resource_id: \"MLA200\",\n summary: {\n before: { id: \"MLA200\", price: 10000 },\n after: { id: \"MLA200\", price: 12000 },\n },\n }),\n })\n );\n });\n\n it(\"returns the selection payload before updating MercadoLibre basic item fields\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true, provider: \"mercadolibre\" },\n } as never);\n\n const result = await meliUpdateItemBasicFieldsHandler({\n profileId: undefined,\n itemId: \"MLA200\",\n price: 12000,\n });\n\n expect(result).toEqual({ selection_required: true, provider: \"mercadolibre\" });\n expect(getMercadoLibreItem).not.toHaveBeenCalled();\n });\n\n it(\"formats failures while updating MercadoLibre basic item fields\", async () => {\n vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: \"MLA200\" } as never);\n vi.mocked(updateMercadoLibreItem).mockRejectedValue(new Error(\"cannot update\"));\n\n const result = await meliUpdateItemBasicFieldsHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA200\",\n price: 12000,\n });\n\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to update MercadoLibre item MLA200:cannot update\",\n });\n });\n\n it(\"requires at least one MercadoLibre basic field update while allowing late optional fields\", () => {\n const invalid = meliUpdateItemBasicFieldsSchema.safeParse({\n profileId: \"meli-profile-1\",\n itemId: \"MLA200\",\n });\n const validWithFirstOptional = meliUpdateItemBasicFieldsSchema.safeParse({\n profileId: \"meli-profile-1\",\n itemId: \"MLA200\",\n title: \"Updated title\",\n });\n const validWithLastOptional = meliUpdateItemBasicFieldsSchema.safeParse({\n profileId: \"meli-profile-1\",\n itemId: \"MLA200\",\n channels: [\"marketplace\"],\n });\n\n expect(invalid.success).toBe(false);\n expect(invalid.error?.issues[0]?.message).toBe(\"At least one item field must be provided.\");\n expect(validWithFirstOptional.success).toBe(true);\n expect(validWithLastOptional.success).toBe(true);\n });\n\n it(\"replaces an existing MercadoLibre item description when it already exists\", async () => {\n vi.mocked(getMercadoLibreItemDescription).mockResolvedValue({ plain_text: \"Old copy\" } as never);\n vi.mocked(replaceMercadoLibreItemDescription).mockResolvedValue({ plain_text: \"New copy\" } as never);\n\n const result = await meliUpdateItemDescriptionHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA300\",\n plainText: \"New copy\",\n });\n\n expect(replaceMercadoLibreItemDescription).toHaveBeenCalledWith(\n \"meli-profile-1\",\n \"MLA300\",\n \"New copy\"\n );\n expect(createMercadoLibreItemDescription).not.toHaveBeenCalled();\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n summary: {\n before: { plain_text: \"Old copy\" },\n after: { plain_text: \"New copy\" },\n },\n }),\n })\n );\n });\n\n it(\"falls back to creating a MercadoLibre item description when replace flow fails\", async () => {\n vi.mocked(getMercadoLibreItemDescription).mockResolvedValue({ plain_text: \"Old copy\" } as never);\n vi.mocked(replaceMercadoLibreItemDescription).mockRejectedValue(new Error(\"replace failed\"));\n vi.mocked(createMercadoLibreItemDescription).mockResolvedValue({ plain_text: \"Fallback copy\" } as never);\n\n const result = await meliUpdateItemDescriptionHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA301\",\n plainText: \"Fallback copy\",\n });\n\n expect(createMercadoLibreItemDescription).toHaveBeenCalledWith(\n \"meli-profile-1\",\n \"MLA301\",\n \"Fallback copy\"\n );\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n summary: {\n before: { plain_text: \"Old copy\" },\n after: { plain_text: \"Fallback copy\" },\n },\n }),\n })\n );\n });\n\n it(\"returns the selection payload before updating the MercadoLibre description\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true },\n } as never);\n\n const result = await meliUpdateItemDescriptionHandler({\n profileId: undefined,\n itemId: \"MLA300\",\n plainText: \"New copy\",\n });\n\n expect(result).toEqual({ selection_required: true });\n });\n\n it(\"formats MercadoLibre description update failures when fallback creation also fails\", async () => {\n vi.mocked(getMercadoLibreItemDescription).mockRejectedValue(new Error(\"not found\"));\n vi.mocked(createMercadoLibreItemDescription).mockRejectedValue(new Error(\"create failed\"));\n\n const result = await meliUpdateItemDescriptionHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA302\",\n plainText: \"New copy\",\n });\n\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to update description for MLA302:create failed\",\n });\n });\n\n it(\"replaces the full MercadoLibre item pictures array in replace mode\", async () => {\n vi.mocked(getMercadoLibreItem)\n .mockResolvedValueOnce({ id: \"MLA400\", pictures: [{ id: \"1\" }] } as never)\n .mockResolvedValueOnce({ id: \"MLA400\", pictures: [{ id: \"2\" }] } as never);\n vi.mocked(updateMercadoLibreItem).mockResolvedValue({ id: \"MLA400\", pictures: [{ id: \"2\" }] } as never);\n\n const result = await meliUpdateItemPicturesHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA400\",\n mode: \"replace\",\n pictures: [{ source: \"https://img.example.com/2.png\" }],\n });\n\n expect(updateMercadoLibreItem).toHaveBeenCalledWith(\"meli-profile-1\", \"MLA400\", {\n pictures: [{ source: \"https://img.example.com/2.png\" }],\n });\n expect(addMercadoLibreItemPicture).not.toHaveBeenCalled();\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n details: { mode: \"replace\", pictures_count: 1 },\n }),\n })\n );\n });\n\n it(\"adds pictures sequentially and reloads the item in add mode\", async () => {\n vi.mocked(getMercadoLibreItem)\n .mockResolvedValueOnce({ id: \"MLA401\", pictures: [{ id: \"1\" }] } as never)\n .mockResolvedValueOnce({ id: \"MLA401\", pictures: [{ id: \"1\" }, { id: \"2\" }, { id: \"3\" }] } as never);\n\n const result = await meliUpdateItemPicturesHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA401\",\n mode: \"add\",\n pictures: [\n { source: \"https://img.example.com/2.png\" },\n { source: \"https://img.example.com/3.png\" },\n ],\n });\n\n expect(addMercadoLibreItemPicture).toHaveBeenNthCalledWith(\n 1,\n \"meli-profile-1\",\n \"MLA401\",\n \"https://img.example.com/2.png\"\n );\n expect(addMercadoLibreItemPicture).toHaveBeenNthCalledWith(\n 2,\n \"meli-profile-1\",\n \"MLA401\",\n \"https://img.example.com/3.png\"\n );\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n details: { mode: \"add\", pictures_count: 2 },\n }),\n })\n );\n });\n\n it(\"formats MercadoLibre picture update failures\", async () => {\n vi.mocked(getMercadoLibreItem).mockRejectedValue(new Error(\"snapshot failed\"));\n\n const result = await meliUpdateItemPicturesHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA402\",\n mode: \"replace\",\n pictures: [{ source: \"https://img.example.com/2.png\" }],\n });\n\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to update pictures for MLA402:snapshot failed\",\n });\n });\n\n it(\"returns the shared selection payload before updating MercadoLibre pictures\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true },\n } as never);\n\n const result = await meliUpdateItemPicturesHandler({\n profileId: undefined,\n itemId: \"MLA402\",\n mode: \"add\",\n pictures: [{ source: \"https://img.example.com/2.png\" }],\n });\n\n expect(result).toEqual({ selection_required: true });\n });\n\n it(\"changes the MercadoLibre item status for pause or reactivate operations\", async () => {\n vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: \"MLA500\", status: \"paused\" } as never);\n vi.mocked(updateMercadoLibreItem).mockResolvedValue({ id: \"MLA500\", status: \"active\" } as never);\n\n const result = await meliPauseOrReactivateItemHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA500\",\n status: \"active\",\n });\n\n expect(updateMercadoLibreItem).toHaveBeenCalledWith(\"meli-profile-1\", \"MLA500\", {\n status: \"active\",\n });\n expect(result).toEqual(\n expect.objectContaining({\n kind: \"object\",\n payload: expect.objectContaining({\n operation: \"pause_or_reactivate_item\",\n message: \"MercadoLibre item status changed to active.\",\n }),\n })\n );\n });\n\n it(\"returns the shared selection payload before pausing or reactivating an item\", async () => {\n vi.mocked(resolveMercadoLibreProfileOrSelection).mockResolvedValue({\n ok: false,\n response: { selection_required: true, available_profiles: [] },\n } as never);\n\n const result = await meliPauseOrReactivateItemHandler({\n profileId: undefined,\n itemId: \"MLA500\",\n status: \"paused\",\n });\n\n expect(result).toEqual({ selection_required: true, available_profiles: [] });\n });\n\n it(\"formats MercadoLibre status change failures\", async () => {\n vi.mocked(getMercadoLibreItem).mockResolvedValue({ id: \"MLA500\", status: \"active\" } as never);\n vi.mocked(updateMercadoLibreItem).mockRejectedValue(new Error(\"state failed\"));\n\n const result = await meliPauseOrReactivateItemHandler({\n profileId: \"meli-profile-1\",\n itemId: \"MLA500\",\n status: \"paused\",\n });\n\n expect(result).toEqual({\n kind: \"error\",\n message: \"formatted:Failed to change status for MLA500:state failed\",\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ process.env.TZ = "UTC";
2
+ //# sourceMappingURL=setup.js.map