@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,275 @@
1
+ import { z } from "zod";
2
+ import {
3
+ deleteAllSkuSpecifications,
4
+ deleteAllProductSpecifications,
5
+ deleteBrand,
6
+ deleteProductSpecification,
7
+ deleteSkuFile,
8
+ deleteSkuSpecification
9
+ } from "../../services/vtex/vtex-catalog-write.js";
10
+ import {
11
+ buildWriteSuccessResponse,
12
+ confirmationNoteSchemaField,
13
+ confirmationSchemaField,
14
+ handleVtexWriteError,
15
+ requireExplicitConfirmation,
16
+ resolveVtexWriteProfile,
17
+ vtexProfileIdSchemaField
18
+ } from "./write-helpers.js";
19
+ const deleteProductSpecificationSchema = z.object({
20
+ profileId: vtexProfileIdSchemaField,
21
+ productId: z.string().trim().min(1).describe("VTEX product identifier."),
22
+ specificationId: z.string().trim().min(1).describe(
23
+ "Product-specification association ID (`Id` from `vtex_get_product_specifications`). This is the spec record ID used by VTEX delete/update, not the field ID."
24
+ )
25
+ });
26
+ async function deleteProductSpecificationHandler({
27
+ profileId,
28
+ productId,
29
+ specificationId
30
+ }) {
31
+ try {
32
+ const profileResolution = await resolveVtexWriteProfile(profileId);
33
+ if (!profileResolution.ok) {
34
+ return profileResolution.response;
35
+ }
36
+ const resolvedProfileId = profileResolution.value.profileId;
37
+ await deleteProductSpecification(resolvedProfileId, productId, specificationId);
38
+ return buildWriteSuccessResponse({
39
+ profileId: resolvedProfileId,
40
+ operation: "delete_product_specification",
41
+ resourceId: productId,
42
+ riskLevel: "medium",
43
+ message: "Product specification deleted successfully.",
44
+ before: null,
45
+ after: null,
46
+ details: {
47
+ product_id: productId,
48
+ specification_id: specificationId
49
+ }
50
+ });
51
+ } catch (err) {
52
+ return handleVtexWriteError(
53
+ err,
54
+ `Failed to delete specification ${specificationId} from product ${productId}`
55
+ );
56
+ }
57
+ }
58
+ const deleteAllProductSpecificationsSchema = z.object({
59
+ profileId: vtexProfileIdSchemaField,
60
+ productId: z.string().trim().min(1).describe("VTEX product identifier."),
61
+ confirmed: confirmationSchemaField,
62
+ confirmationNote: confirmationNoteSchemaField
63
+ });
64
+ async function deleteAllProductSpecificationsHandler({
65
+ profileId,
66
+ productId,
67
+ confirmed,
68
+ confirmationNote
69
+ }) {
70
+ const confirmationResponse = requireExplicitConfirmation(
71
+ confirmed,
72
+ "delete_all_product_specifications",
73
+ {
74
+ product_id: productId
75
+ }
76
+ );
77
+ if (confirmationResponse) {
78
+ return confirmationResponse;
79
+ }
80
+ try {
81
+ const profileResolution = await resolveVtexWriteProfile(profileId);
82
+ if (!profileResolution.ok) {
83
+ return profileResolution.response;
84
+ }
85
+ const resolvedProfileId = profileResolution.value.profileId;
86
+ await deleteAllProductSpecifications(resolvedProfileId, productId);
87
+ return buildWriteSuccessResponse({
88
+ profileId: resolvedProfileId,
89
+ operation: "delete_all_product_specifications",
90
+ resourceId: productId,
91
+ riskLevel: "high",
92
+ confirmed: true,
93
+ confirmationNote,
94
+ message: "All product specifications deleted successfully.",
95
+ before: null,
96
+ after: null,
97
+ impactSummary: {
98
+ entities: 1,
99
+ entity_types: ["product_specifications"],
100
+ destructive: true
101
+ },
102
+ details: {
103
+ product_id: productId
104
+ }
105
+ });
106
+ } catch (err) {
107
+ return handleVtexWriteError(err, `Failed to delete all specifications from product ${productId}`);
108
+ }
109
+ }
110
+ const deleteBrandSchema = z.object({
111
+ profileId: vtexProfileIdSchemaField,
112
+ brandId: z.string().trim().min(1).describe("VTEX brand ID. The caller must already know this ID; no pre-delete lookup is performed.")
113
+ });
114
+ async function deleteBrandHandler({
115
+ profileId,
116
+ brandId
117
+ }) {
118
+ try {
119
+ const profileResolution = await resolveVtexWriteProfile(profileId);
120
+ if (!profileResolution.ok) {
121
+ return profileResolution.response;
122
+ }
123
+ const resolvedProfileId = profileResolution.value.profileId;
124
+ await deleteBrand(resolvedProfileId, brandId);
125
+ return buildWriteSuccessResponse({
126
+ profileId: resolvedProfileId,
127
+ operation: "delete_brand",
128
+ resourceId: brandId,
129
+ riskLevel: "medium",
130
+ message: "Brand deleted successfully.",
131
+ before: null,
132
+ after: null,
133
+ details: {
134
+ brand_id: brandId
135
+ }
136
+ });
137
+ } catch (err) {
138
+ return handleVtexWriteError(err, `Failed to delete brand ${brandId}`);
139
+ }
140
+ }
141
+ const deleteCatalogImageSchema = z.object({
142
+ profileId: vtexProfileIdSchemaField,
143
+ skuId: z.string().trim().min(1).describe("VTEX SKU identifier."),
144
+ imageId: z.string().trim().min(1).describe("Image identifier to delete. The caller must already know this ID; no pre-delete lookup is performed.")
145
+ });
146
+ async function deleteCatalogImageHandler({
147
+ profileId,
148
+ skuId,
149
+ imageId
150
+ }) {
151
+ try {
152
+ const profileResolution = await resolveVtexWriteProfile(profileId);
153
+ if (!profileResolution.ok) {
154
+ return profileResolution.response;
155
+ }
156
+ const resolvedProfileId = profileResolution.value.profileId;
157
+ await deleteSkuFile(resolvedProfileId, skuId, imageId);
158
+ return buildWriteSuccessResponse({
159
+ profileId: resolvedProfileId,
160
+ operation: "delete_catalog_image",
161
+ resourceId: skuId,
162
+ riskLevel: "medium",
163
+ message: "Catalog image deleted successfully.",
164
+ before: null,
165
+ after: null,
166
+ details: {
167
+ sku_id: skuId,
168
+ image_id: imageId
169
+ }
170
+ });
171
+ } catch (err) {
172
+ return handleVtexWriteError(err, `Failed to delete image ${imageId} from SKU ${skuId}`);
173
+ }
174
+ }
175
+ const deleteSkuSpecificationSchema = z.object({
176
+ profileId: vtexProfileIdSchemaField,
177
+ skuId: z.string().trim().min(1).describe("VTEX SKU identifier."),
178
+ specificationId: z.string().trim().min(1).describe("Specification field ID to remove from the SKU.")
179
+ });
180
+ async function deleteSkuSpecificationHandler({
181
+ profileId,
182
+ skuId,
183
+ specificationId
184
+ }) {
185
+ try {
186
+ const profileResolution = await resolveVtexWriteProfile(profileId);
187
+ if (!profileResolution.ok) {
188
+ return profileResolution.response;
189
+ }
190
+ const resolvedProfileId = profileResolution.value.profileId;
191
+ await deleteSkuSpecification(resolvedProfileId, skuId, specificationId);
192
+ return buildWriteSuccessResponse({
193
+ profileId: resolvedProfileId,
194
+ operation: "delete_sku_specification",
195
+ resourceId: skuId,
196
+ riskLevel: "medium",
197
+ message: "SKU specification deleted successfully.",
198
+ before: null,
199
+ after: null,
200
+ details: {
201
+ sku_id: skuId,
202
+ specification_id: specificationId
203
+ }
204
+ });
205
+ } catch (err) {
206
+ return handleVtexWriteError(err, `Failed to delete specification ${specificationId} from SKU ${skuId}`);
207
+ }
208
+ }
209
+ const deleteAllSkuSpecificationsSchema = z.object({
210
+ profileId: vtexProfileIdSchemaField,
211
+ skuId: z.string().trim().min(1).describe("VTEX SKU identifier."),
212
+ confirmed: confirmationSchemaField,
213
+ confirmationNote: confirmationNoteSchemaField
214
+ });
215
+ async function deleteAllSkuSpecificationsHandler({
216
+ profileId,
217
+ skuId,
218
+ confirmed,
219
+ confirmationNote
220
+ }) {
221
+ const confirmationResponse = requireExplicitConfirmation(
222
+ confirmed,
223
+ "delete_all_sku_specifications",
224
+ {
225
+ sku_id: skuId
226
+ }
227
+ );
228
+ if (confirmationResponse) {
229
+ return confirmationResponse;
230
+ }
231
+ try {
232
+ const profileResolution = await resolveVtexWriteProfile(profileId);
233
+ if (!profileResolution.ok) {
234
+ return profileResolution.response;
235
+ }
236
+ const resolvedProfileId = profileResolution.value.profileId;
237
+ await deleteAllSkuSpecifications(resolvedProfileId, skuId);
238
+ return buildWriteSuccessResponse({
239
+ profileId: resolvedProfileId,
240
+ operation: "delete_all_sku_specifications",
241
+ resourceId: skuId,
242
+ riskLevel: "high",
243
+ confirmed: true,
244
+ confirmationNote,
245
+ message: "All SKU specifications deleted successfully.",
246
+ before: null,
247
+ after: null,
248
+ impactSummary: {
249
+ entities: 1,
250
+ entity_types: ["sku_specifications"],
251
+ destructive: true
252
+ },
253
+ details: {
254
+ sku_id: skuId
255
+ }
256
+ });
257
+ } catch (err) {
258
+ return handleVtexWriteError(err, `Failed to delete all specifications from SKU ${skuId}`);
259
+ }
260
+ }
261
+ export {
262
+ deleteAllProductSpecificationsHandler,
263
+ deleteAllProductSpecificationsSchema,
264
+ deleteAllSkuSpecificationsHandler,
265
+ deleteAllSkuSpecificationsSchema,
266
+ deleteBrandHandler,
267
+ deleteBrandSchema,
268
+ deleteCatalogImageHandler,
269
+ deleteCatalogImageSchema,
270
+ deleteProductSpecificationHandler,
271
+ deleteProductSpecificationSchema,
272
+ deleteSkuSpecificationHandler,
273
+ deleteSkuSpecificationSchema
274
+ };
275
+ //# sourceMappingURL=catalog-admin-product-specifications.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/tools/vtex/catalog-admin-product-specifications.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\n\nimport {\n deleteAllSkuSpecifications,\n deleteAllProductSpecifications,\n deleteBrand,\n deleteProductSpecification,\n deleteSkuFile,\n deleteSkuSpecification,\n} from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n confirmationNoteSchemaField,\n confirmationSchemaField,\n handleVtexWriteError,\n requireExplicitConfirmation,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const deleteProductSpecificationSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n productId: z.string().trim().min(1).describe(\"VTEX product identifier.\"),\n specificationId: z\n .string()\n .trim()\n .min(1)\n .describe(\n \"Product-specification association ID (`Id` from `vtex_get_product_specifications`). This is the spec record ID used by VTEX delete/update, not the field ID.\"\n ),\n});\n\nexport async function deleteProductSpecificationHandler({\n profileId,\n productId,\n specificationId,\n}: z.infer<typeof deleteProductSpecificationSchema>) {\n try {\n const profileResolution = await resolveVtexWriteProfile(profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n await deleteProductSpecification(resolvedProfileId, productId, specificationId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_product_specification\",\n resourceId: productId,\n riskLevel: \"medium\",\n message: \"Product specification deleted successfully.\",\n before: null,\n after: null,\n details: {\n product_id: productId,\n specification_id: specificationId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(\n err,\n `Failed to delete specification ${specificationId} from product ${productId}`\n );\n }\n}\n\nexport const deleteAllProductSpecificationsSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n productId: z.string().trim().min(1).describe(\"VTEX product identifier.\"),\n confirmed: confirmationSchemaField,\n confirmationNote: confirmationNoteSchemaField,\n});\n\nexport async function deleteAllProductSpecificationsHandler({\n profileId,\n productId,\n confirmed,\n confirmationNote,\n}: z.infer<typeof deleteAllProductSpecificationsSchema>) {\n const confirmationResponse = requireExplicitConfirmation(\n confirmed,\n \"delete_all_product_specifications\",\n {\n product_id: productId,\n }\n );\n if (confirmationResponse) {\n return confirmationResponse;\n }\n\n try {\n const profileResolution = await resolveVtexWriteProfile(profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n await deleteAllProductSpecifications(resolvedProfileId, productId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_all_product_specifications\",\n resourceId: productId,\n riskLevel: \"high\",\n confirmed: true,\n confirmationNote,\n message: \"All product specifications deleted successfully.\",\n before: null,\n after: null,\n impactSummary: {\n entities: 1,\n entity_types: [\"product_specifications\"],\n destructive: true,\n },\n details: {\n product_id: productId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, `Failed to delete all specifications from product ${productId}`);\n }\n}\n\nexport const deleteBrandSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n brandId: z\n .string()\n .trim()\n .min(1)\n .describe(\"VTEX brand ID. The caller must already know this ID; no pre-delete lookup is performed.\"),\n});\n\nexport async function deleteBrandHandler({\n profileId,\n brandId,\n}: z.infer<typeof deleteBrandSchema>) {\n try {\n const profileResolution = await resolveVtexWriteProfile(profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n await deleteBrand(resolvedProfileId, brandId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_brand\",\n resourceId: brandId,\n riskLevel: \"medium\",\n message: \"Brand deleted successfully.\",\n before: null,\n after: null,\n details: {\n brand_id: brandId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, `Failed to delete brand ${brandId}`);\n }\n}\n\nexport const deleteCatalogImageSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().trim().min(1).describe(\"VTEX SKU identifier.\"),\n imageId: z\n .string()\n .trim()\n .min(1)\n .describe(\"Image identifier to delete. The caller must already know this ID; no pre-delete lookup is performed.\"),\n});\n\nexport async function deleteCatalogImageHandler({\n profileId,\n skuId,\n imageId,\n}: z.infer<typeof deleteCatalogImageSchema>) {\n try {\n const profileResolution = await resolveVtexWriteProfile(profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n await deleteSkuFile(resolvedProfileId, skuId, imageId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_catalog_image\",\n resourceId: skuId,\n riskLevel: \"medium\",\n message: \"Catalog image deleted successfully.\",\n before: null,\n after: null,\n details: {\n sku_id: skuId,\n image_id: imageId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, `Failed to delete image ${imageId} from SKU ${skuId}`);\n }\n}\n\nexport const deleteSkuSpecificationSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().trim().min(1).describe(\"VTEX SKU identifier.\"),\n specificationId: z\n .string()\n .trim()\n .min(1)\n .describe(\"Specification field ID to remove from the SKU.\"),\n});\n\nexport async function deleteSkuSpecificationHandler({\n profileId,\n skuId,\n specificationId,\n}: z.infer<typeof deleteSkuSpecificationSchema>) {\n try {\n const profileResolution = await resolveVtexWriteProfile(profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n await deleteSkuSpecification(resolvedProfileId, skuId, specificationId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_sku_specification\",\n resourceId: skuId,\n riskLevel: \"medium\",\n message: \"SKU specification deleted successfully.\",\n before: null,\n after: null,\n details: {\n sku_id: skuId,\n specification_id: specificationId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, `Failed to delete specification ${specificationId} from SKU ${skuId}`);\n }\n}\n\nexport const deleteAllSkuSpecificationsSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().trim().min(1).describe(\"VTEX SKU identifier.\"),\n confirmed: confirmationSchemaField,\n confirmationNote: confirmationNoteSchemaField,\n});\n\nexport async function deleteAllSkuSpecificationsHandler({\n profileId,\n skuId,\n confirmed,\n confirmationNote,\n}: z.infer<typeof deleteAllSkuSpecificationsSchema>) {\n const confirmationResponse = requireExplicitConfirmation(\n confirmed,\n \"delete_all_sku_specifications\",\n {\n sku_id: skuId,\n }\n );\n if (confirmationResponse) {\n return confirmationResponse;\n }\n\n try {\n const profileResolution = await resolveVtexWriteProfile(profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n await deleteAllSkuSpecifications(resolvedProfileId, skuId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_all_sku_specifications\",\n resourceId: skuId,\n riskLevel: \"high\",\n confirmed: true,\n confirmationNote,\n message: \"All SKU specifications deleted successfully.\",\n before: null,\n after: null,\n impactSummary: {\n entities: 1,\n entity_types: [\"sku_specifications\"],\n destructive: true,\n },\n details: {\n sku_id: skuId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, `Failed to delete all specifications from SKU ${skuId}`);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }