@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/vtex/vtex-write-simple-tools.test.ts"],
4
+ "sourcesContent": ["import { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { z } from \"zod\";\n\nimport { activateSkuHandler } from \"../../src/tools/vtex/activate-sku.js\";\nimport { deactivateSkuHandler } from \"../../src/tools/vtex/deactivate-sku.js\";\nimport { toggleUnlimitedQuantityHandler } from \"../../src/tools/vtex/toggle-unlimited-quantity.js\";\nimport { updateInventoryHandler } from \"../../src/tools/vtex/update-inventory.js\";\nimport { updateLeadTimeHandler } from \"../../src/tools/vtex/update-lead-time.js\";\nimport { deleteSkuPriceHandler } from \"../../src/tools/vtex/delete-sku-price.js\";\nimport { updateSkuPriceHandler } from \"../../src/tools/vtex/update-sku-price.js\";\nimport {\n\tupdateSkuBasicFields,\n} from \"../../src/services/vtex/vtex-catalog-write.js\";\nimport {\n\tgetInventoryByWarehouse,\n\tupdateInventoryLeadTime,\n\tupdateInventoryQuantity,\n} from \"../../src/services/vtex/vtex-logistics.js\";\nimport { getSkuPrice } from \"../../src/services/vtex/vtex-pricing.js\";\nimport {\n\tdeleteSkuPrice,\n\tupdateSkuPrice,\n} from \"../../src/services/vtex/vtex-pricing-write.js\";\nimport {\n\tbuildWriteSuccessResponse,\n\thandleVtexWriteError,\n\trequireExplicitConfirmation,\n\tresolveVtexWriteProfile,\n} from \"../../src/tools/vtex/write-helpers.js\";\n\nvi.mock(\"../../src/tools/vtex/write-helpers.js\", () => ({\n\tvtexProfileIdSchemaField: z.string().optional(),\n\tconfirmationSchemaField: z.boolean().optional(),\n\tconfirmationNoteSchemaField: z.string().optional(),\n\tresolveVtexWriteProfile: vi.fn(),\n\tbuildWriteSuccessResponse: vi.fn((params: unknown) => ({\n\t\tkind: \"success\",\n\t\tparams,\n\t})),\n\trequireExplicitConfirmation: vi.fn(),\n\thandleVtexWriteError: vi.fn((err: unknown, fallback: string) => ({\n\t\tkind: \"error\",\n\t\tfallback,\n\t\terr,\n\t})),\n}));\n\nvi.mock(\"../../src/services/vtex/vtex-catalog-write.js\", () => ({\n\tupdateSkuBasicFields: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/vtex/vtex-logistics.js\", () => ({\n\tgetInventoryByWarehouse: vi.fn(),\n\tupdateInventoryQuantity: vi.fn(),\n\tupdateInventoryLeadTime: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/vtex/vtex-pricing.js\", () => ({\n\tgetSkuPrice: vi.fn(),\n}));\n\nvi.mock(\"../../src/services/vtex/vtex-pricing-write.js\", () => ({\n\tupdateSkuPrice: vi.fn(),\n\tdeleteSkuPrice: vi.fn(),\n}));\n\ndescribe(\"VTEX write simple tools\", () => {\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t\tvi.mocked(requireExplicitConfirmation).mockReturnValue(null);\n\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\tok: true,\n\t\t\tvalue: { profileId: \"profile-1\" },\n\t\t});\n\t});\n\n\tdescribe(\"activateSkuHandler\", () => {\n\t\tit(\"activates a sku using the fetched sku snapshot\", async () => {\n\t\t\tconst beforeSku = { Id: \"sku-1\", IsActive: false, Name: \"Before\" };\n\t\t\tconst afterSku = { Id: \"sku-1\", IsActive: true, Name: \"Before\" };\n\t\t\tvi.mocked(updateSkuBasicFields).mockResolvedValue({\n\t\t\t\tbefore: beforeSku,\n\t\t\t\tpayload: { IsActive: true, Name: \"Before\" },\n\t\t\t\tafter: afterSku,\n\t\t\t});\n\n\t\t\tconst result = await activateSkuHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-1\",\n\t\t\t});\n\n\t\t\texpect(resolveVtexWriteProfile).toHaveBeenCalledWith(\"custom\");\n\t\t\texpect(updateSkuBasicFields).toHaveBeenCalledWith(\"profile-1\", \"sku-1\", {\n\t\t\t\tisActive: true,\n\t\t\t});\n\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\toperation: \"activate_sku\",\n\t\t\t\tresourceId: \"sku-1\",\n\t\t\t\triskLevel: \"medium\",\n\t\t\t\tmessage: \"SKU activated successfully.\",\n\t\t\t\tbefore: beforeSku,\n\t\t\t\tafter: afterSku,\n\t\t\t\tdetails: { sku_id: \"sku-1\" },\n\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({ operation: \"activate_sku\" }),\n\t\t\t});\n\t\t});\n\n\t\tit(\"returns profile selection payload without mutating anything\", async () => {\n\t\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\t\tok: false,\n\t\t\t\tresponse: { selection: true },\n\t\t\t} as never);\n\n\t\t\tconst result = await activateSkuHandler({ skuId: \"sku-1\" });\n\n\t\t\texpect(result).toEqual({ selection: true });\n\t\t\texpect(updateSkuBasicFields).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(updateSkuBasicFields).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await activateSkuHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-1\",\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to activate SKU sku-1\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to activate SKU sku-1\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"deactivateSkuHandler\", () => {\n\t\tit(\"deactivates a sku using the fetched sku snapshot\", async () => {\n\t\t\tconst beforeSku = { Id: \"sku-2\", IsActive: true, Name: \"Before\" };\n\t\t\tconst afterSku = { Id: \"sku-2\", IsActive: false, Name: \"Before\" };\n\t\t\tvi.mocked(updateSkuBasicFields).mockResolvedValue({\n\t\t\t\tbefore: beforeSku,\n\t\t\t\tpayload: { IsActive: false, Name: \"Before\" },\n\t\t\t\tafter: afterSku,\n\t\t\t});\n\n\t\t\tconst result = await deactivateSkuHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-2\",\n\t\t\t});\n\n\t\t\texpect(updateSkuBasicFields).toHaveBeenCalledWith(\"profile-1\", \"sku-2\", {\n\t\t\t\tisActive: false,\n\t\t\t});\n\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\toperation: \"deactivate_sku\",\n\t\t\t\tresourceId: \"sku-2\",\n\t\t\t\triskLevel: \"medium\",\n\t\t\t\tmessage: \"SKU deactivated successfully.\",\n\t\t\t\tbefore: beforeSku,\n\t\t\t\tafter: afterSku,\n\t\t\t\tdetails: { sku_id: \"sku-2\" },\n\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({ operation: \"deactivate_sku\" }),\n\t\t\t});\n\t\t});\n\n\t\tit(\"returns profile selection payload without mutating anything\", async () => {\n\t\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\t\tok: false,\n\t\t\t\tresponse: { selection: true },\n\t\t\t} as never);\n\n\t\t\tconst result = await deactivateSkuHandler({ skuId: \"sku-2\" });\n\n\t\t\texpect(result).toEqual({ selection: true });\n\t\t\texpect(updateSkuBasicFields).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(updateSkuBasicFields).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await deactivateSkuHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-2\",\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to deactivate SKU sku-2\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to deactivate SKU sku-2\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"toggleUnlimitedQuantityHandler\", () => {\n\t\tit(\"reuses the current total quantity when toggling unlimited mode\", async () => {\n\t\t\tconst beforeInventory = [\n\t\t\t\t{\n\t\t\t\t\tskuId: \"sku-3\",\n\t\t\t\t\twarehouseId: \"wh-1\",\n\t\t\t\t\ttotalQuantity: 9,\n\t\t\t\t\tisUnlimited: false,\n\t\t\t\t},\n\t\t\t];\n\t\t\tconst afterInventory = [\n\t\t\t\t{\n\t\t\t\t\tskuId: \"sku-3\",\n\t\t\t\t\twarehouseId: \"wh-1\",\n\t\t\t\t\ttotalQuantity: 9,\n\t\t\t\t\tisUnlimited: true,\n\t\t\t\t},\n\t\t\t];\n\t\t\tvi.mocked(getInventoryByWarehouse)\n\t\t\t\t.mockResolvedValueOnce(beforeInventory)\n\t\t\t\t.mockResolvedValueOnce(afterInventory);\n\n\t\t\tconst result = await toggleUnlimitedQuantityHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-3\",\n\t\t\t\twarehouseId: \"wh-1\",\n\t\t\t\tunlimitedQuantity: true,\n\t\t\t});\n\n\t\t\texpect(updateInventoryQuantity).toHaveBeenCalledWith(\n\t\t\t\t\"profile-1\",\n\t\t\t\t\"sku-3\",\n\t\t\t\t\"wh-1\",\n\t\t\t\t{ quantity: 9, unlimitedQuantity: true },\n\t\t\t);\n\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\toperation: \"toggle_unlimited_quantity\",\n\t\t\t\tresourceId: \"sku-3\",\n\t\t\t\triskLevel: \"low\",\n\t\t\t\tmessage: \"Unlimited quantity mode updated successfully.\",\n\t\t\t\tbefore: beforeInventory[0],\n\t\t\t\tafter: afterInventory[0],\n\t\t\t\tdetails: {\n\t\t\t\t\tsku_id: \"sku-3\",\n\t\t\t\t\twarehouse_id: \"wh-1\",\n\t\t\t\t\tunlimited_quantity: true,\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({\n\t\t\t\t\toperation: \"toggle_unlimited_quantity\",\n\t\t\t\t}),\n\t\t\t});\n\t\t});\n\n\t\tit(\"returns profile selection payload without mutating anything\", async () => {\n\t\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\t\tok: false,\n\t\t\t\tresponse: { selection: true },\n\t\t\t} as never);\n\n\t\t\tconst result = await toggleUnlimitedQuantityHandler({\n\t\t\t\tskuId: \"sku-3\",\n\t\t\t\twarehouseId: \"wh-1\",\n\t\t\t\tunlimitedQuantity: true,\n\t\t\t});\n\n\t\t\texpect(result).toEqual({ selection: true });\n\t\t\texpect(getInventoryByWarehouse).not.toHaveBeenCalled();\n\t\t\texpect(updateInventoryQuantity).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps missing inventory snapshots through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(getInventoryByWarehouse).mockResolvedValueOnce([]);\n\n\t\t\tconst result = await toggleUnlimitedQuantityHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-3\",\n\t\t\t\twarehouseId: \"wh-1\",\n\t\t\t\tunlimitedQuantity: true,\n\t\t\t});\n\n\t\t\texpect(updateInventoryQuantity).not.toHaveBeenCalled();\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to update unlimited quantity mode for SKU sku-3 in wh-1\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback:\n\t\t\t\t\t\"Failed to update unlimited quantity mode for SKU sku-3 in wh-1\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(getInventoryByWarehouse).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await toggleUnlimitedQuantityHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-3\",\n\t\t\t\twarehouseId: \"wh-1\",\n\t\t\t\tunlimitedQuantity: true,\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to update unlimited quantity mode for SKU sku-3 in wh-1\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback:\n\t\t\t\t\t\"Failed to update unlimited quantity mode for SKU sku-3 in wh-1\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"updateLeadTimeHandler\", () => {\n\t\tit(\"updates lead time and returns before/after snapshots\", async () => {\n\t\t\tconst beforeInventory = [\n\t\t\t\t{ skuId: \"sku-4\", warehouseId: \"wh-2\", leadTime: \"1.00:00:00\" },\n\t\t\t];\n\t\t\tconst afterInventory = [\n\t\t\t\t{ skuId: \"sku-4\", warehouseId: \"wh-2\", leadTime: \"2.00:00:00\" },\n\t\t\t];\n\t\t\tvi.mocked(getInventoryByWarehouse)\n\t\t\t\t.mockResolvedValueOnce(beforeInventory)\n\t\t\t\t.mockResolvedValueOnce(afterInventory);\n\n\t\t\tconst result = await updateLeadTimeHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-4\",\n\t\t\t\twarehouseId: \"wh-2\",\n\t\t\t\tleadTime: \"2.00:00:00\",\n\t\t\t});\n\n\t\t\texpect(updateInventoryLeadTime).toHaveBeenCalledWith(\n\t\t\t\t\"profile-1\",\n\t\t\t\t\"sku-4\",\n\t\t\t\t\"wh-2\",\n\t\t\t\t{ leadTime: \"2.00:00:00\" },\n\t\t\t);\n\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\toperation: \"update_lead_time\",\n\t\t\t\tresourceId: \"sku-4\",\n\t\t\t\triskLevel: \"low\",\n\t\t\t\tmessage: \"Lead time updated successfully.\",\n\t\t\t\tbefore: beforeInventory[0],\n\t\t\t\tafter: afterInventory[0],\n\t\t\t\tdetails: {\n\t\t\t\t\tsku_id: \"sku-4\",\n\t\t\t\t\twarehouse_id: \"wh-2\",\n\t\t\t\t\tlead_time: \"2.00:00:00\",\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({ operation: \"update_lead_time\" }),\n\t\t\t});\n\t\t});\n\n\t\tit(\"returns profile selection payload without mutating anything\", async () => {\n\t\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\t\tok: false,\n\t\t\t\tresponse: { selection: true },\n\t\t\t} as never);\n\n\t\t\tconst result = await updateLeadTimeHandler({\n\t\t\t\tskuId: \"sku-4\",\n\t\t\t\twarehouseId: \"wh-2\",\n\t\t\t\tleadTime: \"2.00:00:00\",\n\t\t\t});\n\n\t\t\texpect(result).toEqual({ selection: true });\n\t\t\texpect(getInventoryByWarehouse).not.toHaveBeenCalled();\n\t\t\texpect(updateInventoryLeadTime).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(getInventoryByWarehouse).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await updateLeadTimeHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-4\",\n\t\t\t\twarehouseId: \"wh-2\",\n\t\t\t\tleadTime: \"2.00:00:00\",\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to update lead time for SKU sku-4 in wh-2\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to update lead time for SKU sku-4 in wh-2\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"updateInventoryHandler\", () => {\n\t\tit(\"updates inventory with forwarded quantity and sync timestamp\", async () => {\n\t\t\tconst beforeInventory = [\n\t\t\t\t{ skuId: \"sku-5\", warehouseId: \"wh-3\", totalQuantity: 4 },\n\t\t\t];\n\t\t\tconst afterInventory = [\n\t\t\t\t{ skuId: \"sku-5\", warehouseId: \"wh-3\", totalQuantity: 12 },\n\t\t\t];\n\t\t\tvi.mocked(getInventoryByWarehouse)\n\t\t\t\t.mockResolvedValueOnce(beforeInventory)\n\t\t\t\t.mockResolvedValueOnce(afterInventory);\n\n\t\t\tconst result = await updateInventoryHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-5\",\n\t\t\t\twarehouseId: \"wh-3\",\n\t\t\t\tquantity: 12,\n\t\t\t\tunlimitedQuantity: false,\n\t\t\t\tdateUtcOnBalanceSystem: \"2026-06-01T10:00:00Z\",\n\t\t\t});\n\n\t\t\texpect(updateInventoryQuantity).toHaveBeenCalledWith(\n\t\t\t\t\"profile-1\",\n\t\t\t\t\"sku-5\",\n\t\t\t\t\"wh-3\",\n\t\t\t\t{\n\t\t\t\t\tquantity: 12,\n\t\t\t\t\tunlimitedQuantity: false,\n\t\t\t\t\tdateUtcOnBalanceSystem: \"2026-06-01T10:00:00Z\",\n\t\t\t\t},\n\t\t\t);\n\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\toperation: \"update_inventory\",\n\t\t\t\tresourceId: \"sku-5\",\n\t\t\t\triskLevel: \"low\",\n\t\t\t\tmessage: \"Inventory quantity updated successfully.\",\n\t\t\t\tbefore: beforeInventory[0],\n\t\t\t\tafter: afterInventory[0],\n\t\t\t\tdetails: {\n\t\t\t\t\tsku_id: \"sku-5\",\n\t\t\t\t\twarehouse_id: \"wh-3\",\n\t\t\t\t\tquantity: 12,\n\t\t\t\t\tunlimited_quantity: false,\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({ operation: \"update_inventory\" }),\n\t\t\t});\n\t\t});\n\n\t\tit(\"returns profile selection payload without mutating anything\", async () => {\n\t\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\t\tok: false,\n\t\t\t\tresponse: { selection: true },\n\t\t\t} as never);\n\n\t\t\tconst result = await updateInventoryHandler({\n\t\t\t\tskuId: \"sku-5\",\n\t\t\t\twarehouseId: \"wh-3\",\n\t\t\t\tquantity: 12,\n\t\t\t\tunlimitedQuantity: false,\n\t\t\t});\n\n\t\t\texpect(result).toEqual({ selection: true });\n\t\t\texpect(getInventoryByWarehouse).not.toHaveBeenCalled();\n\t\t\texpect(updateInventoryQuantity).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(getInventoryByWarehouse).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await updateInventoryHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-5\",\n\t\t\t\twarehouseId: \"wh-3\",\n\t\t\t\tquantity: 12,\n\t\t\t\tunlimitedQuantity: false,\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to update inventory quantity for SKU sku-5 in wh-3\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to update inventory quantity for SKU sku-5 in wh-3\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"deleteSkuPriceHandler\", () => {\n\t\tit(\"requires explicit confirmation before deleting pricing\", async () => {\n\t\t\tvi.mocked(requireExplicitConfirmation).mockReturnValue({ confirmation_required: true } as never);\n\n\t\t\tconst result = await deleteSkuPriceHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-7\",\n\t\t\t});\n\n\t\t\texpect(requireExplicitConfirmation).toHaveBeenCalledWith(undefined, \"delete_sku_price\", {\n\t\t\t\tsku_id: \"sku-7\",\n\t\t\t});\n\t\t\texpect(result).toEqual({ confirmation_required: true });\n\t\t\texpect(resolveVtexWriteProfile).not.toHaveBeenCalled();\n\t\t\texpect(deleteSkuPrice).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"deletes pricing and returns the minimal success contract\", async () => {\n\t\t\tconst result = await deleteSkuPriceHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-7\",\n\t\t\t\tconfirmed: true,\n\t\t\t\tconfirmationNote: \"User confirmed deleting the SKU price record.\",\n\t\t\t});\n\n\t\t\texpect(resolveVtexWriteProfile).toHaveBeenCalledWith(\"custom\");\n\t\t\texpect(deleteSkuPrice).toHaveBeenCalledWith(\"profile-1\", \"sku-7\");\n\t\t\texpect(result).toEqual({\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: expect.stringContaining(\"\\\"operation\\\": \\\"delete_sku_price\\\"\"),\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tstructuredContent: {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tprofile_id: \"profile-1\",\n\t\t\t\t\toperation: \"delete_sku_price\",\n\t\t\t\t\tresource_id: \"sku-7\",\n\t\t\t\t\trisk_level: \"high\",\n\t\t\t\t\tconfirmed: true,\n\t\t\t\t\tmessage: \"SKU price delete request accepted by VTEX.\",\n\t\t\t\t\twarnings: [\n\t\t\t\t\t\t\"Price reads may remain stale for several minutes after a successful delete while VTEX propagates the change.\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t_meta: {\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(buildWriteSuccessResponse).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(deleteSkuPrice).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await deleteSkuPriceHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-7\",\n\t\t\t\tconfirmed: true,\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to delete price for SKU sku-7\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to delete price for SKU sku-7\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n\n\t\tdescribe(\"updateSkuPriceHandler\", () => {\n\t\t\tit(\"updates sku pricing and re-fetches before/after price snapshots\", async () => {\n\t\t\tconst beforePrice = { itemId: \"sku-6\", basePrice: 100, costPrice: 80 };\n\t\t\tconst afterPrice = { itemId: \"sku-6\", basePrice: 120, costPrice: 80 };\n\t\t\tvi.mocked(getSkuPrice)\n\t\t\t\t.mockResolvedValueOnce(beforePrice as never)\n\t\t\t\t.mockResolvedValueOnce(afterPrice as never);\n\n\t\t\tconst fixedPrices = [\n\t\t\t\t{\n\t\t\t\t\ttradePolicyId: \"1\",\n\t\t\t\t\tvalue: 110,\n\t\t\t\t\tlistPrice: 130,\n\t\t\t\t\tminQuantity: 2,\n\t\t\t\t\tdateRange: {\n\t\t\t\t\t\tfrom: \"2026-06-01T00:00:00Z\",\n\t\t\t\t\t\tto: \"2026-06-30T00:00:00Z\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst result = await updateSkuPriceHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-6\",\n\t\t\t\tbasePrice: 120,\n\t\t\t\tcostPrice: 80,\n\t\t\t\tlistPrice: 140,\n\t\t\t\tfixedPrices,\n\t\t\t});\n\n\t\t\texpect(updateSkuPrice).toHaveBeenCalledWith(\"profile-1\", \"sku-6\", {\n\t\t\t\tbasePrice: 120,\n\t\t\t\tcostPrice: 80,\n\t\t\t\tmarkup: undefined,\n\t\t\t\tlistPrice: 140,\n\t\t\t\tfixedPrices,\n\t\t\t});\n\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\toperation: \"update_sku_price\",\n\t\t\t\tresourceId: \"sku-6\",\n\t\t\t\triskLevel: \"low\",\n\t\t\t\tmessage: \"SKU price updated successfully.\",\n\t\t\t\tbefore: beforePrice,\n\t\t\t\tafter: afterPrice,\n\t\t\t\tdetails: { sku_id: \"sku-6\" },\n\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({ operation: \"update_sku_price\" }),\n\t\t\t});\n\t\t});\n\n\t\tit(\"does not swallow unrelated 404 price lookup failures\", async () => {\n\t\t\tconst generic404Error = {\n\t\t\t\tisAxiosError: true,\n\t\t\t\tresponse: { status: 404, data: { message: \"SKU pricing endpoint unavailable\" } },\n\t\t\t\tmessage: \"Request failed with status code 404\",\n\t\t\t};\n\n\t\t\tvi.mocked(getSkuPrice).mockRejectedValue(generic404Error as never);\n\n\t\t\tconst result = await updateSkuPriceHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-6\",\n\t\t\t\tbasePrice: 120,\n\t\t\t});\n\n\t\t\texpect(updateSkuPrice).not.toHaveBeenCalled();\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\tgeneric404Error,\n\t\t\t\t\"Failed to update price for SKU sku-6\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to update price for SKU sku-6\",\n\t\t\t\terr: generic404Error,\n\t\t\t});\n\t\t});\n\n\t\tit(\"creates missing pricing when the seed SKU has no price snapshot yet\", async () => {\n\t\t\tconst missingPriceError = {\n\t\t\t\tisAxiosError: true,\n\t\t\t\t\tresponse: { status: 404, data: { message: \"Price not found\" } },\n\t\t\t\t\tmessage: \"Request failed with status code 404\",\n\t\t\t\t};\n\n\t\t\t\tconst afterPrice = { itemId: \"sku-6\", basePrice: 10000, listPrice: 10000 };\n\t\t\t\tvi.mocked(getSkuPrice)\n\t\t\t\t\t.mockRejectedValueOnce(missingPriceError as never)\n\t\t\t\t\t.mockResolvedValueOnce(afterPrice as never);\n\n\t\t\t\tconst result = await updateSkuPriceHandler({\n\t\t\t\t\tprofileId: \"custom\",\n\t\t\t\t\tskuId: \"sku-6\",\n\t\t\t\t\tbasePrice: 100,\n\t\t\t\t\tlistPrice: 100,\n\t\t\t\t});\n\n\t\t\t\texpect(updateSkuPrice).toHaveBeenCalledWith(\"profile-1\", \"sku-6\", {\n\t\t\t\t\tbasePrice: 100,\n\t\t\t\t\tcostPrice: undefined,\n\t\t\t\t\tmarkup: undefined,\n\t\t\t\t\tlistPrice: 100,\n\t\t\t\t\tfixedPrices: undefined,\n\t\t\t\t});\n\t\t\t\texpect(buildWriteSuccessResponse).toHaveBeenCalledWith({\n\t\t\t\t\tprofileId: \"profile-1\",\n\t\t\t\t\toperation: \"update_sku_price\",\n\t\t\t\t\tresourceId: \"sku-6\",\n\t\t\t\t\triskLevel: \"low\",\n\t\t\t\t\tmessage: \"SKU price updated successfully.\",\n\t\t\t\t\tbefore: null,\n\t\t\t\t\tafter: afterPrice,\n\t\t\t\t\tdetails: { sku_id: \"sku-6\" },\n\t\t\t\t});\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"success\",\n\t\t\t\tparams: expect.objectContaining({ operation: \"update_sku_price\" }),\n\t\t\t});\n\t\t});\n\n\t\t\tit(\"returns profile selection payload without mutating anything\", async () => {\n\t\t\tvi.mocked(resolveVtexWriteProfile).mockResolvedValue({\n\t\t\t\tok: false,\n\t\t\t\tresponse: { selection: true },\n\t\t\t} as never);\n\n\t\t\tconst result = await updateSkuPriceHandler({\n\t\t\t\tskuId: \"sku-6\",\n\t\t\t\tbasePrice: 120,\n\t\t\t});\n\n\t\t\texpect(result).toEqual({ selection: true });\n\t\t\texpect(getSkuPrice).not.toHaveBeenCalled();\n\t\t\texpect(updateSkuPrice).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit(\"maps service errors through handleVtexWriteError\", async () => {\n\t\t\tvi.mocked(getSkuPrice).mockRejectedValue(new Error(\"boom\"));\n\n\t\t\tconst result = await updateSkuPriceHandler({\n\t\t\t\tprofileId: \"custom\",\n\t\t\t\tskuId: \"sku-6\",\n\t\t\t\tbasePrice: 120,\n\t\t\t});\n\n\t\t\texpect(handleVtexWriteError).toHaveBeenCalledWith(\n\t\t\t\texpect.any(Error),\n\t\t\t\t\"Failed to update price for SKU sku-6\",\n\t\t\t);\n\t\t\texpect(result).toEqual({\n\t\t\t\tkind: \"error\",\n\t\t\t\tfallback: \"Failed to update price for SKU sku-6\",\n\t\t\t\terr: expect.any(Error),\n\t\t\t});\n\t\t});\n\t});\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ import { defineConfig } from "vitest/config";
2
+ var vitest_config_default = defineConfig({
3
+ test: {
4
+ environment: "node",
5
+ include: ["tests/**/*.test.ts", "src/**/__tests__/**/*.test.ts"],
6
+ setupFiles: ["./tests/setup.ts"],
7
+ clearMocks: true,
8
+ restoreMocks: true,
9
+ mockReset: true
10
+ }
11
+ });
12
+ export {
13
+ vitest_config_default as default
14
+ };
15
+ //# sourceMappingURL=vitest.config.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../vitest.config.ts"],
4
+ "sourcesContent": ["import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n\ttest: {\n\t\tenvironment: \"node\",\n\t\tinclude: [\"tests/**/*.test.ts\", \"src/**/__tests__/**/*.test.ts\"],\n\t\tsetupFiles: [\"./tests/setup.ts\"],\n\t\tclearMocks: true,\n\t\trestoreMocks: true,\n\t\tmockReset: true,\n\t},\n});\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAE7B,IAAO,wBAAQ,aAAa;AAAA,EAC3B,MAAM;AAAA,IACL,aAAa;AAAA,IACb,SAAS,CAAC,sBAAsB,+BAA+B;AAAA,IAC/D,YAAY,CAAC,kBAAkB;AAAA,IAC/B,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AACD,CAAC;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yoryoboy/bi-mcp",
3
3
  "type": "module",
4
- "version": "1.10.0",
4
+ "version": "1.13.0",
5
5
  "description": "MCP server: bi-mcp",
6
6
  "author": "",
7
7
  "license": "MIT",
@@ -52,7 +52,8 @@
52
52
  "@vitejs/plugin-react": "^5.1.4",
53
53
  "tsx": "^4.21.0",
54
54
  "typescript": "^5.9.3",
55
- "vite": "^7.3.1"
55
+ "vite": "^7.3.1",
56
+ "vitest": "^4.1.8"
56
57
  },
57
58
  "overrides": {
58
59
  "sugarss": "^5.0.1",
@@ -64,6 +65,9 @@
64
65
  "dev": "node scripts/run-mcp-use-dev.mjs",
65
66
  "start": "mcp-use start",
66
67
  "deploy": "mcp-use deploy",
68
+ "test": "vitest run",
69
+ "test:coverage": "vitest run --coverage",
70
+ "test:watch": "vitest",
67
71
  "db:test": "pnpm exec tsx scripts/test-db-connection.ts",
68
72
  "db:migrate": "pnpm exec tsx scripts/run-migrations.ts",
69
73
  "admin:profile-upsert": "pnpm exec tsx scripts/admin-profile-upsert.ts",