@yoryoboy/bi-mcp 1.2.0 → 1.3.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 +302 -2
- package/dist/index.js.map +2 -2
- package/dist/mcp-use.json +2 -2
- package/dist/src/services/vtex/vtex-catalog-write.js +233 -0
- package/dist/src/services/vtex/vtex-catalog-write.js.map +7 -0
- package/dist/src/services/vtex/vtex-orders-write.js +152 -0
- package/dist/src/services/vtex/vtex-orders-write.js.map +7 -0
- package/dist/src/services/vtex/vtex-pricing-write.js +24 -0
- package/dist/src/services/vtex/vtex-pricing-write.js.map +7 -0
- package/dist/src/services/vtex/vtex-write.js +38 -0
- package/dist/src/services/vtex/vtex-write.js.map +7 -0
- package/dist/src/tools/vtex/activate-sku.js +53 -0
- package/dist/src/tools/vtex/activate-sku.js.map +7 -0
- package/dist/src/tools/vtex/add-order-tracking.js +103 -0
- package/dist/src/tools/vtex/add-order-tracking.js.map +7 -0
- package/dist/src/tools/vtex/associate-specification.js +60 -0
- package/dist/src/tools/vtex/associate-specification.js.map +7 -0
- package/dist/src/tools/vtex/attach-catalog-image.js +63 -0
- package/dist/src/tools/vtex/attach-catalog-image.js.map +7 -0
- package/dist/src/tools/vtex/cancel-order.js +67 -0
- package/dist/src/tools/vtex/cancel-order.js.map +7 -0
- package/dist/src/tools/vtex/create-brand.js +69 -0
- package/dist/src/tools/vtex/create-brand.js.map +7 -0
- package/dist/src/tools/vtex/create-category.js +81 -0
- package/dist/src/tools/vtex/create-category.js.map +7 -0
- package/dist/src/tools/vtex/create-product-with-sku.js +120 -0
- package/dist/src/tools/vtex/create-product-with-sku.js.map +7 -0
- package/dist/src/tools/vtex/create-product.js +111 -0
- package/dist/src/tools/vtex/create-product.js.map +7 -0
- package/dist/src/tools/vtex/create-sku.js +103 -0
- package/dist/src/tools/vtex/create-sku.js.map +7 -0
- package/dist/src/tools/vtex/create-specification-value.js +53 -0
- package/dist/src/tools/vtex/create-specification-value.js.map +7 -0
- package/dist/src/tools/vtex/create-specification.js +85 -0
- package/dist/src/tools/vtex/create-specification.js.map +7 -0
- package/dist/src/tools/vtex/deactivate-sku.js +53 -0
- package/dist/src/tools/vtex/deactivate-sku.js.map +7 -0
- package/dist/src/tools/vtex/delete-fixed-price.js +53 -0
- package/dist/src/tools/vtex/delete-fixed-price.js.map +7 -0
- package/dist/src/tools/vtex/index.js +20 -0
- package/dist/src/tools/vtex/index.js.map +2 -2
- package/dist/src/tools/vtex/invoice-order.js +84 -0
- package/dist/src/tools/vtex/invoice-order.js.map +7 -0
- package/dist/src/tools/vtex/toggle-unlimited-quantity.js +65 -0
- package/dist/src/tools/vtex/toggle-unlimited-quantity.js.map +7 -0
- package/dist/src/tools/vtex/update-inventory.js +34 -19
- package/dist/src/tools/vtex/update-inventory.js.map +2 -2
- package/dist/src/tools/vtex/update-lead-time.js +34 -17
- package/dist/src/tools/vtex/update-lead-time.js.map +2 -2
- package/dist/src/tools/vtex/update-product-basic-fields.js +71 -0
- package/dist/src/tools/vtex/update-product-basic-fields.js.map +7 -0
- package/dist/src/tools/vtex/update-sku-basic-fields.js +92 -0
- package/dist/src/tools/vtex/update-sku-basic-fields.js.map +7 -0
- package/dist/src/tools/vtex/update-sku-price.js +81 -0
- package/dist/src/tools/vtex/update-sku-price.js.map +7 -0
- package/dist/src/tools/vtex/upsert-fixed-price.js +69 -0
- package/dist/src/tools/vtex/upsert-fixed-price.js.map +7 -0
- package/dist/src/tools/vtex/write-helpers.js +73 -0
- package/dist/src/tools/vtex/write-helpers.js.map +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/create-product-with-sku.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport { createProduct, createSku, createSkuEan } from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\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\nexport const createProductWithSkuSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n product: productInputSchema.describe(\"Product payload.\"),\n sku: skuInputSchema.describe(\"SKU payload.\"),\n});\n\nexport async function createProductWithSkuHandler({\n profileId,\n product,\n sku,\n}: z.infer<typeof createProductWithSkuSchema>) {\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 createdProduct = await createProduct(resolvedProfileId, {\n Name: product.name,\n CategoryId: product.categoryId,\n CategoryPath: product.categoryPath,\n BrandId: product.brandId,\n BrandName: product.brandName,\n DepartmentId: product.departmentId,\n RefId: product.refId,\n Title: product.title,\n Description: product.description,\n DescriptionShort: product.descriptionShort,\n LinkId: product.linkId,\n });\n\n const productId = Number(createdProduct.Id);\n const createdSku = await createSku(resolvedProfileId, {\n ProductId: productId,\n Name: sku.name,\n RefId: sku.refId,\n PackagedHeight: sku.packagedHeight,\n PackagedLength: sku.packagedLength,\n PackagedWidth: sku.packagedWidth,\n PackagedWeightKg: sku.packagedWeightKg,\n Height: sku.height,\n Length: sku.length,\n Width: sku.width,\n WeightKg: sku.weightKg,\n ActivateIfPossible: sku.activateIfPossible ?? true,\n IsActive: false,\n MeasurementUnit: sku.measurementUnit,\n UnitMultiplier: sku.unitMultiplier,\n });\n\n const skuId = createdSku.Id == null ? undefined : String(createdSku.Id);\n if (skuId && sku.ean?.trim()) {\n await createSkuEan(resolvedProfileId, skuId, sku.ean.trim());\n createdSku.Eans = [sku.ean.trim()];\n }\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"create_product_with_sku\",\n resourceId: String(createdProduct.Id),\n riskLevel: \"low\",\n message: \"Product and SKU created successfully.\",\n before: null,\n after: {\n product: createdProduct,\n sku: createdSku,\n },\n details: {\n product_id: createdProduct.Id,\n sku_id: createdSku.Id,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, \"Failed to create product with SKU in VTEX\");\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createProduct } from "../../services/vtex/vtex-catalog-write.js";
|
|
3
|
+
import {
|
|
4
|
+
buildWriteSuccessResponse,
|
|
5
|
+
handleVtexWriteError,
|
|
6
|
+
resolveVtexWriteProfile,
|
|
7
|
+
vtexProfileIdSchemaField
|
|
8
|
+
} from "./write-helpers.js";
|
|
9
|
+
const createProductSchema = z.object({
|
|
10
|
+
profileId: vtexProfileIdSchemaField,
|
|
11
|
+
name: z.string().min(1).describe("Product name."),
|
|
12
|
+
categoryId: z.number().int().positive().optional().describe("Existing VTEX category ID."),
|
|
13
|
+
categoryPath: z.string().min(1).optional().describe("Category path to create or reuse, for example `Mens/Clothing/T-Shirts`."),
|
|
14
|
+
brandId: z.number().int().positive().optional().describe("Existing VTEX brand ID."),
|
|
15
|
+
brandName: z.string().min(1).optional().describe("Brand name to create or reuse when `brandId` is not provided."),
|
|
16
|
+
departmentId: z.number().int().positive().optional().describe("Department ID for the category."),
|
|
17
|
+
refId: z.string().optional().describe("Internal product reference code."),
|
|
18
|
+
title: z.string().optional().describe("SEO title."),
|
|
19
|
+
description: z.string().optional().describe("Product description."),
|
|
20
|
+
descriptionShort: z.string().optional().describe("Short product description."),
|
|
21
|
+
linkId: z.string().optional().describe("Product slug."),
|
|
22
|
+
releaseDate: z.string().optional().describe("Product release date in ISO format."),
|
|
23
|
+
keyWords: z.string().optional().describe("Keywords string."),
|
|
24
|
+
isVisible: z.boolean().optional().describe("Whether the product should be visible in listings."),
|
|
25
|
+
isActive: z.boolean().optional().describe("Whether the product should be active."),
|
|
26
|
+
taxCode: z.string().optional().describe("Tax code."),
|
|
27
|
+
metaTagDescription: z.string().optional().describe("Meta description."),
|
|
28
|
+
supplierId: z.number().int().positive().optional().describe("Supplier identifier."),
|
|
29
|
+
showWithoutStock: z.boolean().optional().describe("Whether the product stays visible without stock."),
|
|
30
|
+
score: z.number().int().optional().describe("Search score.")
|
|
31
|
+
}).refine((value) => value.categoryId !== void 0 || value.categoryPath !== void 0, {
|
|
32
|
+
message: "Provide either categoryId or categoryPath.",
|
|
33
|
+
path: ["categoryId"]
|
|
34
|
+
}).refine((value) => value.brandId !== void 0 || value.brandName !== void 0, {
|
|
35
|
+
message: "Provide either brandId or brandName.",
|
|
36
|
+
path: ["brandId"]
|
|
37
|
+
});
|
|
38
|
+
async function createProductHandler({
|
|
39
|
+
profileId,
|
|
40
|
+
name,
|
|
41
|
+
categoryId,
|
|
42
|
+
categoryPath,
|
|
43
|
+
brandId,
|
|
44
|
+
brandName,
|
|
45
|
+
departmentId,
|
|
46
|
+
refId,
|
|
47
|
+
title,
|
|
48
|
+
description,
|
|
49
|
+
descriptionShort,
|
|
50
|
+
linkId,
|
|
51
|
+
releaseDate,
|
|
52
|
+
keyWords,
|
|
53
|
+
isVisible,
|
|
54
|
+
isActive,
|
|
55
|
+
taxCode,
|
|
56
|
+
metaTagDescription,
|
|
57
|
+
supplierId,
|
|
58
|
+
showWithoutStock,
|
|
59
|
+
score
|
|
60
|
+
}) {
|
|
61
|
+
try {
|
|
62
|
+
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
63
|
+
if (!profileResolution.ok) {
|
|
64
|
+
return profileResolution.response;
|
|
65
|
+
}
|
|
66
|
+
const resolvedProfileId = profileResolution.value.profileId;
|
|
67
|
+
const payload = {
|
|
68
|
+
Name: name
|
|
69
|
+
};
|
|
70
|
+
if (categoryId !== void 0) payload.CategoryId = categoryId;
|
|
71
|
+
if (categoryPath !== void 0) payload.CategoryPath = categoryPath;
|
|
72
|
+
if (brandId !== void 0) payload.BrandId = brandId;
|
|
73
|
+
if (brandName !== void 0) payload.BrandName = brandName;
|
|
74
|
+
if (departmentId !== void 0) payload.DepartmentId = departmentId;
|
|
75
|
+
if (refId !== void 0) payload.RefId = refId;
|
|
76
|
+
if (title !== void 0) payload.Title = title;
|
|
77
|
+
if (description !== void 0) payload.Description = description;
|
|
78
|
+
if (descriptionShort !== void 0) payload.DescriptionShort = descriptionShort;
|
|
79
|
+
if (linkId !== void 0) payload.LinkId = linkId;
|
|
80
|
+
if (releaseDate !== void 0) payload.ReleaseDate = releaseDate;
|
|
81
|
+
if (keyWords !== void 0) payload.KeyWords = keyWords;
|
|
82
|
+
if (isVisible !== void 0) payload.IsVisible = isVisible;
|
|
83
|
+
if (isActive !== void 0) payload.IsActive = isActive;
|
|
84
|
+
if (taxCode !== void 0) payload.TaxCode = taxCode;
|
|
85
|
+
if (metaTagDescription !== void 0) payload.MetaTagDescription = metaTagDescription;
|
|
86
|
+
if (supplierId !== void 0) payload.SupplierId = supplierId;
|
|
87
|
+
if (showWithoutStock !== void 0) payload.ShowWithoutStock = showWithoutStock;
|
|
88
|
+
if (score !== void 0) payload.Score = score;
|
|
89
|
+
const createdProduct = await createProduct(resolvedProfileId, payload);
|
|
90
|
+
const resourceId = createdProduct.Id == null ? void 0 : String(createdProduct.Id);
|
|
91
|
+
return buildWriteSuccessResponse({
|
|
92
|
+
profileId: resolvedProfileId,
|
|
93
|
+
operation: "create_product",
|
|
94
|
+
resourceId,
|
|
95
|
+
riskLevel: "low",
|
|
96
|
+
message: "Product created successfully.",
|
|
97
|
+
before: null,
|
|
98
|
+
after: createdProduct,
|
|
99
|
+
details: {
|
|
100
|
+
product_id: resourceId
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
} catch (err) {
|
|
104
|
+
return handleVtexWriteError(err, "Failed to create product in VTEX");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
createProductHandler,
|
|
109
|
+
createProductSchema
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=create-product.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/create-product.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport { createProduct } from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const createProductSchema = z\n .object({\n profileId: vtexProfileIdSchemaField,\n name: z.string().min(1).describe(\"Product name.\"),\n categoryId: z.number().int().positive().optional().describe(\"Existing VTEX category ID.\"),\n categoryPath: z\n .string()\n .min(1)\n .optional()\n .describe(\"Category path to create or reuse, for example `Mens/Clothing/T-Shirts`.\"),\n brandId: z.number().int().positive().optional().describe(\"Existing VTEX brand ID.\"),\n brandName: z\n .string()\n .min(1)\n .optional()\n .describe(\"Brand name to create or reuse when `brandId` is not provided.\"),\n departmentId: z.number().int().positive().optional().describe(\"Department ID for the category.\"),\n refId: z.string().optional().describe(\"Internal 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 product description.\"),\n linkId: z.string().optional().describe(\"Product slug.\"),\n releaseDate: z.string().optional().describe(\"Product release date in ISO format.\"),\n keyWords: z.string().optional().describe(\"Keywords string.\"),\n isVisible: z.boolean().optional().describe(\"Whether the product should be visible in listings.\"),\n isActive: z.boolean().optional().describe(\"Whether the product should be active.\"),\n taxCode: z.string().optional().describe(\"Tax code.\"),\n metaTagDescription: z.string().optional().describe(\"Meta description.\"),\n supplierId: z.number().int().positive().optional().describe(\"Supplier identifier.\"),\n showWithoutStock: z.boolean().optional().describe(\"Whether the product stays visible without stock.\"),\n score: z.number().int().optional().describe(\"Search score.\"),\n })\n .refine((value) => value.categoryId !== undefined || value.categoryPath !== undefined, {\n message: \"Provide either categoryId or categoryPath.\",\n path: [\"categoryId\"],\n })\n .refine((value) => value.brandId !== undefined || value.brandName !== undefined, {\n message: \"Provide either brandId or brandName.\",\n path: [\"brandId\"],\n });\n\nexport async function createProductHandler({\n profileId,\n name,\n categoryId,\n categoryPath,\n brandId,\n brandName,\n departmentId,\n refId,\n title,\n description,\n descriptionShort,\n linkId,\n releaseDate,\n keyWords,\n isVisible,\n isActive,\n taxCode,\n metaTagDescription,\n supplierId,\n showWithoutStock,\n score,\n}: z.infer<typeof createProductSchema>) {\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 payload: Record<string, unknown> = {\n Name: name,\n };\n\n if (categoryId !== undefined) payload.CategoryId = categoryId;\n if (categoryPath !== undefined) payload.CategoryPath = categoryPath;\n if (brandId !== undefined) payload.BrandId = brandId;\n if (brandName !== undefined) payload.BrandName = brandName;\n if (departmentId !== undefined) payload.DepartmentId = departmentId;\n if (refId !== undefined) payload.RefId = refId;\n if (title !== undefined) payload.Title = title;\n if (description !== undefined) payload.Description = description;\n if (descriptionShort !== undefined) payload.DescriptionShort = descriptionShort;\n if (linkId !== undefined) payload.LinkId = linkId;\n if (releaseDate !== undefined) payload.ReleaseDate = releaseDate;\n if (keyWords !== undefined) payload.KeyWords = keyWords;\n if (isVisible !== undefined) payload.IsVisible = isVisible;\n if (isActive !== undefined) payload.IsActive = isActive;\n if (taxCode !== undefined) payload.TaxCode = taxCode;\n if (metaTagDescription !== undefined) payload.MetaTagDescription = metaTagDescription;\n if (supplierId !== undefined) payload.SupplierId = supplierId;\n if (showWithoutStock !== undefined) payload.ShowWithoutStock = showWithoutStock;\n if (score !== undefined) payload.Score = score;\n\n const createdProduct = await createProduct(resolvedProfileId, payload);\n const resourceId = createdProduct.Id == null ? undefined : String(createdProduct.Id);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"create_product\",\n resourceId,\n riskLevel: \"low\",\n message: \"Product created successfully.\",\n before: null,\n after: createdProduct,\n details: {\n product_id: resourceId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, \"Failed to create product in VTEX\");\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createSku, createSkuEan } from "../../services/vtex/vtex-catalog-write.js";
|
|
3
|
+
import {
|
|
4
|
+
buildWriteSuccessResponse,
|
|
5
|
+
handleVtexWriteError,
|
|
6
|
+
resolveVtexWriteProfile,
|
|
7
|
+
vtexProfileIdSchemaField
|
|
8
|
+
} from "./write-helpers.js";
|
|
9
|
+
const createSkuSchema = z.object({
|
|
10
|
+
profileId: vtexProfileIdSchemaField,
|
|
11
|
+
productId: z.number().int().positive().describe("Parent product ID."),
|
|
12
|
+
name: z.string().min(1).describe("SKU name."),
|
|
13
|
+
refId: z.string().min(1).describe("Internal SKU reference code."),
|
|
14
|
+
ean: z.string().optional().describe("Optional EAN to attach after SKU creation."),
|
|
15
|
+
packagedHeight: z.number().nonnegative().describe("Packaged height."),
|
|
16
|
+
packagedLength: z.number().nonnegative().describe("Packaged length."),
|
|
17
|
+
packagedWidth: z.number().nonnegative().describe("Packaged width."),
|
|
18
|
+
packagedWeightKg: z.number().nonnegative().describe("Packaged weight in kg."),
|
|
19
|
+
height: z.number().nonnegative().optional().describe("Physical height."),
|
|
20
|
+
length: z.number().nonnegative().optional().describe("Physical length."),
|
|
21
|
+
width: z.number().nonnegative().optional().describe("Physical width."),
|
|
22
|
+
weightKg: z.number().nonnegative().optional().describe("Physical weight in kg."),
|
|
23
|
+
isActive: z.boolean().optional().describe("Whether the SKU should be created as active. VTEX recommends false during creation."),
|
|
24
|
+
activateIfPossible: z.boolean().optional().describe("Whether VTEX should auto-activate the SKU when an image or active component exists."),
|
|
25
|
+
measurementUnit: z.string().optional().describe("Measurement unit, for example `un`."),
|
|
26
|
+
unitMultiplier: z.number().positive().optional().describe("Unit multiplier."),
|
|
27
|
+
manufacturerCode: z.string().optional().describe("Manufacturer code."),
|
|
28
|
+
commercialConditionId: z.number().int().positive().optional().describe("Commercial condition ID.")
|
|
29
|
+
});
|
|
30
|
+
async function createSkuHandler({
|
|
31
|
+
profileId,
|
|
32
|
+
productId,
|
|
33
|
+
name,
|
|
34
|
+
refId,
|
|
35
|
+
ean,
|
|
36
|
+
packagedHeight,
|
|
37
|
+
packagedLength,
|
|
38
|
+
packagedWidth,
|
|
39
|
+
packagedWeightKg,
|
|
40
|
+
height,
|
|
41
|
+
length,
|
|
42
|
+
width,
|
|
43
|
+
weightKg,
|
|
44
|
+
isActive,
|
|
45
|
+
activateIfPossible,
|
|
46
|
+
measurementUnit,
|
|
47
|
+
unitMultiplier,
|
|
48
|
+
manufacturerCode,
|
|
49
|
+
commercialConditionId
|
|
50
|
+
}) {
|
|
51
|
+
try {
|
|
52
|
+
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
53
|
+
if (!profileResolution.ok) {
|
|
54
|
+
return profileResolution.response;
|
|
55
|
+
}
|
|
56
|
+
const resolvedProfileId = profileResolution.value.profileId;
|
|
57
|
+
const payload = {
|
|
58
|
+
ProductId: productId,
|
|
59
|
+
Name: name,
|
|
60
|
+
RefId: refId,
|
|
61
|
+
PackagedHeight: packagedHeight,
|
|
62
|
+
PackagedLength: packagedLength,
|
|
63
|
+
PackagedWidth: packagedWidth,
|
|
64
|
+
PackagedWeightKg: packagedWeightKg,
|
|
65
|
+
ActivateIfPossible: activateIfPossible ?? true,
|
|
66
|
+
IsActive: isActive ?? false
|
|
67
|
+
};
|
|
68
|
+
if (height !== void 0) payload.Height = height;
|
|
69
|
+
if (length !== void 0) payload.Length = length;
|
|
70
|
+
if (width !== void 0) payload.Width = width;
|
|
71
|
+
if (weightKg !== void 0) payload.WeightKg = weightKg;
|
|
72
|
+
if (measurementUnit !== void 0) payload.MeasurementUnit = measurementUnit;
|
|
73
|
+
if (unitMultiplier !== void 0) payload.UnitMultiplier = unitMultiplier;
|
|
74
|
+
if (manufacturerCode !== void 0) payload.ManufacturerCode = manufacturerCode;
|
|
75
|
+
if (commercialConditionId !== void 0) payload.CommercialConditionId = commercialConditionId;
|
|
76
|
+
const createdSku = await createSku(resolvedProfileId, payload);
|
|
77
|
+
const resourceId = createdSku.Id == null ? void 0 : String(createdSku.Id);
|
|
78
|
+
if (resourceId && ean?.trim()) {
|
|
79
|
+
await createSkuEan(resolvedProfileId, resourceId, ean.trim());
|
|
80
|
+
createdSku.Eans = [ean.trim()];
|
|
81
|
+
}
|
|
82
|
+
return buildWriteSuccessResponse({
|
|
83
|
+
profileId: resolvedProfileId,
|
|
84
|
+
operation: "create_sku",
|
|
85
|
+
resourceId,
|
|
86
|
+
riskLevel: "low",
|
|
87
|
+
message: "SKU created successfully.",
|
|
88
|
+
before: null,
|
|
89
|
+
after: createdSku,
|
|
90
|
+
details: {
|
|
91
|
+
product_id: productId,
|
|
92
|
+
sku_id: resourceId
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
} catch (err) {
|
|
96
|
+
return handleVtexWriteError(err, "Failed to create SKU in VTEX");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export {
|
|
100
|
+
createSkuHandler,
|
|
101
|
+
createSkuSchema
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=create-sku.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/create-sku.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport { createSku, createSkuEan } from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const createSkuSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n productId: z.number().int().positive().describe(\"Parent product ID.\"),\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 SKU 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 isActive: z\n .boolean()\n .optional()\n .describe(\"Whether the SKU should be created as active. VTEX recommends false during creation.\"),\n activateIfPossible: z\n .boolean()\n .optional()\n .describe(\"Whether VTEX should auto-activate the SKU when an image or active component exists.\"),\n measurementUnit: z.string().optional().describe(\"Measurement unit, for example `un`.\"),\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});\n\nexport async function createSkuHandler({\n profileId,\n productId,\n name,\n refId,\n ean,\n packagedHeight,\n packagedLength,\n packagedWidth,\n packagedWeightKg,\n height,\n length,\n width,\n weightKg,\n isActive,\n activateIfPossible,\n measurementUnit,\n unitMultiplier,\n manufacturerCode,\n commercialConditionId,\n}: z.infer<typeof createSkuSchema>) {\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 payload: Record<string, unknown> = {\n ProductId: productId,\n Name: name,\n RefId: refId,\n PackagedHeight: packagedHeight,\n PackagedLength: packagedLength,\n PackagedWidth: packagedWidth,\n PackagedWeightKg: packagedWeightKg,\n ActivateIfPossible: activateIfPossible ?? true,\n IsActive: isActive ?? false,\n };\n\n if (height !== undefined) payload.Height = height;\n if (length !== undefined) payload.Length = length;\n if (width !== undefined) payload.Width = width;\n if (weightKg !== undefined) payload.WeightKg = weightKg;\n if (measurementUnit !== undefined) payload.MeasurementUnit = measurementUnit;\n if (unitMultiplier !== undefined) payload.UnitMultiplier = unitMultiplier;\n if (manufacturerCode !== undefined) payload.ManufacturerCode = manufacturerCode;\n if (commercialConditionId !== undefined) payload.CommercialConditionId = commercialConditionId;\n\n const createdSku = await createSku(resolvedProfileId, payload);\n const resourceId = createdSku.Id == null ? undefined : String(createdSku.Id);\n\n if (resourceId && ean?.trim()) {\n await createSkuEan(resolvedProfileId, resourceId, ean.trim());\n createdSku.Eans = [ean.trim()];\n }\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"create_sku\",\n resourceId,\n riskLevel: \"low\",\n message: \"SKU created successfully.\",\n before: null,\n after: createdSku,\n details: {\n product_id: productId,\n sku_id: resourceId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, \"Failed to create SKU in VTEX\");\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createSpecificationValue } from "../../services/vtex/vtex-catalog-write.js";
|
|
3
|
+
import {
|
|
4
|
+
buildWriteSuccessResponse,
|
|
5
|
+
handleVtexWriteError,
|
|
6
|
+
resolveVtexWriteProfile,
|
|
7
|
+
vtexProfileIdSchemaField
|
|
8
|
+
} from "./write-helpers.js";
|
|
9
|
+
const createSpecificationValueSchema = z.object({
|
|
10
|
+
profileId: vtexProfileIdSchemaField,
|
|
11
|
+
fieldId: z.number().int().positive().describe("Specification field ID."),
|
|
12
|
+
name: z.string().min(1).describe("Specification value name."),
|
|
13
|
+
isActive: z.boolean().optional().describe("Whether the value should be active."),
|
|
14
|
+
position: z.number().int().nonnegative().optional().describe("Display position.")
|
|
15
|
+
});
|
|
16
|
+
async function createSpecificationValueHandler({
|
|
17
|
+
profileId,
|
|
18
|
+
fieldId,
|
|
19
|
+
name,
|
|
20
|
+
isActive,
|
|
21
|
+
position
|
|
22
|
+
}) {
|
|
23
|
+
try {
|
|
24
|
+
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
25
|
+
if (!profileResolution.ok) {
|
|
26
|
+
return profileResolution.response;
|
|
27
|
+
}
|
|
28
|
+
const resolvedProfileId = profileResolution.value.profileId;
|
|
29
|
+
const createdValue = await createSpecificationValue(resolvedProfileId, {
|
|
30
|
+
FieldId: fieldId,
|
|
31
|
+
Name: name,
|
|
32
|
+
IsActive: isActive ?? true,
|
|
33
|
+
Position: position ?? 0,
|
|
34
|
+
Text: null
|
|
35
|
+
});
|
|
36
|
+
return buildWriteSuccessResponse({
|
|
37
|
+
profileId: resolvedProfileId,
|
|
38
|
+
operation: "create_specification_value",
|
|
39
|
+
resourceId: String(createdValue.FieldValueId ?? ""),
|
|
40
|
+
riskLevel: "low",
|
|
41
|
+
message: "Specification value created successfully.",
|
|
42
|
+
before: null,
|
|
43
|
+
after: createdValue
|
|
44
|
+
});
|
|
45
|
+
} catch (err) {
|
|
46
|
+
return handleVtexWriteError(err, "Failed to create specification value in VTEX");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
createSpecificationValueHandler,
|
|
51
|
+
createSpecificationValueSchema
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=create-specification-value.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/create-specification-value.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport { createSpecificationValue } from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const createSpecificationValueSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n fieldId: z.number().int().positive().describe(\"Specification field ID.\"),\n name: z.string().min(1).describe(\"Specification value name.\"),\n isActive: z.boolean().optional().describe(\"Whether the value should be active.\"),\n position: z.number().int().nonnegative().optional().describe(\"Display position.\"),\n});\n\nexport async function createSpecificationValueHandler({\n profileId,\n fieldId,\n name,\n isActive,\n position,\n}: z.infer<typeof createSpecificationValueSchema>) {\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 createdValue = await createSpecificationValue(resolvedProfileId, {\n FieldId: fieldId,\n Name: name,\n IsActive: isActive ?? true,\n Position: position ?? 0,\n Text: null,\n });\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"create_specification_value\",\n resourceId: String(createdValue.FieldValueId ?? \"\"),\n riskLevel: \"low\",\n message: \"Specification value created successfully.\",\n before: null,\n after: createdValue,\n });\n } catch (err) {\n return handleVtexWriteError(err, \"Failed to create specification value in VTEX\");\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAElB,SAAS,gCAAgC;AACzC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,WAAW;AAAA,EACX,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,EACvE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,2BAA2B;AAAA,EAC5D,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,qCAAqC;AAAA,EAC/E,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAClF,CAAC;AAED,eAAsB,gCAAgC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmD;AACjD,MAAI;AACF,UAAM,oBAAoB,MAAM,wBAAwB,SAAS;AACjE,QAAI,CAAC,kBAAkB,IAAI;AACzB,aAAO,kBAAkB;AAAA,IAC3B;AAEA,UAAM,oBAAoB,kBAAkB,MAAM;AAClD,UAAM,eAAe,MAAM,yBAAyB,mBAAmB;AAAA,MACrE,SAAS;AAAA,MACT,MAAM;AAAA,MACN,UAAU,YAAY;AAAA,MACtB,UAAU,YAAY;AAAA,MACtB,MAAM;AAAA,IACR,CAAC;AAED,WAAO,0BAA0B;AAAA,MAC/B,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY,OAAO,aAAa,gBAAgB,EAAE;AAAA,MAClD,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,qBAAqB,KAAK,8CAA8C;AAAA,EACjF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createSpecification } from "../../services/vtex/vtex-catalog-write.js";
|
|
3
|
+
import {
|
|
4
|
+
buildWriteSuccessResponse,
|
|
5
|
+
handleVtexWriteError,
|
|
6
|
+
resolveVtexWriteProfile,
|
|
7
|
+
vtexProfileIdSchemaField
|
|
8
|
+
} from "./write-helpers.js";
|
|
9
|
+
const createSpecificationSchema = z.object({
|
|
10
|
+
profileId: vtexProfileIdSchemaField,
|
|
11
|
+
fieldTypeId: z.enum(["1", "2", "4", "5", "6", "7", "8", "9"]).transform((value) => Number(value)).describe("Specification field type ID."),
|
|
12
|
+
fieldGroupId: z.number().int().positive().describe("Specification group ID."),
|
|
13
|
+
name: z.string().min(1).describe("Specification name."),
|
|
14
|
+
categoryId: z.number().int().positive().optional().describe("Optional category ID."),
|
|
15
|
+
description: z.string().optional().describe("Specification description."),
|
|
16
|
+
position: z.number().int().nonnegative().optional().describe("Display position."),
|
|
17
|
+
isFilter: z.boolean().optional().describe("Whether the specification should act as a filter."),
|
|
18
|
+
isRequired: z.boolean().optional().describe("Whether the specification is required."),
|
|
19
|
+
isOnProductDetails: z.boolean().optional().describe("Whether the specification should appear on product details."),
|
|
20
|
+
isStockKeepingUnit: z.boolean().optional().describe("Whether this is an SKU specification."),
|
|
21
|
+
isWizard: z.boolean().optional().describe("Wizard flag from VTEX."),
|
|
22
|
+
isActive: z.boolean().optional().describe("Whether the specification is active."),
|
|
23
|
+
isTopMenuLinkActive: z.boolean().optional().describe("Top menu link flag."),
|
|
24
|
+
isSideMenuLinkActive: z.boolean().optional().describe("Side menu link flag."),
|
|
25
|
+
defaultValue: z.string().optional().describe("Default value.")
|
|
26
|
+
});
|
|
27
|
+
async function createSpecificationHandler({
|
|
28
|
+
profileId,
|
|
29
|
+
fieldTypeId,
|
|
30
|
+
fieldGroupId,
|
|
31
|
+
name,
|
|
32
|
+
categoryId,
|
|
33
|
+
description,
|
|
34
|
+
position,
|
|
35
|
+
isFilter,
|
|
36
|
+
isRequired,
|
|
37
|
+
isOnProductDetails,
|
|
38
|
+
isStockKeepingUnit,
|
|
39
|
+
isWizard,
|
|
40
|
+
isActive,
|
|
41
|
+
isTopMenuLinkActive,
|
|
42
|
+
isSideMenuLinkActive,
|
|
43
|
+
defaultValue
|
|
44
|
+
}) {
|
|
45
|
+
try {
|
|
46
|
+
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
47
|
+
if (!profileResolution.ok) {
|
|
48
|
+
return profileResolution.response;
|
|
49
|
+
}
|
|
50
|
+
const resolvedProfileId = profileResolution.value.profileId;
|
|
51
|
+
const createdSpecification = await createSpecification(resolvedProfileId, {
|
|
52
|
+
FieldTypeId: fieldTypeId,
|
|
53
|
+
FieldGroupId: fieldGroupId,
|
|
54
|
+
Name: name,
|
|
55
|
+
CategoryId: categoryId,
|
|
56
|
+
Description: description ?? null,
|
|
57
|
+
Position: position ?? 0,
|
|
58
|
+
IsFilter: isFilter ?? false,
|
|
59
|
+
IsRequired: isRequired ?? false,
|
|
60
|
+
IsOnProductDetails: isOnProductDetails ?? true,
|
|
61
|
+
IsStockKeepingUnit: isStockKeepingUnit ?? false,
|
|
62
|
+
IsWizard: isWizard ?? false,
|
|
63
|
+
IsActive: isActive ?? true,
|
|
64
|
+
IsTopMenuLinkActive: isTopMenuLinkActive ?? false,
|
|
65
|
+
IsSideMenuLinkActive: isSideMenuLinkActive ?? false,
|
|
66
|
+
DefaultValue: defaultValue ?? ""
|
|
67
|
+
});
|
|
68
|
+
return buildWriteSuccessResponse({
|
|
69
|
+
profileId: resolvedProfileId,
|
|
70
|
+
operation: "create_specification",
|
|
71
|
+
resourceId: String(createdSpecification.Id ?? ""),
|
|
72
|
+
riskLevel: "low",
|
|
73
|
+
message: "Specification created successfully.",
|
|
74
|
+
before: null,
|
|
75
|
+
after: createdSpecification
|
|
76
|
+
});
|
|
77
|
+
} catch (err) {
|
|
78
|
+
return handleVtexWriteError(err, "Failed to create specification in VTEX");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
createSpecificationHandler,
|
|
83
|
+
createSpecificationSchema
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=create-specification.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/create-specification.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport { createSpecification } from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const createSpecificationSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n fieldTypeId: z\n .enum([\"1\", \"2\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"])\n .transform((value) => Number(value))\n .describe(\"Specification field type ID.\"),\n fieldGroupId: z.number().int().positive().describe(\"Specification group ID.\"),\n name: z.string().min(1).describe(\"Specification name.\"),\n categoryId: z.number().int().positive().optional().describe(\"Optional category ID.\"),\n description: z.string().optional().describe(\"Specification description.\"),\n position: z.number().int().nonnegative().optional().describe(\"Display position.\"),\n isFilter: z.boolean().optional().describe(\"Whether the specification should act as a filter.\"),\n isRequired: z.boolean().optional().describe(\"Whether the specification is required.\"),\n isOnProductDetails: z.boolean().optional().describe(\"Whether the specification should appear on product details.\"),\n isStockKeepingUnit: z.boolean().optional().describe(\"Whether this is an SKU specification.\"),\n isWizard: z.boolean().optional().describe(\"Wizard flag from VTEX.\"),\n isActive: z.boolean().optional().describe(\"Whether the specification is active.\"),\n isTopMenuLinkActive: z.boolean().optional().describe(\"Top menu link flag.\"),\n isSideMenuLinkActive: z.boolean().optional().describe(\"Side menu link flag.\"),\n defaultValue: z.string().optional().describe(\"Default value.\"),\n});\n\nexport async function createSpecificationHandler({\n profileId,\n fieldTypeId,\n fieldGroupId,\n name,\n categoryId,\n description,\n position,\n isFilter,\n isRequired,\n isOnProductDetails,\n isStockKeepingUnit,\n isWizard,\n isActive,\n isTopMenuLinkActive,\n isSideMenuLinkActive,\n defaultValue,\n}: z.infer<typeof createSpecificationSchema>) {\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 createdSpecification = await createSpecification(resolvedProfileId, {\n FieldTypeId: fieldTypeId,\n FieldGroupId: fieldGroupId,\n Name: name,\n CategoryId: categoryId,\n Description: description ?? null,\n Position: position ?? 0,\n IsFilter: isFilter ?? false,\n IsRequired: isRequired ?? false,\n IsOnProductDetails: isOnProductDetails ?? true,\n IsStockKeepingUnit: isStockKeepingUnit ?? false,\n IsWizard: isWizard ?? false,\n IsActive: isActive ?? true,\n IsTopMenuLinkActive: isTopMenuLinkActive ?? false,\n IsSideMenuLinkActive: isSideMenuLinkActive ?? false,\n DefaultValue: defaultValue ?? \"\",\n });\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"create_specification\",\n resourceId: String(createdSpecification.Id ?? \"\"),\n riskLevel: \"low\",\n message: \"Specification created successfully.\",\n before: null,\n after: createdSpecification,\n });\n } catch (err) {\n return handleVtexWriteError(err, \"Failed to create specification in VTEX\");\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAElB,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,WAAW;AAAA,EACX,aAAa,EACV,KAAK,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,EAC7C,UAAU,CAAC,UAAU,OAAO,KAAK,CAAC,EAClC,SAAS,8BAA8B;AAAA,EAC1C,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,EAC5E,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,qBAAqB;AAAA,EACtD,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,EACnF,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,EACxE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,EAChF,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC7F,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,wCAAwC;AAAA,EACpF,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,6DAA6D;AAAA,EACjH,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,EAC3F,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,EAClE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,sCAAsC;AAAA,EAChF,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,EAC1E,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,EAC5E,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAC/D,CAAC;AAED,eAAsB,2BAA2B;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,MAAI;AACF,UAAM,oBAAoB,MAAM,wBAAwB,SAAS;AACjE,QAAI,CAAC,kBAAkB,IAAI;AACzB,aAAO,kBAAkB;AAAA,IAC3B;AAEA,UAAM,oBAAoB,kBAAkB,MAAM;AAClD,UAAM,uBAAuB,MAAM,oBAAoB,mBAAmB;AAAA,MACxE,aAAa;AAAA,MACb,cAAc;AAAA,MACd,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa,eAAe;AAAA,MAC5B,UAAU,YAAY;AAAA,MACtB,UAAU,YAAY;AAAA,MACtB,YAAY,cAAc;AAAA,MAC1B,oBAAoB,sBAAsB;AAAA,MAC1C,oBAAoB,sBAAsB;AAAA,MAC1C,UAAU,YAAY;AAAA,MACtB,UAAU,YAAY;AAAA,MACtB,qBAAqB,uBAAuB;AAAA,MAC5C,sBAAsB,wBAAwB;AAAA,MAC9C,cAAc,gBAAgB;AAAA,IAChC,CAAC;AAED,WAAO,0BAA0B;AAAA,MAC/B,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY,OAAO,qBAAqB,MAAM,EAAE;AAAA,MAChD,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,qBAAqB,KAAK,wCAAwC;AAAA,EAC3E;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import {
|
|
3
|
+
buildSkuUpdatePayload,
|
|
4
|
+
getSku,
|
|
5
|
+
updateSku
|
|
6
|
+
} from "../../services/vtex/vtex-catalog-write.js";
|
|
7
|
+
import {
|
|
8
|
+
buildWriteSuccessResponse,
|
|
9
|
+
handleVtexWriteError,
|
|
10
|
+
resolveVtexWriteProfile,
|
|
11
|
+
vtexProfileIdSchemaField
|
|
12
|
+
} from "./write-helpers.js";
|
|
13
|
+
const deactivateSkuSchema = z.object({
|
|
14
|
+
profileId: vtexProfileIdSchemaField,
|
|
15
|
+
skuId: z.string().min(1).describe("VTEX SKU identifier to deactivate.")
|
|
16
|
+
});
|
|
17
|
+
async function deactivateSkuHandler({
|
|
18
|
+
profileId,
|
|
19
|
+
skuId
|
|
20
|
+
}) {
|
|
21
|
+
try {
|
|
22
|
+
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
23
|
+
if (!profileResolution.ok) {
|
|
24
|
+
return profileResolution.response;
|
|
25
|
+
}
|
|
26
|
+
const resolvedProfileId = profileResolution.value.profileId;
|
|
27
|
+
const beforeSku = await getSku(resolvedProfileId, skuId);
|
|
28
|
+
const afterSku = await updateSku(
|
|
29
|
+
resolvedProfileId,
|
|
30
|
+
skuId,
|
|
31
|
+
buildSkuUpdatePayload(beforeSku, { isActive: false })
|
|
32
|
+
);
|
|
33
|
+
return buildWriteSuccessResponse({
|
|
34
|
+
profileId: resolvedProfileId,
|
|
35
|
+
operation: "deactivate_sku",
|
|
36
|
+
resourceId: skuId,
|
|
37
|
+
riskLevel: "low",
|
|
38
|
+
message: "SKU deactivated successfully.",
|
|
39
|
+
before: beforeSku,
|
|
40
|
+
after: afterSku,
|
|
41
|
+
details: {
|
|
42
|
+
sku_id: skuId
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
} catch (err) {
|
|
46
|
+
return handleVtexWriteError(err, `Failed to deactivate SKU ${skuId}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
deactivateSkuHandler,
|
|
51
|
+
deactivateSkuSchema
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=deactivate-sku.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/deactivate-sku.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport {\n buildSkuUpdatePayload,\n getSku,\n updateSku,\n} from \"../../services/vtex/vtex-catalog-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const deactivateSkuSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"VTEX SKU identifier to deactivate.\"),\n});\n\nexport async function deactivateSkuHandler({\n profileId,\n skuId,\n}: z.infer<typeof deactivateSkuSchema>) {\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 beforeSku = await getSku(resolvedProfileId, skuId);\n const afterSku = await updateSku(\n resolvedProfileId,\n skuId,\n buildSkuUpdatePayload(beforeSku, { isActive: false })\n );\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"deactivate_sku\",\n resourceId: skuId,\n riskLevel: \"low\",\n message: \"SKU deactivated successfully.\",\n before: beforeSku,\n after: afterSku,\n details: {\n sku_id: skuId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(err, `Failed to deactivate SKU ${skuId}`);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAElB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,WAAW;AAAA,EACX,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oCAAoC;AACxE,CAAC;AAED,eAAsB,qBAAqB;AAAA,EACzC;AAAA,EACA;AACF,GAAwC;AACtC,MAAI;AACF,UAAM,oBAAoB,MAAM,wBAAwB,SAAS;AACjE,QAAI,CAAC,kBAAkB,IAAI;AACzB,aAAO,kBAAkB;AAAA,IAC3B;AAEA,UAAM,oBAAoB,kBAAkB,MAAM;AAClD,UAAM,YAAY,MAAM,OAAO,mBAAmB,KAAK;AACvD,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA,sBAAsB,WAAW,EAAE,UAAU,MAAM,CAAC;AAAA,IACtD;AAEA,WAAO,0BAA0B;AAAA,MAC/B,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,qBAAqB,KAAK,4BAA4B,KAAK,EAAE;AAAA,EACtE;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getSkuPrice } from "../../services/vtex/vtex-pricing.js";
|
|
3
|
+
import { deleteFixedPricesForPriceTable } from "../../services/vtex/vtex-pricing-write.js";
|
|
4
|
+
import {
|
|
5
|
+
buildWriteSuccessResponse,
|
|
6
|
+
handleVtexWriteError,
|
|
7
|
+
resolveVtexWriteProfile,
|
|
8
|
+
vtexProfileIdSchemaField
|
|
9
|
+
} from "./write-helpers.js";
|
|
10
|
+
const deleteFixedPriceSchema = z.object({
|
|
11
|
+
profileId: vtexProfileIdSchemaField,
|
|
12
|
+
skuId: z.string().min(1).describe("SKU item identifier used by VTEX Pricing."),
|
|
13
|
+
priceTableId: z.string().min(1).describe("Trade policy or price table identifier to clear.")
|
|
14
|
+
});
|
|
15
|
+
async function deleteFixedPriceHandler({
|
|
16
|
+
profileId,
|
|
17
|
+
skuId,
|
|
18
|
+
priceTableId
|
|
19
|
+
}) {
|
|
20
|
+
try {
|
|
21
|
+
const profileResolution = await resolveVtexWriteProfile(profileId);
|
|
22
|
+
if (!profileResolution.ok) {
|
|
23
|
+
return profileResolution.response;
|
|
24
|
+
}
|
|
25
|
+
const resolvedProfileId = profileResolution.value.profileId;
|
|
26
|
+
const beforePrice = await getSkuPrice(resolvedProfileId, skuId);
|
|
27
|
+
await deleteFixedPricesForPriceTable(resolvedProfileId, skuId, priceTableId);
|
|
28
|
+
const afterPrice = await getSkuPrice(resolvedProfileId, skuId);
|
|
29
|
+
return buildWriteSuccessResponse({
|
|
30
|
+
profileId: resolvedProfileId,
|
|
31
|
+
operation: "delete_fixed_price",
|
|
32
|
+
resourceId: skuId,
|
|
33
|
+
riskLevel: "low",
|
|
34
|
+
message: "Fixed prices deleted successfully for the selected price table.",
|
|
35
|
+
before: beforePrice,
|
|
36
|
+
after: afterPrice,
|
|
37
|
+
details: {
|
|
38
|
+
sku_id: skuId,
|
|
39
|
+
price_table_id: priceTableId
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
} catch (err) {
|
|
43
|
+
return handleVtexWriteError(
|
|
44
|
+
err,
|
|
45
|
+
`Failed to delete fixed prices for SKU ${skuId} on price table ${priceTableId}`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
deleteFixedPriceHandler,
|
|
51
|
+
deleteFixedPriceSchema
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=delete-fixed-price.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/tools/vtex/delete-fixed-price.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nimport { getSkuPrice } from \"../../services/vtex/vtex-pricing.js\";\nimport { deleteFixedPricesForPriceTable } from \"../../services/vtex/vtex-pricing-write.js\";\nimport {\n buildWriteSuccessResponse,\n handleVtexWriteError,\n resolveVtexWriteProfile,\n vtexProfileIdSchemaField,\n} from \"./write-helpers.js\";\n\nexport const deleteFixedPriceSchema = z.object({\n profileId: vtexProfileIdSchemaField,\n skuId: z.string().min(1).describe(\"SKU item identifier used by VTEX Pricing.\"),\n priceTableId: z.string().min(1).describe(\"Trade policy or price table identifier to clear.\"),\n});\n\nexport async function deleteFixedPriceHandler({\n profileId,\n skuId,\n priceTableId,\n}: z.infer<typeof deleteFixedPriceSchema>) {\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 beforePrice = await getSkuPrice(resolvedProfileId, skuId);\n\n await deleteFixedPricesForPriceTable(resolvedProfileId, skuId, priceTableId);\n\n const afterPrice = await getSkuPrice(resolvedProfileId, skuId);\n\n return buildWriteSuccessResponse({\n profileId: resolvedProfileId,\n operation: \"delete_fixed_price\",\n resourceId: skuId,\n riskLevel: \"low\",\n message: \"Fixed prices deleted successfully for the selected price table.\",\n before: beforePrice as unknown as Record<string, unknown>,\n after: afterPrice as unknown as Record<string, unknown>,\n details: {\n sku_id: skuId,\n price_table_id: priceTableId,\n },\n });\n } catch (err) {\n return handleVtexWriteError(\n err,\n `Failed to delete fixed prices for SKU ${skuId} on price table ${priceTableId}`\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAElB,SAAS,mBAAmB;AAC5B,SAAS,sCAAsC;AAC/C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,WAAW;AAAA,EACX,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,2CAA2C;AAAA,EAC7E,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,kDAAkD;AAC7F,CAAC;AAED,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,MAAI;AACF,UAAM,oBAAoB,MAAM,wBAAwB,SAAS;AACjE,QAAI,CAAC,kBAAkB,IAAI;AACzB,aAAO,kBAAkB;AAAA,IAC3B;AAEA,UAAM,oBAAoB,kBAAkB,MAAM;AAClD,UAAM,cAAc,MAAM,YAAY,mBAAmB,KAAK;AAE9D,UAAM,+BAA+B,mBAAmB,OAAO,YAAY;AAE3E,UAAM,aAAa,MAAM,YAAY,mBAAmB,KAAK;AAE7D,WAAO,0BAA0B;AAAA,MAC/B,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO;AAAA,MACL;AAAA,MACA,yCAAyC,KAAK,mBAAmB,YAAY;AAAA,IAC/E;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -4,9 +4,29 @@ export * from "./inventory-check.js";
|
|
|
4
4
|
export * from "./warehouse-inventory.js";
|
|
5
5
|
export * from "./update-inventory.js";
|
|
6
6
|
export * from "./update-lead-time.js";
|
|
7
|
+
export * from "./toggle-unlimited-quantity.js";
|
|
7
8
|
export * from "./sku-price.js";
|
|
8
9
|
export * from "./computed-price.js";
|
|
9
10
|
export * from "./product-offers.js";
|
|
10
11
|
export * from "./sku-offers.js";
|
|
12
|
+
export * from "./update-sku-price.js";
|
|
13
|
+
export * from "./upsert-fixed-price.js";
|
|
14
|
+
export * from "./delete-fixed-price.js";
|
|
15
|
+
export * from "./activate-sku.js";
|
|
16
|
+
export * from "./deactivate-sku.js";
|
|
17
|
+
export * from "./update-product-basic-fields.js";
|
|
18
|
+
export * from "./update-sku-basic-fields.js";
|
|
19
|
+
export * from "./create-product.js";
|
|
20
|
+
export * from "./create-sku.js";
|
|
21
|
+
export * from "./create-product-with-sku.js";
|
|
22
|
+
export * from "./create-brand.js";
|
|
23
|
+
export * from "./create-category.js";
|
|
24
|
+
export * from "./create-specification.js";
|
|
25
|
+
export * from "./create-specification-value.js";
|
|
26
|
+
export * from "./associate-specification.js";
|
|
27
|
+
export * from "./attach-catalog-image.js";
|
|
28
|
+
export * from "./cancel-order.js";
|
|
29
|
+
export * from "./invoice-order.js";
|
|
30
|
+
export * from "./add-order-tracking.js";
|
|
11
31
|
export * from "./profile-resolution.js";
|
|
12
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/tools/vtex/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./orders-summary.js\";\nexport * from \"./order-details.js\";\nexport * from \"./inventory-check.js\";\nexport * from \"./warehouse-inventory.js\";\nexport * from \"./update-inventory.js\";\nexport * from \"./update-lead-time.js\";\nexport * from \"./sku-price.js\";\nexport * from \"./computed-price.js\";\nexport * from \"./product-offers.js\";\nexport * from \"./sku-offers.js\";\nexport * from \"./profile-resolution.js\";\n"],
|
|
5
|
-
"mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
4
|
+
"sourcesContent": ["export * from \"./orders-summary.js\";\nexport * from \"./order-details.js\";\nexport * from \"./inventory-check.js\";\nexport * from \"./warehouse-inventory.js\";\nexport * from \"./update-inventory.js\";\nexport * from \"./update-lead-time.js\";\nexport * from \"./toggle-unlimited-quantity.js\";\nexport * from \"./sku-price.js\";\nexport * from \"./computed-price.js\";\nexport * from \"./product-offers.js\";\nexport * from \"./sku-offers.js\";\nexport * from \"./update-sku-price.js\";\nexport * from \"./upsert-fixed-price.js\";\nexport * from \"./delete-fixed-price.js\";\nexport * from \"./activate-sku.js\";\nexport * from \"./deactivate-sku.js\";\nexport * from \"./update-product-basic-fields.js\";\nexport * from \"./update-sku-basic-fields.js\";\nexport * from \"./create-product.js\";\nexport * from \"./create-sku.js\";\nexport * from \"./create-product-with-sku.js\";\nexport * from \"./create-brand.js\";\nexport * from \"./create-category.js\";\nexport * from \"./create-specification.js\";\nexport * from \"./create-specification-value.js\";\nexport * from \"./associate-specification.js\";\nexport * from \"./attach-catalog-image.js\";\nexport * from \"./cancel-order.js\";\nexport * from \"./invoice-order.js\";\nexport * from \"./add-order-tracking.js\";\nexport * from \"./profile-resolution.js\";\n"],
|
|
5
|
+
"mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|