order-management 0.0.17 → 0.0.19

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 (48) hide show
  1. package/.medusa/server/src/admin/index.js +644 -11
  2. package/.medusa/server/src/admin/index.mjs +644 -11
  3. package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +74 -0
  4. package/.medusa/server/src/api/admin/swaps/[id]/process-payment/route.js +152 -0
  5. package/.medusa/server/src/api/admin/swaps/[id]/reject/route.js +43 -0
  6. package/.medusa/server/src/api/admin/swaps/[id]/route.js +70 -0
  7. package/.medusa/server/src/api/admin/swaps/[id]/status/route.js +45 -0
  8. package/.medusa/server/src/api/admin/swaps/[id]/sync/route.js +148 -0
  9. package/.medusa/server/src/api/admin/swaps/route.js +51 -0
  10. package/.medusa/server/src/api/admin/swaps/validators.js +22 -0
  11. package/.medusa/server/src/api/store/guest-orders/[id]/invoice/route.js +17 -5
  12. package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +17 -5
  13. package/.medusa/server/src/api/store/guest-orders/[id]/route.js +17 -5
  14. package/.medusa/server/src/api/store/guest-orders/route.js +17 -5
  15. package/.medusa/server/src/api/store/orders/[order_id]/swaps/route.js +107 -0
  16. package/.medusa/server/src/api/store/otp/request/route.js +12 -5
  17. package/.medusa/server/src/api/store/swaps/[id]/cancel/route.js +64 -0
  18. package/.medusa/server/src/api/store/swaps/[id]/route.js +112 -0
  19. package/.medusa/server/src/api/store/swaps/route.js +117 -0
  20. package/.medusa/server/src/helpers/index.js +18 -0
  21. package/.medusa/server/src/helpers/swaps.js +88 -0
  22. package/.medusa/server/src/modules/swap/index.js +13 -0
  23. package/.medusa/server/src/modules/swap/migrations/Migration20260121164326.js +49 -0
  24. package/.medusa/server/src/modules/swap/models/swap.js +21 -0
  25. package/.medusa/server/src/modules/swap/service.js +224 -0
  26. package/.medusa/server/src/services/otp-service.js +16 -5
  27. package/.medusa/server/src/subscribers/send-order-email.js +27 -8
  28. package/.medusa/server/src/workflows/index.js +8 -2
  29. package/.medusa/server/src/workflows/steps/swap/calculate-difference-step.js +56 -0
  30. package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +71 -0
  31. package/.medusa/server/src/workflows/steps/swap/create-medusa-return-step.js +79 -0
  32. package/.medusa/server/src/workflows/steps/swap/create-swap-step.js +29 -0
  33. package/.medusa/server/src/workflows/steps/swap/handle-payment-difference-step.js +102 -0
  34. package/.medusa/server/src/workflows/steps/swap/index.js +26 -0
  35. package/.medusa/server/src/workflows/steps/swap/retrieve-swap-step.js +26 -0
  36. package/.medusa/server/src/workflows/steps/swap/sync-medusa-status-step.js +132 -0
  37. package/.medusa/server/src/workflows/steps/swap/update-swap-status-step.js +25 -0
  38. package/.medusa/server/src/workflows/steps/swap/validate-eligibility-step.js +25 -0
  39. package/.medusa/server/src/workflows/steps/swap/validate-order-step.js +69 -0
  40. package/.medusa/server/src/workflows/steps/swap/validate-swap-items-step.js +41 -0
  41. package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +22 -0
  42. package/.medusa/server/src/workflows/swaps/create-swap-workflow.js +52 -0
  43. package/.medusa/server/src/workflows/swaps/execute-swap-workflow.js +36 -0
  44. package/.medusa/server/src/workflows/swaps/types.js +3 -0
  45. package/.medusa/server/src/workflows/swaps/update-swap-status-workflow.js +23 -0
  46. package/README.md +208 -0
  47. package/package.json +1 -1
  48. package/.medusa/server/src/utils/resolve-options.js +0 -101
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncMedusaStatusStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const utils_2 = require("@medusajs/framework/utils");
7
+ const swap_1 = require("../../../modules/swap");
8
+ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-status", async (input, { container }) => {
9
+ const { swap_id } = input;
10
+ if (!swap_id) {
11
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "swap_id is required");
12
+ }
13
+ const swapService = container.resolve(swap_1.SWAP_MODULE);
14
+ const swap = await swapService.retrieveSwap(swap_id);
15
+ const swapData = swap;
16
+ if (!swapData.exchange_id && !swapData.return_id) {
17
+ // No Medusa integration yet, nothing to sync
18
+ return new workflows_sdk_1.StepResponse({
19
+ swap,
20
+ status_synced: false,
21
+ });
22
+ }
23
+ const remoteQuery = container.resolve(utils_2.ContainerRegistrationKeys.REMOTE_QUERY);
24
+ let medusaStatus;
25
+ let updatedStatus;
26
+ // Query Medusa exchange status if exchange_id exists
27
+ if (swapData.exchange_id) {
28
+ try {
29
+ const exchangeQuery = (0, utils_2.remoteQueryObjectFromString)({
30
+ entryPoint: "exchange",
31
+ fields: ["id", "status"],
32
+ filters: {
33
+ id: [swapData.exchange_id],
34
+ },
35
+ });
36
+ const exchanges = await remoteQuery(exchangeQuery);
37
+ const exchangeArray = Array.isArray(exchanges)
38
+ ? exchanges
39
+ : exchanges
40
+ ? [exchanges]
41
+ : [];
42
+ const exchange = exchangeArray.find((e) => {
43
+ const eData = e;
44
+ return eData?.id === swapData.exchange_id;
45
+ });
46
+ if (exchange) {
47
+ const exchangeData = exchange;
48
+ medusaStatus = exchangeData.status;
49
+ // Map Medusa exchange status to swap status
50
+ const statusMap = {
51
+ requested: "return_started",
52
+ received: "return_received",
53
+ shipped: "new_items_shipped",
54
+ delivered: "completed",
55
+ cancelled: "cancelled",
56
+ };
57
+ updatedStatus = statusMap[medusaStatus || ""];
58
+ }
59
+ }
60
+ catch (error) {
61
+ // If exchange query fails, continue with return status
62
+ }
63
+ }
64
+ // Query Medusa return status if return_id exists and exchange status not found
65
+ if (!medusaStatus && swapData.return_id) {
66
+ try {
67
+ const returnQuery = (0, utils_2.remoteQueryObjectFromString)({
68
+ entryPoint: "return",
69
+ fields: ["id", "status"],
70
+ filters: {
71
+ id: [swapData.return_id],
72
+ },
73
+ });
74
+ const returns = await remoteQuery(returnQuery);
75
+ const returnArray = Array.isArray(returns) ? returns : returns ? [returns] : [];
76
+ const returnData = returnArray.find((r) => {
77
+ const rData = r;
78
+ return rData?.id === swapData.return_id;
79
+ });
80
+ if (returnData) {
81
+ const returnDataTyped = returnData;
82
+ medusaStatus = returnDataTyped.status;
83
+ // Map Medusa return status to swap status
84
+ const statusMap = {
85
+ requested: "return_started",
86
+ received: "return_received",
87
+ cancelled: "cancelled",
88
+ };
89
+ if (!updatedStatus) {
90
+ updatedStatus = statusMap[medusaStatus || ""];
91
+ }
92
+ }
93
+ }
94
+ catch (error) {
95
+ // If return query fails, cannot sync
96
+ }
97
+ }
98
+ // Update swap status if it differs from Medusa status
99
+ let statusSynced = false;
100
+ if (updatedStatus && updatedStatus !== swapData.status) {
101
+ const swapMetadata = swapData.metadata || {};
102
+ const statusHistory = swapMetadata.status_history || [];
103
+ await swapService.updateSwaps({
104
+ selector: { id: swap_id },
105
+ data: {
106
+ status: updatedStatus,
107
+ metadata: {
108
+ ...swapMetadata,
109
+ status_history: [
110
+ ...statusHistory,
111
+ {
112
+ status: updatedStatus,
113
+ timestamp: new Date().toISOString(),
114
+ synced_from_medusa: true,
115
+ medusa_status: medusaStatus,
116
+ },
117
+ ],
118
+ last_synced_at: new Date().toISOString(),
119
+ },
120
+ },
121
+ });
122
+ statusSynced = true;
123
+ }
124
+ // Retrieve the latest swap data after update
125
+ const finalSwap = await swapService.retrieveSwap(swap_id);
126
+ return new workflows_sdk_1.StepResponse({
127
+ swap: finalSwap,
128
+ status_synced: statusSynced,
129
+ medusa_status: medusaStatus,
130
+ });
131
+ });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1tZWR1c2Etc3RhdHVzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3N3YXAvc3luYy1tZWR1c2Etc3RhdHVzLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxxREFBa0c7QUFFbEcsZ0RBQW1EO0FBYXRDLFFBQUEsb0JBQW9CLEdBQUcsSUFBQSwwQkFBVSxFQUM1QyxvQkFBb0IsRUFDcEIsS0FBSyxFQUNILEtBQWdDLEVBQ2hDLEVBQUUsU0FBUyxFQUFFLEVBQ3NDLEVBQUU7SUFDckQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFLaEIsQ0FBQTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pELDZDQUE2QztRQUM3QyxPQUFPLElBQUksNEJBQVksQ0FBNkI7WUFDbEQsSUFBSTtZQUNKLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7SUFFRCxJQUFJLFlBQWdDLENBQUE7SUFDcEMsSUFBSSxhQUFpQyxDQUFBO0lBRXJDLHFEQUFxRDtJQUNyRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFBLG1DQUEyQixFQUFDO2dCQUNoRCxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztnQkFDeEIsT0FBTyxFQUFFO29CQUNQLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQzNCO2FBQ0YsQ0FBQyxDQUFBO1lBRUYsTUFBTSxTQUFTLEdBQUcsTUFBTSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDbEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxTQUFTO2dCQUNYLENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDYixDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ04sTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLEtBQUssR0FBRyxDQUFvQixDQUFBO2dCQUNsQyxPQUFPLEtBQUssRUFBRSxFQUFFLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQTtZQUMzQyxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxZQUFZLEdBQUcsUUFBK0IsQ0FBQTtnQkFDcEQsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUE7Z0JBRWxDLDRDQUE0QztnQkFDNUMsTUFBTSxTQUFTLEdBQTJCO29CQUN4QyxTQUFTLEVBQUUsZ0JBQWdCO29CQUMzQixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixPQUFPLEVBQUUsbUJBQW1CO29CQUM1QixTQUFTLEVBQUUsV0FBVztvQkFDdEIsU0FBUyxFQUFFLFdBQVc7aUJBQ3ZCLENBQUE7Z0JBRUQsYUFBYSxHQUFHLFNBQVMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUE7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsdURBQXVEO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLElBQUksQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLElBQUEsbUNBQTJCLEVBQUM7Z0JBQzlDLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO2dCQUN4QixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztpQkFDekI7YUFDRixDQUFDLENBQUE7WUFFRixNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUM5QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQy9FLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxLQUFLLEdBQUcsQ0FBb0IsQ0FBQTtnQkFDbEMsT0FBTyxLQUFLLEVBQUUsRUFBRSxLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUE7WUFDekMsQ0FBQyxDQUFDLENBQUE7WUFFRixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sZUFBZSxHQUFHLFVBQWlDLENBQUE7Z0JBQ3pELFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFBO2dCQUVyQywwQ0FBMEM7Z0JBQzFDLE1BQU0sU0FBUyxHQUEyQjtvQkFDeEMsU0FBUyxFQUFFLGdCQUFnQjtvQkFDM0IsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsU0FBUyxFQUFFLFdBQVc7aUJBQ3ZCLENBQUE7Z0JBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNuQixhQUFhLEdBQUcsU0FBUyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQTtnQkFDL0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHFDQUFxQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7SUFDeEIsSUFBSSxhQUFhLElBQUksYUFBYSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtRQUM1QyxNQUFNLGFBQWEsR0FBSSxZQUFZLENBQUMsY0FBaUQsSUFBSSxFQUFFLENBQUE7UUFFM0YsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQzVCLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDekIsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixRQUFRLEVBQUU7b0JBQ1IsR0FBRyxZQUFZO29CQUNmLGNBQWMsRUFBRTt3QkFDZCxHQUFHLGFBQWE7d0JBQ2hCOzRCQUNFLE1BQU0sRUFBRSxhQUFhOzRCQUNyQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7NEJBQ25DLGtCQUFrQixFQUFFLElBQUk7NEJBQ3hCLGFBQWEsRUFBRSxZQUFZO3lCQUM1QjtxQkFDRjtvQkFDRCxjQUFjLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7aUJBQ3pDO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFFRixZQUFZLEdBQUcsSUFBSSxDQUFBO0lBQ3JCLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXpELE9BQU8sSUFBSSw0QkFBWSxDQUE2QjtRQUNsRCxJQUFJLEVBQUUsU0FBUztRQUNmLGFBQWEsRUFBRSxZQUFZO1FBQzNCLGFBQWEsRUFBRSxZQUFZO0tBQzVCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateSwapStatusStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const swap_1 = require("../../../modules/swap");
7
+ exports.updateSwapStatusStep = (0, workflows_sdk_1.createStep)("update-swap-status", async (input, { container }) => {
8
+ const { swap_id, status, metadata } = input;
9
+ if (!swap_id) {
10
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "swap_id is required");
11
+ }
12
+ if (!status) {
13
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "status is required");
14
+ }
15
+ const swapService = container.resolve(swap_1.SWAP_MODULE);
16
+ const swap = await swapService.updateSwapStatus({
17
+ swap_id,
18
+ status,
19
+ metadata,
20
+ });
21
+ return new workflows_sdk_1.StepResponse({
22
+ swap,
23
+ });
24
+ });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN3YXAtc3RhdHVzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3N3YXAvdXBkYXRlLXN3YXAtc3RhdHVzLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxnREFBbUQ7QUFhdEMsUUFBQSxvQkFBb0IsR0FBRyxJQUFBLDBCQUFVLEVBQzVDLG9CQUFvQixFQUNwQixLQUFLLEVBQ0gsS0FBZ0MsRUFDaEMsRUFBRSxTQUFTLEVBQUUsRUFDc0MsRUFBRTtJQUNyRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUJBQXFCLENBQ3RCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0JBQW9CLENBQ3JCLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBYyxrQkFBVyxDQUFDLENBQUE7SUFFL0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsT0FBTztRQUNQLE1BQU07UUFDTixRQUFRO0tBQ1QsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLDRCQUFZLENBQTZCO1FBQ2xELElBQUk7S0FDTCxDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateEligibilityStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const swap_1 = require("../../../modules/swap");
7
+ exports.validateEligibilityStep = (0, workflows_sdk_1.createStep)("validate-eligibility", async (input, { container }) => {
8
+ const { order, return_items, customer_id } = input;
9
+ const swapService = container.resolve(swap_1.SWAP_MODULE);
10
+ // Check rate limits
11
+ await swapService.checkRateLimit(customer_id, order.id);
12
+ // Validate eligibility
13
+ await swapService.validateEligibility(order.id, return_items);
14
+ // Validate item eligibility
15
+ for (const returnItem of return_items) {
16
+ const isEligible = await swapService.validateItemEligibility(returnItem.id);
17
+ if (!isEligible) {
18
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Item ${returnItem.id} is not eligible for exchange`);
19
+ }
20
+ }
21
+ return new workflows_sdk_1.StepResponse({
22
+ eligible: true,
23
+ });
24
+ });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZWxpZ2liaWxpdHktc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC92YWxpZGF0ZS1lbGlnaWJpbGl0eS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUsZ0RBQW1EO0FBZXRDLFFBQUEsdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUMvQyxzQkFBc0IsRUFDdEIsS0FBSyxFQUNILEtBQW1DLEVBQ25DLEVBQUUsU0FBUyxFQUFFLEVBQ3lDLEVBQUU7SUFDeEQsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRWxELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO0lBRS9ELG9CQUFvQjtJQUNwQixNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUV2RCx1QkFBdUI7SUFDdkIsTUFBTSxXQUFXLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUU3RCw0QkFBNEI7SUFDNUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDM0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLFFBQVEsVUFBVSxDQUFDLEVBQUUsK0JBQStCLENBQ3JELENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFnQztRQUNyRCxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOrderStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const utils_2 = require("@medusajs/framework/utils");
7
+ exports.validateOrderStep = (0, workflows_sdk_1.createStep)("validate-order", async (input, { container }) => {
8
+ const { order_id, customer_id } = input;
9
+ if (!order_id) {
10
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "order_id is required");
11
+ }
12
+ if (!customer_id) {
13
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Customer authentication is required");
14
+ }
15
+ const remoteQuery = container.resolve(utils_2.ContainerRegistrationKeys.REMOTE_QUERY);
16
+ const queryObject = (0, utils_2.remoteQueryObjectFromString)({
17
+ entryPoint: "order",
18
+ fields: [
19
+ "id",
20
+ "customer_id",
21
+ "email",
22
+ "status",
23
+ "fulfilled_at",
24
+ "created_at",
25
+ "items.*",
26
+ ],
27
+ filters: {
28
+ id: [order_id],
29
+ },
30
+ });
31
+ const orders = await remoteQuery(queryObject);
32
+ const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
33
+ const order = orderArray.find((o) => {
34
+ const oData = o;
35
+ return oData?.id === order_id;
36
+ });
37
+ if (!order) {
38
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order with id ${order_id} not found`);
39
+ }
40
+ const orderData = order;
41
+ const orderCustomerId = orderData.customer_id;
42
+ // Validate customer ownership
43
+ if (!orderCustomerId || orderCustomerId !== customer_id) {
44
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "You can only create swaps for your own orders");
45
+ }
46
+ // Eligibility validation: Order status must be fulfilled or partially_fulfilled
47
+ const orderStatus = orderData.status;
48
+ const allowedStatuses = ["fulfilled", "partially_fulfilled"];
49
+ if (!orderStatus || !allowedStatuses.includes(orderStatus)) {
50
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order must be fulfilled or partially fulfilled to create a swap. Current status: ${orderStatus || "unknown"}`);
51
+ }
52
+ // Eligibility validation: Check order age (30 days from fulfillment or creation)
53
+ const fulfillmentDate = orderData.fulfilled_at
54
+ ? new Date(orderData.fulfilled_at)
55
+ : orderData.created_at
56
+ ? new Date(orderData.created_at)
57
+ : null;
58
+ if (fulfillmentDate) {
59
+ const daysSinceFulfillment = Math.floor((Date.now() - fulfillmentDate.getTime()) / (1000 * 60 * 60 * 24));
60
+ const maxDays = 30; // Configurable eligibility window
61
+ if (daysSinceFulfillment > maxDays) {
62
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order is too old to create a swap. Maximum ${maxDays} days allowed since fulfillment.`);
63
+ }
64
+ }
65
+ return new workflows_sdk_1.StepResponse({
66
+ order: order,
67
+ });
68
+ });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtb3JkZXItc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC92YWxpZGF0ZS1vcmRlci1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQWtHO0FBd0JyRixRQUFBLGlCQUFpQixHQUFHLElBQUEsMEJBQVUsRUFDekMsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDSCxLQUE2QixFQUM3QixFQUFFLFNBQVMsRUFBRSxFQUNtQyxFQUFFO0lBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNCQUFzQixDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQ0FBcUMsQ0FDdEMsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1FBQzlDLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixhQUFhO1lBQ2IsT0FBTztZQUNQLFFBQVE7WUFDUixjQUFjO1lBQ2QsWUFBWTtZQUNaLFNBQVM7U0FDVjtRQUNELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUNmO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLEdBQUcsTUFB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
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSwapItemsStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ exports.validateSwapItemsStep = (0, workflows_sdk_1.createStep)("validate-swap-items", async (input, { container }) => {
7
+ const { order, return_items, new_items } = input;
8
+ if (!return_items || return_items.length === 0) {
9
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Return items are required");
10
+ }
11
+ if (!new_items || new_items.length === 0) {
12
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "New items are required");
13
+ }
14
+ const orderItems = order.items || [];
15
+ // Validate return items exist in order
16
+ for (const returnItem of return_items) {
17
+ const orderItem = orderItems.find((item) => item.id === returnItem.id);
18
+ if (!orderItem) {
19
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Return item with id ${returnItem.id} not found in order`);
20
+ }
21
+ const orderItemData = orderItem;
22
+ const orderQuantity = orderItemData.quantity || 0;
23
+ if (returnItem.quantity > orderQuantity) {
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Return quantity ${returnItem.quantity} exceeds order quantity ${orderQuantity} for item ${returnItem.id}`);
25
+ }
26
+ }
27
+ // Validate new items have variant_id and quantity
28
+ for (const newItem of new_items) {
29
+ if (!newItem.variant_id) {
30
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "New item variant_id is required");
31
+ }
32
+ if (!newItem.quantity || newItem.quantity <= 0) {
33
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `New item quantity must be greater than 0 for variant ${newItem.variant_id}`);
34
+ }
35
+ }
36
+ return new workflows_sdk_1.StepResponse({
37
+ return_items,
38
+ new_items,
39
+ });
40
+ });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtc3dhcC1pdGVtcy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL3ZhbGlkYXRlLXN3YXAtaXRlbXMtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBdUQ7QUFDdkQscUVBQTRFO0FBeUIvRCxRQUFBLHFCQUFxQixHQUFHLElBQUEsMEJBQVUsRUFDN0MscUJBQXFCLEVBQ3JCLEtBQUssRUFDSCxLQUFpQyxFQUNqQyxFQUFFLFNBQVMsRUFBRSxFQUN1QyxFQUFFO0lBQ3RELE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVoRCxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMkJBQTJCLENBQzVCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHdCQUF3QixDQUN6QixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFBO0lBRXBDLHVDQUF1QztJQUN2QyxLQUFLLE1BQU0sVUFBVSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQy9CLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUNyRCxDQUFBO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsdUJBQXVCLFVBQVUsQ0FBQyxFQUFFLHFCQUFxQixDQUMxRCxDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLFNBQWtDLENBQUE7UUFDeEQsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUE7UUFFakQsSUFBSSxVQUFVLENBQUMsUUFBUSxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1CQUFtQixVQUFVLENBQUMsUUFBUSwyQkFBMkIsYUFBYSxhQUFhLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FDM0csQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELEtBQUssTUFBTSxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixpQ0FBaUMsQ0FDbEMsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHdEQUF3RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQzdFLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUE4QjtRQUNuRCxZQUFZO1FBQ1osU0FBUztLQUNWLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.approveSwapWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const swap_1 = require("../steps/swap");
6
+ exports.approveSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("approve-swap", (input) => {
7
+ const { swap_id, admin_id } = input;
8
+ // Update to "approved" (validation happens in updateSwapStatusStep)
9
+ const { swap: approvedSwap } = (0, swap_1.updateSwapStatusStep)({
10
+ swap_id,
11
+ status: "approved",
12
+ metadata: {
13
+ approved_at: new Date().toISOString(),
14
+ approved_by: admin_id,
15
+ },
16
+ });
17
+ return new workflows_sdk_1.WorkflowResponse({
18
+ swap: approvedSwap,
19
+ });
20
+ });
21
+ exports.default = exports.approveSwapWorkflow;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9hcHByb3ZlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUVzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFbkMsb0VBQW9FO0lBQ3BFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBQSwyQkFBb0IsRUFBQztRQUNsRCxPQUFPO1FBQ1AsTUFBTSxFQUFFLFVBQVU7UUFDbEIsUUFBUSxFQUFFO1lBQ1IsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3JDLFdBQVcsRUFBRSxRQUFRO1NBQ3RCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLGdDQUFnQixDQUE0QjtRQUNyRCxJQUFJLEVBQUUsWUFBWTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSwapWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const swap_1 = require("../steps/swap");
6
+ exports.createSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("create-swap", (input) => {
7
+ const { order_id, return_items, new_items, reason, note, customer_id } = input;
8
+ // Step 1: Validate order exists and belongs to customer
9
+ const { order } = (0, swap_1.validateOrderStep)({
10
+ order_id,
11
+ customer_id,
12
+ });
13
+ // Step 2: Validate swap items
14
+ const { return_items: validatedReturnItems, new_items: validatedNewItems } = (0, swap_1.validateSwapItemsStep)({
15
+ order,
16
+ return_items,
17
+ new_items,
18
+ });
19
+ // Step 2.5: Validate eligibility and rate limits
20
+ (0, swap_1.validateEligibilityStep)({
21
+ order,
22
+ return_items: validatedReturnItems,
23
+ customer_id,
24
+ });
25
+ // Step 3: Calculate price difference
26
+ const { difference_due } = (0, swap_1.calculateDifferenceStep)({
27
+ order,
28
+ return_items: validatedReturnItems,
29
+ new_items: validatedNewItems,
30
+ });
31
+ // Step 4: Create swap record
32
+ const { swap } = (0, swap_1.createSwapStep)({
33
+ order_id,
34
+ return_items: validatedReturnItems,
35
+ new_items: validatedNewItems,
36
+ difference_due,
37
+ reason,
38
+ note,
39
+ });
40
+ // Step 5: Send notification (optional - can be skipped if no email template)
41
+ // sendNotificationStep({
42
+ // to: order.email || "",
43
+ // subject: "Swap Request Created",
44
+ // renderedContent: null, // Would need email template
45
+ // templateData: {},
46
+ // })
47
+ return new workflows_sdk_1.WorkflowResponse({
48
+ swap,
49
+ });
50
+ });
51
+ exports.default = exports.createSwapWorkflow;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN3YXAtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N3YXBzL2NyZWF0ZS1zd2FwLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcwQztBQUMxQyx3Q0FNc0I7QUFPVCxRQUFBLGtCQUFrQixHQUFHLElBQUEsOEJBQWMsRUFDOUMsYUFBYSxFQUNiLENBQ0UsS0FBd0QsRUFDWixFQUFFO0lBQzlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUU5RSx3REFBd0Q7SUFDeEQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsd0JBQWlCLEVBQUM7UUFDbEMsUUFBUTtRQUNSLFdBQVc7S0FDWixDQUFDLENBQUE7SUFFRiw4QkFBOEI7SUFDOUIsTUFBTSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsR0FDeEUsSUFBQSw0QkFBcUIsRUFBQztRQUNwQixLQUFLO1FBQ0wsWUFBWTtRQUNaLFNBQVM7S0FDVixDQUFDLENBQUE7SUFFSixpREFBaUQ7SUFDakQsSUFBQSw4QkFBdUIsRUFBQztRQUN0QixLQUFLO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxXQUFXO0tBQ1osQ0FBQyxDQUFBO0lBRUYscUNBQXFDO0lBQ3JDLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFBLDhCQUF1QixFQUFDO1FBQ2pELEtBQUs7UUFDTCxZQUFZLEVBQUUsb0JBQW9CO1FBQ2xDLFNBQVMsRUFBRSxpQkFBaUI7S0FDN0IsQ0FBQyxDQUFBO0lBRUYsNkJBQTZCO0lBQzdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFBLHFCQUFjLEVBQUM7UUFDOUIsUUFBUTtRQUNSLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixjQUFjO1FBQ2QsTUFBTTtRQUNOLElBQUk7S0FDTCxDQUFDLENBQUE7SUFFRiw2RUFBNkU7SUFDN0UseUJBQXlCO0lBQ3pCLDJCQUEyQjtJQUMzQixxQ0FBcUM7SUFDckMsd0RBQXdEO0lBQ3hELHNCQUFzQjtJQUN0QixLQUFLO0lBRUwsT0FBTyxJQUFJLGdDQUFnQixDQUEyQjtRQUNwRCxJQUFJO0tBQ0wsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUE7QUFFRCxrQkFBZSwwQkFBa0IsQ0FBQSJ9
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeSwapWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const swap_1 = require("../steps/swap");
6
+ exports.executeSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("execute-swap", (input) => {
7
+ const { swap_id } = input;
8
+ // Step 1: Retrieve swap to validate it's approved
9
+ const { swap: retrievedSwap } = (0, swap_1.retrieveSwapStep)({
10
+ swap_id,
11
+ });
12
+ // Step 2: Create Medusa Return
13
+ const { return_id, swap: swapWithReturn } = (0, swap_1.createMedusaReturnStep)({
14
+ swap_id,
15
+ });
16
+ // Step 3: Create Medusa Exchange linked to return
17
+ const { exchange_id, swap: swapWithExchange } = (0, swap_1.createMedusaExchangeStep)({
18
+ swap_id,
19
+ return_id,
20
+ });
21
+ // Step 4: Update swap status to return_started
22
+ const { swap: finalSwap } = (0, swap_1.updateSwapStatusStep)({
23
+ swap_id,
24
+ status: "return_started",
25
+ metadata: {
26
+ medusa_integration_completed_at: new Date().toISOString(),
27
+ },
28
+ });
29
+ return new workflows_sdk_1.WorkflowResponse({
30
+ swap: finalSwap,
31
+ return_id,
32
+ exchange_id,
33
+ });
34
+ });
35
+ exports.default = exports.executeSwapWorkflow;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9leGVjdXRlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUtzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV6QixrREFBa0Q7SUFDbEQsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFBLHVCQUFnQixFQUFDO1FBQy9DLE9BQU87S0FDUixDQUFDLENBQUE7SUFFRiwrQkFBK0I7SUFDL0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBQSw2QkFBc0IsRUFBQztRQUNqRSxPQUFPO0tBQ1IsQ0FBQyxDQUFBO0lBRUYsa0RBQWtEO0lBQ2xELE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBQSwrQkFBd0IsRUFBQztRQUN2RSxPQUFPO1FBQ1AsU0FBUztLQUNWLENBQUMsQ0FBQTtJQUVGLCtDQUErQztJQUMvQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUEsMkJBQW9CLEVBQUM7UUFDL0MsT0FBTztRQUNQLE1BQU0sRUFBRSxnQkFBZ0I7UUFDeEIsUUFBUSxFQUFFO1lBQ1IsK0JBQStCLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDMUQ7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQTRCO1FBQ3JELElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUztRQUNULFdBQVc7S0FDWixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N3YXBzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateSwapStatusWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const swap_1 = require("../steps/swap");
6
+ exports.updateSwapStatusWorkflow = (0, workflows_sdk_1.createWorkflow)("update-swap-status", (input) => {
7
+ const { swap_id, status, metadata } = input;
8
+ // Step 1: Retrieve swap to validate it exists
9
+ (0, swap_1.retrieveSwapStep)({
10
+ swap_id,
11
+ });
12
+ // Step 2: Update status (validation happens in updateSwapStatusStep)
13
+ const { swap } = (0, swap_1.updateSwapStatusStep)({
14
+ swap_id,
15
+ status,
16
+ metadata,
17
+ });
18
+ return new workflows_sdk_1.WorkflowResponse({
19
+ swap,
20
+ });
21
+ });
22
+ exports.default = exports.updateSwapStatusWorkflow;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN3YXAtc3RhdHVzLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy91cGRhdGUtc3dhcC1zdGF0dXMtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUdzQjtBQU1ULFFBQUEsd0JBQXdCLEdBQUcsSUFBQSw4QkFBYyxFQUNwRCxvQkFBb0IsRUFDcEIsQ0FDRSxLQUFvQyxFQUNjLEVBQUU7SUFDcEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTNDLDhDQUE4QztJQUM5QyxJQUFBLHVCQUFnQixFQUFDO1FBQ2YsT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLHFFQUFxRTtJQUNyRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBQSwyQkFBb0IsRUFBQztRQUNwQyxPQUFPO1FBQ1AsTUFBTTtRQUNOLFFBQVE7S0FDVCxDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQWlDO1FBQzFELElBQUk7S0FDTCxDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLGdDQUF3QixDQUFBIn0=