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.
- package/.medusa/server/src/admin/index.js +644 -11
- package/.medusa/server/src/admin/index.mjs +644 -11
- package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +74 -0
- package/.medusa/server/src/api/admin/swaps/[id]/process-payment/route.js +152 -0
- package/.medusa/server/src/api/admin/swaps/[id]/reject/route.js +43 -0
- package/.medusa/server/src/api/admin/swaps/[id]/route.js +70 -0
- package/.medusa/server/src/api/admin/swaps/[id]/status/route.js +45 -0
- package/.medusa/server/src/api/admin/swaps/[id]/sync/route.js +148 -0
- package/.medusa/server/src/api/admin/swaps/route.js +51 -0
- package/.medusa/server/src/api/admin/swaps/validators.js +22 -0
- package/.medusa/server/src/api/store/guest-orders/[id]/invoice/route.js +17 -5
- package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +17 -5
- package/.medusa/server/src/api/store/guest-orders/[id]/route.js +17 -5
- package/.medusa/server/src/api/store/guest-orders/route.js +17 -5
- package/.medusa/server/src/api/store/orders/[order_id]/swaps/route.js +107 -0
- package/.medusa/server/src/api/store/otp/request/route.js +12 -5
- package/.medusa/server/src/api/store/swaps/[id]/cancel/route.js +64 -0
- package/.medusa/server/src/api/store/swaps/[id]/route.js +112 -0
- package/.medusa/server/src/api/store/swaps/route.js +117 -0
- package/.medusa/server/src/helpers/index.js +18 -0
- package/.medusa/server/src/helpers/swaps.js +88 -0
- package/.medusa/server/src/modules/swap/index.js +13 -0
- package/.medusa/server/src/modules/swap/migrations/Migration20260121164326.js +49 -0
- package/.medusa/server/src/modules/swap/models/swap.js +21 -0
- package/.medusa/server/src/modules/swap/service.js +224 -0
- package/.medusa/server/src/services/otp-service.js +16 -5
- package/.medusa/server/src/subscribers/send-order-email.js +27 -8
- package/.medusa/server/src/workflows/index.js +8 -2
- package/.medusa/server/src/workflows/steps/swap/calculate-difference-step.js +56 -0
- package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +71 -0
- package/.medusa/server/src/workflows/steps/swap/create-medusa-return-step.js +79 -0
- package/.medusa/server/src/workflows/steps/swap/create-swap-step.js +29 -0
- package/.medusa/server/src/workflows/steps/swap/handle-payment-difference-step.js +102 -0
- package/.medusa/server/src/workflows/steps/swap/index.js +26 -0
- package/.medusa/server/src/workflows/steps/swap/retrieve-swap-step.js +26 -0
- package/.medusa/server/src/workflows/steps/swap/sync-medusa-status-step.js +132 -0
- package/.medusa/server/src/workflows/steps/swap/update-swap-status-step.js +25 -0
- package/.medusa/server/src/workflows/steps/swap/validate-eligibility-step.js +25 -0
- package/.medusa/server/src/workflows/steps/swap/validate-order-step.js +69 -0
- package/.medusa/server/src/workflows/steps/swap/validate-swap-items-step.js +41 -0
- package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +22 -0
- package/.medusa/server/src/workflows/swaps/create-swap-workflow.js +52 -0
- package/.medusa/server/src/workflows/swaps/execute-swap-workflow.js +36 -0
- package/.medusa/server/src/workflows/swaps/types.js +3 -0
- package/.medusa/server/src/workflows/swaps/update-swap-status-workflow.js +23 -0
- package/README.md +208 -0
- package/package.json +1 -1
- 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=
|