medusa-import-product-plugin 0.0.1
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/.medusa/server/src/admin/index.js +590 -0
- package/.medusa/server/src/admin/index.mjs +591 -0
- package/.medusa/server/src/api/admin/import/[id]/pause/route.js +25 -0
- package/.medusa/server/src/api/admin/import/[id]/resume/route.js +51 -0
- package/.medusa/server/src/api/admin/import/[id]/route.js +57 -0
- package/.medusa/server/src/api/admin/import/route.js +88 -0
- package/.medusa/server/src/api/admin/plugin/route.js +7 -0
- package/.medusa/server/src/api/middlewares.js +46 -0
- package/.medusa/server/src/api/store/plugin/route.js +7 -0
- package/.medusa/server/src/modules/import/index.js +13 -0
- package/.medusa/server/src/modules/import/migrations/Migration20260603094700.js +21 -0
- package/.medusa/server/src/modules/import/migrations/Migration20260605102500.js +14 -0
- package/.medusa/server/src/modules/import/models/import-job.js +24 -0
- package/.medusa/server/src/modules/import/models/import-row.js +18 -0
- package/.medusa/server/src/modules/import/service.js +59 -0
- package/.medusa/server/src/modules/import/types/enums.js +19 -0
- package/.medusa/server/src/modules/import/types/index.js +9 -0
- package/.medusa/server/src/modules/import/types/records.js +3 -0
- package/.medusa/server/src/modules/import/types/workflow.js +69 -0
- package/.medusa/server/src/subscribers/product-import.js +98 -0
- package/.medusa/server/src/workflows/index.js +18 -0
- package/.medusa/server/src/workflows/process-import.js +404 -0
- package/.medusa/server/src/workflows/steps/create-category-attributes.step.js +29 -0
- package/.medusa/server/src/workflows/steps/create-variant-price-sets.step.js +36 -0
- package/.medusa/server/src/workflows/steps/download-and-upload-images.step.js +77 -0
- package/.medusa/server/src/workflows/steps/find-or-create-category.step.js +40 -0
- package/.medusa/server/src/workflows/steps/find-products-by-handle.step.js +13 -0
- package/.medusa/server/src/workflows/steps/find-products-by-variant-sku.step.js +19 -0
- package/.medusa/server/src/workflows/steps/list-category-attributes-by-labels.step.js +27 -0
- package/.medusa/server/src/workflows/steps/list-existing-inventory-levels.step.js +24 -0
- package/.medusa/server/src/workflows/steps/list-inventory-items-by-sku.step.js +13 -0
- package/.medusa/server/src/workflows/steps/list-product-tags-by-value.step.js +13 -0
- package/.medusa/server/src/workflows/steps/parse-csv.step.js +160 -0
- package/.medusa/server/src/workflows/steps/refetch-products-by-handle.step.js +16 -0
- package/.medusa/server/src/workflows/steps/resolve-default-stock-location.step.js +17 -0
- package/.medusa/server/src/workflows/steps/set-product-attributes.step.js +53 -0
- package/.medusa/server/src/workflows/steps/update-dealer-prices.step.js +77 -0
- package/.medusa/server/src/workflows/steps/update-variant-prices.step.js +74 -0
- package/README.md +64 -0
- package/package.json +77 -0
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processImportWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const core_flows_1 = require("@medusajs/core-flows");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const parse_csv_step_1 = require("./steps/parse-csv.step");
|
|
8
|
+
const types_1 = require("../modules/import/types");
|
|
9
|
+
const list_product_tags_by_value_step_1 = require("./steps/list-product-tags-by-value.step");
|
|
10
|
+
const find_products_by_handle_step_1 = require("./steps/find-products-by-handle.step");
|
|
11
|
+
const find_products_by_variant_sku_step_1 = require("./steps/find-products-by-variant-sku.step");
|
|
12
|
+
const list_inventory_items_by_sku_step_1 = require("./steps/list-inventory-items-by-sku.step");
|
|
13
|
+
const resolve_default_stock_location_step_1 = require("./steps/resolve-default-stock-location.step");
|
|
14
|
+
const list_existing_inventory_levels_step_1 = require("./steps/list-existing-inventory-levels.step");
|
|
15
|
+
const list_category_attributes_by_labels_step_1 = require("./steps/list-category-attributes-by-labels.step");
|
|
16
|
+
const create_category_attributes_step_1 = require("./steps/create-category-attributes.step");
|
|
17
|
+
const set_product_attributes_step_1 = require("./steps/set-product-attributes.step");
|
|
18
|
+
const find_or_create_category_step_1 = require("./steps/find-or-create-category.step");
|
|
19
|
+
const update_variant_prices_step_1 = require("./steps/update-variant-prices.step");
|
|
20
|
+
const create_variant_price_sets_step_1 = require("./steps/create-variant-price-sets.step");
|
|
21
|
+
const refetch_products_by_handle_step_1 = require("./steps/refetch-products-by-handle.step");
|
|
22
|
+
const download_and_upload_images_step_1 = require("./steps/download-and-upload-images.step");
|
|
23
|
+
exports.processImportWorkflow = (0, workflows_sdk_1.createWorkflow)({
|
|
24
|
+
name: "process-import",
|
|
25
|
+
store: true,
|
|
26
|
+
retentionTime: 60 * 60 * 24 * 7,
|
|
27
|
+
}, function ({ filePath, jobId, priceListId, salesChannelId }) {
|
|
28
|
+
// 1. Parse CSV
|
|
29
|
+
const products = (0, parse_csv_step_1.parseCSVStep)({ filePath });
|
|
30
|
+
// 1b. Extract unique image URLs and upload to Medusa file storage
|
|
31
|
+
const uniqueImageUrls = (0, workflows_sdk_1.transform)(products, (prods) => [
|
|
32
|
+
...new Set(prods.flatMap((p) => p.images ?? []).filter((url) => !!url)),
|
|
33
|
+
]);
|
|
34
|
+
const hasImages = (0, workflows_sdk_1.transform)(uniqueImageUrls, (urls) => urls.length > 0);
|
|
35
|
+
const rawImageMapping = (0, download_and_upload_images_step_1.downloadAndUploadImagesStep)((0, workflows_sdk_1.transform)({ uniqueImageUrls, hasImages }, ({ uniqueImageUrls: urls, hasImages: h }) => h ? urls : []));
|
|
36
|
+
const imageMapping = rawImageMapping;
|
|
37
|
+
// 2. Tags — find existing, create only new ones
|
|
38
|
+
const tagValues = (0, workflows_sdk_1.transform)(products, (prods) => [
|
|
39
|
+
...new Set(prods.map((p) => p.brand_tag).filter((v) => !!v)),
|
|
40
|
+
]);
|
|
41
|
+
const existingTags = (0, list_product_tags_by_value_step_1.listProductTagsByValueStep)(tagValues);
|
|
42
|
+
const { newTagValues, existingTagMap } = (0, workflows_sdk_1.transform)({ tagValues, existingTags }, ({ tagValues: vals, existingTags: existing }) => {
|
|
43
|
+
const existingMap = {};
|
|
44
|
+
for (const tag of existing) {
|
|
45
|
+
existingMap[tag.value] = tag.id;
|
|
46
|
+
}
|
|
47
|
+
const newVals = vals.filter((v) => !existingMap[v]);
|
|
48
|
+
return { newTagValues: newVals, existingTagMap: existingMap };
|
|
49
|
+
});
|
|
50
|
+
const tagInputs = (0, workflows_sdk_1.transform)(newTagValues, (vals) => vals.map((value) => ({ value })));
|
|
51
|
+
const createdTags = (0, core_flows_1.createProductTagsStep)(tagInputs);
|
|
52
|
+
const tagMap = (0, workflows_sdk_1.transform)({ createdTags, existingTagMap }, ({ createdTags: created, existingTagMap: existing }) => {
|
|
53
|
+
const map = { ...existing };
|
|
54
|
+
for (const tag of created) {
|
|
55
|
+
map[tag.value] = tag.id;
|
|
56
|
+
}
|
|
57
|
+
return map;
|
|
58
|
+
});
|
|
59
|
+
// 2b. Categories — find or create
|
|
60
|
+
const uniqueCategoryNames = (0, workflows_sdk_1.transform)(products, (prods) => {
|
|
61
|
+
const names = new Set();
|
|
62
|
+
for (const p of prods) {
|
|
63
|
+
for (const cat of p.categories ?? []) {
|
|
64
|
+
if (cat)
|
|
65
|
+
names.add(cat);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return [...names];
|
|
69
|
+
});
|
|
70
|
+
const hasCategories = (0, workflows_sdk_1.transform)(uniqueCategoryNames, (names) => names.length > 0);
|
|
71
|
+
const categoryNameToId = (0, find_or_create_category_step_1.findOrCreateCategoryStep)((0, workflows_sdk_1.transform)({ uniqueCategoryNames, hasCategories }, ({ uniqueCategoryNames: n, hasCategories: h }) => h ? n : []));
|
|
72
|
+
// 3. Products — find existing by handle AND by variant SKU, split into create/update
|
|
73
|
+
const handles = (0, workflows_sdk_1.transform)(products, (prods) => [
|
|
74
|
+
...new Set(prods.map((p) => (0, utils_1.toHandle)(p.title))),
|
|
75
|
+
]);
|
|
76
|
+
const existingProducts = (0, find_products_by_handle_step_1.findProductsByHandleStep)(handles);
|
|
77
|
+
const existingByHandle = (0, workflows_sdk_1.transform)(existingProducts, (ps) => Object.fromEntries(ps.map((p) => [p.handle, p])));
|
|
78
|
+
const allVariantSkus = (0, workflows_sdk_1.transform)(products, (prods) => [
|
|
79
|
+
...new Set(prods.flatMap((p) => p.variants?.map((v) => v.sku).filter((s) => !!s) ?? [])),
|
|
80
|
+
]);
|
|
81
|
+
const existingProductsBySku = (0, find_products_by_variant_sku_step_1.findProductsByVariantSkuStep)(allVariantSkus);
|
|
82
|
+
const skuToProduct = (0, workflows_sdk_1.transform)(existingProductsBySku, (ps) => {
|
|
83
|
+
const map = {};
|
|
84
|
+
for (const product of ps) {
|
|
85
|
+
for (const variant of product.variants ?? []) {
|
|
86
|
+
if (variant.sku) {
|
|
87
|
+
map[variant.sku] = { id: product.id, handle: product.handle };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return map;
|
|
92
|
+
});
|
|
93
|
+
const { createList, updateList } = (0, workflows_sdk_1.transform)({ products, tagMap, existingByHandle, skuToProduct, categoryNameToId, imageMapping }, ({ products: prods, tagMap: tags, existingByHandle: existing, skuToProduct: skuMap, categoryNameToId: catMap, imageMapping: imgMap, }) => {
|
|
94
|
+
const createList = [];
|
|
95
|
+
const updateList = [];
|
|
96
|
+
for (const csvProduct of prods) {
|
|
97
|
+
const handle = (0, utils_1.toHandle)(csvProduct.title);
|
|
98
|
+
const categoryIds = (csvProduct.categories ?? [])
|
|
99
|
+
.map((cat) => catMap[cat])
|
|
100
|
+
.filter((id) => !!id);
|
|
101
|
+
const input = (0, types_1.toMedusaProductInput)(csvProduct, handle, categoryIds, imgMap);
|
|
102
|
+
if (csvProduct.brand_tag && tags[csvProduct.brand_tag]) {
|
|
103
|
+
input.tag_ids = [tags[csvProduct.brand_tag]];
|
|
104
|
+
}
|
|
105
|
+
const mappedImages = input.images;
|
|
106
|
+
const exByHandle = existing[handle];
|
|
107
|
+
if (exByHandle) {
|
|
108
|
+
updateList.push({
|
|
109
|
+
id: exByHandle.id,
|
|
110
|
+
title: input.title,
|
|
111
|
+
handle: input.handle ?? undefined,
|
|
112
|
+
status: input.status,
|
|
113
|
+
description: input.description,
|
|
114
|
+
subtitle: input.subtitle,
|
|
115
|
+
tag_ids: input.tag_ids,
|
|
116
|
+
category_ids: input.category_ids,
|
|
117
|
+
...(mappedImages?.length
|
|
118
|
+
? { thumbnail: input.thumbnail, images: mappedImages }
|
|
119
|
+
: {}),
|
|
120
|
+
});
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const variantSkus = csvProduct.variants
|
|
124
|
+
?.map((v) => v.sku)
|
|
125
|
+
.filter((s) => !!s) ?? [];
|
|
126
|
+
const exBySku = variantSkus.map((sku) => skuMap[sku]).find(Boolean);
|
|
127
|
+
if (exBySku) {
|
|
128
|
+
updateList.push({
|
|
129
|
+
id: exBySku.id,
|
|
130
|
+
title: input.title,
|
|
131
|
+
handle: input.handle ?? undefined,
|
|
132
|
+
status: input.status,
|
|
133
|
+
description: input.description,
|
|
134
|
+
subtitle: input.subtitle,
|
|
135
|
+
tag_ids: input.tag_ids,
|
|
136
|
+
category_ids: input.category_ids,
|
|
137
|
+
...(mappedImages?.length
|
|
138
|
+
? { thumbnail: input.thumbnail, images: mappedImages }
|
|
139
|
+
: {}),
|
|
140
|
+
});
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
createList.push(input);
|
|
144
|
+
}
|
|
145
|
+
return { createList, updateList };
|
|
146
|
+
});
|
|
147
|
+
const createdProducts = (0, core_flows_1.createProductsStep)(createList);
|
|
148
|
+
const updatedProducts = (0, core_flows_1.updateProductsStep)({ products: updateList });
|
|
149
|
+
// 4. Re-fetch ALL products WITH variants (updateProductsStep doesn't return variants)
|
|
150
|
+
const allHandles = (0, workflows_sdk_1.transform)({ createdProducts, updatedProducts }, ({ createdProducts: created, updatedProducts: updated }) => [
|
|
151
|
+
...new Set([
|
|
152
|
+
...(created ?? []).map((p) => p.handle).filter((h) => !!h),
|
|
153
|
+
...(updated ?? []).map((p) => p.handle).filter((h) => !!h),
|
|
154
|
+
]),
|
|
155
|
+
]);
|
|
156
|
+
const allProducts = (0, refetch_products_by_handle_step_1.refetchProductsByHandleStep)(allHandles);
|
|
157
|
+
// ── Link products to sales channel ────────────────────────────────────────
|
|
158
|
+
const salesChannelLinks = (0, workflows_sdk_1.transform)({ allProducts, salesChannelId }, ({ allProducts: prods, salesChannelId: scId }) => {
|
|
159
|
+
if (!scId)
|
|
160
|
+
return [];
|
|
161
|
+
return (prods ?? []).map((p) => ({
|
|
162
|
+
sales_channel_id: scId,
|
|
163
|
+
product_id: p.id,
|
|
164
|
+
}));
|
|
165
|
+
});
|
|
166
|
+
const hasSalesChannelLinks = (0, workflows_sdk_1.transform)(salesChannelLinks, (links) => links.length > 0);
|
|
167
|
+
(0, core_flows_1.associateProductsWithSalesChannelsStep)((0, workflows_sdk_1.transform)({ salesChannelLinks, hasSalesChannelLinks }, ({ salesChannelLinks: links, hasSalesChannelLinks: h }) => h ? { links } : { links: [] }));
|
|
168
|
+
// ── Attributes — resolve category definitions, then set values ──────────
|
|
169
|
+
const uniqueAttributeNames = (0, workflows_sdk_1.transform)(products, (prods) => {
|
|
170
|
+
const names = new Set();
|
|
171
|
+
for (const p of prods) {
|
|
172
|
+
for (const attr of p.attributes ?? []) {
|
|
173
|
+
if (attr.name)
|
|
174
|
+
names.add(attr.name);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return [...names];
|
|
178
|
+
});
|
|
179
|
+
const hasAttributes = (0, workflows_sdk_1.transform)(uniqueAttributeNames, (names) => names.length > 0);
|
|
180
|
+
const existingCategoryAttributes = (0, list_category_attributes_by_labels_step_1.listCategoryAttributesByLabelsStep)((0, workflows_sdk_1.transform)({ uniqueAttributeNames, hasAttributes }, ({ uniqueAttributeNames: n, hasAttributes: h }) => h ? n : []));
|
|
181
|
+
const { attrLabelToId, newAttrLabels } = (0, workflows_sdk_1.transform)({ uniqueAttributeNames, existingCategoryAttributes }, ({ uniqueAttributeNames: labels, existingCategoryAttributes: existing, }) => {
|
|
182
|
+
const labelToId = {};
|
|
183
|
+
for (const attr of existing) {
|
|
184
|
+
labelToId[attr.label] = attr.id;
|
|
185
|
+
}
|
|
186
|
+
const newLabels = labels.filter((l) => !labelToId[l]);
|
|
187
|
+
return { attrLabelToId: labelToId, newAttrLabels: newLabels };
|
|
188
|
+
});
|
|
189
|
+
const createdCategoryAttributes = (0, create_category_attributes_step_1.createCategoryAttributesStep)((0, workflows_sdk_1.transform)(newAttrLabels, (labels) => labels.map((label) => ({ label, type: "string" }))));
|
|
190
|
+
const fullAttrLabelToId = (0, workflows_sdk_1.transform)({ attrLabelToId, createdCategoryAttributes }, ({ attrLabelToId: existing, createdCategoryAttributes: created }) => {
|
|
191
|
+
const map = { ...existing };
|
|
192
|
+
for (const attr of created ?? []) {
|
|
193
|
+
map[attr.label] = attr.id;
|
|
194
|
+
}
|
|
195
|
+
return map;
|
|
196
|
+
});
|
|
197
|
+
const productAttributeInputs = (0, workflows_sdk_1.transform)({ products, allProducts, fullAttrLabelToId }, ({ products: csvProducts, allProducts: allProds, fullAttrLabelToId: attrMap, }) => {
|
|
198
|
+
const inputs = [];
|
|
199
|
+
if (!Object.keys(attrMap).length)
|
|
200
|
+
return inputs;
|
|
201
|
+
const handleToId = {};
|
|
202
|
+
for (const p of allProds ?? []) {
|
|
203
|
+
if (p?.handle && p?.id)
|
|
204
|
+
handleToId[p.handle] = p.id;
|
|
205
|
+
}
|
|
206
|
+
for (const csvProduct of csvProducts) {
|
|
207
|
+
if (!csvProduct.attributes?.length)
|
|
208
|
+
continue;
|
|
209
|
+
const handle = (0, utils_1.toHandle)(csvProduct.title);
|
|
210
|
+
const productId = handleToId[handle];
|
|
211
|
+
if (!productId)
|
|
212
|
+
continue;
|
|
213
|
+
for (const attr of csvProduct.attributes) {
|
|
214
|
+
const attrId = attrMap[attr.name];
|
|
215
|
+
if (attrId) {
|
|
216
|
+
inputs.push({
|
|
217
|
+
product_id: productId,
|
|
218
|
+
category_custom_attribute_id: attrId,
|
|
219
|
+
value: String(attr.value),
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return inputs;
|
|
225
|
+
});
|
|
226
|
+
(0, set_product_attributes_step_1.setProductAttributesStep)(productAttributeInputs);
|
|
227
|
+
// ── Inventory ─────────────────────────────────────────────────────────────
|
|
228
|
+
const inventoryTasks = (0, workflows_sdk_1.transform)({ allProducts, products }, ({ allProducts: allProds, products: prods, }) => {
|
|
229
|
+
const tasks = [];
|
|
230
|
+
for (const product of allProds ?? []) {
|
|
231
|
+
const csvProduct = prods.find((p) => (0, utils_1.toHandle)(p.title) === product.handle);
|
|
232
|
+
for (const variant of product.variants ?? []) {
|
|
233
|
+
const csvVariant = csvProduct?.variants?.find((v) => v.sku === variant.sku);
|
|
234
|
+
tasks.push({
|
|
235
|
+
variantId: variant.id,
|
|
236
|
+
sku: variant.sku,
|
|
237
|
+
title: variant.title,
|
|
238
|
+
quantity: csvVariant?.inventory_quantity ?? 0,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return tasks;
|
|
243
|
+
});
|
|
244
|
+
const inventorySkus = (0, workflows_sdk_1.transform)(inventoryTasks, (tasks) => [
|
|
245
|
+
...new Set(tasks.map((t) => t.sku).filter((s) => !!s)),
|
|
246
|
+
]);
|
|
247
|
+
const existingInventoryItems = (0, list_inventory_items_by_sku_step_1.listInventoryItemsBySkuStep)(inventorySkus);
|
|
248
|
+
const { newInventoryTasks, existingInventoryBySku } = (0, workflows_sdk_1.transform)({ inventoryTasks, existingInventoryItems }, ({ inventoryTasks: tasks, existingInventoryItems: existing }) => {
|
|
249
|
+
const bySku = {};
|
|
250
|
+
for (const item of existing) {
|
|
251
|
+
if (item.sku)
|
|
252
|
+
bySku[item.sku] = item;
|
|
253
|
+
}
|
|
254
|
+
const newTasks = tasks.filter((t) => !t.sku || !bySku[t.sku]);
|
|
255
|
+
return { newInventoryTasks: newTasks, existingInventoryBySku: bySku };
|
|
256
|
+
});
|
|
257
|
+
const locationId = (0, resolve_default_stock_location_step_1.resolveDefaultStockLocationStep)();
|
|
258
|
+
const newInventoryItemInputs = (0, workflows_sdk_1.transform)(newInventoryTasks, (tasks) => tasks.map((t) => ({ sku: t.sku ?? undefined, title: t.title })));
|
|
259
|
+
const newInventoryItems = (0, core_flows_1.createInventoryItemsStep)(newInventoryItemInputs);
|
|
260
|
+
const attachInputs = (0, workflows_sdk_1.transform)({
|
|
261
|
+
newInventoryItems,
|
|
262
|
+
newInventoryTasks,
|
|
263
|
+
existingInventoryBySku,
|
|
264
|
+
inventoryTasks,
|
|
265
|
+
}, ({ newInventoryItems: newItems, newInventoryTasks: newTasks, existingInventoryBySku: existing, inventoryTasks: allTasks, }) => {
|
|
266
|
+
const links = [];
|
|
267
|
+
for (let i = 0; i < newItems.length; i++) {
|
|
268
|
+
const task = newTasks[i];
|
|
269
|
+
if (task?.variantId) {
|
|
270
|
+
links.push({
|
|
271
|
+
inventoryItemId: newItems[i].id,
|
|
272
|
+
tag: task.variantId,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
for (const sku of Object.keys(existing)) {
|
|
277
|
+
const item = existing[sku];
|
|
278
|
+
const task = allTasks.find((t) => t.sku === sku);
|
|
279
|
+
if (task?.variantId && item?.id) {
|
|
280
|
+
links.push({
|
|
281
|
+
inventoryItemId: item.id,
|
|
282
|
+
tag: task.variantId,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return links;
|
|
287
|
+
});
|
|
288
|
+
(0, core_flows_1.attachInventoryItemToVariants)(attachInputs);
|
|
289
|
+
const allInventoryItemIds = (0, workflows_sdk_1.transform)({ newInventoryItems, existingInventoryBySku }, ({ newInventoryItems: newItems, existingInventoryBySku: existing }) => {
|
|
290
|
+
const ids = [];
|
|
291
|
+
for (const item of newItems) {
|
|
292
|
+
ids.push(item.id);
|
|
293
|
+
}
|
|
294
|
+
for (const key of Object.keys(existing)) {
|
|
295
|
+
const item = existing[key];
|
|
296
|
+
if (item?.id)
|
|
297
|
+
ids.push(item.id);
|
|
298
|
+
}
|
|
299
|
+
return ids;
|
|
300
|
+
});
|
|
301
|
+
const existingLevels = (0, list_existing_inventory_levels_step_1.listExistingInventoryLevelsStep)((0, workflows_sdk_1.transform)({ allInventoryItemIds, locationId }, ({ allInventoryItemIds: ids, locationId: locId }) => ({
|
|
302
|
+
inventoryItemIds: ids,
|
|
303
|
+
locationId: locId,
|
|
304
|
+
})));
|
|
305
|
+
const { newLevelInputs, updateLevelInputs } = (0, workflows_sdk_1.transform)({
|
|
306
|
+
newInventoryItems,
|
|
307
|
+
newInventoryTasks,
|
|
308
|
+
existingInventoryBySku,
|
|
309
|
+
locationId,
|
|
310
|
+
existingLevels,
|
|
311
|
+
inventoryTasks,
|
|
312
|
+
}, ({ newInventoryItems: newItems, newInventoryTasks: newTasks, existingInventoryBySku: existing, locationId: locId, existingLevels: levels, inventoryTasks: allTasks, }) => {
|
|
313
|
+
const newLevels = [];
|
|
314
|
+
const updateLevels = [];
|
|
315
|
+
for (let i = 0; i < newItems.length; i++) {
|
|
316
|
+
const task = newTasks[i];
|
|
317
|
+
newLevels.push({
|
|
318
|
+
inventory_item_id: newItems[i].id,
|
|
319
|
+
location_id: locId,
|
|
320
|
+
stocked_quantity: task?.quantity ?? 0,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
for (const sku of Object.keys(existing)) {
|
|
324
|
+
const item = existing[sku];
|
|
325
|
+
const task = allTasks.find((t) => t.sku === sku);
|
|
326
|
+
if (!item?.id || !task || !locId)
|
|
327
|
+
continue;
|
|
328
|
+
const existingLevel = levels.byItemId[item.id];
|
|
329
|
+
if (existingLevel) {
|
|
330
|
+
updateLevels.push({
|
|
331
|
+
inventory_item_id: item.id,
|
|
332
|
+
location_id: locId,
|
|
333
|
+
stocked_quantity: task.quantity ?? 0,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
newLevels.push({
|
|
338
|
+
inventory_item_id: item.id,
|
|
339
|
+
location_id: locId,
|
|
340
|
+
stocked_quantity: task.quantity ?? 0,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return { newLevelInputs: newLevels, updateLevelInputs: updateLevels };
|
|
345
|
+
});
|
|
346
|
+
(0, core_flows_1.createInventoryLevelsStep)(newLevelInputs);
|
|
347
|
+
const hasUpdates = (0, workflows_sdk_1.transform)(updateLevelInputs, (inputs) => inputs.length > 0);
|
|
348
|
+
(0, core_flows_1.updateInventoryLevelsStep)((0, workflows_sdk_1.transform)({ updateLevelInputs, hasUpdates }, ({ updateLevelInputs: inputs, hasUpdates: has }) => (has ? inputs : [])));
|
|
349
|
+
// ── Ensure price sets + links exist for all variants ──────────────────────
|
|
350
|
+
const priceSetInputs = (0, workflows_sdk_1.transform)({ allProducts, products }, ({ allProducts: allProds, products: prods, }) => {
|
|
351
|
+
const inputs = [];
|
|
352
|
+
for (const product of allProds ?? []) {
|
|
353
|
+
const csvProduct = prods.find((p) => (0, utils_1.toHandle)(p.title) === product.handle);
|
|
354
|
+
if (!csvProduct?.variants?.length)
|
|
355
|
+
continue;
|
|
356
|
+
for (const variant of product.variants ?? []) {
|
|
357
|
+
const csvVariant = csvProduct.variants.find((v) => v.sku === variant.sku);
|
|
358
|
+
if (!csvVariant?.price)
|
|
359
|
+
continue;
|
|
360
|
+
inputs.push({
|
|
361
|
+
variant_id: variant.id,
|
|
362
|
+
amount: csvVariant.price,
|
|
363
|
+
currency_code: "inr",
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return inputs;
|
|
368
|
+
});
|
|
369
|
+
(0, create_variant_price_sets_step_1.createVariantPriceSetsStep)(priceSetInputs);
|
|
370
|
+
// ── Overwrite base variant prices + dealer prices (single pass) ──────────
|
|
371
|
+
const allPriceInputs = (0, workflows_sdk_1.transform)({ allProducts, products, priceListId }, ({ allProducts: allProds, products: prods, priceListId: plId, }) => {
|
|
372
|
+
const inputs = [];
|
|
373
|
+
for (const product of allProds ?? []) {
|
|
374
|
+
const csvProduct = prods.find((p) => (0, utils_1.toHandle)(p.title) === product.handle);
|
|
375
|
+
if (!csvProduct?.variants?.length)
|
|
376
|
+
continue;
|
|
377
|
+
for (const variant of product.variants ?? []) {
|
|
378
|
+
const csvVariant = csvProduct.variants.find((v) => v.sku === variant.sku);
|
|
379
|
+
if (!csvVariant?.price)
|
|
380
|
+
continue;
|
|
381
|
+
const entry = {
|
|
382
|
+
variant_id: variant.id,
|
|
383
|
+
amount: csvVariant.price,
|
|
384
|
+
currency_code: "inr",
|
|
385
|
+
};
|
|
386
|
+
if (csvVariant.dealer_price && plId) {
|
|
387
|
+
entry.dealer_price = csvVariant.dealer_price;
|
|
388
|
+
entry.price_list_id = plId;
|
|
389
|
+
}
|
|
390
|
+
inputs.push(entry);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return inputs;
|
|
394
|
+
});
|
|
395
|
+
(0, update_variant_prices_step_1.updateVariantPricesStep)(allPriceInputs);
|
|
396
|
+
const result = (0, workflows_sdk_1.transform)({ allProducts, newInventoryItems, createdProducts, updatedProducts }, ({ allProducts: allProds, newInventoryItems: inv, createdProducts: created, updatedProducts: updated, }) => ({
|
|
397
|
+
createdProducts: created ?? [],
|
|
398
|
+
updatedProducts: updated ?? [],
|
|
399
|
+
products: allProds ?? [],
|
|
400
|
+
inventoryItems: inv ?? [],
|
|
401
|
+
}));
|
|
402
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
403
|
+
});
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1pbXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3Byb2Nlc3MtaW1wb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUkyQztBQUMzQyxxREFTOEI7QUFDOUIscURBQXFEO0FBRXJELDJEQUFzRDtBQUN0RCxtREFBK0Q7QUFFL0QsNkZBQXFGO0FBQ3JGLHVGQUFnRjtBQUNoRixpR0FBeUY7QUFDekYsK0ZBQXVGO0FBQ3ZGLHFHQUE4RjtBQUM5RixxR0FBOEY7QUFDOUYsNkdBQXFHO0FBQ3JHLDZGQUF1RjtBQUN2RixxRkFBK0U7QUFDL0UsdUZBQWdGO0FBQ2hGLG1GQUE2RTtBQUM3RSwyRkFBb0Y7QUFDcEYsNkZBQXNGO0FBQ3RGLDZGQUFzRjtBQVN6RSxRQUFBLHFCQUFxQixHQUFHLElBQUEsOEJBQWMsRUFDakQ7SUFDRSxJQUFJLEVBQUUsZ0JBQWdCO0lBQ3RCLEtBQUssRUFBRSxJQUFJO0lBQ1gsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7Q0FDaEMsRUFDRCxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFzRjtJQUM1SSxlQUFlO0lBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBQSw2QkFBWSxFQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUU1QyxrRUFBa0U7SUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDckQsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCategoryAttributesStep = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const product_attributes_1 = require("@empty-complete-org/medusa-product-attributes/.medusa/server/src/modules/product-attributes");
|
|
6
|
+
exports.createCategoryAttributesStep = (0, workflows_sdk_1.createStep)("create-category-attributes", async (inputs, { container }) => {
|
|
7
|
+
if (!inputs.length)
|
|
8
|
+
return new workflows_sdk_1.StepResponse([]);
|
|
9
|
+
try {
|
|
10
|
+
const customAttrSvc = container.resolve(product_attributes_1.CUSTOM_ATTRIBUTE_MODULE);
|
|
11
|
+
const results = [];
|
|
12
|
+
for (const input of inputs) {
|
|
13
|
+
const created = await customAttrSvc.createCategoryAttribute({
|
|
14
|
+
label: input.label,
|
|
15
|
+
type: input.type,
|
|
16
|
+
category_id: null,
|
|
17
|
+
is_global: true,
|
|
18
|
+
});
|
|
19
|
+
results.push(created);
|
|
20
|
+
}
|
|
21
|
+
console.log(`[createCategoryAttributesStep] Created ${results.length} category attributes:`, results.map((r) => `${r.label} (${r.id})`));
|
|
22
|
+
return new workflows_sdk_1.StepResponse(results);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error("[createCategoryAttributesStep] Error:", err);
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNhdGVnb3J5LWF0dHJpYnV0ZXMuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvY3JlYXRlLWNhdGVnb3J5LWF0dHJpYnV0ZXMuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0Usb0lBQXNJO0FBTXpILFFBQUEsNEJBQTRCLEdBQUcsSUFBQSwwQkFBVSxFQUNwRCw0QkFBNEIsRUFDNUIsS0FBSyxFQUNILE1BQXlDLEVBQ3pDLEVBQUUsU0FBUyxFQUFFLEVBQ3dDLEVBQUU7SUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDckMsNENBQXVCLENBQ3hCLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBaUMsRUFBRSxDQUFDO1FBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsdUJBQXVCLENBQUM7Z0JBQzFELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCwwQ0FBMEMsT0FBTyxDQUFDLE1BQU0sdUJBQXVCLEVBQy9FLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDM0MsQ0FBQztRQUNGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDLENBQ0YsQ0FBQyJ9
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createVariantPriceSetsStep = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
exports.createVariantPriceSetsStep = (0, workflows_sdk_1.createStep)("create-variant-price-sets", async (inputs, { container }) => {
|
|
7
|
+
if (!inputs.length)
|
|
8
|
+
return new workflows_sdk_1.StepResponse([]);
|
|
9
|
+
const pricingSvc = container.resolve(utils_1.Modules.PRICING);
|
|
10
|
+
const remoteLink = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
|
|
11
|
+
const linkService = remoteLink.getLinkModule(utils_1.Modules.PRODUCT, "variant_id", utils_1.Modules.PRICING, "price_set_id");
|
|
12
|
+
const variantIds = inputs.map((i) => i.variant_id);
|
|
13
|
+
const existingLinks = linkService
|
|
14
|
+
? (await linkService.list({ variant_id: variantIds }, { select: ["variant_id", "price_set_id"] }))
|
|
15
|
+
: [];
|
|
16
|
+
const linkedVariantIds = new Set(existingLinks.map((l) => l.variant_id));
|
|
17
|
+
const needsPriceSet = inputs.filter((i) => !linkedVariantIds.has(i.variant_id));
|
|
18
|
+
if (!needsPriceSet.length) {
|
|
19
|
+
console.log(`[createVariantPriceSetsStep] All ${inputs.length} variants already have price sets`);
|
|
20
|
+
return new workflows_sdk_1.StepResponse([]);
|
|
21
|
+
}
|
|
22
|
+
const priceSetInputs = needsPriceSet.map((i) => ({
|
|
23
|
+
prices: [{ amount: i.amount, currency_code: i.currency_code }],
|
|
24
|
+
}));
|
|
25
|
+
const createdPriceSets = await pricingSvc.createPriceSets(priceSetInputs);
|
|
26
|
+
if (linkService && createdPriceSets.length) {
|
|
27
|
+
const links = needsPriceSet.map((input, idx) => ({
|
|
28
|
+
[utils_1.Modules.PRODUCT]: { variant_id: input.variant_id },
|
|
29
|
+
[utils_1.Modules.PRICING]: { price_set_id: createdPriceSets[idx].id },
|
|
30
|
+
}));
|
|
31
|
+
await remoteLink.create(links);
|
|
32
|
+
}
|
|
33
|
+
console.log(`[createVariantPriceSetsStep] Created ${createdPriceSets.length} price sets and linked to variants`);
|
|
34
|
+
return new workflows_sdk_1.StepResponse(createdPriceSets.map((ps) => ps.id));
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXZhcmlhbnQtcHJpY2Utc2V0cy5zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9jcmVhdGUtdmFyaWFudC1wcmljZS1zZXRzLnN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBQzdFLHFEQUdtQztBQVF0QixRQUFBLDBCQUEwQixHQUFHLElBQUEsMEJBQVUsRUFDbEQsMkJBQTJCLEVBQzNCLEtBQUssRUFDSCxNQUF1RSxFQUN2RSxFQUFFLFNBQVMsRUFBRSxFQUNiLEVBQUU7SUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFjLENBQUMsQ0FBQztJQUU1RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNsQyxlQUFPLENBQUMsT0FBTyxDQUNoQixDQUFDO0lBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUMxQyxlQUFPLENBQUMsT0FBTyxFQUNmLFlBQVksRUFDWixlQUFPLENBQUMsT0FBTyxFQUNmLGNBQWMsQ0FDZixDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRW5ELE1BQU0sYUFBYSxHQUFHLFdBQVc7UUFDL0IsQ0FBQyxDQUFFLENBQUMsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUN0QixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFDMUIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FDM0MsQ0FBb0I7UUFDdkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVQLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFekUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FDM0MsQ0FBQztJQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxvQ0FBb0MsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLENBQ3JGLENBQUM7UUFDRixPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFjLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7S0FDL0QsQ0FBQyxDQUFDLENBQUM7SUFFSixNQUFNLGdCQUFnQixHQUFHLE1BQU0sVUFBVSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxRSxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ25ELENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtTQUM5RCxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FDVCx3Q0FBd0MsZ0JBQWdCLENBQUMsTUFBTSxvQ0FBb0MsQ0FDcEcsQ0FBQztJQUVGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.downloadAndUploadImagesStep = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const EXT_TO_MIME = {
|
|
8
|
+
".jpg": "image/jpeg",
|
|
9
|
+
".jpeg": "image/jpeg",
|
|
10
|
+
".png": "image/png",
|
|
11
|
+
".gif": "image/gif",
|
|
12
|
+
".webp": "image/webp",
|
|
13
|
+
".svg": "image/svg+xml",
|
|
14
|
+
".avif": "image/avif",
|
|
15
|
+
".bmp": "image/bmp",
|
|
16
|
+
".tiff": "image/tiff",
|
|
17
|
+
".tif": "image/tiff",
|
|
18
|
+
};
|
|
19
|
+
function getMimeType(url, contentType) {
|
|
20
|
+
if (contentType) {
|
|
21
|
+
const ct = contentType.split(";")[0].trim();
|
|
22
|
+
if (ct.startsWith("image/"))
|
|
23
|
+
return ct;
|
|
24
|
+
}
|
|
25
|
+
const ext = url.split("?")[0].split(".").pop()?.toLowerCase();
|
|
26
|
+
if (ext) {
|
|
27
|
+
const mime = EXT_TO_MIME[`.${ext}`];
|
|
28
|
+
if (mime)
|
|
29
|
+
return mime;
|
|
30
|
+
}
|
|
31
|
+
return "image/jpeg";
|
|
32
|
+
}
|
|
33
|
+
function getFilename(url) {
|
|
34
|
+
const pathname = url.split("?")[0];
|
|
35
|
+
const base = pathname.split("/").pop() ?? `image-${(0, node_crypto_1.randomUUID)()}`;
|
|
36
|
+
if (base.includes("."))
|
|
37
|
+
return base;
|
|
38
|
+
return `${base}.jpg`;
|
|
39
|
+
}
|
|
40
|
+
exports.downloadAndUploadImagesStep = (0, workflows_sdk_1.createStep)("download-and-upload-images", async (urls, { container }) => {
|
|
41
|
+
if (!urls.length)
|
|
42
|
+
return new workflows_sdk_1.StepResponse({});
|
|
43
|
+
const fileSvc = container.resolve(utils_1.Modules.FILE);
|
|
44
|
+
const result = {};
|
|
45
|
+
const CONCURRENCY = 5;
|
|
46
|
+
for (let i = 0; i < urls.length; i += CONCURRENCY) {
|
|
47
|
+
const batch = urls.slice(i, i + CONCURRENCY);
|
|
48
|
+
const results = await Promise.allSettled(batch.map(async (url) => {
|
|
49
|
+
const response = await fetch(url);
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
throw new Error(`Failed to fetch ${url}: ${response.status}`);
|
|
52
|
+
}
|
|
53
|
+
const contentType = response.headers.get("content-type");
|
|
54
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
55
|
+
const base64 = buffer.toString("base64");
|
|
56
|
+
const file = await fileSvc.createFiles({
|
|
57
|
+
filename: getFilename(url),
|
|
58
|
+
mimeType: getMimeType(url, contentType),
|
|
59
|
+
content: base64,
|
|
60
|
+
access: "public",
|
|
61
|
+
});
|
|
62
|
+
return { url, fileUrl: file.url };
|
|
63
|
+
}));
|
|
64
|
+
for (let j = 0; j < results.length; j++) {
|
|
65
|
+
const r = results[j];
|
|
66
|
+
if (r.status === "fulfilled") {
|
|
67
|
+
result[r.value.url] = r.value.fileUrl;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.error(`[downloadAndUploadImagesStep] Failed to upload ${batch[j]}:`, r.reason);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
console.log(`[downloadAndUploadImagesStep] Uploaded ${Object.keys(result).length}/${urls.length} images`);
|
|
75
|
+
return new workflows_sdk_1.StepResponse(result);
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtYW5kLXVwbG9hZC1pbWFnZXMuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZG93bmxvYWQtYW5kLXVwbG9hZC1pbWFnZXMuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQW9EO0FBRXBELDZDQUF5QztBQUV6QyxNQUFNLFdBQVcsR0FBMkI7SUFDMUMsTUFBTSxFQUFFLFlBQVk7SUFDcEIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLGVBQWU7SUFDdkIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLFlBQVk7Q0FDckIsQ0FBQztBQUVGLFNBQVMsV0FBVyxDQUFDLEdBQVcsRUFBRSxXQUEyQjtJQUMzRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM5RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJ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
|