@yoryoboy/bi-mcp 1.13.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.js +30 -0
- package/dist/index.js.map +2 -2
- package/dist/mcp-use.json +2 -2
- package/dist/src/services/vtex/__tests__/vtex-payments.test.js +95 -0
- package/dist/src/services/vtex/__tests__/vtex-payments.test.js.map +7 -0
- package/dist/src/services/vtex/vtex-payments-write.js +64 -0
- package/dist/src/services/vtex/vtex-payments-write.js.map +7 -0
- package/dist/src/services/vtex/vtex-payments.js +43 -0
- package/dist/src/services/vtex/vtex-payments.js.map +7 -0
- package/dist/src/tools/vtex/__tests__/commercial-condition-references.test.js +14 -0
- package/dist/src/tools/vtex/__tests__/commercial-condition-references.test.js.map +7 -0
- package/dist/src/tools/vtex/__tests__/commercial-conditions.test.js +276 -0
- package/dist/src/tools/vtex/__tests__/commercial-conditions.test.js.map +7 -0
- package/dist/src/tools/vtex/__tests__/payment-rules.test.js +253 -0
- package/dist/src/tools/vtex/__tests__/payment-rules.test.js.map +7 -0
- package/dist/src/tools/vtex/catalog-admin-products-skus.js +3 -1
- package/dist/src/tools/vtex/catalog-admin-products-skus.js.map +2 -2
- package/dist/src/tools/vtex/commercial-conditions.js +220 -0
- package/dist/src/tools/vtex/commercial-conditions.js.map +7 -0
- package/dist/src/tools/vtex/create-sku.js +3 -1
- package/dist/src/tools/vtex/create-sku.js.map +2 -2
- package/dist/src/tools/vtex/index.js +2 -0
- package/dist/src/tools/vtex/index.js.map +2 -2
- package/dist/src/tools/vtex/payment-rules.js +229 -0
- package/dist/src/tools/vtex/payment-rules.js.map +7 -0
- package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js +26 -0
- package/dist/tests/vtex/vtex-commercial-conditions-docs.test.js.map +7 -0
- package/dist/tests/vtex/vtex-commercial-conditions-surface.test.js +42 -0
- package/dist/tests/vtex/vtex-commercial-conditions-surface.test.js.map +7 -0
- package/dist/tests/vtex/vtex-commercial-conditions-workflow.test.js +190 -0
- package/dist/tests/vtex/vtex-commercial-conditions-workflow.test.js.map +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
const objectMock = vi.fn((value) => ({ kind: "object", value }));
|
|
4
|
+
const errorMock = vi.fn((message) => ({ kind: "error", message }));
|
|
5
|
+
const listPaymentRulesMock = vi.fn();
|
|
6
|
+
const getPaymentRuleMock = vi.fn();
|
|
7
|
+
const createPaymentRuleMock = vi.fn();
|
|
8
|
+
const updatePaymentRuleMock = vi.fn();
|
|
9
|
+
const deletePaymentRuleMock = vi.fn();
|
|
10
|
+
const resolveVtexWriteProfileMock = vi.fn();
|
|
11
|
+
const buildWriteSuccessResponseMock = vi.fn((value) => ({ kind: "write", value }));
|
|
12
|
+
const handleVtexWriteErrorMock = vi.fn((_err, fallback) => ({ kind: "error", message: fallback }));
|
|
13
|
+
const requireExplicitConfirmationMock = vi.fn();
|
|
14
|
+
vi.mock("mcp-use/server", () => ({
|
|
15
|
+
object: objectMock,
|
|
16
|
+
error: errorMock
|
|
17
|
+
}));
|
|
18
|
+
vi.mock("../../../services/vtex/vtex-payments.js", () => ({
|
|
19
|
+
listPaymentRules: listPaymentRulesMock,
|
|
20
|
+
getPaymentRule: getPaymentRuleMock
|
|
21
|
+
}));
|
|
22
|
+
vi.mock("../../../services/vtex/vtex-payments-write.js", () => ({
|
|
23
|
+
createPaymentRule: createPaymentRuleMock,
|
|
24
|
+
updatePaymentRule: updatePaymentRuleMock,
|
|
25
|
+
deletePaymentRule: deletePaymentRuleMock
|
|
26
|
+
}));
|
|
27
|
+
vi.mock("../write-helpers.js", () => ({
|
|
28
|
+
confirmationSchemaField: z.boolean().optional().describe("confirmed"),
|
|
29
|
+
resolveVtexWriteProfile: resolveVtexWriteProfileMock,
|
|
30
|
+
buildWriteSuccessResponse: buildWriteSuccessResponseMock,
|
|
31
|
+
handleVtexWriteError: handleVtexWriteErrorMock,
|
|
32
|
+
requireExplicitConfirmation: requireExplicitConfirmationMock
|
|
33
|
+
}));
|
|
34
|
+
const module = await import("../payment-rules.js");
|
|
35
|
+
describe("vtex_payment_rules tool", () => {
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
vi.clearAllMocks();
|
|
38
|
+
resolveVtexWriteProfileMock.mockResolvedValue({
|
|
39
|
+
ok: true,
|
|
40
|
+
value: { profileId: "profile-1" }
|
|
41
|
+
});
|
|
42
|
+
requireExplicitConfirmationMock.mockReturnValue(null);
|
|
43
|
+
});
|
|
44
|
+
it("requires profileId and validates payment rule action payloads", () => {
|
|
45
|
+
expect(() => module.paymentRulesSchema.parse({ action: "list" })).toThrow();
|
|
46
|
+
expect(
|
|
47
|
+
() => module.paymentRulesSchema.parse({
|
|
48
|
+
action: "create",
|
|
49
|
+
profileId: "profile-1",
|
|
50
|
+
commercialConditionId: 10,
|
|
51
|
+
paymentSystem: "2"
|
|
52
|
+
})
|
|
53
|
+
).toThrow(/installments/i);
|
|
54
|
+
expect(
|
|
55
|
+
module.paymentRulesSchema.parse({
|
|
56
|
+
action: "create",
|
|
57
|
+
profileId: "profile-1",
|
|
58
|
+
commercialConditionId: 10,
|
|
59
|
+
paymentSystem: "2",
|
|
60
|
+
salesChannel: "1",
|
|
61
|
+
restrictedByCondition: true,
|
|
62
|
+
installments: [
|
|
63
|
+
{ count: 9, interest: false },
|
|
64
|
+
{ count: 12, interest: true }
|
|
65
|
+
]
|
|
66
|
+
})
|
|
67
|
+
).toEqual({
|
|
68
|
+
action: "create",
|
|
69
|
+
profileId: "profile-1",
|
|
70
|
+
commercialConditionId: 10,
|
|
71
|
+
paymentSystem: "2",
|
|
72
|
+
salesChannel: "1",
|
|
73
|
+
restrictedByCondition: true,
|
|
74
|
+
installments: [
|
|
75
|
+
{ count: 9, interest: false },
|
|
76
|
+
{ count: 12, interest: true }
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
expect(
|
|
80
|
+
module.paymentRulesSchema.parse({
|
|
81
|
+
action: "delete",
|
|
82
|
+
profileId: "profile-1",
|
|
83
|
+
ruleId: 77,
|
|
84
|
+
confirmed: true
|
|
85
|
+
})
|
|
86
|
+
).toEqual({
|
|
87
|
+
action: "delete",
|
|
88
|
+
profileId: "profile-1",
|
|
89
|
+
ruleId: 77,
|
|
90
|
+
confirmed: true
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
it("returns compact list responses for payment rules", async () => {
|
|
94
|
+
listPaymentRulesMock.mockResolvedValue([
|
|
95
|
+
{
|
|
96
|
+
id: 51,
|
|
97
|
+
commercialConditionId: 10,
|
|
98
|
+
paymentSystem: "2",
|
|
99
|
+
salesChannel: "1",
|
|
100
|
+
restrictedByCondition: true
|
|
101
|
+
}
|
|
102
|
+
]);
|
|
103
|
+
const result = await module.paymentRulesHandler({
|
|
104
|
+
action: "list",
|
|
105
|
+
profileId: "profile-1",
|
|
106
|
+
commercialConditionId: 10
|
|
107
|
+
});
|
|
108
|
+
expect(listPaymentRulesMock).toHaveBeenCalledWith("profile-1", { commercialConditionId: 10 });
|
|
109
|
+
expect(result).toEqual({
|
|
110
|
+
kind: "object",
|
|
111
|
+
value: {
|
|
112
|
+
metadata: {
|
|
113
|
+
total: 1,
|
|
114
|
+
profile_id: "profile-1",
|
|
115
|
+
filters: { commercial_condition_id: 10 }
|
|
116
|
+
},
|
|
117
|
+
payment_rules_schema: [
|
|
118
|
+
"id",
|
|
119
|
+
"commercial_condition_id",
|
|
120
|
+
"payment_system",
|
|
121
|
+
"sales_channel",
|
|
122
|
+
"restricted_by_condition"
|
|
123
|
+
],
|
|
124
|
+
payment_rules: [[51, 10, "2", "1", true]]
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
it("gets, creates, updates and deletes payment rules through the service layer", async () => {
|
|
129
|
+
getPaymentRuleMock.mockResolvedValue({
|
|
130
|
+
id: 51,
|
|
131
|
+
commercialConditionId: 10,
|
|
132
|
+
paymentSystem: "2",
|
|
133
|
+
installments: [{ count: 9, interest: false }]
|
|
134
|
+
});
|
|
135
|
+
createPaymentRuleMock.mockResolvedValue({ id: 51, paymentSystem: "2" });
|
|
136
|
+
updatePaymentRuleMock.mockResolvedValue({ id: 51, paymentSystem: "2" });
|
|
137
|
+
deletePaymentRuleMock.mockResolvedValue(void 0);
|
|
138
|
+
const fetched = await module.paymentRulesHandler({
|
|
139
|
+
action: "get",
|
|
140
|
+
profileId: "profile-1",
|
|
141
|
+
ruleId: 51
|
|
142
|
+
});
|
|
143
|
+
const created = await module.paymentRulesHandler({
|
|
144
|
+
action: "create",
|
|
145
|
+
profileId: "profile-1",
|
|
146
|
+
commercialConditionId: 10,
|
|
147
|
+
paymentSystem: "2",
|
|
148
|
+
installments: [{ count: 9, interest: false }]
|
|
149
|
+
});
|
|
150
|
+
const updated = await module.paymentRulesHandler({
|
|
151
|
+
action: "update",
|
|
152
|
+
profileId: "profile-1",
|
|
153
|
+
ruleId: 51,
|
|
154
|
+
installments: [{ count: 12, interest: true }]
|
|
155
|
+
});
|
|
156
|
+
const deleted = await module.paymentRulesHandler({
|
|
157
|
+
action: "delete",
|
|
158
|
+
profileId: "profile-1",
|
|
159
|
+
ruleId: 51,
|
|
160
|
+
confirmed: true
|
|
161
|
+
});
|
|
162
|
+
expect(getPaymentRuleMock).toHaveBeenCalledWith("profile-1", 51);
|
|
163
|
+
expect(fetched).toEqual({
|
|
164
|
+
kind: "object",
|
|
165
|
+
value: {
|
|
166
|
+
profile_id: "profile-1",
|
|
167
|
+
rule_id: 51,
|
|
168
|
+
payment_rule: {
|
|
169
|
+
id: 51,
|
|
170
|
+
commercial_condition_id: 10,
|
|
171
|
+
payment_system: "2",
|
|
172
|
+
installments: [{ count: 9, interest: false }]
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
expect(createPaymentRuleMock).toHaveBeenCalledWith("profile-1", {
|
|
177
|
+
commercialConditionId: 10,
|
|
178
|
+
paymentSystem: "2",
|
|
179
|
+
installments: [{ count: 9, interest: false }]
|
|
180
|
+
});
|
|
181
|
+
expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(
|
|
182
|
+
1,
|
|
183
|
+
expect.objectContaining({
|
|
184
|
+
operation: "payment_rules_create",
|
|
185
|
+
resourceId: "51",
|
|
186
|
+
message: "Payment rule created. Review checkout installments and condition targeting to confirm the expected shopper experience.",
|
|
187
|
+
after: { id: 51, paymentSystem: "2" }
|
|
188
|
+
})
|
|
189
|
+
);
|
|
190
|
+
expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(
|
|
191
|
+
2,
|
|
192
|
+
expect.objectContaining({
|
|
193
|
+
operation: "payment_rules_update",
|
|
194
|
+
resourceId: "51",
|
|
195
|
+
message: "Payment rule updated. Review checkout installments to confirm the expected payment options.",
|
|
196
|
+
after: { id: 51, paymentSystem: "2" }
|
|
197
|
+
})
|
|
198
|
+
);
|
|
199
|
+
expect(updatePaymentRuleMock).toHaveBeenCalledWith("profile-1", 51, {
|
|
200
|
+
installments: [{ count: 12, interest: true }]
|
|
201
|
+
});
|
|
202
|
+
expect(deletePaymentRuleMock).toHaveBeenCalledWith("profile-1", 51);
|
|
203
|
+
expect(created).toMatchObject({
|
|
204
|
+
kind: "write",
|
|
205
|
+
value: {
|
|
206
|
+
operation: "payment_rules_create",
|
|
207
|
+
riskLevel: "medium",
|
|
208
|
+
message: "Payment rule created. Review checkout installments and condition targeting to confirm the expected shopper experience."
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
expect(updated).toMatchObject({
|
|
212
|
+
kind: "write",
|
|
213
|
+
value: {
|
|
214
|
+
operation: "payment_rules_update",
|
|
215
|
+
riskLevel: "medium",
|
|
216
|
+
message: "Payment rule updated. Review checkout installments to confirm the expected payment options."
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
expect(deleted).toMatchObject({
|
|
220
|
+
kind: "write",
|
|
221
|
+
value: {
|
|
222
|
+
operation: "payment_rules_delete",
|
|
223
|
+
riskLevel: "high",
|
|
224
|
+
warnings: [
|
|
225
|
+
"Deleting a payment rule can immediately remove installment options from checkout for affected shoppers."
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
expect(JSON.stringify(created)).not.toContain("sandbox");
|
|
230
|
+
expect(JSON.stringify(created)).not.toContain("production");
|
|
231
|
+
expect(JSON.stringify(created)).not.toContain("legacy");
|
|
232
|
+
expect(JSON.stringify(updated)).not.toContain("sandbox");
|
|
233
|
+
expect(JSON.stringify(updated)).not.toContain("production");
|
|
234
|
+
expect(JSON.stringify(updated)).not.toContain("legacy");
|
|
235
|
+
});
|
|
236
|
+
it("requires explicit confirmation before deleting a payment rule", async () => {
|
|
237
|
+
requireExplicitConfirmationMock.mockReturnValueOnce({
|
|
238
|
+
kind: "object",
|
|
239
|
+
value: { success: false, risk_level: "high" }
|
|
240
|
+
});
|
|
241
|
+
const result = await module.paymentRulesHandler({
|
|
242
|
+
action: "delete",
|
|
243
|
+
profileId: "profile-1",
|
|
244
|
+
ruleId: 51
|
|
245
|
+
});
|
|
246
|
+
expect(deletePaymentRuleMock).not.toHaveBeenCalled();
|
|
247
|
+
expect(result).toEqual({
|
|
248
|
+
kind: "object",
|
|
249
|
+
value: { success: false, risk_level: "high" }
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
//# sourceMappingURL=payment-rules.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/tools/vtex/__tests__/payment-rules.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nconst objectMock = vi.fn((value) => ({ kind: \"object\", value }));\nconst errorMock = vi.fn((message) => ({ kind: \"error\", message }));\nconst listPaymentRulesMock = vi.fn();\nconst getPaymentRuleMock = vi.fn();\nconst createPaymentRuleMock = vi.fn();\nconst updatePaymentRuleMock = vi.fn();\nconst deletePaymentRuleMock = vi.fn();\nconst resolveVtexWriteProfileMock = vi.fn();\nconst buildWriteSuccessResponseMock = vi.fn((value) => ({ kind: \"write\", value }));\nconst handleVtexWriteErrorMock = vi.fn((_err, fallback) => ({ kind: \"error\", message: fallback }));\nconst requireExplicitConfirmationMock = vi.fn();\n\nvi.mock(\"mcp-use/server\", () => ({\n object: objectMock,\n error: errorMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-payments.js\", () => ({\n listPaymentRules: listPaymentRulesMock,\n getPaymentRule: getPaymentRuleMock,\n}));\n\nvi.mock(\"../../../services/vtex/vtex-payments-write.js\", () => ({\n createPaymentRule: createPaymentRuleMock,\n updatePaymentRule: updatePaymentRuleMock,\n deletePaymentRule: deletePaymentRuleMock,\n}));\n\nvi.mock(\"../write-helpers.js\", () => ({\n confirmationSchemaField: z.boolean().optional().describe(\"confirmed\"),\n resolveVtexWriteProfile: resolveVtexWriteProfileMock,\n buildWriteSuccessResponse: buildWriteSuccessResponseMock,\n handleVtexWriteError: handleVtexWriteErrorMock,\n requireExplicitConfirmation: requireExplicitConfirmationMock,\n}));\n\nconst module = await import(\"../payment-rules.js\");\n\ndescribe(\"vtex_payment_rules tool\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n resolveVtexWriteProfileMock.mockResolvedValue({\n ok: true,\n value: { profileId: \"profile-1\" },\n });\n requireExplicitConfirmationMock.mockReturnValue(null);\n });\n\n it(\"requires profileId and validates payment rule action payloads\", () => {\n expect(() => module.paymentRulesSchema.parse({ action: \"list\" })).toThrow();\n expect(() =>\n module.paymentRulesSchema.parse({\n action: \"create\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n paymentSystem: \"2\",\n })\n ).toThrow(/installments/i);\n\n expect(\n module.paymentRulesSchema.parse({\n action: \"create\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n paymentSystem: \"2\",\n salesChannel: \"1\",\n restrictedByCondition: true,\n installments: [\n { count: 9, interest: false },\n { count: 12, interest: true },\n ],\n })\n ).toEqual({\n action: \"create\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n paymentSystem: \"2\",\n salesChannel: \"1\",\n restrictedByCondition: true,\n installments: [\n { count: 9, interest: false },\n { count: 12, interest: true },\n ],\n });\n\n expect(\n module.paymentRulesSchema.parse({\n action: \"delete\",\n profileId: \"profile-1\",\n ruleId: 77,\n confirmed: true,\n })\n ).toEqual({\n action: \"delete\",\n profileId: \"profile-1\",\n ruleId: 77,\n confirmed: true,\n });\n });\n\n it(\"returns compact list responses for payment rules\", async () => {\n listPaymentRulesMock.mockResolvedValue([\n {\n id: 51,\n commercialConditionId: 10,\n paymentSystem: \"2\",\n salesChannel: \"1\",\n restrictedByCondition: true,\n },\n ]);\n\n const result = await module.paymentRulesHandler({\n action: \"list\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n });\n\n expect(listPaymentRulesMock).toHaveBeenCalledWith(\"profile-1\", { commercialConditionId: 10 });\n expect(result).toEqual({\n kind: \"object\",\n value: {\n metadata: {\n total: 1,\n profile_id: \"profile-1\",\n filters: { commercial_condition_id: 10 },\n },\n payment_rules_schema: [\n \"id\",\n \"commercial_condition_id\",\n \"payment_system\",\n \"sales_channel\",\n \"restricted_by_condition\",\n ],\n payment_rules: [[51, 10, \"2\", \"1\", true]],\n },\n });\n });\n\n it(\"gets, creates, updates and deletes payment rules through the service layer\", async () => {\n getPaymentRuleMock.mockResolvedValue({\n id: 51,\n commercialConditionId: 10,\n paymentSystem: \"2\",\n installments: [{ count: 9, interest: false }],\n });\n createPaymentRuleMock.mockResolvedValue({ id: 51, paymentSystem: \"2\" });\n updatePaymentRuleMock.mockResolvedValue({ id: 51, paymentSystem: \"2\" });\n deletePaymentRuleMock.mockResolvedValue(undefined);\n\n const fetched = await module.paymentRulesHandler({\n action: \"get\",\n profileId: \"profile-1\",\n ruleId: 51,\n });\n const created = await module.paymentRulesHandler({\n action: \"create\",\n profileId: \"profile-1\",\n commercialConditionId: 10,\n paymentSystem: \"2\",\n installments: [{ count: 9, interest: false }],\n });\n const updated = await module.paymentRulesHandler({\n action: \"update\",\n profileId: \"profile-1\",\n ruleId: 51,\n installments: [{ count: 12, interest: true }],\n });\n const deleted = await module.paymentRulesHandler({\n action: \"delete\",\n profileId: \"profile-1\",\n ruleId: 51,\n confirmed: true,\n });\n\n expect(getPaymentRuleMock).toHaveBeenCalledWith(\"profile-1\", 51);\n expect(fetched).toEqual({\n kind: \"object\",\n value: {\n profile_id: \"profile-1\",\n rule_id: 51,\n payment_rule: {\n id: 51,\n commercial_condition_id: 10,\n payment_system: \"2\",\n installments: [{ count: 9, interest: false }],\n },\n },\n });\n expect(createPaymentRuleMock).toHaveBeenCalledWith(\"profile-1\", {\n commercialConditionId: 10,\n paymentSystem: \"2\",\n installments: [{ count: 9, interest: false }],\n });\n expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n operation: \"payment_rules_create\",\n resourceId: \"51\",\n message:\n \"Payment rule created. Review checkout installments and condition targeting to confirm the expected shopper experience.\",\n after: { id: 51, paymentSystem: \"2\" },\n })\n );\n expect(buildWriteSuccessResponseMock).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n operation: \"payment_rules_update\",\n resourceId: \"51\",\n message:\n \"Payment rule updated. Review checkout installments to confirm the expected payment options.\",\n after: { id: 51, paymentSystem: \"2\" },\n })\n );\n expect(updatePaymentRuleMock).toHaveBeenCalledWith(\"profile-1\", 51, {\n installments: [{ count: 12, interest: true }],\n });\n expect(deletePaymentRuleMock).toHaveBeenCalledWith(\"profile-1\", 51);\n expect(created).toMatchObject({\n kind: \"write\",\n value: {\n operation: \"payment_rules_create\",\n riskLevel: \"medium\",\n message:\n \"Payment rule created. Review checkout installments and condition targeting to confirm the expected shopper experience.\",\n },\n });\n expect(updated).toMatchObject({\n kind: \"write\",\n value: {\n operation: \"payment_rules_update\",\n riskLevel: \"medium\",\n message:\n \"Payment rule updated. Review checkout installments to confirm the expected payment options.\",\n },\n });\n expect(deleted).toMatchObject({\n kind: \"write\",\n value: {\n operation: \"payment_rules_delete\",\n riskLevel: \"high\",\n warnings: [\n \"Deleting a payment rule can immediately remove installment options from checkout for affected shoppers.\",\n ],\n },\n });\n expect(JSON.stringify(created)).not.toContain(\"sandbox\");\n expect(JSON.stringify(created)).not.toContain(\"production\");\n expect(JSON.stringify(created)).not.toContain(\"legacy\");\n expect(JSON.stringify(updated)).not.toContain(\"sandbox\");\n expect(JSON.stringify(updated)).not.toContain(\"production\");\n expect(JSON.stringify(updated)).not.toContain(\"legacy\");\n });\n\n it(\"requires explicit confirmation before deleting a payment rule\", async () => {\n requireExplicitConfirmationMock.mockReturnValueOnce({\n kind: \"object\",\n value: { success: false, risk_level: \"high\" },\n });\n\n const result = await module.paymentRulesHandler({\n action: \"delete\",\n profileId: \"profile-1\",\n ruleId: 51,\n });\n\n expect(deletePaymentRuleMock).not.toHaveBeenCalled();\n expect(result).toEqual({\n kind: \"object\",\n value: { success: false, risk_level: \"high\" },\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -125,7 +125,9 @@ const updateSkuBasicFieldsSchema = z.object({
|
|
|
125
125
|
measurementUnit: z.string().optional().describe("Measurement unit."),
|
|
126
126
|
unitMultiplier: z.number().positive().optional().describe("Unit multiplier."),
|
|
127
127
|
manufacturerCode: z.string().optional().describe("Manufacturer code."),
|
|
128
|
-
commercialConditionId: z.number().int().positive().optional().describe(
|
|
128
|
+
commercialConditionId: z.number().int().positive().optional().describe(
|
|
129
|
+
"Commercial condition ID. Use vtex_commercial_conditions to manage condition records and vtex_payment_rules to configure linked installment/payment behavior."
|
|
130
|
+
),
|
|
129
131
|
isActive: z.boolean().optional().describe("Whether the SKU should remain active."),
|
|
130
132
|
activateIfPossible: z.boolean().optional().describe("Whether VTEX should auto-activate the SKU when possible.")
|
|
131
133
|
}).refine(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/tools/vtex/catalog-admin-products-skus.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from \"zod\";\n\nimport {\n addSkuEan,\n attachSkuImage,\n createProduct,\n createSku,\n getSkuImages,\n replaceSkuEans,\n updateProductBasicFields as applyProductBasicFields,\n updateSkuBasicFields as applySkuBasicFields,\n updateSkuImage,\n} from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\ntype CatalogWriteExecutor<TParams extends { profileId?: string }, TResult> = {\n params: TParams;\n operation: string;\n message: string;\n fallbackError: string;\n riskLevel: \"low\" | \"medium\" | \"high\";\n execute: (resolvedProfileId: string, params: TParams) => Promise<TResult>;\n resourceId: (result: TResult, params: TParams) => string | undefined;\n before?: (result: TResult, params: TParams) => Record<string, unknown> | null;\n after?: (result: TResult, params: TParams) => Record<string, unknown> | null;\n details?: (result: TResult, params: TParams) => Record<string, unknown> | undefined;\n};\n\nasync function executeCatalogWrite<TParams extends { profileId?: string }, TResult>({\n params,\n operation,\n message,\n fallbackError,\n riskLevel,\n execute,\n resourceId,\n before,\n after,\n details,\n}: CatalogWriteExecutor<TParams, TResult>) {\n try {\n const profileResolution = await resolveVtexWriteProfile(params.profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n const result = await execute(resolvedProfileId, params);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation,\n resourceId: resourceId(result, params),\n riskLevel,\n message,\n before: before?.(result, params),\n after: after?.(result, params) ?? (result as Record<string, unknown>),\n details: details?.(result, params),\n });\n } catch (err) {\n return handleVtexWriteError(err, fallbackError);\n }\n}\n\nexport const updateProductBasicFieldsSchema = z\n .object({\n profileId: vtexProfileIdSchemaField,\n productId: z.string().min(1).describe(\"VTEX product identifier.\"),\n name: z.string().min(1).optional().describe(\"New product name.\"),\n categoryId: z.number().int().positive().optional().describe(\"New category identifier.\"),\n brandId: z.number().int().positive().optional().describe(\"New brand identifier.\"),\n description: z.string().optional().describe(\"New product description.\"),\n descriptionShort: z.string().optional().describe(\"New short description.\"),\n title: z.string().optional().describe(\"New SEO title.\"),\n linkId: z.string().optional().describe(\"New product slug.\"),\n refId: z.string().optional().describe(\"New internal reference code.\"),\n isVisible: z.boolean().optional().describe(\"Whether the product should remain visible in listings.\"),\n isActive: z.boolean().optional().describe(\"Whether the product should remain active.\"),\n keyWords: z.string().optional().describe(\"New keywords string.\"),\n releaseDate: z.string().optional().describe(\"New release date in ISO format.\"),\n metaTagDescription: z.string().optional().describe(\"New meta description.\"),\n showWithoutStock: z\n .boolean()\n .optional()\n .describe(\"Whether the product can stay visible without stock.\"),\n })\n .refine(\n (value) =>\n value.name !== undefined ||\n value.categoryId !== undefined ||\n value.brandId !== undefined ||\n value.description !== undefined ||\n value.descriptionShort !== undefined ||\n value.title !== undefined ||\n value.linkId !== undefined ||\n value.refId !== undefined ||\n value.isVisible !== undefined ||\n value.isActive !== undefined ||\n value.keyWords !== undefined ||\n value.releaseDate !== undefined ||\n value.metaTagDescription !== undefined ||\n value.showWithoutStock !== undefined,\n {\n message: \"At least one product field must be provided.\",\n path: [\"name\"],\n }\n );\n\nexport async function updateProductBasicFieldsHandler({\n profileId,\n productId,\n ...updates\n}: z.infer<typeof updateProductBasicFieldsSchema>) {\n return executeCatalogWrite({\n params: { profileId, productId, ...updates },\n operation: \"update_product_basic_fields\",\n message: \"Product fields updated successfully.\",\n fallbackError: `Failed to update product ${productId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) => {\n const { profileId: _ignoredProfileId, productId: _ignoredProductId, ...productUpdates } = currentParams;\n return applyProductBasicFields(resolvedProfileId, currentParams.productId, productUpdates);\n },\n resourceId: (_result, currentParams) => currentParams.productId,\n before: (result) => result.before,\n after: (result) => result.after,\n details: (_result, currentParams) => ({\n product_id: currentParams.productId,\n }),\n });\n}\n\nexport const updateProductBrandSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n productId: z.string().min(1).describe(\"VTEX product identifier.\"),\n brandId: z.number().int().positive().describe(\"Brand identifier to set on the product.\"),\n});\n\nexport async function updateProductBrandHandler(params: z.infer<typeof updateProductBrandSchema>) {\n return updateProductBasicFieldsHandler({\n profileId: params.profileId,\n productId: params.productId,\n brandId: params.brandId,\n });\n}\n\nexport const updateSkuBasicFieldsSchema = z\n .object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n name: z.string().min(1).optional().describe(\"New SKU name.\"),\n refId: z.string().optional().describe(\"New SKU reference code.\"),\n ean: z\n .string()\n .optional()\n .describe(\"New EAN. When informed, existing EAN values are replaced with this one.\"),\n packagedHeight: z.number().nonnegative().optional().describe(\"Packaged height.\"),\n packagedLength: z.number().nonnegative().optional().describe(\"Packaged length.\"),\n packagedWidth: z.number().nonnegative().optional().describe(\"Packaged width.\"),\n packagedWeightKg: z.number().nonnegative().optional().describe(\"Packaged weight in kg.\"),\n height: z.number().nonnegative().optional().describe(\"Physical height.\"),\n length: z.number().nonnegative().optional().describe(\"Physical length.\"),\n width: z.number().nonnegative().optional().describe(\"Physical width.\"),\n weightKg: z.number().nonnegative().optional().describe(\"Physical weight in kg.\"),\n measurementUnit: z.string().optional().describe(\"Measurement unit.\"),\n unitMultiplier: z.number().positive().optional().describe(\"Unit multiplier.\"),\n manufacturerCode: z.string().optional().describe(\"Manufacturer code.\"),\n commercialConditionId: z.number().int().positive().optional().describe(\"Commercial condition ID.\"),\n isActive: z.boolean().optional().describe(\"Whether the SKU should remain active.\"),\n activateIfPossible: z\n .boolean()\n .optional()\n .describe(\"Whether VTEX should auto-activate the SKU when possible.\"),\n })\n .refine(\n (value) =>\n value.name !== undefined ||\n value.refId !== undefined ||\n value.ean !== undefined ||\n value.packagedHeight !== undefined ||\n value.packagedLength !== undefined ||\n value.packagedWidth !== undefined ||\n value.packagedWeightKg !== undefined ||\n value.height !== undefined ||\n value.length !== undefined ||\n value.width !== undefined ||\n value.weightKg !== undefined ||\n value.measurementUnit !== undefined ||\n value.unitMultiplier !== undefined ||\n value.manufacturerCode !== undefined ||\n value.commercialConditionId !== undefined ||\n value.isActive !== undefined ||\n value.activateIfPossible !== undefined,\n {\n message: \"At least one SKU field must be provided.\",\n path: [\"name\"],\n }\n );\n\nexport async function updateSkuBasicFieldsHandler({\n profileId,\n skuId,\n ean,\n ...updates\n}: z.infer<typeof updateSkuBasicFieldsSchema>) {\n return executeCatalogWrite({\n params: { profileId, skuId, ean, ...updates },\n operation: \"update_sku_basic_fields\",\n message: \"SKU fields updated successfully.\",\n fallbackError: `Failed to update SKU ${skuId}`,\n riskLevel: \"medium\",\n execute: async (resolvedProfileId, currentParams) => {\n const {\n profileId: _ignoredProfileId,\n skuId: _ignoredSkuId,\n ean: _ignoredEan,\n ...skuUpdates\n } = currentParams;\n const skuUpdate = await applySkuBasicFields(resolvedProfileId, currentParams.skuId, skuUpdates);\n\n const eans =\n currentParams.ean === undefined\n ? undefined\n : await replaceSkuEans(resolvedProfileId, currentParams.skuId, [currentParams.ean]);\n\n return {\n skuUpdate,\n eans,\n };\n },\n resourceId: (_result, currentParams) => currentParams.skuId,\n before: (result) => result.skuUpdate.before,\n after: (result) => ({\n ...result.skuUpdate.after,\n ...(result.eans ? { Eans: result.eans } : {}),\n }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nconst skuStatusSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n});\n\nexport const activateSkuSchema = skuStatusSchema;\nexport const deactivateSkuSchema = skuStatusSchema;\n\nexport async function activateSkuHandler(params: z.infer<typeof activateSkuSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"activate_sku\",\n message: \"SKU activated successfully.\",\n fallbackError: `Failed to activate SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n applySkuBasicFields(resolvedProfileId, currentParams.skuId, { isActive: true }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n before: (result) => result.before,\n after: (result) => result.after,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport async function deactivateSkuHandler(params: z.infer<typeof deactivateSkuSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"deactivate_sku\",\n message: \"SKU deactivated successfully.\",\n fallbackError: `Failed to deactivate SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n applySkuBasicFields(resolvedProfileId, currentParams.skuId, { isActive: false }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n before: (result) => result.before,\n after: (result) => result.after,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const addSkuEanSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n ean: z.string().trim().min(1).describe(\"EAN value to append.\"),\n});\n\nexport async function addSkuEanHandler(params: z.infer<typeof addSkuEanSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"add_sku_ean\",\n message: \"SKU EAN added successfully.\",\n fallbackError: `Failed to add EAN to SKU ${params.skuId}`,\n riskLevel: \"low\",\n execute: (resolvedProfileId, currentParams) =>\n addSkuEan(resolvedProfileId, currentParams.skuId, currentParams.ean),\n resourceId: (_result, currentParams) => currentParams.skuId,\n after: (result) => ({ Eans: result }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const replaceSkuEansSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n eans: z.array(z.string().trim()).describe(\"Complete list of EANs to keep in VTEX.\"),\n});\n\nexport async function replaceSkuEansHandler(params: z.infer<typeof replaceSkuEansSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"replace_sku_eans\",\n message: \"SKU EANs replaced successfully.\",\n fallbackError: `Failed to replace EANs on SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n replaceSkuEans(resolvedProfileId, currentParams.skuId, currentParams.eans),\n resourceId: (_result, currentParams) => currentParams.skuId,\n after: (result) => ({ Eans: result }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nconst imagePayloadSchema = {\n name: z.string().trim().min(1).describe(\"Image name.\"),\n url: z.string().url().describe(\"Public image URL.\"),\n isMain: z.boolean().optional().describe(\"Whether the image is main.\"),\n label: z.string().optional().describe(\"Optional label.\"),\n text: z.string().optional().describe(\"Optional alt text.\"),\n position: z.number().int().nonnegative().optional().describe(\"Display position.\"),\n};\n\nexport const getSkuImagesSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n});\n\nexport async function getSkuImagesHandler(params: z.infer<typeof getSkuImagesSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"get_sku_images\",\n message: \"SKU images fetched successfully.\",\n fallbackError: `Failed to fetch images for SKU ${params.skuId}`,\n riskLevel: \"low\",\n execute: (resolvedProfileId, currentParams) => getSkuImages(resolvedProfileId, currentParams.skuId),\n resourceId: (_result, currentParams) => currentParams.skuId,\n after: (result) => ({ Images: result }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const attachCatalogImageSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n ...imagePayloadSchema,\n});\n\nexport async function attachCatalogImageHandler(params: z.infer<typeof attachCatalogImageSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"attach_catalog_image\",\n message: \"Catalog image attached successfully.\",\n fallbackError: `Failed to attach image to SKU ${params.skuId}`,\n riskLevel: \"low\",\n execute: (resolvedProfileId, currentParams) =>\n attachSkuImage(resolvedProfileId, currentParams.skuId, {\n Name: currentParams.name,\n Url: currentParams.url,\n IsMain: currentParams.isMain,\n Label: currentParams.label,\n Text: currentParams.text,\n Position: currentParams.position,\n }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const updateCatalogImageSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n imageId: z.string().min(1).describe(\"Image identifier to update.\"),\n ...imagePayloadSchema,\n});\n\nexport async function updateCatalogImageHandler(params: z.infer<typeof updateCatalogImageSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"update_catalog_image\",\n message: \"Catalog image updated successfully.\",\n fallbackError: `Failed to update image ${params.imageId} on SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n updateSkuImage(resolvedProfileId, currentParams.skuId, currentParams.imageId, {\n Name: currentParams.name,\n Url: currentParams.url,\n IsMain: currentParams.isMain,\n Label: currentParams.label,\n Text: currentParams.text,\n Position: currentParams.position,\n }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n image_id: currentParams.imageId,\n }),\n });\n}\n\nconst productInputSchema = z\n .object({\n name: z.string().min(1).describe(\"Product name.\"),\n categoryId: z.number().int().positive().optional().describe(\"Existing category ID.\"),\n categoryPath: z.string().min(1).optional().describe(\"Category path to create or reuse.\"),\n brandId: z.number().int().positive().optional().describe(\"Existing brand ID.\"),\n brandName: z.string().min(1).optional().describe(\"Brand name to create or reuse.\"),\n departmentId: z.number().int().positive().optional().describe(\"Department ID.\"),\n refId: z.string().optional().describe(\"Product reference code.\"),\n title: z.string().optional().describe(\"SEO title.\"),\n description: z.string().optional().describe(\"Product description.\"),\n descriptionShort: z.string().optional().describe(\"Short description.\"),\n linkId: z.string().optional().describe(\"Product slug.\"),\n })\n .refine((value) => value.categoryId !== undefined || value.categoryPath !== undefined, {\n message: \"Provide either categoryId or categoryPath for the product.\",\n path: [\"categoryId\"],\n })\n .refine((value) => value.brandId !== undefined || value.brandName !== undefined, {\n message: \"Provide either brandId or brandName for the product.\",\n path: [\"brandId\"],\n });\n\nconst skuInputSchema = z.object({\n name: z.string().min(1).describe(\"SKU name.\"),\n refId: z.string().min(1).describe(\"Internal SKU reference code.\"),\n ean: z.string().optional().describe(\"Optional EAN to attach after creation.\"),\n packagedHeight: z.number().nonnegative().describe(\"Packaged height.\"),\n packagedLength: z.number().nonnegative().describe(\"Packaged length.\"),\n packagedWidth: z.number().nonnegative().describe(\"Packaged width.\"),\n packagedWeightKg: z.number().nonnegative().describe(\"Packaged weight in kg.\"),\n height: z.number().nonnegative().optional().describe(\"Physical height.\"),\n length: z.number().nonnegative().optional().describe(\"Physical length.\"),\n width: z.number().nonnegative().optional().describe(\"Physical width.\"),\n weightKg: z.number().nonnegative().optional().describe(\"Physical weight in kg.\"),\n activateIfPossible: z.boolean().optional().describe(\"Whether VTEX should auto-activate the SKU.\"),\n measurementUnit: z.string().optional().describe(\"Measurement unit.\"),\n unitMultiplier: z.number().positive().optional().describe(\"Unit multiplier.\"),\n});\n\nconst imageInputSchema = z.object(imagePayloadSchema).optional();\n\nexport const createProductWithSkuSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n product: productInputSchema.describe(\"Product payload.\"),\n sku: skuInputSchema.describe(\"SKU payload.\"),\n image: imageInputSchema.describe(\"Optional SKU image attached after SKU creation.\"),\n});\n\nexport async function createProductWithSkuHandler({\n profileId,\n product,\n sku,\n image,\n}: z.infer<typeof createProductWithSkuSchema>) {\n return executeCatalogWrite({\n params: { profileId, product, sku, image },\n operation: \"create_product_with_sku\",\n message: \"Product and SKU created successfully.\",\n fallbackError: \"Failed to create product with SKU in VTEX\",\n riskLevel: \"low\",\n execute: async (resolvedProfileId, currentParams) => {\n const createdProduct = await createProduct(resolvedProfileId, {\n Name: currentParams.product.name,\n CategoryId: currentParams.product.categoryId,\n CategoryPath: currentParams.product.categoryPath,\n BrandId: currentParams.product.brandId,\n BrandName: currentParams.product.brandName,\n DepartmentId: currentParams.product.departmentId,\n RefId: currentParams.product.refId,\n Title: currentParams.product.title,\n Description: currentParams.product.description,\n DescriptionShort: currentParams.product.descriptionShort,\n LinkId: currentParams.product.linkId,\n });\n\n const productId = Number(createdProduct.Id);\n const createdSku = await createSku(resolvedProfileId, {\n ProductId: productId,\n Name: currentParams.sku.name,\n RefId: currentParams.sku.refId,\n PackagedHeight: currentParams.sku.packagedHeight,\n PackagedLength: currentParams.sku.packagedLength,\n PackagedWidth: currentParams.sku.packagedWidth,\n PackagedWeightKg: currentParams.sku.packagedWeightKg,\n Height: currentParams.sku.height,\n Length: currentParams.sku.length,\n Width: currentParams.sku.width,\n WeightKg: currentParams.sku.weightKg,\n ActivateIfPossible: currentParams.sku.activateIfPossible ?? true,\n IsActive: false,\n MeasurementUnit: currentParams.sku.measurementUnit,\n UnitMultiplier: currentParams.sku.unitMultiplier,\n });\n\n const skuId = createdSku.Id == null ? undefined : String(createdSku.Id);\n if (skuId && currentParams.sku.ean?.trim()) {\n await addSkuEan(resolvedProfileId, skuId, currentParams.sku.ean.trim());\n }\n\n if (skuId && currentParams.image) {\n await attachSkuImage(resolvedProfileId, skuId, {\n Name: currentParams.image.name,\n Url: currentParams.image.url,\n IsMain: currentParams.image.isMain,\n Label: currentParams.image.label,\n Text: currentParams.image.text,\n Position: currentParams.image.position,\n });\n }\n\n return {\n product: createdProduct,\n sku: createdSku,\n };\n },\n resourceId: (result) => String((result.product as Record<string, unknown>).Id ?? \"\"),\n before: () => null,\n after: (result) => ({\n product: result.product,\n sku: result.sku,\n }),\n details: (result) => ({\n product_id: (result.product as Record<string, unknown>).Id,\n sku_id: (result.sku as Record<string, unknown>).Id,\n }),\n });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport {\n addSkuEan,\n attachSkuImage,\n createProduct,\n createSku,\n getSkuImages,\n replaceSkuEans,\n updateProductBasicFields as applyProductBasicFields,\n updateSkuBasicFields as applySkuBasicFields,\n updateSkuImage,\n} from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\ntype CatalogWriteExecutor<TParams extends { profileId?: string }, TResult> = {\n params: TParams;\n operation: string;\n message: string;\n fallbackError: string;\n riskLevel: \"low\" | \"medium\" | \"high\";\n execute: (resolvedProfileId: string, params: TParams) => Promise<TResult>;\n resourceId: (result: TResult, params: TParams) => string | undefined;\n before?: (result: TResult, params: TParams) => Record<string, unknown> | null;\n after?: (result: TResult, params: TParams) => Record<string, unknown> | null;\n details?: (result: TResult, params: TParams) => Record<string, unknown> | undefined;\n};\n\nasync function executeCatalogWrite<TParams extends { profileId?: string }, TResult>({\n params,\n operation,\n message,\n fallbackError,\n riskLevel,\n execute,\n resourceId,\n before,\n after,\n details,\n}: CatalogWriteExecutor<TParams, TResult>) {\n try {\n const profileResolution = await resolveVtexWriteProfile(params.profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n const resolvedProfileId = profileResolution.value.profileId;\n const result = await execute(resolvedProfileId, params);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation,\n resourceId: resourceId(result, params),\n riskLevel,\n message,\n before: before?.(result, params),\n after: after?.(result, params) ?? (result as Record<string, unknown>),\n details: details?.(result, params),\n });\n } catch (err) {\n return handleVtexWriteError(err, fallbackError);\n }\n}\n\nexport const updateProductBasicFieldsSchema = z\n .object({\n profileId: vtexProfileIdSchemaField,\n productId: z.string().min(1).describe(\"VTEX product identifier.\"),\n name: z.string().min(1).optional().describe(\"New product name.\"),\n categoryId: z.number().int().positive().optional().describe(\"New category identifier.\"),\n brandId: z.number().int().positive().optional().describe(\"New brand identifier.\"),\n description: z.string().optional().describe(\"New product description.\"),\n descriptionShort: z.string().optional().describe(\"New short description.\"),\n title: z.string().optional().describe(\"New SEO title.\"),\n linkId: z.string().optional().describe(\"New product slug.\"),\n refId: z.string().optional().describe(\"New internal reference code.\"),\n isVisible: z.boolean().optional().describe(\"Whether the product should remain visible in listings.\"),\n isActive: z.boolean().optional().describe(\"Whether the product should remain active.\"),\n keyWords: z.string().optional().describe(\"New keywords string.\"),\n releaseDate: z.string().optional().describe(\"New release date in ISO format.\"),\n metaTagDescription: z.string().optional().describe(\"New meta description.\"),\n showWithoutStock: z\n .boolean()\n .optional()\n .describe(\"Whether the product can stay visible without stock.\"),\n })\n .refine(\n (value) =>\n value.name !== undefined ||\n value.categoryId !== undefined ||\n value.brandId !== undefined ||\n value.description !== undefined ||\n value.descriptionShort !== undefined ||\n value.title !== undefined ||\n value.linkId !== undefined ||\n value.refId !== undefined ||\n value.isVisible !== undefined ||\n value.isActive !== undefined ||\n value.keyWords !== undefined ||\n value.releaseDate !== undefined ||\n value.metaTagDescription !== undefined ||\n value.showWithoutStock !== undefined,\n {\n message: \"At least one product field must be provided.\",\n path: [\"name\"],\n }\n );\n\nexport async function updateProductBasicFieldsHandler({\n profileId,\n productId,\n ...updates\n}: z.infer<typeof updateProductBasicFieldsSchema>) {\n return executeCatalogWrite({\n params: { profileId, productId, ...updates },\n operation: \"update_product_basic_fields\",\n message: \"Product fields updated successfully.\",\n fallbackError: `Failed to update product ${productId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) => {\n const { profileId: _ignoredProfileId, productId: _ignoredProductId, ...productUpdates } = currentParams;\n return applyProductBasicFields(resolvedProfileId, currentParams.productId, productUpdates);\n },\n resourceId: (_result, currentParams) => currentParams.productId,\n before: (result) => result.before,\n after: (result) => result.after,\n details: (_result, currentParams) => ({\n product_id: currentParams.productId,\n }),\n });\n}\n\nexport const updateProductBrandSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n productId: z.string().min(1).describe(\"VTEX product identifier.\"),\n brandId: z.number().int().positive().describe(\"Brand identifier to set on the product.\"),\n});\n\nexport async function updateProductBrandHandler(params: z.infer<typeof updateProductBrandSchema>) {\n return updateProductBasicFieldsHandler({\n profileId: params.profileId,\n productId: params.productId,\n brandId: params.brandId,\n });\n}\n\nexport const updateSkuBasicFieldsSchema = z\n .object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n name: z.string().min(1).optional().describe(\"New SKU name.\"),\n refId: z.string().optional().describe(\"New SKU reference code.\"),\n ean: z\n .string()\n .optional()\n .describe(\"New EAN. When informed, existing EAN values are replaced with this one.\"),\n packagedHeight: z.number().nonnegative().optional().describe(\"Packaged height.\"),\n packagedLength: z.number().nonnegative().optional().describe(\"Packaged length.\"),\n packagedWidth: z.number().nonnegative().optional().describe(\"Packaged width.\"),\n packagedWeightKg: z.number().nonnegative().optional().describe(\"Packaged weight in kg.\"),\n height: z.number().nonnegative().optional().describe(\"Physical height.\"),\n length: z.number().nonnegative().optional().describe(\"Physical length.\"),\n width: z.number().nonnegative().optional().describe(\"Physical width.\"),\n weightKg: z.number().nonnegative().optional().describe(\"Physical weight in kg.\"),\n measurementUnit: z.string().optional().describe(\"Measurement unit.\"),\n unitMultiplier: z.number().positive().optional().describe(\"Unit multiplier.\"),\n manufacturerCode: z.string().optional().describe(\"Manufacturer code.\"),\n commercialConditionId: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n \"Commercial condition ID. Use vtex_commercial_conditions to manage condition records and vtex_payment_rules to configure linked installment/payment behavior.\"\n ),\n isActive: z.boolean().optional().describe(\"Whether the SKU should remain active.\"),\n activateIfPossible: z\n .boolean()\n .optional()\n .describe(\"Whether VTEX should auto-activate the SKU when possible.\"),\n })\n .refine(\n (value) =>\n value.name !== undefined ||\n value.refId !== undefined ||\n value.ean !== undefined ||\n value.packagedHeight !== undefined ||\n value.packagedLength !== undefined ||\n value.packagedWidth !== undefined ||\n value.packagedWeightKg !== undefined ||\n value.height !== undefined ||\n value.length !== undefined ||\n value.width !== undefined ||\n value.weightKg !== undefined ||\n value.measurementUnit !== undefined ||\n value.unitMultiplier !== undefined ||\n value.manufacturerCode !== undefined ||\n value.commercialConditionId !== undefined ||\n value.isActive !== undefined ||\n value.activateIfPossible !== undefined,\n {\n message: \"At least one SKU field must be provided.\",\n path: [\"name\"],\n }\n );\n\nexport async function updateSkuBasicFieldsHandler({\n profileId,\n skuId,\n ean,\n ...updates\n}: z.infer<typeof updateSkuBasicFieldsSchema>) {\n return executeCatalogWrite({\n params: { profileId, skuId, ean, ...updates },\n operation: \"update_sku_basic_fields\",\n message: \"SKU fields updated successfully.\",\n fallbackError: `Failed to update SKU ${skuId}`,\n riskLevel: \"medium\",\n execute: async (resolvedProfileId, currentParams) => {\n const {\n profileId: _ignoredProfileId,\n skuId: _ignoredSkuId,\n ean: _ignoredEan,\n ...skuUpdates\n } = currentParams;\n const skuUpdate = await applySkuBasicFields(resolvedProfileId, currentParams.skuId, skuUpdates);\n\n const eans =\n currentParams.ean === undefined\n ? undefined\n : await replaceSkuEans(resolvedProfileId, currentParams.skuId, [currentParams.ean]);\n\n return {\n skuUpdate,\n eans,\n };\n },\n resourceId: (_result, currentParams) => currentParams.skuId,\n before: (result) => result.skuUpdate.before,\n after: (result) => ({\n ...result.skuUpdate.after,\n ...(result.eans ? { Eans: result.eans } : {}),\n }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nconst skuStatusSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n});\n\nexport const activateSkuSchema = skuStatusSchema;\nexport const deactivateSkuSchema = skuStatusSchema;\n\nexport async function activateSkuHandler(params: z.infer<typeof activateSkuSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"activate_sku\",\n message: \"SKU activated successfully.\",\n fallbackError: `Failed to activate SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n applySkuBasicFields(resolvedProfileId, currentParams.skuId, { isActive: true }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n before: (result) => result.before,\n after: (result) => result.after,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport async function deactivateSkuHandler(params: z.infer<typeof deactivateSkuSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"deactivate_sku\",\n message: \"SKU deactivated successfully.\",\n fallbackError: `Failed to deactivate SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n applySkuBasicFields(resolvedProfileId, currentParams.skuId, { isActive: false }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n before: (result) => result.before,\n after: (result) => result.after,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const addSkuEanSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n ean: z.string().trim().min(1).describe(\"EAN value to append.\"),\n});\n\nexport async function addSkuEanHandler(params: z.infer<typeof addSkuEanSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"add_sku_ean\",\n message: \"SKU EAN added successfully.\",\n fallbackError: `Failed to add EAN to SKU ${params.skuId}`,\n riskLevel: \"low\",\n execute: (resolvedProfileId, currentParams) =>\n addSkuEan(resolvedProfileId, currentParams.skuId, currentParams.ean),\n resourceId: (_result, currentParams) => currentParams.skuId,\n after: (result) => ({ Eans: result }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const replaceSkuEansSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n eans: z.array(z.string().trim()).describe(\"Complete list of EANs to keep in VTEX.\"),\n});\n\nexport async function replaceSkuEansHandler(params: z.infer<typeof replaceSkuEansSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"replace_sku_eans\",\n message: \"SKU EANs replaced successfully.\",\n fallbackError: `Failed to replace EANs on SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n replaceSkuEans(resolvedProfileId, currentParams.skuId, currentParams.eans),\n resourceId: (_result, currentParams) => currentParams.skuId,\n after: (result) => ({ Eans: result }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nconst imagePayloadSchema = {\n name: z.string().trim().min(1).describe(\"Image name.\"),\n url: z.string().url().describe(\"Public image URL.\"),\n isMain: z.boolean().optional().describe(\"Whether the image is main.\"),\n label: z.string().optional().describe(\"Optional label.\"),\n text: z.string().optional().describe(\"Optional alt text.\"),\n position: z.number().int().nonnegative().optional().describe(\"Display position.\"),\n};\n\nexport const getSkuImagesSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n});\n\nexport async function getSkuImagesHandler(params: z.infer<typeof getSkuImagesSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"get_sku_images\",\n message: \"SKU images fetched successfully.\",\n fallbackError: `Failed to fetch images for SKU ${params.skuId}`,\n riskLevel: \"low\",\n execute: (resolvedProfileId, currentParams) => getSkuImages(resolvedProfileId, currentParams.skuId),\n resourceId: (_result, currentParams) => currentParams.skuId,\n after: (result) => ({ Images: result }),\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const attachCatalogImageSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n ...imagePayloadSchema,\n});\n\nexport async function attachCatalogImageHandler(params: z.infer<typeof attachCatalogImageSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"attach_catalog_image\",\n message: \"Catalog image attached successfully.\",\n fallbackError: `Failed to attach image to SKU ${params.skuId}`,\n riskLevel: \"low\",\n execute: (resolvedProfileId, currentParams) =>\n attachSkuImage(resolvedProfileId, currentParams.skuId, {\n Name: currentParams.name,\n Url: currentParams.url,\n IsMain: currentParams.isMain,\n Label: currentParams.label,\n Text: currentParams.text,\n Position: currentParams.position,\n }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n }),\n });\n}\n\nexport const updateCatalogImageSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier.\"),\n imageId: z.string().min(1).describe(\"Image identifier to update.\"),\n ...imagePayloadSchema,\n});\n\nexport async function updateCatalogImageHandler(params: z.infer<typeof updateCatalogImageSchema>) {\n return executeCatalogWrite({\n params,\n operation: \"update_catalog_image\",\n message: \"Catalog image updated successfully.\",\n fallbackError: `Failed to update image ${params.imageId} on SKU ${params.skuId}`,\n riskLevel: \"medium\",\n execute: (resolvedProfileId, currentParams) =>\n updateSkuImage(resolvedProfileId, currentParams.skuId, currentParams.imageId, {\n Name: currentParams.name,\n Url: currentParams.url,\n IsMain: currentParams.isMain,\n Label: currentParams.label,\n Text: currentParams.text,\n Position: currentParams.position,\n }),\n resourceId: (_result, currentParams) => currentParams.skuId,\n details: (_result, currentParams) => ({\n sku_id: currentParams.skuId,\n image_id: currentParams.imageId,\n }),\n });\n}\n\nconst productInputSchema = z\n .object({\n name: z.string().min(1).describe(\"Product name.\"),\n categoryId: z.number().int().positive().optional().describe(\"Existing category ID.\"),\n categoryPath: z.string().min(1).optional().describe(\"Category path to create or reuse.\"),\n brandId: z.number().int().positive().optional().describe(\"Existing brand ID.\"),\n brandName: z.string().min(1).optional().describe(\"Brand name to create or reuse.\"),\n departmentId: z.number().int().positive().optional().describe(\"Department ID.\"),\n refId: z.string().optional().describe(\"Product reference code.\"),\n title: z.string().optional().describe(\"SEO title.\"),\n description: z.string().optional().describe(\"Product description.\"),\n descriptionShort: z.string().optional().describe(\"Short description.\"),\n linkId: z.string().optional().describe(\"Product slug.\"),\n })\n .refine((value) => value.categoryId !== undefined || value.categoryPath !== undefined, {\n message: \"Provide either categoryId or categoryPath for the product.\",\n path: [\"categoryId\"],\n })\n .refine((value) => value.brandId !== undefined || value.brandName !== undefined, {\n message: \"Provide either brandId or brandName for the product.\",\n path: [\"brandId\"],\n });\n\nconst skuInputSchema = z.object({\n name: z.string().min(1).describe(\"SKU name.\"),\n refId: z.string().min(1).describe(\"Internal SKU reference code.\"),\n ean: z.string().optional().describe(\"Optional EAN to attach after creation.\"),\n packagedHeight: z.number().nonnegative().describe(\"Packaged height.\"),\n packagedLength: z.number().nonnegative().describe(\"Packaged length.\"),\n packagedWidth: z.number().nonnegative().describe(\"Packaged width.\"),\n packagedWeightKg: z.number().nonnegative().describe(\"Packaged weight in kg.\"),\n height: z.number().nonnegative().optional().describe(\"Physical height.\"),\n length: z.number().nonnegative().optional().describe(\"Physical length.\"),\n width: z.number().nonnegative().optional().describe(\"Physical width.\"),\n weightKg: z.number().nonnegative().optional().describe(\"Physical weight in kg.\"),\n activateIfPossible: z.boolean().optional().describe(\"Whether VTEX should auto-activate the SKU.\"),\n measurementUnit: z.string().optional().describe(\"Measurement unit.\"),\n unitMultiplier: z.number().positive().optional().describe(\"Unit multiplier.\"),\n});\n\nconst imageInputSchema = z.object(imagePayloadSchema).optional();\n\nexport const createProductWithSkuSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n product: productInputSchema.describe(\"Product payload.\"),\n sku: skuInputSchema.describe(\"SKU payload.\"),\n image: imageInputSchema.describe(\"Optional SKU image attached after SKU creation.\"),\n});\n\nexport async function createProductWithSkuHandler({\n profileId,\n product,\n sku,\n image,\n}: z.infer<typeof createProductWithSkuSchema>) {\n return executeCatalogWrite({\n params: { profileId, product, sku, image },\n operation: \"create_product_with_sku\",\n message: \"Product and SKU created successfully.\",\n fallbackError: \"Failed to create product with SKU in VTEX\",\n riskLevel: \"low\",\n execute: async (resolvedProfileId, currentParams) => {\n const createdProduct = await createProduct(resolvedProfileId, {\n Name: currentParams.product.name,\n CategoryId: currentParams.product.categoryId,\n CategoryPath: currentParams.product.categoryPath,\n BrandId: currentParams.product.brandId,\n BrandName: currentParams.product.brandName,\n DepartmentId: currentParams.product.departmentId,\n RefId: currentParams.product.refId,\n Title: currentParams.product.title,\n Description: currentParams.product.description,\n DescriptionShort: currentParams.product.descriptionShort,\n LinkId: currentParams.product.linkId,\n });\n\n const productId = Number(createdProduct.Id);\n const createdSku = await createSku(resolvedProfileId, {\n ProductId: productId,\n Name: currentParams.sku.name,\n RefId: currentParams.sku.refId,\n PackagedHeight: currentParams.sku.packagedHeight,\n PackagedLength: currentParams.sku.packagedLength,\n PackagedWidth: currentParams.sku.packagedWidth,\n PackagedWeightKg: currentParams.sku.packagedWeightKg,\n Height: currentParams.sku.height,\n Length: currentParams.sku.length,\n Width: currentParams.sku.width,\n WeightKg: currentParams.sku.weightKg,\n ActivateIfPossible: currentParams.sku.activateIfPossible ?? true,\n IsActive: false,\n MeasurementUnit: currentParams.sku.measurementUnit,\n UnitMultiplier: currentParams.sku.unitMultiplier,\n });\n\n const skuId = createdSku.Id == null ? undefined : String(createdSku.Id);\n if (skuId && currentParams.sku.ean?.trim()) {\n await addSkuEan(resolvedProfileId, skuId, currentParams.sku.ean.trim());\n }\n\n if (skuId && currentParams.image) {\n await attachSkuImage(resolvedProfileId, skuId, {\n Name: currentParams.image.name,\n Url: currentParams.image.url,\n IsMain: currentParams.image.isMain,\n Label: currentParams.image.label,\n Text: currentParams.image.text,\n Position: currentParams.image.position,\n });\n }\n\n return {\n product: createdProduct,\n sku: createdSku,\n };\n },\n resourceId: (result) => String((result.product as Record<string, unknown>).Id ?? \"\"),\n before: () => null,\n after: (result) => ({\n product: result.product,\n sku: result.sku,\n }),\n details: (result) => ({\n product_id: (result.product as Record<string, unknown>).Id,\n sku_id: (result.sku as Record<string, unknown>).Id,\n }),\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|