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.
Files changed (40) hide show
  1. package/.medusa/server/src/admin/index.js +590 -0
  2. package/.medusa/server/src/admin/index.mjs +591 -0
  3. package/.medusa/server/src/api/admin/import/[id]/pause/route.js +25 -0
  4. package/.medusa/server/src/api/admin/import/[id]/resume/route.js +51 -0
  5. package/.medusa/server/src/api/admin/import/[id]/route.js +57 -0
  6. package/.medusa/server/src/api/admin/import/route.js +88 -0
  7. package/.medusa/server/src/api/admin/plugin/route.js +7 -0
  8. package/.medusa/server/src/api/middlewares.js +46 -0
  9. package/.medusa/server/src/api/store/plugin/route.js +7 -0
  10. package/.medusa/server/src/modules/import/index.js +13 -0
  11. package/.medusa/server/src/modules/import/migrations/Migration20260603094700.js +21 -0
  12. package/.medusa/server/src/modules/import/migrations/Migration20260605102500.js +14 -0
  13. package/.medusa/server/src/modules/import/models/import-job.js +24 -0
  14. package/.medusa/server/src/modules/import/models/import-row.js +18 -0
  15. package/.medusa/server/src/modules/import/service.js +59 -0
  16. package/.medusa/server/src/modules/import/types/enums.js +19 -0
  17. package/.medusa/server/src/modules/import/types/index.js +9 -0
  18. package/.medusa/server/src/modules/import/types/records.js +3 -0
  19. package/.medusa/server/src/modules/import/types/workflow.js +69 -0
  20. package/.medusa/server/src/subscribers/product-import.js +98 -0
  21. package/.medusa/server/src/workflows/index.js +18 -0
  22. package/.medusa/server/src/workflows/process-import.js +404 -0
  23. package/.medusa/server/src/workflows/steps/create-category-attributes.step.js +29 -0
  24. package/.medusa/server/src/workflows/steps/create-variant-price-sets.step.js +36 -0
  25. package/.medusa/server/src/workflows/steps/download-and-upload-images.step.js +77 -0
  26. package/.medusa/server/src/workflows/steps/find-or-create-category.step.js +40 -0
  27. package/.medusa/server/src/workflows/steps/find-products-by-handle.step.js +13 -0
  28. package/.medusa/server/src/workflows/steps/find-products-by-variant-sku.step.js +19 -0
  29. package/.medusa/server/src/workflows/steps/list-category-attributes-by-labels.step.js +27 -0
  30. package/.medusa/server/src/workflows/steps/list-existing-inventory-levels.step.js +24 -0
  31. package/.medusa/server/src/workflows/steps/list-inventory-items-by-sku.step.js +13 -0
  32. package/.medusa/server/src/workflows/steps/list-product-tags-by-value.step.js +13 -0
  33. package/.medusa/server/src/workflows/steps/parse-csv.step.js +160 -0
  34. package/.medusa/server/src/workflows/steps/refetch-products-by-handle.step.js +16 -0
  35. package/.medusa/server/src/workflows/steps/resolve-default-stock-location.step.js +17 -0
  36. package/.medusa/server/src/workflows/steps/set-product-attributes.step.js +53 -0
  37. package/.medusa/server/src/workflows/steps/update-dealer-prices.step.js +77 -0
  38. package/.medusa/server/src/workflows/steps/update-variant-prices.step.js +74 -0
  39. package/README.md +64 -0
  40. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1pbXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3Byb2Nlc3MtaW1wb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUkyQztBQUMzQyxxREFTOEI7QUFDOUIscURBQXFEO0FBRXJELDJEQUFzRDtBQUN0RCxtREFBK0Q7QUFFL0QsNkZBQXFGO0FBQ3JGLHVGQUFnRjtBQUNoRixpR0FBeUY7QUFDekYsK0ZBQXVGO0FBQ3ZGLHFHQUE4RjtBQUM5RixxR0FBOEY7QUFDOUYsNkdBQXFHO0FBQ3JHLDZGQUF1RjtBQUN2RixxRkFBK0U7QUFDL0UsdUZBQWdGO0FBQ2hGLG1GQUE2RTtBQUM3RSwyRkFBb0Y7QUFDcEYsNkZBQXNGO0FBQ3RGLDZGQUFzRjtBQVN6RSxRQUFBLHFCQUFxQixHQUFHLElBQUEsOEJBQWMsRUFDakQ7SUFDRSxJQUFJLEVBQUUsZ0JBQWdCO0lBQ3RCLEtBQUssRUFBRSxJQUFJO0lBQ1gsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7Q0FDaEMsRUFDRCxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFzRjtJQUM1SSxlQUFlO0lBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBQSw2QkFBWSxFQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUU1QyxrRUFBa0U7SUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDckQsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN2RixDQUFDLENBQUM7SUFFSCxNQUFNLFNBQVMsR0FBRyxJQUFBLHlCQUFTLEVBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sZUFBZSxHQUFHLElBQUEsNkRBQTJCLEVBQ2pELElBQUEseUJBQVMsRUFBQyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDdEcsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztJQUVyQyxnREFBZ0Q7SUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDL0MsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUcsSUFBQSw0REFBMEIsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUUzRCxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUEseUJBQVMsRUFDaEQsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEVBQzNCLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1FBQzlDLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7UUFDL0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2hFLENBQUMsQ0FDRixDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQ2pDLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxJQUFBLGtDQUFxQixFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQVMsRUFDdEIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQy9CLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1FBQ3JELE1BQU0sR0FBRyxHQUEyQixFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDcEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUNGLENBQUM7SUFFRixrQ0FBa0M7SUFDbEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLHlCQUFTLEVBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNoQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxHQUFHO29CQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sYUFBYSxHQUFHLElBQUEseUJBQVMsRUFBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVsRixNQUFNLGdCQUFnQixHQUFHLElBQUEsdURBQXdCLEVBQy9DLElBQUEseUJBQVMsRUFBQyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2hILENBQUM7SUFFRixxRkFBcUY7SUFDckYsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDN0MsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHVEQUF3QixFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSx5QkFBUyxFQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDMUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDcEQsR0FBRyxJQUFJLEdBQUcsQ0FDUixLQUFLLENBQUMsT0FBTyxDQUNYLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDdEUsQ0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0scUJBQXFCLEdBQUcsSUFBQSxnRUFBNEIsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUUzRSxNQUFNLFlBQVksR0FBRyxJQUFBLHlCQUFTLEVBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUMzRCxNQUFNLEdBQUcsR0FBbUQsRUFBRSxDQUFDO1FBQy9ELEtBQUssTUFBTSxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUEseUJBQVMsRUFDMUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsRUFDcEYsQ0FBQyxFQUNDLFFBQVEsRUFBRSxLQUFLLEVBQ2YsTUFBTSxFQUFFLElBQUksRUFDWixnQkFBZ0IsRUFBRSxRQUFRLEVBQzFCLFlBQVksRUFBRSxNQUFNLEVBQ3BCLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsWUFBWSxFQUFFLE1BQU0sR0FDckIsRUFBRSxFQUFFO1FBQ0gsTUFBTSxVQUFVLEdBQW9DLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBb0MsRUFBRSxDQUFDO1FBRXZELEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxFQUFFLENBQUM7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBUSxFQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO2lCQUM5QyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDekIsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUEsNEJBQW9CLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFNUUsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUVsQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNkLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRTtvQkFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTO29CQUNqQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ3RCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtvQkFDaEMsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNO3dCQUN0QixDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO3dCQUN0RCxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNSLENBQUMsQ0FBQztnQkFDSCxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUNmLFVBQVUsQ0FBQyxRQUFRO2dCQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztpQkFDbEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQkFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUztvQkFDakMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtvQkFDeEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7b0JBQ2hDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTTt3QkFDdEIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTt3QkFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDUixDQUFDLENBQUM7Z0JBQ0gsU0FBUztZQUNYLENBQUM7WUFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FDRixDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQUcsSUFBQSwrQkFBa0IsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLGVBQWUsR0FBRyxJQUFBLCtCQUFrQixFQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQVMsRUFDMUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEVBQ3BDLENBQUMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDMUQsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNULEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFLENBQUM7S0FDSCxDQUNGLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxJQUFBLDZEQUEyQixFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTVELDZFQUE2RTtJQUM3RSxNQUFNLGlCQUFpQixHQUFHLElBQUEseUJBQVMsRUFDakMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQy9CLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQy9DLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0IsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUU7U0FDakIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDLENBQ0YsQ0FBQztJQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBQSx5QkFBUyxFQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXZGLElBQUEsbURBQXNDLEVBQ3BDLElBQUEseUJBQVMsRUFBQyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQy9HLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQzlCLENBQ0YsQ0FBQztJQUVGLDJFQUEyRTtJQUMzRSxNQUFNLG9CQUFvQixHQUFHLElBQUEseUJBQVMsRUFBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2hDLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxJQUFJO29CQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFBLHlCQUFTLEVBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFbkYsTUFBTSwwQkFBMEIsR0FBRyxJQUFBLDRFQUFrQyxFQUNuRSxJQUFBLHlCQUFTLEVBQUMsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsSCxDQUFDO0lBRUYsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFBLHlCQUFTLEVBQ2hELEVBQUUsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsRUFDcEQsQ0FBQyxFQUNDLG9CQUFvQixFQUFFLE1BQU0sRUFDNUIsMEJBQTBCLEVBQUUsUUFBUSxHQUNyQyxFQUFFLEVBQUU7UUFDSCxNQUFNLFNBQVMsR0FBMkIsRUFBRSxDQUFDO1FBQzdDLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7WUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNoRSxDQUFDLENBQ0YsQ0FBQztJQUVGLE1BQU0seUJBQXlCLEdBQUcsSUFBQSw4REFBNEIsRUFDNUQsSUFBQSx5QkFBUyxFQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FDbkQsQ0FDRixDQUFDO0lBRUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHlCQUFTLEVBQ2pDLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLEVBQzVDLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7UUFDbEUsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQ0YsQ0FBQztJQUVGLE1BQU0sc0JBQXNCLEdBQUcsSUFBQSx5QkFBUyxFQUN0QyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsRUFDNUMsQ0FBQyxFQUNDLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLFdBQVcsRUFBRSxRQUFRLEVBQ3JCLGlCQUFpQixFQUFFLE9BQU8sR0FDM0IsRUFBRSxFQUFFO1FBQ0gsTUFBTSxNQUFNLEdBSU4sRUFBRSxDQUFDO1FBRVQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRWhELE1BQU0sVUFBVSxHQUEyQixFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBRUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNO2dCQUFFLFNBQVM7WUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBUSxFQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsU0FBUztZQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNWLFVBQVUsRUFBRSxTQUFTO3dCQUNyQiw0QkFBNEIsRUFBRSxNQUFNO3dCQUNwQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7cUJBQzFCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQ0YsQ0FBQztJQUVGLElBQUEsc0RBQXdCLEVBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUVqRCw2RUFBNkU7SUFDN0UsTUFBTSxjQUFjLEdBQUcsSUFBQSx5QkFBUyxFQUM5QixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFDekIsQ0FBQyxFQUNDLFdBQVcsRUFBRSxRQUFRLEVBQ3JCLFFBQVEsRUFBRSxLQUFLLEdBQ2hCLEVBQUUsRUFBRTtRQUNILE1BQU0sS0FBSyxHQUFvQixFQUFFLENBQUM7UUFFbEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDM0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FDNUMsQ0FBQztZQUNGLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQzNDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQzdCLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDVCxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3JCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztvQkFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO29CQUNwQixRQUFRLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixJQUFJLENBQUM7aUJBQzlDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQ0YsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLElBQUEseUJBQVMsRUFBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3pELEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BFLENBQUMsQ0FBQztJQUVILE1BQU0sc0JBQXNCLEdBQUcsSUFBQSw4REFBMkIsRUFBQyxhQUFhLENBQUMsQ0FBQztJQUUxRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxJQUFBLHlCQUFTLEVBQzdELEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLEVBQzFDLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDOUQsTUFBTSxLQUFLLEdBQW9ELEVBQUUsQ0FBQztRQUNsRSxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLEdBQUc7Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3hFLENBQUMsQ0FDRixDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsSUFBQSxxRUFBK0IsR0FBRSxDQUFDO0lBRXJELE1BQU0sc0JBQXNCLEdBQUcsSUFBQSx5QkFBUyxFQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDcEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDaEUsQ0FBQztJQUNGLE1BQU0saUJBQWlCLEdBQUcsSUFBQSxxQ0FBd0IsRUFBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sWUFBWSxHQUFHLElBQUEseUJBQVMsRUFDNUI7UUFDRSxpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QixjQUFjO0tBQ2YsRUFDRCxDQUFDLEVBQ0MsaUJBQWlCLEVBQUUsUUFBUSxFQUMzQixpQkFBaUIsRUFBRSxRQUFRLEVBQzNCLHNCQUFzQixFQUFFLFFBQVEsRUFDaEMsY0FBYyxFQUFFLFFBQVEsR0FDekIsRUFBRSxFQUFFO1FBQ0gsTUFBTSxLQUFLLEdBQStDLEVBQUUsQ0FBQztRQUU3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDVCxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9CLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDcEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNULGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDeEIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUNwQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUNGLENBQUM7SUFDRixJQUFBLDBDQUE2QixFQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTVDLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSx5QkFBUyxFQUNuQyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLEVBQzdDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUNwRSxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFLEVBQUU7Z0JBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUNGLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxJQUFBLHFFQUErQixFQUNwRCxJQUFBLHlCQUFTLEVBQ1AsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsRUFDbkMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsZ0JBQWdCLEVBQUUsR0FBRztRQUNyQixVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDLENBQ0gsQ0FDRixDQUFDO0lBRUYsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLElBQUEseUJBQVMsRUFDckQ7UUFDRSxpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QixVQUFVO1FBQ1YsY0FBYztRQUNkLGNBQWM7S0FDZixFQUNELENBQUMsRUFDQyxpQkFBaUIsRUFBRSxRQUFRLEVBQzNCLGlCQUFpQixFQUFFLFFBQVEsRUFDM0Isc0JBQXNCLEVBQUUsUUFBUSxFQUNoQyxVQUFVLEVBQUUsS0FBSyxFQUNqQixjQUFjLEVBQUUsTUFBTSxFQUN0QixjQUFjLEVBQUUsUUFBUSxHQUN6QixFQUFFLEVBQUU7UUFDSCxNQUFNLFNBQVMsR0FJVCxFQUFFLENBQUM7UUFDVCxNQUFNLFlBQVksR0FBK0MsRUFBRSxDQUFDO1FBRXBFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pDLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxJQUFJLENBQUM7YUFDdEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFBRSxTQUFTO1lBRTNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxFQUFFO29CQUMxQixXQUFXLEVBQUUsS0FBSztvQkFDbEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDO2lCQUNyQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDYixpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDMUIsV0FBVyxFQUFFLEtBQUs7b0JBQ2xCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQztpQkFDckMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUN4RSxDQUFDLENBQ0YsQ0FBQztJQUVGLElBQUEsc0NBQXlCLEVBQUMsY0FBYyxDQUFDLENBQUM7SUFFMUMsTUFBTSxVQUFVLEdBQUcsSUFBQSx5QkFBUyxFQUMxQixpQkFBaUIsRUFDakIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM5QixDQUFDO0lBQ0YsSUFBQSxzQ0FBeUIsRUFDdkIsSUFBQSx5QkFBUyxFQUNQLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQ2pDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDeEUsQ0FDRixDQUFDO0lBRUYsNkVBQTZFO0lBQzdFLE1BQU0sY0FBYyxHQUFHLElBQUEseUJBQVMsRUFDOUIsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQ3pCLENBQUMsRUFDQyxXQUFXLEVBQUUsUUFBUSxFQUNyQixRQUFRLEVBQUUsS0FBSyxHQUNoQixFQUFFLEVBQUU7UUFDSCxNQUFNLE1BQU0sR0FJTixFQUFFLENBQUM7UUFFVCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUMzQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTTtnQkFBRSxTQUFTO1lBRTVDLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3pDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQzdCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLO29CQUFFLFNBQVM7Z0JBRWpDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ1YsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUs7b0JBQ3hCLGFBQWEsRUFBRSxLQUFLO2lCQUNyQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FDRixDQUFDO0lBRUYsSUFBQSwyREFBMEIsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyw0RUFBNEU7SUFDNUUsTUFBTSxjQUFjLEdBQUcsSUFBQSx5QkFBUyxFQUM5QixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQ3RDLENBQUMsRUFDQyxXQUFXLEVBQUUsUUFBUSxFQUNyQixRQUFRLEVBQUUsS0FBSyxFQUNmLFdBQVcsRUFBRSxJQUFJLEdBQ2xCLEVBQUUsRUFBRTtRQUNILE1BQU0sTUFBTSxHQU1OLEVBQUUsQ0FBQztRQUVULEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQzVDLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNO2dCQUFFLFNBQVM7WUFFNUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDekMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FDN0IsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUs7b0JBQUUsU0FBUztnQkFFakMsTUFBTSxLQUFLLEdBTVA7b0JBQ0YsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUs7b0JBQ3hCLGFBQWEsRUFBRSxLQUFLO2lCQUNyQixDQUFDO2dCQUVGLElBQUksVUFBVSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDcEMsS0FBSyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO29CQUM3QyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDN0IsQ0FBQztnQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUNGLENBQUM7SUFFRixJQUFBLG9EQUF1QixFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQVMsRUFDdEIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxFQUNwRSxDQUFDLEVBQ0MsV0FBVyxFQUFFLFFBQVEsRUFDckIsaUJBQWlCLEVBQUUsR0FBRyxFQUN0QixlQUFlLEVBQUUsT0FBTyxFQUN4QixlQUFlLEVBQUUsT0FBTyxHQUN6QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ0wsZUFBZSxFQUFFLE9BQU8sSUFBSSxFQUFFO1FBQzlCLGVBQWUsRUFBRSxPQUFPLElBQUksRUFBRTtRQUM5QixRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUU7UUFDeEIsY0FBYyxFQUFFLEdBQUcsSUFBSSxFQUFFO0tBQzFCLENBQUMsQ0FDSCxDQUFDO0lBRUYsT0FBTyxJQUFJLGdDQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FDRixDQUFDIn0=
@@ -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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