@yoryoboy/bi-mcp 1.16.0 → 1.19.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.
- package/README.md +12 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.js +179 -6
- package/dist/index.js.map +2 -2
- package/dist/mcp-use.json +3 -6
- package/dist/src/config/__tests__/google-store.test.js +30 -0
- package/dist/src/config/__tests__/google-store.test.js.map +7 -0
- package/dist/src/config/__tests__/mcp-tool-deadline.test.js +64 -0
- package/dist/src/config/__tests__/mcp-tool-deadline.test.js.map +7 -0
- package/dist/src/config/google-store.js +18 -0
- package/dist/src/config/google-store.js.map +2 -2
- package/dist/src/config/mcp-tool-deadline-context.js +34 -0
- package/dist/src/config/mcp-tool-deadline-context.js.map +7 -0
- package/dist/src/config/mcp-tool-deadline.js +67 -0
- package/dist/src/config/mcp-tool-deadline.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-api.test.js +38 -3
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-api.test.js.map +2 -2
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-buyer-reconciliation.test.js +226 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-buyer-reconciliation.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-claim-reconciliation.test.js +127 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-claim-reconciliation.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-kits.test.js +103 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-kits.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-order-billing-info.test.js +582 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-order-billing-info.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-orders.test.js +10 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-orders.test.js.map +2 -2
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-packs.test.js +36 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-packs.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-payments.test.js +137 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-payments.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads-ad-group-ads.test.js +105 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads-ad-group-ads.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads-ad-groups.test.js +143 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads-ad-groups.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads-campaigns.test.js +100 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads-campaigns.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads.test.js +350 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-product-ads.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-return-reconciliation.test.js +228 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-return-reconciliation.test.js.map +7 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-shipping.test.js +58 -0
- package/dist/src/services/mercadolibre/__tests__/mercadolibre-shipping.test.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-api.js +15 -3
- package/dist/src/services/mercadolibre/mercadolibre-api.js.map +2 -2
- package/dist/src/services/mercadolibre/mercadolibre-billing.js +110 -3
- package/dist/src/services/mercadolibre/mercadolibre-billing.js.map +2 -2
- package/dist/src/services/mercadolibre/mercadolibre-buyer-reconciliation.js +368 -0
- package/dist/src/services/mercadolibre/mercadolibre-buyer-reconciliation.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-claim-reconciliation.js +399 -0
- package/dist/src/services/mercadolibre/mercadolibre-claim-reconciliation.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-kits.js +55 -0
- package/dist/src/services/mercadolibre/mercadolibre-kits.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-order-billing-info.js +392 -0
- package/dist/src/services/mercadolibre/mercadolibre-order-billing-info.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-orders.js +8 -8
- package/dist/src/services/mercadolibre/mercadolibre-orders.js.map +2 -2
- package/dist/src/services/mercadolibre/mercadolibre-packs.js +21 -0
- package/dist/src/services/mercadolibre/mercadolibre-packs.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-payments.js +60 -0
- package/dist/src/services/mercadolibre/mercadolibre-payments.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-product-ads.js +429 -0
- package/dist/src/services/mercadolibre/mercadolibre-product-ads.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-return-reconciliation.js +436 -0
- package/dist/src/services/mercadolibre/mercadolibre-return-reconciliation.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-shipping.js +35 -0
- package/dist/src/services/mercadolibre/mercadolibre-shipping.js.map +7 -0
- package/dist/src/services/vtex/__tests__/vtex-api.test.js +67 -0
- package/dist/src/services/vtex/__tests__/vtex-api.test.js.map +7 -0
- package/dist/src/services/vtex/vtex-api.js +6 -0
- package/dist/src/services/vtex/vtex-api.js.map +2 -2
- package/dist/src/tools/config/__tests__/list-profiles.test.js +154 -0
- package/dist/src/tools/config/__tests__/list-profiles.test.js.map +7 -0
- package/dist/src/tools/config/list-profiles.js +39 -3
- package/dist/src/tools/config/list-profiles.js.map +2 -2
- package/dist/src/tools/mercadolibre/__tests__/get-order-billing-info.test.js +339 -0
- package/dist/src/tools/mercadolibre/__tests__/get-order-billing-info.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-ad-group-ads.test.js +225 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-ad-group-ads.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-ad-groups.test.js +148 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-ad-groups.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-campaigns.test.js +60 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-campaigns.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-helpers.test.js +128 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-helpers.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-tools.test.js +435 -0
- package/dist/src/tools/mercadolibre/__tests__/product-ads-tools.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/reconcile-buyer-data.test.js +31 -0
- package/dist/src/tools/mercadolibre/__tests__/reconcile-buyer-data.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/reconcile-claim-data.test.js +36 -0
- package/dist/src/tools/mercadolibre/__tests__/reconcile-claim-data.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/__tests__/validate-connection.test.js +205 -0
- package/dist/src/tools/mercadolibre/__tests__/validate-connection.test.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-billing-provisions-by-order.js +313 -0
- package/dist/src/tools/mercadolibre/get-billing-provisions-by-order.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-bundle-context-by-item.js +176 -0
- package/dist/src/tools/mercadolibre/get-bundle-context-by-item.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-full-storage-charges.js +183 -0
- package/dist/src/tools/mercadolibre/get-full-storage-charges.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-order-billing-info.js +189 -0
- package/dist/src/tools/mercadolibre/get-order-billing-info.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-pack-context-by-order.js +150 -0
- package/dist/src/tools/mercadolibre/get-pack-context-by-order.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-payment-details.js +322 -0
- package/dist/src/tools/mercadolibre/get-payment-details.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-product-ads-ad-group-ads.js +144 -0
- package/dist/src/tools/mercadolibre/get-product-ads-ad-group-ads.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-product-ads-advertisers.js +59 -0
- package/dist/src/tools/mercadolibre/get-product-ads-advertisers.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-shipping-quote-by-declared-dimensions.js +104 -0
- package/dist/src/tools/mercadolibre/get-shipping-quote-by-declared-dimensions.js.map +7 -0
- package/dist/src/tools/mercadolibre/index.js +32 -0
- package/dist/src/tools/mercadolibre/index.js.map +2 -2
- package/dist/src/tools/mercadolibre/product-ads-helpers.js +130 -0
- package/dist/src/tools/mercadolibre/product-ads-helpers.js.map +7 -0
- package/dist/src/tools/mercadolibre/reconcile-buyer-data.js +27 -0
- package/dist/src/tools/mercadolibre/reconcile-buyer-data.js.map +7 -0
- package/dist/src/tools/mercadolibre/reconcile-claim-data.js +46 -0
- package/dist/src/tools/mercadolibre/reconcile-claim-data.js.map +7 -0
- package/dist/src/tools/mercadolibre/reconcile-return-data.js +25 -0
- package/dist/src/tools/mercadolibre/reconcile-return-data.js.map +7 -0
- package/dist/src/tools/mercadolibre/search-product-ads-ad-groups.js +162 -0
- package/dist/src/tools/mercadolibre/search-product-ads-ad-groups.js.map +7 -0
- package/dist/src/tools/mercadolibre/search-product-ads-ads.js +216 -0
- package/dist/src/tools/mercadolibre/search-product-ads-ads.js.map +7 -0
- package/dist/src/tools/mercadolibre/search-product-ads-campaigns.js +116 -0
- package/dist/src/tools/mercadolibre/search-product-ads-campaigns.js.map +7 -0
- package/dist/src/tools/mercadolibre/validate-connection.js +40 -12
- package/dist/src/tools/mercadolibre/validate-connection.js.map +2 -2
- package/dist/tests/meli/mercadolibre-billing-provisions.test.js +378 -0
- package/dist/tests/meli/mercadolibre-billing-provisions.test.js.map +2 -2
- package/dist/tests/meli/mercadolibre-order-billing-info-surface.test.js +123 -0
- package/dist/tests/meli/mercadolibre-order-billing-info-surface.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-payment-details.test.js +356 -0
- package/dist/tests/meli/mercadolibre-payment-details.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-payments.test.js +62 -0
- package/dist/tests/meli/mercadolibre-payments.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-product-ads-ad-groups-surface.test.js +90 -0
- package/dist/tests/meli/mercadolibre-product-ads-ad-groups-surface.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-product-ads-campaigns-surface.test.js +72 -0
- package/dist/tests/meli/mercadolibre-product-ads-campaigns-surface.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-tool-handlers-pack-kit-shipping.test.js +400 -0
- package/dist/tests/meli/mercadolibre-tool-handlers-pack-kit-shipping.test.js.map +7 -0
- package/dist/tests/meli/mercadolibre-tool-handlers-small.test.js +31 -12
- package/dist/tests/meli/mercadolibre-tool-handlers-small.test.js.map +2 -2
- package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js +1 -1
- package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/google-ads/report-utils.js +0 -78
- package/dist/src/google-ads/report-utils.js.map +0 -7
- package/dist/src/search-console/search-console-utils.js +0 -275
- package/dist/src/search-console/search-console-utils.js.map +0 -7
- package/dist/src/services/vtex/__tests__/vtex-catalog-write-batch.test.js +0 -165
- package/dist/src/services/vtex/__tests__/vtex-catalog-write-batch.test.js.map +0 -7
- package/dist/src/tools/vtex/__tests__/catalog-admin-batch.test.js +0 -233
- package/dist/src/tools/vtex/__tests__/catalog-admin-batch.test.js.map +0 -7
- package/dist/src/tools/vtex/catalog-admin-batch.js +0 -298
- package/dist/src/tools/vtex/catalog-admin-batch.js.map +0 -7
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
import { object } from "mcp-use/server";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import {
|
|
4
|
-
executeCatalogBatch,
|
|
5
|
-
planCatalogBatch
|
|
6
|
-
} from "../../services/vtex/vtex-catalog-write.js";
|
|
7
|
-
import {
|
|
8
|
-
classifyVtexWriteRisk,
|
|
9
|
-
getPreviewRequirements
|
|
10
|
-
} from "../../services/vtex/vtex-write.js";
|
|
11
|
-
import {
|
|
12
|
-
buildBatchExecutionWarnings,
|
|
13
|
-
buildPreflightSummary,
|
|
14
|
-
buildPreviewResponse,
|
|
15
|
-
buildWriteSuccessResponse,
|
|
16
|
-
confirmationNoteSchemaField,
|
|
17
|
-
confirmationSchemaField,
|
|
18
|
-
createBatchPreviewId,
|
|
19
|
-
createBatchPreviewToken,
|
|
20
|
-
decodeBatchPreviewToken,
|
|
21
|
-
handleVtexWriteError,
|
|
22
|
-
requireExplicitConfirmation,
|
|
23
|
-
resolveVtexWriteProfile,
|
|
24
|
-
vtexProfileIdSchemaField
|
|
25
|
-
} from "./write-helpers.js";
|
|
26
|
-
const updateProductOperationSchema = z.object({
|
|
27
|
-
type: z.literal("update_product_basic_fields"),
|
|
28
|
-
productId: z.string().trim().min(1).describe("VTEX product identifier."),
|
|
29
|
-
updates: z.object({
|
|
30
|
-
name: z.string().optional(),
|
|
31
|
-
categoryId: z.number().int().positive().optional(),
|
|
32
|
-
brandId: z.number().int().positive().optional(),
|
|
33
|
-
description: z.string().optional(),
|
|
34
|
-
descriptionShort: z.string().optional(),
|
|
35
|
-
title: z.string().optional(),
|
|
36
|
-
linkId: z.string().optional(),
|
|
37
|
-
refId: z.string().optional(),
|
|
38
|
-
isVisible: z.boolean().optional(),
|
|
39
|
-
isActive: z.boolean().optional(),
|
|
40
|
-
keyWords: z.string().optional(),
|
|
41
|
-
releaseDate: z.string().optional(),
|
|
42
|
-
metaTagDescription: z.string().optional(),
|
|
43
|
-
showWithoutStock: z.boolean().optional()
|
|
44
|
-
}).refine((value) => Object.values(value).some((entry) => entry !== void 0), {
|
|
45
|
-
message: "At least one product field must be provided."
|
|
46
|
-
})
|
|
47
|
-
});
|
|
48
|
-
const updateSkuOperationSchema = z.object({
|
|
49
|
-
type: z.literal("update_sku_basic_fields"),
|
|
50
|
-
skuId: z.string().trim().min(1).describe("VTEX SKU identifier."),
|
|
51
|
-
updates: z.object({
|
|
52
|
-
name: z.string().optional(),
|
|
53
|
-
refId: z.string().optional(),
|
|
54
|
-
ean: z.string().optional(),
|
|
55
|
-
packagedHeight: z.number().nonnegative().optional(),
|
|
56
|
-
packagedLength: z.number().nonnegative().optional(),
|
|
57
|
-
packagedWidth: z.number().nonnegative().optional(),
|
|
58
|
-
packagedWeightKg: z.number().nonnegative().optional(),
|
|
59
|
-
height: z.number().nonnegative().optional(),
|
|
60
|
-
length: z.number().nonnegative().optional(),
|
|
61
|
-
width: z.number().nonnegative().optional(),
|
|
62
|
-
weightKg: z.number().nonnegative().optional(),
|
|
63
|
-
measurementUnit: z.string().optional(),
|
|
64
|
-
unitMultiplier: z.number().positive().optional(),
|
|
65
|
-
manufacturerCode: z.string().optional(),
|
|
66
|
-
commercialConditionId: z.number().int().positive().optional(),
|
|
67
|
-
isActive: z.boolean().optional(),
|
|
68
|
-
activateIfPossible: z.boolean().optional()
|
|
69
|
-
}).refine((value) => Object.values(value).some((entry) => entry !== void 0), {
|
|
70
|
-
message: "At least one SKU field must be provided."
|
|
71
|
-
})
|
|
72
|
-
});
|
|
73
|
-
const replaceSkuEansOperationSchema = z.object({
|
|
74
|
-
type: z.literal("replace_sku_eans"),
|
|
75
|
-
skuId: z.string().trim().min(1).describe("VTEX SKU identifier."),
|
|
76
|
-
eans: z.array(z.string().trim()).describe("Final list of EAN values to keep on the SKU.")
|
|
77
|
-
});
|
|
78
|
-
const catalogAdminBatchSchema = z.object({
|
|
79
|
-
profileId: vtexProfileIdSchemaField,
|
|
80
|
-
mode: z.enum(["preview", "apply"]).default("preview"),
|
|
81
|
-
requestedRiskLevel: z.enum(["medium", "high"]).default("medium").describe("Requested risk level. Medium may escalate to high after preflight."),
|
|
82
|
-
confirmed: confirmationSchemaField,
|
|
83
|
-
confirmationNote: confirmationNoteSchemaField,
|
|
84
|
-
previewId: z.string().trim().min(1).optional().describe("Preview identifier returned by preview mode for high-risk apply."),
|
|
85
|
-
previewToken: z.string().trim().min(1).optional().describe("Opaque preview token returned by preview mode. If provided, apply validates it."),
|
|
86
|
-
operations: z.array(
|
|
87
|
-
z.discriminatedUnion("type", [
|
|
88
|
-
updateProductOperationSchema,
|
|
89
|
-
updateSkuOperationSchema,
|
|
90
|
-
replaceSkuEansOperationSchema
|
|
91
|
-
])
|
|
92
|
-
).min(1).max(50).describe("Catalog write operations to execute in order.")
|
|
93
|
-
});
|
|
94
|
-
function buildInvalidApplyPayload(params) {
|
|
95
|
-
return object({
|
|
96
|
-
success: false,
|
|
97
|
-
error_code: "INVALID_OPERATION",
|
|
98
|
-
message: params.message,
|
|
99
|
-
operation: "catalog_admin_batch",
|
|
100
|
-
risk_level: params.effectiveRiskLevel,
|
|
101
|
-
confirmation_requirements: {
|
|
102
|
-
required: true,
|
|
103
|
-
reason: "explicit_confirmation_required",
|
|
104
|
-
preview_id: params.previewId
|
|
105
|
-
},
|
|
106
|
-
preview_requirements: getPreviewRequirements("high"),
|
|
107
|
-
details: params.details
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
function toBatchOperations(operations) {
|
|
111
|
-
return operations.map((operation) => {
|
|
112
|
-
if (operation.type === "update_product_basic_fields") {
|
|
113
|
-
return {
|
|
114
|
-
type: operation.type,
|
|
115
|
-
productId: operation.productId,
|
|
116
|
-
updates: operation.updates
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
if (operation.type === "update_sku_basic_fields") {
|
|
120
|
-
return {
|
|
121
|
-
type: operation.type,
|
|
122
|
-
skuId: operation.skuId,
|
|
123
|
-
updates: operation.updates
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
type: operation.type,
|
|
128
|
-
skuId: operation.skuId,
|
|
129
|
-
eans: operation.eans
|
|
130
|
-
};
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
async function catalogAdminBatchHandler({
|
|
134
|
-
profileId,
|
|
135
|
-
mode,
|
|
136
|
-
requestedRiskLevel,
|
|
137
|
-
confirmed,
|
|
138
|
-
confirmationNote,
|
|
139
|
-
previewId,
|
|
140
|
-
previewToken,
|
|
141
|
-
operations
|
|
142
|
-
}) {
|
|
143
|
-
try {
|
|
144
|
-
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
145
|
-
if (!profileResolution.ok) {
|
|
146
|
-
return profileResolution.response;
|
|
147
|
-
}
|
|
148
|
-
const resolvedProfileId = profileResolution.value.profileId;
|
|
149
|
-
const normalizedOperations = toBatchOperations(operations);
|
|
150
|
-
const plan = await planCatalogBatch(resolvedProfileId, normalizedOperations);
|
|
151
|
-
const preflightSummary = buildPreflightSummary({
|
|
152
|
-
entities: plan.preflight.entities,
|
|
153
|
-
entityTypes: plan.preflight.entityTypes,
|
|
154
|
-
destructive: plan.preflight.destructive,
|
|
155
|
-
warnings: plan.warnings
|
|
156
|
-
});
|
|
157
|
-
const riskEvaluation = classifyVtexWriteRisk({
|
|
158
|
-
requestedRiskLevel,
|
|
159
|
-
preflight: plan.preflight
|
|
160
|
-
});
|
|
161
|
-
const effectiveRiskLevel = riskEvaluation.effective_risk_level;
|
|
162
|
-
const generatedPreviewId = createBatchPreviewId({
|
|
163
|
-
profileId: resolvedProfileId,
|
|
164
|
-
operation: "catalog_admin_batch",
|
|
165
|
-
requestedRiskLevel,
|
|
166
|
-
effectiveRiskLevel,
|
|
167
|
-
operations: normalizedOperations,
|
|
168
|
-
preflight: plan.preflight
|
|
169
|
-
});
|
|
170
|
-
const generatedPreviewToken = createBatchPreviewToken({
|
|
171
|
-
preview_id: generatedPreviewId,
|
|
172
|
-
profile_id: resolvedProfileId,
|
|
173
|
-
operation: "catalog_admin_batch",
|
|
174
|
-
requested_risk_level: requestedRiskLevel,
|
|
175
|
-
effective_risk_level: effectiveRiskLevel,
|
|
176
|
-
escalation_reasons: riskEvaluation.escalation_reasons,
|
|
177
|
-
operation_count: normalizedOperations.length
|
|
178
|
-
});
|
|
179
|
-
if (mode === "preview") {
|
|
180
|
-
return object(
|
|
181
|
-
buildPreviewResponse({
|
|
182
|
-
profileId: resolvedProfileId,
|
|
183
|
-
operation: "catalog_admin_batch",
|
|
184
|
-
requestedRiskLevel,
|
|
185
|
-
riskLevel: effectiveRiskLevel,
|
|
186
|
-
escalated: riskEvaluation.escalated,
|
|
187
|
-
escalationReasons: riskEvaluation.escalation_reasons,
|
|
188
|
-
previewId: generatedPreviewId,
|
|
189
|
-
message: effectiveRiskLevel === "high" ? "High-risk batch preview generated. Confirm explicitly before apply." : "Batch preflight preview generated.",
|
|
190
|
-
before: {
|
|
191
|
-
operations: plan.before
|
|
192
|
-
},
|
|
193
|
-
after: {
|
|
194
|
-
operations: plan.after
|
|
195
|
-
},
|
|
196
|
-
warnings: preflightSummary.warnings,
|
|
197
|
-
details: {
|
|
198
|
-
mode: "preview",
|
|
199
|
-
preview_id: generatedPreviewId,
|
|
200
|
-
preview_token: generatedPreviewToken,
|
|
201
|
-
operation_count: normalizedOperations.length,
|
|
202
|
-
preflight: preflightSummary
|
|
203
|
-
},
|
|
204
|
-
impactSummary: {
|
|
205
|
-
entities: preflightSummary.entities,
|
|
206
|
-
entity_types: plan.impactedEntityTypes,
|
|
207
|
-
destructive: preflightSummary.destructive
|
|
208
|
-
}
|
|
209
|
-
})
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
if (effectiveRiskLevel === "high") {
|
|
213
|
-
if (!previewId) {
|
|
214
|
-
return buildInvalidApplyPayload({
|
|
215
|
-
message: "High-risk batch apply requires previewId from preview mode.",
|
|
216
|
-
effectiveRiskLevel,
|
|
217
|
-
details: {
|
|
218
|
-
expected_preview_id: generatedPreviewId
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
if (previewId !== generatedPreviewId) {
|
|
223
|
-
return buildInvalidApplyPayload({
|
|
224
|
-
message: "previewId does not match current batch plan. Regenerate preview before apply.",
|
|
225
|
-
effectiveRiskLevel,
|
|
226
|
-
previewId,
|
|
227
|
-
details: {
|
|
228
|
-
expected_preview_id: generatedPreviewId,
|
|
229
|
-
received_preview_id: previewId
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
if (previewToken) {
|
|
234
|
-
const parsedToken = decodeBatchPreviewToken(previewToken);
|
|
235
|
-
if (!parsedToken || parsedToken.preview_id !== previewId || parsedToken.profile_id !== resolvedProfileId || parsedToken.operation !== "catalog_admin_batch" || parsedToken.operation_count !== normalizedOperations.length) {
|
|
236
|
-
return buildInvalidApplyPayload({
|
|
237
|
-
message: "Invalid previewToken for this batch apply request.",
|
|
238
|
-
effectiveRiskLevel,
|
|
239
|
-
previewId
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
const confirmationResponse = requireExplicitConfirmation(confirmed, "catalog_admin_batch", {
|
|
244
|
-
preview_id: previewId
|
|
245
|
-
});
|
|
246
|
-
if (confirmationResponse) {
|
|
247
|
-
return confirmationResponse;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
const execution = await executeCatalogBatch(resolvedProfileId, normalizedOperations);
|
|
251
|
-
const warnings = buildBatchExecutionWarnings({
|
|
252
|
-
existingWarnings: preflightSummary.warnings,
|
|
253
|
-
successfulCount: execution.successful.length,
|
|
254
|
-
failedCount: execution.failed.length
|
|
255
|
-
});
|
|
256
|
-
return buildWriteSuccessResponse({
|
|
257
|
-
profileId: resolvedProfileId,
|
|
258
|
-
operation: "catalog_admin_batch",
|
|
259
|
-
requestedRiskLevel,
|
|
260
|
-
riskLevel: effectiveRiskLevel,
|
|
261
|
-
escalated: riskEvaluation.escalated,
|
|
262
|
-
escalationReasons: riskEvaluation.escalation_reasons,
|
|
263
|
-
confirmed: effectiveRiskLevel === "high" ? true : void 0,
|
|
264
|
-
confirmationNote,
|
|
265
|
-
message: execution.failed.length > 0 ? "Batch applied with partial failures. Review failed operations before retry." : "Batch applied successfully.",
|
|
266
|
-
before: {
|
|
267
|
-
operations: plan.before
|
|
268
|
-
},
|
|
269
|
-
after: {
|
|
270
|
-
operations: execution.successful
|
|
271
|
-
},
|
|
272
|
-
warnings,
|
|
273
|
-
details: {
|
|
274
|
-
mode: "apply",
|
|
275
|
-
preview_id: generatedPreviewId,
|
|
276
|
-
preview_token: generatedPreviewToken,
|
|
277
|
-
preflight: preflightSummary,
|
|
278
|
-
execution: {
|
|
279
|
-
successful_count: execution.successful.length,
|
|
280
|
-
failed_count: execution.failed.length,
|
|
281
|
-
failures: execution.failed
|
|
282
|
-
}
|
|
283
|
-
},
|
|
284
|
-
impactSummary: {
|
|
285
|
-
entities: preflightSummary.entities,
|
|
286
|
-
entity_types: plan.impactedEntityTypes,
|
|
287
|
-
destructive: preflightSummary.destructive
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
} catch (err) {
|
|
291
|
-
return handleVtexWriteError(err, "Failed to execute VTEX catalog admin batch");
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
export {
|
|
295
|
-
catalogAdminBatchHandler,
|
|
296
|
-
catalogAdminBatchSchema
|
|
297
|
-
};
|
|
298
|
-
//# sourceMappingURL=catalog-admin-batch.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/tools/vtex/catalog-admin-batch.ts"],
|
|
4
|
-
"sourcesContent": ["import { object } from \"mcp-use/server\";\nimport { z } from \"zod\";\n\nimport {\n executeCatalogBatch,\n planCatalogBatch,\n type VtexCatalogBatchOperation,\n} from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n classifyVtexWriteRisk,\n getPreviewRequirements,\n type VtexWriteRiskLevel,\n} from \"../../services/vtex/vtex-write.js\";\nimport {\n buildBatchExecutionWarnings,\n buildPreflightSummary,\n buildPreviewResponse,\n buildWriteSuccessResponse,\n confirmationNoteSchemaField,\n confirmationSchemaField,\n createBatchPreviewId,\n createBatchPreviewToken,\n decodeBatchPreviewToken,\n handleVtexWriteError,\n requireExplicitConfirmation,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nconst updateProductOperationSchema = z.object({\n type: z.literal(\"update_product_basic_fields\"),\n productId: z.string().trim().min(1).describe(\"VTEX product identifier.\"),\n updates: z\n .object({\n name: z.string().optional(),\n categoryId: z.number().int().positive().optional(),\n brandId: z.number().int().positive().optional(),\n description: z.string().optional(),\n descriptionShort: z.string().optional(),\n title: z.string().optional(),\n linkId: z.string().optional(),\n refId: z.string().optional(),\n isVisible: z.boolean().optional(),\n isActive: z.boolean().optional(),\n keyWords: z.string().optional(),\n releaseDate: z.string().optional(),\n metaTagDescription: z.string().optional(),\n showWithoutStock: z.boolean().optional(),\n })\n .refine((value) => Object.values(value).some((entry) => entry !== undefined), {\n message: \"At least one product field must be provided.\",\n }),\n});\n\nconst updateSkuOperationSchema = z.object({\n type: z.literal(\"update_sku_basic_fields\"),\n skuId: z.string().trim().min(1).describe(\"VTEX SKU identifier.\"),\n updates: z\n .object({\n name: z.string().optional(),\n refId: z.string().optional(),\n ean: z.string().optional(),\n packagedHeight: z.number().nonnegative().optional(),\n packagedLength: z.number().nonnegative().optional(),\n packagedWidth: z.number().nonnegative().optional(),\n packagedWeightKg: z.number().nonnegative().optional(),\n height: z.number().nonnegative().optional(),\n length: z.number().nonnegative().optional(),\n width: z.number().nonnegative().optional(),\n weightKg: z.number().nonnegative().optional(),\n measurementUnit: z.string().optional(),\n unitMultiplier: z.number().positive().optional(),\n manufacturerCode: z.string().optional(),\n commercialConditionId: z.number().int().positive().optional(),\n isActive: z.boolean().optional(),\n activateIfPossible: z.boolean().optional(),\n })\n .refine((value) => Object.values(value).some((entry) => entry !== undefined), {\n message: \"At least one SKU field must be provided.\",\n }),\n});\n\nconst replaceSkuEansOperationSchema = z.object({\n type: z.literal(\"replace_sku_eans\"),\n skuId: z.string().trim().min(1).describe(\"VTEX SKU identifier.\"),\n eans: z.array(z.string().trim()).describe(\"Final list of EAN values to keep on the SKU.\"),\n});\n\nexport const catalogAdminBatchSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n mode: z.enum([\"preview\", \"apply\"]).default(\"preview\"),\n requestedRiskLevel: z\n .enum([\"medium\", \"high\"])\n .default(\"medium\")\n .describe(\"Requested risk level. Medium may escalate to high after preflight.\"),\n confirmed: confirmationSchemaField,\n confirmationNote: confirmationNoteSchemaField,\n previewId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Preview identifier returned by preview mode for high-risk apply.\"),\n previewToken: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Opaque preview token returned by preview mode. If provided, apply validates it.\"),\n operations: z\n .array(\n z.discriminatedUnion(\"type\", [\n updateProductOperationSchema,\n updateSkuOperationSchema,\n replaceSkuEansOperationSchema,\n ])\n )\n .min(1)\n .max(50)\n .describe(\"Catalog write operations to execute in order.\"),\n});\n\nfunction buildInvalidApplyPayload(params: {\n message: string;\n effectiveRiskLevel: VtexWriteRiskLevel;\n previewId?: string;\n details?: Record<string, unknown>;\n}) {\n return object({\n success: false,\n error_code: \"INVALID_OPERATION\",\n message: params.message,\n operation: \"catalog_admin_batch\",\n risk_level: params.effectiveRiskLevel,\n confirmation_requirements: {\n required: true,\n reason: \"explicit_confirmation_required\",\n preview_id: params.previewId,\n },\n preview_requirements: getPreviewRequirements(\"high\"),\n details: params.details,\n });\n}\n\nfunction toBatchOperations(operations: z.infer<typeof catalogAdminBatchSchema>[\"operations\"]): VtexCatalogBatchOperation[] {\n return operations.map((operation) => {\n if (operation.type === \"update_product_basic_fields\") {\n return {\n type: operation.type,\n productId: operation.productId,\n updates: operation.updates,\n } as const;\n }\n\n if (operation.type === \"update_sku_basic_fields\") {\n return {\n type: operation.type,\n skuId: operation.skuId,\n updates: operation.updates,\n } as const;\n }\n\n return {\n type: operation.type,\n skuId: operation.skuId,\n eans: operation.eans,\n } as const;\n });\n}\n\nexport async function catalogAdminBatchHandler({\n profileId,\n mode,\n requestedRiskLevel,\n confirmed,\n confirmationNote,\n previewId,\n previewToken,\n operations,\n}: z.infer<typeof catalogAdminBatchSchema>) {\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 const normalizedOperations = toBatchOperations(operations);\n const plan = await planCatalogBatch(resolvedProfileId, normalizedOperations);\n\n const preflightSummary = buildPreflightSummary({\n entities: plan.preflight.entities,\n entityTypes: plan.preflight.entityTypes,\n destructive: plan.preflight.destructive,\n warnings: plan.warnings,\n });\n\n const riskEvaluation = classifyVtexWriteRisk({\n requestedRiskLevel,\n preflight: plan.preflight,\n });\n\n const effectiveRiskLevel = riskEvaluation.effective_risk_level;\n const generatedPreviewId = createBatchPreviewId({\n profileId: resolvedProfileId,\n operation: \"catalog_admin_batch\",\n requestedRiskLevel,\n effectiveRiskLevel,\n operations: normalizedOperations,\n preflight: plan.preflight,\n });\n\n const generatedPreviewToken = createBatchPreviewToken({\n preview_id: generatedPreviewId,\n profile_id: resolvedProfileId,\n operation: \"catalog_admin_batch\",\n requested_risk_level: requestedRiskLevel,\n effective_risk_level: effectiveRiskLevel,\n escalation_reasons: riskEvaluation.escalation_reasons,\n operation_count: normalizedOperations.length,\n });\n\n if (mode === \"preview\") {\n return object(\n buildPreviewResponse({\n profileId: resolvedProfileId,\n operation: \"catalog_admin_batch\",\n requestedRiskLevel,\n riskLevel: effectiveRiskLevel,\n escalated: riskEvaluation.escalated,\n escalationReasons: riskEvaluation.escalation_reasons,\n previewId: generatedPreviewId,\n message:\n effectiveRiskLevel === \"high\"\n ? \"High-risk batch preview generated. Confirm explicitly before apply.\"\n : \"Batch preflight preview generated.\",\n before: {\n operations: plan.before,\n },\n after: {\n operations: plan.after,\n },\n warnings: preflightSummary.warnings,\n details: {\n mode: \"preview\",\n preview_id: generatedPreviewId,\n preview_token: generatedPreviewToken,\n operation_count: normalizedOperations.length,\n preflight: preflightSummary,\n },\n impactSummary: {\n entities: preflightSummary.entities,\n entity_types: plan.impactedEntityTypes,\n destructive: preflightSummary.destructive,\n },\n })\n );\n }\n\n if (effectiveRiskLevel === \"high\") {\n if (!previewId) {\n return buildInvalidApplyPayload({\n message: \"High-risk batch apply requires previewId from preview mode.\",\n effectiveRiskLevel,\n details: {\n expected_preview_id: generatedPreviewId,\n },\n });\n }\n\n if (previewId !== generatedPreviewId) {\n return buildInvalidApplyPayload({\n message: \"previewId does not match current batch plan. Regenerate preview before apply.\",\n effectiveRiskLevel,\n previewId,\n details: {\n expected_preview_id: generatedPreviewId,\n received_preview_id: previewId,\n },\n });\n }\n\n if (previewToken) {\n const parsedToken = decodeBatchPreviewToken(previewToken);\n if (\n !parsedToken ||\n parsedToken.preview_id !== previewId ||\n parsedToken.profile_id !== resolvedProfileId ||\n parsedToken.operation !== \"catalog_admin_batch\" ||\n parsedToken.operation_count !== normalizedOperations.length\n ) {\n return buildInvalidApplyPayload({\n message: \"Invalid previewToken for this batch apply request.\",\n effectiveRiskLevel,\n previewId,\n });\n }\n }\n\n const confirmationResponse = requireExplicitConfirmation(confirmed, \"catalog_admin_batch\", {\n preview_id: previewId,\n });\n\n if (confirmationResponse) {\n return confirmationResponse;\n }\n }\n\n const execution = await executeCatalogBatch(resolvedProfileId, normalizedOperations);\n const warnings = buildBatchExecutionWarnings({\n existingWarnings: preflightSummary.warnings,\n successfulCount: execution.successful.length,\n failedCount: execution.failed.length,\n });\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"catalog_admin_batch\",\n requestedRiskLevel,\n riskLevel: effectiveRiskLevel,\n escalated: riskEvaluation.escalated,\n escalationReasons: riskEvaluation.escalation_reasons,\n confirmed: effectiveRiskLevel === \"high\" ? true : undefined,\n confirmationNote,\n message:\n execution.failed.length > 0\n ? \"Batch applied with partial failures. Review failed operations before retry.\"\n : \"Batch applied successfully.\",\n before: {\n operations: plan.before,\n },\n after: {\n operations: execution.successful,\n },\n warnings,\n details: {\n mode: \"apply\",\n preview_id: generatedPreviewId,\n preview_token: generatedPreviewToken,\n preflight: preflightSummary,\n execution: {\n successful_count: execution.successful.length,\n failed_count: execution.failed.length,\n failures: execution.failed,\n },\n },\n impactSummary: {\n entities: preflightSummary.entities,\n entity_types: plan.impactedEntityTypes,\n destructive: preflightSummary.destructive,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, \"Failed to execute VTEX catalog admin batch\");\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|