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,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findOrCreateCategoryStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.findOrCreateCategoryStep = (0, workflows_sdk_1.createStep)("find-or-create-category", async (names, { container }) => {
7
+ if (!names.length)
8
+ return new workflows_sdk_1.StepResponse({});
9
+ const productSvc = container.resolve(utils_1.Modules.PRODUCT);
10
+ const handles = names.map((n) => (0, utils_1.toHandle)(n));
11
+ const existing = await productSvc.listProductCategories({ handle: handles }, { select: ["id", "handle", "name"] });
12
+ const existingByHandle = {};
13
+ for (const cat of existing) {
14
+ if (cat.handle)
15
+ existingByHandle[cat.handle] = cat.id;
16
+ }
17
+ const toCreate = names.filter((n) => !existingByHandle[(0, utils_1.toHandle)(n)]);
18
+ let created = [];
19
+ if (toCreate.length) {
20
+ created = await productSvc.createProductCategories(toCreate.map((name) => ({
21
+ name,
22
+ handle: (0, utils_1.toHandle)(name),
23
+ is_active: true,
24
+ })));
25
+ }
26
+ const nameToId = { ...existingByHandle };
27
+ for (const cat of created) {
28
+ if (cat.handle)
29
+ nameToId[cat.handle] = cat.id;
30
+ }
31
+ const result = {};
32
+ for (const name of names) {
33
+ const id = nameToId[(0, utils_1.toHandle)(name)];
34
+ if (id)
35
+ result[name] = id;
36
+ }
37
+ console.log(`[findOrCreateCategoryStep] ${existing.length} existing, ${created.length} created`);
38
+ return new workflows_sdk_1.StepResponse(result);
39
+ });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1vci1jcmVhdGUtY2F0ZWdvcnkuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZmluZC1vci1jcmVhdGUtY2F0ZWdvcnkuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQThEO0FBR2pELFFBQUEsd0JBQXdCLEdBQUcsSUFBQSwwQkFBVSxFQUNoRCx5QkFBeUIsRUFDekIsS0FBSyxFQUFFLEtBQWUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFL0MsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDbEMsZUFBTyxDQUFDLE9BQU8sQ0FDaEIsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUNyRCxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFDbkIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQ3JDLENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUEyQixFQUFFLENBQUM7SUFDcEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNO1lBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyRSxJQUFJLE9BQU8sR0FBb0QsRUFBRSxDQUFDO0lBQ2xFLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyx1QkFBdUIsQ0FDaEQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QixJQUFJO1lBQ0osTUFBTSxFQUFFLElBQUEsZ0JBQVEsRUFBQyxJQUFJLENBQUM7WUFDdEIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBMkIsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakUsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLEdBQUcsQ0FBQyxNQUFNO1lBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLENBQ1QsOEJBQThCLFFBQVEsQ0FBQyxNQUFNLGNBQWMsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUNwRixDQUFDO0lBRUYsT0FBTyxJQUFJLDRCQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findProductsByHandleStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.findProductsByHandleStep = (0, workflows_sdk_1.createStep)("find-products-by-handle", async (handles, { container }) => {
7
+ if (!handles.length)
8
+ return new workflows_sdk_1.StepResponse([]);
9
+ const productSvc = container.resolve(utils_1.Modules.PRODUCT);
10
+ const products = await productSvc.listProducts({ handle: handles }, { select: ["id", "handle"], relations: ["variants"] });
11
+ return new workflows_sdk_1.StepResponse(products);
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1wcm9kdWN0cy1ieS1oYW5kbGUuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZmluZC1wcm9kdWN0cy1ieS1oYW5kbGUuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQW9EO0FBR3ZDLFFBQUEsd0JBQXdCLEdBQUcsSUFBQSwwQkFBVSxFQUNoRCx5QkFBeUIsRUFDekIsS0FBSyxFQUFFLE9BQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2xDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQzVDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUNuQixFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUN0RCxDQUFDO0lBQ0YsT0FBTyxJQUFJLDRCQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findProductsByVariantSkuStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.findProductsByVariantSkuStep = (0, workflows_sdk_1.createStep)("find-products-by-variant-sku", async (skus, { container }) => {
7
+ if (!skus.length)
8
+ return new workflows_sdk_1.StepResponse([]);
9
+ const productSvc = container.resolve(utils_1.Modules.PRODUCT);
10
+ const variants = await productSvc.listProductVariants({ sku: skus }, { select: ["id", "product_id"] });
11
+ const productIds = [
12
+ ...new Set(variants.map((v) => v.product_id).filter((id) => !!id)),
13
+ ];
14
+ if (!productIds.length)
15
+ return new workflows_sdk_1.StepResponse([]);
16
+ const products = await productSvc.listProducts({ id: productIds }, { select: ["id", "handle"], relations: ["variants"] });
17
+ return new workflows_sdk_1.StepResponse(products);
18
+ });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1wcm9kdWN0cy1ieS12YXJpYW50LXNrdS5zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9maW5kLXByb2R1Y3RzLWJ5LXZhcmlhbnQtc2t1LnN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBQzdFLHFEQUFvRDtBQUd2QyxRQUFBLDRCQUE0QixHQUFHLElBQUEsMEJBQVUsRUFDcEQsOEJBQThCLEVBQzlCLEtBQUssRUFBRSxJQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2xDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxtQkFBbUIsQ0FDbkQsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQ2IsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FDakMsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEdBQUcsSUFBSSxHQUFHLENBQ1IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDckU7S0FDRixDQUFDO0lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsWUFBWSxDQUM1QyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFDbEIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDdEQsQ0FBQztJQUNGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FDRixDQUFDIn0=
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listCategoryAttributesByLabelsStep = 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.listCategoryAttributesByLabelsStep = (0, workflows_sdk_1.createStep)("list-category-attributes-by-labels", async (labels, { container }) => {
7
+ if (!labels.length)
8
+ return new workflows_sdk_1.StepResponse([]);
9
+ try {
10
+ const customAttrSvc = container.resolve(product_attributes_1.CUSTOM_ATTRIBUTE_MODULE);
11
+ const result = [];
12
+ for (const label of labels) {
13
+ const found = await customAttrSvc.listCategoryCustomAttributes({
14
+ label,
15
+ is_global: true,
16
+ deleted_at: null,
17
+ });
18
+ result.push(...found);
19
+ }
20
+ return new workflows_sdk_1.StepResponse(result);
21
+ }
22
+ catch (err) {
23
+ console.error("[listCategoryAttributesByLabelsStep] Error:", err);
24
+ throw err;
25
+ }
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jYXRlZ29yeS1hdHRyaWJ1dGVzLWJ5LWxhYmVscy5zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9saXN0LWNhdGVnb3J5LWF0dHJpYnV0ZXMtYnktbGFiZWxzLnN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBQzdFLG9JQUFzSTtBQU16SCxRQUFBLGtDQUFrQyxHQUFHLElBQUEsMEJBQVUsRUFDMUQsb0NBQW9DLEVBQ3BDLEtBQUssRUFDSCxNQUFnQixFQUNoQixFQUFFLFNBQVMsRUFBRSxFQUN3QyxFQUFFO0lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3JDLDRDQUF1QixDQUN4QixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQWlDLEVBQUUsQ0FBQztRQUNoRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFDLDRCQUE0QixDQUFDO2dCQUM3RCxLQUFLO2dCQUNMLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxJQUFJLDRCQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDIn0=
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listExistingInventoryLevelsStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.listExistingInventoryLevelsStep = (0, workflows_sdk_1.createStep)("list-existing-inventory-levels", async (input, { container }) => {
7
+ const emptyResult = {
8
+ byItemId: {},
9
+ };
10
+ if (!input.inventoryItemIds.length || !input.locationId) {
11
+ return new workflows_sdk_1.StepResponse(emptyResult);
12
+ }
13
+ const inventorySvc = container.resolve(utils_1.Modules.INVENTORY);
14
+ const levels = await inventorySvc.listInventoryLevels({
15
+ inventory_item_id: input.inventoryItemIds,
16
+ location_id: input.locationId,
17
+ });
18
+ const byItemId = {};
19
+ for (const level of levels) {
20
+ byItemId[level.inventory_item_id] = level;
21
+ }
22
+ return new workflows_sdk_1.StepResponse({ byItemId });
23
+ });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1leGlzdGluZy1pbnZlbnRvcnktbGV2ZWxzLnN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2xpc3QtZXhpc3RpbmctaW52ZW50b3J5LWxldmVscy5zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBb0Q7QUFHdkMsUUFBQSwrQkFBK0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3ZELGdDQUFnQyxFQUNoQyxLQUFLLEVBQ0gsS0FBeUQsRUFDekQsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxXQUFXLEdBQW1FO1FBQ2xGLFFBQVEsRUFBRSxFQUFFO0tBQ2IsQ0FBQztJQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hELE9BQU8sSUFBSSw0QkFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNwQyxlQUFPLENBQUMsU0FBUyxDQUNsQixDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7UUFDcEQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtRQUN6QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFVBQVU7S0FDOUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxRQUFRLEdBQXFELEVBQUUsQ0FBQztJQUN0RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUNELE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQ0YsQ0FBQyJ9
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listInventoryItemsBySkuStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.listInventoryItemsBySkuStep = (0, workflows_sdk_1.createStep)("list-inventory-items-by-sku", async (skus, { container }) => {
7
+ if (!skus.length)
8
+ return new workflows_sdk_1.StepResponse([]);
9
+ const inventorySvc = container.resolve(utils_1.Modules.INVENTORY);
10
+ const items = await inventorySvc.listInventoryItems({ sku: skus });
11
+ return new workflows_sdk_1.StepResponse(items);
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pbnZlbnRvcnktaXRlbXMtYnktc2t1LnN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2xpc3QtaW52ZW50b3J5LWl0ZW1zLWJ5LXNrdS5zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBb0Q7QUFHdkMsUUFBQSwyQkFBMkIsR0FBRyxJQUFBLDBCQUFVLEVBQ25ELDZCQUE2QixFQUM3QixLQUFLLEVBQUUsSUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNwQyxlQUFPLENBQUMsU0FBUyxDQUNsQixDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRSxPQUFPLElBQUksNEJBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQ0YsQ0FBQyJ9
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listProductTagsByValueStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.listProductTagsByValueStep = (0, workflows_sdk_1.createStep)("list-product-tags-by-value", async (values, { container }) => {
7
+ if (!values.length)
8
+ return new workflows_sdk_1.StepResponse([]);
9
+ const productSvc = container.resolve(utils_1.Modules.PRODUCT);
10
+ const tags = await productSvc.listProductTags({ value: values });
11
+ return new workflows_sdk_1.StepResponse(tags);
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wcm9kdWN0LXRhZ3MtYnktdmFsdWUuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvbGlzdC1wcm9kdWN0LXRhZ3MtYnktdmFsdWUuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQW9EO0FBR3ZDLFFBQUEsMEJBQTBCLEdBQUcsSUFBQSwwQkFBVSxFQUNsRCw0QkFBNEIsRUFDNUIsS0FBSyxFQUFFLE1BQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2xDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRSxPQUFPLElBQUksNEJBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQ0YsQ0FBQyJ9
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseCSVStep = void 0;
7
+ exports.parseCSVFile = parseCSVFile;
8
+ const workflows_sdk_1 = require("@medusajs/workflows-sdk");
9
+ const sync_1 = require("csv-parse/sync");
10
+ const csv_parse_1 = require("csv-parse");
11
+ const node_fs_1 = require("node:fs");
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const FIELDS = {
14
+ title: { target: "product", required: true },
15
+ description: { target: "product" },
16
+ subtitle: { target: "product" },
17
+ category: { target: "product" },
18
+ brand_tag: { target: "product" },
19
+ images: {
20
+ target: "product",
21
+ parse: (v) => v
22
+ .split(/[\s,]+/)
23
+ .map((s) => s.trim())
24
+ .filter(Boolean),
25
+ },
26
+ option1_name: { target: "product" },
27
+ option2_name: { target: "product" },
28
+ variant_title: { target: "variant", prop: "title" },
29
+ variant_sku: { target: "variant", prop: "sku" },
30
+ option1_value: { target: "variant" },
31
+ option2_value: { target: "variant" },
32
+ price: { target: "variant", parse: (v) => parseFloat(v) },
33
+ dealer_price: { target: "variant", parse: (v) => parseFloat(v) },
34
+ inventory_quantity: {
35
+ target: "variant",
36
+ parse: (v) => parseInt(v, 10),
37
+ defaultValue: 0,
38
+ },
39
+ };
40
+ function validate(rows) {
41
+ const errors = [];
42
+ for (const [i, r] of rows.entries()) {
43
+ for (const [field, cfg] of Object.entries(FIELDS)) {
44
+ const val = r[field]?.trim();
45
+ if (!val) {
46
+ if (cfg.required)
47
+ errors.push(`Row ${i + 1}: missing ${field}`);
48
+ continue;
49
+ }
50
+ if (cfg.parse && Number.isNaN(cfg.parse(val))) {
51
+ errors.push(`Row ${i + 1}: invalid ${field} "${val}"`);
52
+ }
53
+ }
54
+ }
55
+ return errors;
56
+ }
57
+ function parseCSVFile(filePath) {
58
+ const fileContent = fs_1.default.readFileSync(filePath, "utf8");
59
+ const rows = (0, sync_1.parse)(fileContent, {
60
+ columns: true,
61
+ skip_empty_lines: true,
62
+ trim: true,
63
+ });
64
+ const errors = validate(rows);
65
+ return { rows, errors };
66
+ }
67
+ function resolve(row, field) {
68
+ const cfg = FIELDS[field];
69
+ const raw = row[field]?.trim();
70
+ if (!raw)
71
+ return cfg.defaultValue ?? undefined;
72
+ return cfg.parse ? cfg.parse(raw) : raw;
73
+ }
74
+ function resolveString(row, field) {
75
+ const raw = row[field]?.trim();
76
+ if (!raw)
77
+ return undefined;
78
+ return raw;
79
+ }
80
+ function resolveStringArray(row, field) {
81
+ const raw = row[field]?.trim();
82
+ if (!raw)
83
+ return undefined;
84
+ return raw
85
+ .split(",")
86
+ .map((s) => s.trim())
87
+ .filter(Boolean);
88
+ }
89
+ function resolveNumber(row, field, fallback) {
90
+ const raw = row[field]?.trim();
91
+ if (!raw)
92
+ return fallback;
93
+ const parsed = Number(raw);
94
+ return Number.isNaN(parsed) ? fallback : parsed;
95
+ }
96
+ function extractAttributes(row) {
97
+ const attrs = [];
98
+ for (const key of Object.keys(row)) {
99
+ const match = key.match(/^attribute_(\d+)_name$/);
100
+ if (!match)
101
+ continue;
102
+ const idx = match[1];
103
+ const name = row[key]?.trim();
104
+ const value = row[`attribute_${idx}_value`]?.trim();
105
+ if (name && value) {
106
+ attrs.push({ name, value });
107
+ }
108
+ }
109
+ return attrs;
110
+ }
111
+ function toProducts(rows) {
112
+ const map = new Map();
113
+ for (const r of rows) {
114
+ const title = resolveString(r, "title");
115
+ if (!title)
116
+ continue;
117
+ if (!map.has(title)) {
118
+ const attrs = extractAttributes(r);
119
+ const imagesRaw = resolve(r, "images");
120
+ const images = Array.isArray(imagesRaw) ? imagesRaw.filter((v) => typeof v === "string") : undefined;
121
+ map.set(title, {
122
+ title,
123
+ description: resolveString(r, "description"),
124
+ subtitle: resolveString(r, "subtitle"),
125
+ categories: resolveStringArray(r, "category"),
126
+ brand_tag: resolveString(r, "brand_tag"),
127
+ option1_name: resolveString(r, "option1_name"),
128
+ option2_name: resolveString(r, "option2_name"),
129
+ images,
130
+ attributes: attrs.length ? attrs : undefined,
131
+ variants: [],
132
+ });
133
+ }
134
+ const product = map.get(title);
135
+ product.variants.push({
136
+ sku: resolveString(r, "variant_sku") ?? "",
137
+ title: resolveString(r, "variant_title"),
138
+ option1_value: resolveString(r, "option1_value") ?? "",
139
+ option2_value: resolveString(r, "option2_value"),
140
+ price: resolveNumber(r, "price", 0),
141
+ dealer_price: resolveNumber(r, "dealer_price", 0) || undefined,
142
+ inventory_quantity: resolveNumber(r, "inventory_quantity", 0),
143
+ });
144
+ }
145
+ return Array.from(map.values());
146
+ }
147
+ exports.parseCSVStep = (0, workflows_sdk_1.createStep)("parse-csv-step", async ({ filePath }) => {
148
+ const rows = [];
149
+ const parser = (0, node_fs_1.createReadStream)(filePath).pipe((0, csv_parse_1.parse)({ columns: true, skip_empty_lines: true, trim: true }));
150
+ for await (const record of parser) {
151
+ if (typeof record === "object" && record !== null) {
152
+ rows.push(record);
153
+ }
154
+ }
155
+ const errors = validate(rows);
156
+ if (errors.length)
157
+ throw new Error(errors.join(" | "));
158
+ return new workflows_sdk_1.StepResponse(toProducts(rows));
159
+ });
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtY3N2LnN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3BhcnNlLWNzdi5zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQTZEQSxvQ0FZQztBQXpFRCwyREFBbUU7QUFFbkUseUNBQXVDO0FBQ3ZDLHlDQUFpRDtBQUNqRCxxQ0FBMkM7QUFDM0MsNENBQW9CO0FBVXBCLE1BQU0sTUFBTSxHQUFnQztJQUMxQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7SUFDNUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNsQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQy9CLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDL0IsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNoQyxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsU0FBUztRQUNqQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNYLENBQUM7YUFDRSxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQztLQUNyQjtJQUNELFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDbkMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNuQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7SUFDbkQsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQy9DLGFBQWEsRUFBRSxF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
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refetchProductsByHandleStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.refetchProductsByHandleStep = (0, workflows_sdk_1.createStep)("refetch-products-by-handle", async (handles, { container }) => {
7
+ if (!handles.length)
8
+ return new workflows_sdk_1.StepResponse([]);
9
+ const productSvc = container.resolve(utils_1.Modules.PRODUCT);
10
+ const products = await productSvc.listProducts({ handle: handles }, {
11
+ select: ["id", "handle"],
12
+ relations: ["variants", "variants.options", "images", "tags", "categories"],
13
+ });
14
+ return new workflows_sdk_1.StepResponse(products);
15
+ });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXRjaC1wcm9kdWN0cy1ieS1oYW5kbGUuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvcmVmZXRjaC1wcm9kdWN0cy1ieS1oYW5kbGUuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQW9EO0FBR3ZDLFFBQUEsMkJBQTJCLEdBQUcsSUFBQSwwQkFBVSxFQUNuRCw0QkFBNEIsRUFDNUIsS0FBSyxFQUFFLE9BQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2xDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQzVDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUNuQjtRQUNFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7UUFDeEIsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDO0tBQzVFLENBQ0YsQ0FBQztJQUNGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FDRixDQUFDIn0=
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveDefaultStockLocationStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.resolveDefaultStockLocationStep = (0, workflows_sdk_1.createStep)("resolve-default-stock-location", async (_, { container }) => {
7
+ const stockLocationSvc = container.resolve(utils_1.Modules.STOCK_LOCATION);
8
+ const [existing] = await stockLocationSvc.listStockLocations({});
9
+ if (existing) {
10
+ return new workflows_sdk_1.StepResponse(existing.id);
11
+ }
12
+ const [created] = await stockLocationSvc.createStockLocations([
13
+ { name: "Default Location" },
14
+ ]);
15
+ return new workflows_sdk_1.StepResponse(created.id);
16
+ });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1kZWZhdWx0LXN0b2NrLWxvY2F0aW9uLnN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3Jlc29sdmUtZGVmYXVsdC1zdG9jay1sb2NhdGlvbi5zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBb0Q7QUFHdkMsUUFBQSwrQkFBK0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3ZELGdDQUFnQyxFQUNoQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN6QixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3hDLGVBQU8sQ0FBQyxjQUFjLENBQ3ZCLENBQUM7SUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLDRCQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztRQUM1RCxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtLQUM3QixDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setProductAttributesStep = 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.setProductAttributesStep = (0, workflows_sdk_1.createStep)("set-product-attributes", async (inputs, { container }) => {
7
+ if (!inputs.length) {
8
+ console.warn("[setProductAttributesStep] No attribute inputs to process");
9
+ return new workflows_sdk_1.StepResponse([]);
10
+ }
11
+ try {
12
+ const customAttrSvc = container.resolve(product_attributes_1.CUSTOM_ATTRIBUTE_MODULE);
13
+ const productIds = [...new Set(inputs.map((i) => i.product_id))];
14
+ const existingByProduct = {};
15
+ for (const pid of productIds) {
16
+ const existing = await customAttrSvc.getProductAttributes(pid);
17
+ existingByProduct[pid] = existing;
18
+ }
19
+ const results = [];
20
+ for (const input of inputs) {
21
+ const existingList = existingByProduct[input.product_id] ?? [];
22
+ const existingAttr = existingList.find((e) => e.category_custom_attribute?.id ===
23
+ input.category_custom_attribute_id);
24
+ if (existingAttr) {
25
+ const updated = await customAttrSvc.updateProductAttribute(existingAttr.id, {
26
+ value: input.value,
27
+ value_numeric: isNaN(Number(input.value))
28
+ ? null
29
+ : Number(input.value),
30
+ });
31
+ results.push(updated);
32
+ }
33
+ else {
34
+ const created = await customAttrSvc.createProductAttribute({
35
+ product_id: input.product_id,
36
+ category_custom_attribute_id: input.category_custom_attribute_id,
37
+ value: input.value,
38
+ value_numeric: isNaN(Number(input.value))
39
+ ? null
40
+ : Number(input.value),
41
+ });
42
+ results.push(created);
43
+ }
44
+ }
45
+ console.log(`[setProductAttributesStep] Set ${results.length} product attributes`);
46
+ return new workflows_sdk_1.StepResponse(results);
47
+ }
48
+ catch (err) {
49
+ console.error("[setProductAttributesStep] Error:", err);
50
+ throw err;
51
+ }
52
+ });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LXByb2R1Y3QtYXR0cmlidXRlcy5zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zZXQtcHJvZHVjdC1hdHRyaWJ1dGVzLnN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBQzdFLG9JQUFzSTtBQU16SCxRQUFBLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDaEQsd0JBQXdCLEVBQ3hCLEtBQUssRUFDSCxNQUlHLEVBQ0gsRUFBRSxTQUFTLEVBQUUsRUFDdUMsRUFBRTtJQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMxRSxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDckMsNENBQXVCLENBQ3hCLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxNQUFNLGlCQUFpQixHQUFnRCxFQUFFLENBQUM7UUFDMUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFnQyxFQUFFLENBQUM7UUFDaEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9ELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQ3BDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMseUJBQXlCLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLDRCQUE0QixDQUNyQyxDQUFDO1lBRUYsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsc0JBQXNCLENBQ3hELFlBQVksQ0FBQyxFQUFFLEVBQ2Y7b0JBQ0UsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZDLENBQUMsQ0FBQyxJQUFJO3dCQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztpQkFDeEIsQ0FDRixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLHNCQUFzQixDQUFDO29CQUN6RCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7b0JBQzVCLDRCQUE0QixFQUFFLEtBQUssQ0FBQyw0QkFBNEI7b0JBQ2hFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQkFDbEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN2QyxDQUFDLENBQUMsSUFBSTt3QkFDTixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrQ0FBa0MsT0FBTyxDQUFDLE1BQU0scUJBQXFCLENBQ3RFLENBQUM7UUFDRixPQUFPLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxHQUFHLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateDealerPricesStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.updateDealerPricesStep = (0, workflows_sdk_1.createStep)("update-dealer-prices", 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
+ if (!linkService) {
13
+ console.log("[updateDealerPricesStep] No pricing link module found");
14
+ return new workflows_sdk_1.StepResponse([]);
15
+ }
16
+ const variantIds = inputs.map((i) => i.variant_id);
17
+ const links = (await linkService.list({ variant_id: variantIds }, { select: ["variant_id", "price_set_id"] }));
18
+ const variantToPriceSet = {};
19
+ for (const link of links) {
20
+ variantToPriceSet[link.variant_id] = link.price_set_id;
21
+ }
22
+ const priceSetIds = [...new Set(links.map((l) => l.price_set_id))];
23
+ const existingPrices = priceSetIds.length
24
+ ? (await pricingSvc.listPrices({ price_set_id: priceSetIds }, { select: ["id", "price_set_id", "amount", "currency_code"] }))
25
+ : [];
26
+ const pricesByPriceSet = {};
27
+ for (const price of existingPrices) {
28
+ if (!pricesByPriceSet[price.price_set_id]) {
29
+ pricesByPriceSet[price.price_set_id] = [];
30
+ }
31
+ pricesByPriceSet[price.price_set_id].push(price);
32
+ }
33
+ const toCreate = [];
34
+ const toUpdate = [];
35
+ for (const input of inputs) {
36
+ const priceSetId = variantToPriceSet[input.variant_id];
37
+ if (!priceSetId)
38
+ continue;
39
+ const existingForSet = pricesByPriceSet[priceSetId] ?? [];
40
+ const existingDealer = existingForSet.find((p) => p.currency_code?.toLowerCase() === "inr");
41
+ if (existingDealer) {
42
+ toUpdate.push({
43
+ id: existingDealer.id,
44
+ price_set_id: priceSetId,
45
+ amount: input.dealer_price,
46
+ currency_code: "inr",
47
+ });
48
+ }
49
+ else {
50
+ toCreate.push({
51
+ price_set_id: priceSetId,
52
+ amount: input.dealer_price,
53
+ currency_code: "inr",
54
+ });
55
+ }
56
+ }
57
+ if (toCreate.length) {
58
+ await pricingSvc.addPriceListPrices([
59
+ {
60
+ price_list_id: inputs[0].price_list_id,
61
+ prices: toCreate,
62
+ },
63
+ ]);
64
+ }
65
+ if (toUpdate.length) {
66
+ await pricingSvc.updatePriceListPrices([
67
+ {
68
+ price_list_id: inputs[0].price_list_id,
69
+ prices: toUpdate,
70
+ },
71
+ ]);
72
+ }
73
+ const results = inputs.map((i) => i.variant_id);
74
+ console.log(`[updateDealerPricesStep] Updated ${results.length} variant dealer prices via price list ${inputs[0].price_list_id}`);
75
+ return new workflows_sdk_1.StepResponse(results);
76
+ });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWRlYWxlci1wcmljZXMuc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvdXBkYXRlLWRlYWxlci1wcmljZXMuc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQStFO0FBcUJsRSxRQUFBLHNCQUFzQixHQUFHLElBQUEsMEJBQVUsRUFDOUMsc0JBQXNCLEVBQ3RCLEtBQUssRUFBRSxNQUEwQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFjLENBQUMsQ0FBQztJQUU1RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNsQyxlQUFPLENBQUMsT0FBTyxDQUNoQixDQUFDO0lBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUMxQyxlQUFPLENBQUMsT0FBTyxFQUNmLFlBQVksRUFDWixlQUFPLENBQUMsT0FBTyxFQUNmLGNBQWMsQ0FDZixDQUFDO0lBRUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsdURBQXVELENBQ3hELENBQUM7UUFDRixPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFjLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUNuQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVB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
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateVariantPricesStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.updateVariantPricesStep = (0, workflows_sdk_1.createStep)("update-variant-prices", 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
+ if (!linkService) {
13
+ return new workflows_sdk_1.StepResponse([]);
14
+ }
15
+ const variantIds = inputs.map((i) => i.variant_id);
16
+ const links = (await linkService.list({ variant_id: variantIds }, { select: ["variant_id", "price_set_id"] }));
17
+ const results = [];
18
+ for (const input of inputs) {
19
+ const link = links.find((l) => l.variant_id === input.variant_id);
20
+ if (!link) {
21
+ console.log(`[updateVariantPricesStep] No price set link for variant ${input.variant_id}, skipping`);
22
+ continue;
23
+ }
24
+ const existingPrices = await pricingSvc.listPrices({ price_set_id: [link.price_set_id] }, { select: ["id", "amount", "currency_code"] });
25
+ if (existingPrices.length > 0) {
26
+ await pricingSvc.removePrices(existingPrices.map((p) => p.id));
27
+ }
28
+ console.log(`[updateVariantPricesStep] variant=${input.variant_id} base_amount=${input.amount} dealer_amount=${input.dealer_price ?? "none"}`);
29
+ const [newPriceSet] = await pricingSvc.createPriceSets([
30
+ {
31
+ prices: [
32
+ {
33
+ amount: input.amount,
34
+ currency_code: input.currency_code,
35
+ },
36
+ ],
37
+ },
38
+ ]);
39
+ await remoteLink.dismiss({
40
+ [utils_1.Modules.PRODUCT]: { variant_id: input.variant_id },
41
+ [utils_1.Modules.PRICING]: { price_set_id: link.price_set_id },
42
+ });
43
+ await remoteLink.create({
44
+ [utils_1.Modules.PRODUCT]: { variant_id: input.variant_id },
45
+ [utils_1.Modules.PRICING]: { price_set_id: newPriceSet.id },
46
+ });
47
+ if (input.dealer_price && input.price_list_id) {
48
+ const existingPlPrices = await pricingSvc.listPriceLists({ id: [input.price_list_id] }, { select: ["id"], relations: ["prices"] });
49
+ const plPrices = existingPlPrices?.[0]?.prices ?? [];
50
+ const stalePriceIds = plPrices
51
+ .filter((p) => p.price_set_id === newPriceSet.id || p.price_set_id === link.price_set_id)
52
+ .map((p) => p.id);
53
+ if (stalePriceIds.length) {
54
+ await pricingSvc.removePrices(stalePriceIds);
55
+ }
56
+ await pricingSvc.addPriceListPrices([
57
+ {
58
+ price_list_id: input.price_list_id,
59
+ prices: [
60
+ {
61
+ price_set_id: newPriceSet.id,
62
+ amount: input.dealer_price,
63
+ currency_code: "inr",
64
+ },
65
+ ],
66
+ },
67
+ ]);
68
+ }
69
+ results.push(input.variant_id);
70
+ }
71
+ console.log(`[updateVariantPricesStep] Updated ${results.length} variant prices (base + dealer)`);
72
+ return new workflows_sdk_1.StepResponse(results);
73
+ });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXZhcmlhbnQtcHJpY2VzLnN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3VwZGF0ZS12YXJpYW50LXByaWNlcy5zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFnQmxFLFFBQUEsdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUMvQyx1QkFBdUIsRUFDdkIsS0FBSyxFQUFFLE1BQTJCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQWMsQ0FBQyxDQUFDO0lBRTVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2xDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7SUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQzFDLGVBQU8sQ0FBQyxPQUFPLEVBQ2YsWUFBWSxFQUNaLGVBQU8sQ0FBQyxPQUFPLEVBQ2YsY0FBYyxDQUNmLENBQUM7SUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FDbkMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQzFCLEVBQUUsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLGNB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