order-management 0.0.1 → 0.0.3
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/api/store/orders/reorder/[order_id]/route.js +52 -0
- package/.medusa/server/src/workflows/index.js +4 -9
- package/.medusa/server/src/workflows/{types.js → reorder/types.js} +1 -1
- package/.medusa/server/src/workflows/reorder-workflow.js +27 -0
- package/.medusa/server/src/workflows/steps/create-cart-from-order-step.js +26 -0
- package/.medusa/server/src/workflows/steps/index.js +10 -0
- package/.medusa/server/src/workflows/steps/retrieve-order-step.js +52 -0
- package/.medusa/server/src/workflows/steps/transform-order-to-cart-step.js +53 -0
- package/package.json +1 -1
- package/.medusa/server/src/api/store/returns/[id]/payment-details/route.js +0 -133
- package/.medusa/server/src/config/plugin-options.js +0 -59
- package/.medusa/server/src/providers/refund-payment/base-refund-provider.js +0 -80
- package/.medusa/server/src/providers/refund-payment/index.js +0 -38
- package/.medusa/server/src/providers/refund-payment/razorpay-provider.js +0 -96
- package/.medusa/server/src/providers/refund-payment/stripe-provider.js +0 -82
- package/.medusa/server/src/subscribers/return-received.js +0 -91
- package/.medusa/server/src/types/plugin-options.js +0 -3
- package/.medusa/server/src/types/refund-payment.js +0 -3
- package/.medusa/server/src/workflows/process-cod-refund-workflow.js +0 -86
- package/.medusa/server/src/workflows/steps/calculate-refund-amount-step.js +0 -51
- package/.medusa/server/src/workflows/steps/create-refund-record-step.js +0 -193
- package/.medusa/server/src/workflows/steps/process-refund-payment-step.js +0 -87
- package/.medusa/server/src/workflows/steps/retrieve-order-and-payment-step.js +0 -44
- package/.medusa/server/src/workflows/steps/retrieve-return-payment-details-step.js +0 -56
- package/.medusa/server/src/workflows/steps/select-payment-method-step.js +0 -61
- package/.medusa/server/src/workflows/steps/update-payment-status-step.js +0 -45
- package/.medusa/server/src/workflows/steps/validate-payment-details-step.js +0 -90
- package/.medusa/server/src/workflows/steps/verify-cod-order-step.js +0 -39
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processRefundPaymentStep = 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 refund_payment_1 = require("../../providers/refund-payment");
|
|
8
|
-
const plugin_options_1 = require("../../config/plugin-options");
|
|
9
|
-
exports.processRefundPaymentStep = (0, workflows_sdk_1.createStep)("process-refund-payment", async (input, { container }) => {
|
|
10
|
-
const { amount, currency_code, payment_details, payment_method, return_id, order_id, } = input;
|
|
11
|
-
if (!amount || amount <= 0) {
|
|
12
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid refund amount: ${amount}`);
|
|
13
|
-
}
|
|
14
|
-
// Get plugin options from config module
|
|
15
|
-
const configModule = container.resolve(utils_2.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
16
|
-
const pluginOptions = (0, plugin_options_1.resolveOrderManagementOptions)(configModule);
|
|
17
|
-
// Build provider config from plugin options or environment variables (backward compatibility)
|
|
18
|
-
const providerConfig = {
|
|
19
|
-
razorpay: pluginOptions.refundProviders?.credentials?.razorpay ||
|
|
20
|
-
(process.env.RAZORPAY_KEY_ID && process.env.RAZORPAY_KEY_SECRET
|
|
21
|
-
? {
|
|
22
|
-
keyId: process.env.RAZORPAY_KEY_ID,
|
|
23
|
-
keySecret: process.env.RAZORPAY_KEY_SECRET,
|
|
24
|
-
}
|
|
25
|
-
: undefined),
|
|
26
|
-
stripe: pluginOptions.refundProviders?.credentials?.stripe ||
|
|
27
|
-
(process.env.STRIPE_API_KEY
|
|
28
|
-
? {
|
|
29
|
-
apiKey: process.env.STRIPE_API_KEY,
|
|
30
|
-
}
|
|
31
|
-
: undefined),
|
|
32
|
-
};
|
|
33
|
-
// Filter providers based on enabled list (if specified)
|
|
34
|
-
const enabledProviders = pluginOptions.refundProviders?.enabled;
|
|
35
|
-
if (enabledProviders && enabledProviders.length > 0) {
|
|
36
|
-
// Only enable providers that are in the enabled list
|
|
37
|
-
if (!enabledProviders.includes("razorpay")) {
|
|
38
|
-
providerConfig.razorpay = undefined;
|
|
39
|
-
}
|
|
40
|
-
if (!enabledProviders.includes("stripe")) {
|
|
41
|
-
providerConfig.stripe = undefined;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Create providers
|
|
45
|
-
const providers = (0, refund_payment_1.createRefundProviders)(providerConfig);
|
|
46
|
-
if (providers.length === 0) {
|
|
47
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "No payment providers configured. Please configure at least one payment provider (Razorpay or Stripe) via plugin options or environment variables.");
|
|
48
|
-
}
|
|
49
|
-
// Filter by enabled providers if specified
|
|
50
|
-
const availableProviders = enabledProviders && enabledProviders.length > 0
|
|
51
|
-
? providers.filter((p) => enabledProviders.includes(p.getName()))
|
|
52
|
-
: providers;
|
|
53
|
-
// Select appropriate provider that supports currency + payment method
|
|
54
|
-
let selectedProvider = (0, refund_payment_1.selectProvider)(availableProviders, currency_code, payment_method);
|
|
55
|
-
// Fallback logic if no provider found: prefer provider based on currency
|
|
56
|
-
if (!selectedProvider) {
|
|
57
|
-
if (currency_code.toUpperCase() === "INR") {
|
|
58
|
-
// For INR, prefer Razorpay if available
|
|
59
|
-
selectedProvider =
|
|
60
|
-
availableProviders.find((p) => p.getName() === "razorpay") || null;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
// For other currencies, prefer Stripe if available
|
|
64
|
-
selectedProvider =
|
|
65
|
-
availableProviders.find((p) => p.getName() === "stripe") || null;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (!selectedProvider) {
|
|
69
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `No payment provider found that supports ${payment_method} for currency ${currency_code}. Available providers: ${availableProviders.map((p) => p.getName()).join(", ")}`);
|
|
70
|
-
}
|
|
71
|
-
// Process refund
|
|
72
|
-
const refundResult = await selectedProvider.processRefund({
|
|
73
|
-
amount,
|
|
74
|
-
currency_code,
|
|
75
|
-
payment_details,
|
|
76
|
-
return_id,
|
|
77
|
-
order_id,
|
|
78
|
-
});
|
|
79
|
-
if (!refundResult.success) {
|
|
80
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Refund processing failed: ${refundResult.error_message || "Unknown error"}`, refundResult.error_code);
|
|
81
|
-
}
|
|
82
|
-
return new workflows_sdk_1.StepResponse({
|
|
83
|
-
refund_result: refundResult,
|
|
84
|
-
transaction_id: refundResult.transaction_id,
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1yZWZ1bmQtcGF5bWVudC1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9wcm9jZXNzLXJlZnVuZC1wYXltZW50LXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxxREFBcUU7QUFFckUsbUVBSXVDO0FBQ3ZDLGdFQUdvQztBQWdCdkIsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELHdCQUF3QixFQUN4QixLQUFLLEVBQ0gsS0FBb0MsRUFDcEMsRUFBRSxTQUFTLEVBQUUsRUFDMEMsRUFBRTtJQUN6RCxNQUFNLEVBQ0osTUFBTSxFQUNOLGFBQWEsRUFDYixlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxRQUFRLEdBQ1QsR0FBRyxLQUFLLENBQUE7SUFFVCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwwQkFBMEIsTUFBTSxFQUFFLENBQ25DLENBQUE7SUFDSCxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3BDLGlDQUF5QixDQUFDLGFBQWEsQ0FDeEMsQ0FBQTtJQUNELE1BQU0sYUFBYSxHQUFHLElBQUEsOENBQTZCLEVBQ2pELFlBQWlDLENBQ2xDLENBQUE7SUFFRCw4RkFBOEY7SUFDOUYsTUFBTSxjQUFjLEdBQXlCO1FBQzNDLFFBQVEsRUFDTixhQUFhLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRO1lBQ3BELENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7Z0JBQzdELENBQUMsQ0FBQztvQkFDRSxLQUFLLEVB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
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.retrieveOrderAndPaymentStep = 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.retrieveOrderAndPaymentStep = (0, workflows_sdk_1.createStep)("retrieve-order-and-payment", async (input, { container }) => {
|
|
8
|
-
const { order_id } = input;
|
|
9
|
-
if (!order_id) {
|
|
10
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order ID is required to retrieve order and payment");
|
|
11
|
-
}
|
|
12
|
-
const orderService = container.resolve(utils_2.Modules.ORDER);
|
|
13
|
-
const paymentService = container.resolve(utils_2.Modules.PAYMENT);
|
|
14
|
-
// Retrieve order with payment collection
|
|
15
|
-
const order = await orderService.retrieveOrder(order_id, {
|
|
16
|
-
relations: ["payment_collection"],
|
|
17
|
-
});
|
|
18
|
-
if (!order) {
|
|
19
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order with ID ${order_id} not found`);
|
|
20
|
-
}
|
|
21
|
-
// Extract currency code from order
|
|
22
|
-
const currencyCode = order.currency_code;
|
|
23
|
-
if (!currencyCode) {
|
|
24
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order ${order_id} does not have a currency code`);
|
|
25
|
-
}
|
|
26
|
-
// Retrieve payment collection
|
|
27
|
-
const orderWithPayment = order;
|
|
28
|
-
const paymentCollectionId = orderWithPayment.payment_collection_id;
|
|
29
|
-
if (!paymentCollectionId) {
|
|
30
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order ${order_id} does not have a payment collection`);
|
|
31
|
-
}
|
|
32
|
-
const paymentCollection = await paymentService.retrievePaymentCollection(paymentCollectionId, {
|
|
33
|
-
relations: ["payments", "payment_providers"],
|
|
34
|
-
});
|
|
35
|
-
if (!paymentCollection) {
|
|
36
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Payment collection ${paymentCollectionId} not found`);
|
|
37
|
-
}
|
|
38
|
-
return new workflows_sdk_1.StepResponse({
|
|
39
|
-
order,
|
|
40
|
-
payment_collection: paymentCollection,
|
|
41
|
-
currency_code: currencyCode,
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cmlldmUtb3JkZXItYW5kLXBheW1lbnQtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvcmV0cmlldmUtb3JkZXItYW5kLXBheW1lbnQtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBdUQ7QUFDdkQscUVBQTRFO0FBQzVFLHFEQUFtRDtBQVd0QyxRQUFBLDJCQUEyQixHQUFHLElBQUEsMEJBQVUsRUFDbkQsNEJBQTRCLEVBQzVCLEtBQUssRUFDSCxLQUF1QyxFQUN2QyxFQUFFLFNBQVMsRUFBRSxFQUM2QyxFQUFFO0lBQzVELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0RBQW9ELENBQ3JELENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDcEMsZUFBTyxDQUFDLEtBQUssQ0FDZCxDQUFBO0lBRUQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDdEMsZUFBTyxDQUFDLE9BQU8sQ0FDaEIsQ0FBQTtJQUVELHlDQUF5QztJQUN6QyxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO1FBQ3ZELFNBQVMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO0tBQ2xDLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLGlCQUFpQixRQUFRLFlBQVksQ0FDdEMsQ0FBQTtJQUNILENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtJQUV4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsU0FBUyxRQUFRLGdDQUFnQyxDQUNsRCxDQUFBO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNLGdCQUFnQixHQUFHLEtBQXNELENBQUE7SUFDL0UsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQTtJQUVsRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixTQUFTLFFBQVEscUNBQXFDLENBQ3ZELENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLGNBQWMsQ0FBQyx5QkFBeUIsQ0FDdEUsbUJBQW1CLEVBQ25CO1FBQ0UsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0tBQzdDLENBQ0YsQ0FBQTtJQUVELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLHNCQUFzQixtQkFBbUIsWUFBWSxDQUN0RCxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFvQztRQUN6RCxLQUFLO1FBQ0wsa0JBQWtCLEVBQUUsaUJBQWlCO1FBQ3JDLGFBQWEsRUFBRSxZQUFZO0tBQzVCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.retrieveReturnPaymentDetailsStep = 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.retrieveReturnPaymentDetailsStep = (0, workflows_sdk_1.createStep)("retrieve-return-payment-details", async (input, { container }) => {
|
|
8
|
-
const { return_id, order_id } = input;
|
|
9
|
-
if (!return_id) {
|
|
10
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Return ID is required to retrieve payment details");
|
|
11
|
-
}
|
|
12
|
-
if (!order_id) {
|
|
13
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order ID is required to retrieve payment details");
|
|
14
|
-
}
|
|
15
|
-
const orderService = container.resolve(utils_2.Modules.ORDER);
|
|
16
|
-
// Retrieve order with returns
|
|
17
|
-
const order = await orderService.retrieveOrder(order_id, {
|
|
18
|
-
relations: ["returns"],
|
|
19
|
-
});
|
|
20
|
-
if (!order) {
|
|
21
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order with ID ${order_id} not found`);
|
|
22
|
-
}
|
|
23
|
-
// Find the return by ID
|
|
24
|
-
const orderWithReturns = order;
|
|
25
|
-
const returns = orderWithReturns.returns || [];
|
|
26
|
-
const returnRecord = returns.find((ret) => ret.id === return_id);
|
|
27
|
-
if (!returnRecord) {
|
|
28
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Return with ID ${return_id} not found for order ${order_id}`);
|
|
29
|
-
}
|
|
30
|
-
// Extract payment details from return metadata
|
|
31
|
-
const metadata = returnRecord.metadata;
|
|
32
|
-
if (!metadata) {
|
|
33
|
-
return new workflows_sdk_1.StepResponse({
|
|
34
|
-
payment_details: null,
|
|
35
|
-
has_payment_details: false,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
// Check if payment details exist in metadata
|
|
39
|
-
const paymentDetailsData = metadata.refund_payment_details;
|
|
40
|
-
if (!paymentDetailsData) {
|
|
41
|
-
return new workflows_sdk_1.StepResponse({
|
|
42
|
-
payment_details: null,
|
|
43
|
-
has_payment_details: false,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
// Validate payment details structure
|
|
47
|
-
if (!paymentDetailsData.method ||
|
|
48
|
-
!paymentDetailsData.currency_code) {
|
|
49
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid payment details structure in return ${return_id} metadata`);
|
|
50
|
-
}
|
|
51
|
-
return new workflows_sdk_1.StepResponse({
|
|
52
|
-
payment_details: paymentDetailsData,
|
|
53
|
-
has_payment_details: true,
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cmlldmUtcmV0dXJuLXBheW1lbnQtZGV0YWlscy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9yZXRyaWV2ZS1yZXR1cm4tcGF5bWVudC1kZXRhaWxzLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxxREFBbUQ7QUFjdEMsUUFBQSxnQ0FBZ0MsR0FBRyxJQUFBLDBCQUFVLEVBQ3hELGlDQUFpQyxFQUNqQyxLQUFLLEVBQ0gsS0FBNEMsRUFDNUMsRUFBRSxTQUFTLEVBQUUsRUFDa0QsRUFBRTtJQUNqRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixtREFBbUQsQ0FDcEQsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixrREFBa0QsQ0FDbkQsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFzQixlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFMUUsOEJBQThCO0lBQzlCLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDdkQsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ3ZCLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLGlCQUFpQixRQUFRLFlBQVksQ0FDdEMsQ0FBQTtJQUNILENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsTUFBTSxnQkFBZ0IsR0FBRyxLQUEyQyxDQUFBO0lBQ3BFLE1BQU0sT0FBTyxHQUFJLGdCQUFnQixDQUFDLE9BQXFCLElBQUksRUFBRSxDQUFBO0lBQzdELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQy9CLENBQUMsR0FBbUIsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQzlDLENBQUE7SUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0Isa0JBQWtCLFNBQVMsd0JBQXdCLFFBQVEsRUFBRSxDQUM5RCxDQUFBO0lBQ0gsQ0FBQztJQUVELCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBSSxZQUF1QyxDQUFDLFFBRzdDLENBQUE7SUFFYixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLElBQUksNEJBQVksQ0FBeUM7WUFDOUQsZUFBZSxFQUFFLElBQUk7WUFDckIsbUJBQW1CLEVBQUUsS0FBSztTQUMzQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLHNCQUV2QixDQUFBO0lBRWIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLDRCQUFZLENBQXlDO1lBQzlELGVBQWUsRUFBRSxJQUFJO1lBQ3JCLG1CQUFtQixFQUFFLEtBQUs7U0FDM0IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHFDQUFxQztJQUNyQyxJQUNFLENBQUMsa0JBQWtCLENBQUMsTUFBTTtRQUMxQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFDakMsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLCtDQUErQyxTQUFTLFdBQVcsQ0FDcEUsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBeUM7UUFDOUQsZUFBZSxFQUFFLGtCQUFrQjtRQUNuQyxtQkFBbUIsRUFBRSxJQUFJO0tBQzFCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.selectPaymentMethodStep = void 0;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
-
/**
|
|
7
|
-
* Validates that the payment method is supported for the given currency.
|
|
8
|
-
* Provider selection happens later in process-refund-payment-step.
|
|
9
|
-
*/
|
|
10
|
-
exports.selectPaymentMethodStep = (0, workflows_sdk_1.createStep)("select-payment-method", async (input) => {
|
|
11
|
-
const { currency_code, payment_details } = input;
|
|
12
|
-
if (!currency_code) {
|
|
13
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Currency code is required to select payment method");
|
|
14
|
-
}
|
|
15
|
-
if (!payment_details) {
|
|
16
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Payment details are required to process refund");
|
|
17
|
-
}
|
|
18
|
-
// Verify currency matches
|
|
19
|
-
if (payment_details.currency_code !== currency_code) {
|
|
20
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Currency mismatch: payment details currency ${payment_details.currency_code} does not match order currency ${currency_code}`);
|
|
21
|
-
}
|
|
22
|
-
const currency = currency_code.toUpperCase();
|
|
23
|
-
const method = payment_details.method;
|
|
24
|
-
// Validate that the payment method is generally supported for this currency
|
|
25
|
-
// (Provider-specific validation happens in process-refund-payment-step)
|
|
26
|
-
switch (currency) {
|
|
27
|
-
case "INR":
|
|
28
|
-
// For INR, UPI, wallet, and bank_transfer are supported
|
|
29
|
-
if (method !== "upi" &&
|
|
30
|
-
method !== "wallet" &&
|
|
31
|
-
method !== "bank_transfer") {
|
|
32
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Payment method ${method} is not supported for currency ${currency}. Supported methods: upi, wallet, bank_transfer`);
|
|
33
|
-
}
|
|
34
|
-
break;
|
|
35
|
-
case "USD":
|
|
36
|
-
case "EUR":
|
|
37
|
-
case "GBP":
|
|
38
|
-
case "CAD":
|
|
39
|
-
case "AUD":
|
|
40
|
-
case "JPY":
|
|
41
|
-
case "CHF":
|
|
42
|
-
case "SGD":
|
|
43
|
-
case "HKD":
|
|
44
|
-
case "NZD":
|
|
45
|
-
// For major currencies, only bank_transfer is typically supported
|
|
46
|
-
if (method !== "bank_transfer") {
|
|
47
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Payment method ${method} is not supported for currency ${currency}. Only bank_transfer is supported.`);
|
|
48
|
-
}
|
|
49
|
-
break;
|
|
50
|
-
default:
|
|
51
|
-
// For other currencies, only bank_transfer is typically supported
|
|
52
|
-
if (method !== "bank_transfer") {
|
|
53
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Payment method ${method} is not supported for currency ${currency}. Only bank_transfer is supported.`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return new workflows_sdk_1.StepResponse({
|
|
57
|
-
selected_method: method,
|
|
58
|
-
payment_details,
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBheW1lbnQtbWV0aG9kLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3NlbGVjdC1wYXltZW50LW1ldGhvZC1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFhNUU7OztHQUdHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxJQUFBLDBCQUFVLEVBQy9DLHVCQUF1QixFQUN2QixLQUFLLEVBQ0gsS0FBbUMsRUFDbUIsRUFBRTtJQUN4RCxNQUFNLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0RBQW9ELENBQ3JELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGdEQUFnRCxDQUNqRCxDQUFBO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixJQUFJLGVBQWUsQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsK0NBQStDLGVBQWUsQ0FBQyxhQUFhLGtDQUFrQyxhQUFhLEVBQUUsQ0FDOUgsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDNUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQTtJQUVyQyw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1Isd0RBQXdEO1lBQ3hELElBQ0UsTUFBTSxLQUFLLEtBQUs7Z0JBQ2hCLE1BQU0sS0FBSyxRQUFRO2dCQUNuQixNQUFNLEtBQUssZUFBZSxFQUMxQixDQUFDO2dCQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGtCQUFrQixNQUFNLGtDQUFrQyxRQUFRLGlEQUFpRCxDQUNwSCxDQUFBO1lBQ0gsQ0FBQztZQUNELE1BQUs7UUFFUCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLEtBQUs7WUFDUixrRUFBa0U7WUFDbEUsSUFBSSxNQUFNLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGtCQUFrQixNQUFNLGtDQUFrQyxRQUFRLG9DQUFvQyxDQUN2RyxDQUFBO1lBQ0gsQ0FBQztZQUNELE1BQUs7UUFFUDtZQUNFLGtFQUFrRTtZQUNsRSxJQUFJLE1BQU0sS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0JBQWtCLE1BQU0sa0NBQWtDLFFBQVEsb0NBQW9DLENBQ3ZHLENBQUE7WUFDSCxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFnQztRQUNyRCxlQUFlLEVBQUUsTUFBTTtRQUN2QixlQUFlO0tBQ2hCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updatePaymentStatusStep = 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.updatePaymentStatusStep = (0, workflows_sdk_1.createStep)("update-payment-status", async (input, { container }) => {
|
|
8
|
-
const { payment_collection_id, refund_id, refund_amount } = input;
|
|
9
|
-
if (!payment_collection_id) {
|
|
10
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Payment collection ID is required to update payment status");
|
|
11
|
-
}
|
|
12
|
-
if (!refund_id) {
|
|
13
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Refund ID is required to update payment status");
|
|
14
|
-
}
|
|
15
|
-
const paymentService = container.resolve(utils_2.Modules.PAYMENT);
|
|
16
|
-
try {
|
|
17
|
-
// Retrieve payment collection to verify refund exists
|
|
18
|
-
const paymentCollection = await paymentService.retrievePaymentCollection(payment_collection_id, {
|
|
19
|
-
relations: ["refunds", "payments"],
|
|
20
|
-
});
|
|
21
|
-
if (!paymentCollection) {
|
|
22
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Payment collection ${payment_collection_id} not found`);
|
|
23
|
-
}
|
|
24
|
-
// Verify refund exists
|
|
25
|
-
const paymentCollectionWithRefunds = paymentCollection;
|
|
26
|
-
const refunds = paymentCollectionWithRefunds.refunds || [];
|
|
27
|
-
const refund = refunds.find((r) => r.id === refund_id);
|
|
28
|
-
if (!refund) {
|
|
29
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Refund ${refund_id} not found in payment collection`);
|
|
30
|
-
}
|
|
31
|
-
// Payment status is automatically updated by Medusa when refund is created
|
|
32
|
-
// For COD, the refund is already marked as succeeded in the previous step
|
|
33
|
-
// We just need to log the completion
|
|
34
|
-
return new workflows_sdk_1.StepResponse({
|
|
35
|
-
success: true,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
if (error instanceof utils_1.MedusaError) {
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to update payment status: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXBheW1lbnQtc3RhdHVzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3VwZGF0ZS1wYXltZW50LXN0YXR1cy1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQW1EO0FBVXRDLFFBQUEsdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUMvQyx1QkFBdUIsRUFDdkIsS0FBSyxFQUNILEtBQW1DLEVBQ25DLEVBQUUsU0FBUyxFQUFFLEVBQ3lDLEVBQUU7SUFDeEQsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFakUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsNERBQTRELENBQzdELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsZ0RBQWdELENBQ2pELENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDdEMsZUFBTyxDQUFDLE9BQU8sQ0FDaEIsQ0FBQTtJQUVELElBQUksQ0FBQztRQUNILHNEQUFzRDtRQUN0RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sY0FBYyxDQUFDLHlCQUF5QixDQUN0RSxxQkFBcUIsRUFDckI7WUFDRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO1NBQ25DLENBQ0YsQ0FBQTtRQUVELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLHNCQUFzQixxQkFBcUIsWUFBWSxDQUN4RCxDQUFBO1FBQ0gsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLDRCQUE0QixHQUFHLGlCQUF1RCxDQUFBO1FBQzVGLE1BQU0sT0FBTyxHQUFJLDRCQUE0QixDQUFDLE9BQXFCLElBQUksRUFBRSxDQUFBO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ3pCLENBQUMsQ0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQzFDLENBQUE7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixVQUFVLFNBQVMsa0NBQWtDLENBQ3RELENBQUE7UUFDSCxDQUFDO1FBRUQsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSxxQ0FBcUM7UUFFckMsT0FBTyxJQUFJLDRCQUFZLENBQWdDO1lBQ3JELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO1FBRUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxvQ0FBb0MsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQy9GLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUEifQ==
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validatePaymentDetailsStep = void 0;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
-
exports.validatePaymentDetailsStep = (0, workflows_sdk_1.createStep)("validate-payment-details", async (input) => {
|
|
7
|
-
const { payment_details, payment_method, currency_code } = input;
|
|
8
|
-
if (!payment_details) {
|
|
9
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Payment details are required");
|
|
10
|
-
}
|
|
11
|
-
// Validate method matches
|
|
12
|
-
if (payment_details.method !== payment_method) {
|
|
13
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Payment method mismatch: expected ${payment_method}, got ${payment_details.method}`);
|
|
14
|
-
}
|
|
15
|
-
// Validate currency matches
|
|
16
|
-
if (payment_details.currency_code !== currency_code) {
|
|
17
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Currency mismatch: expected ${currency_code}, got ${payment_details.currency_code}`);
|
|
18
|
-
}
|
|
19
|
-
// Validate based on payment method
|
|
20
|
-
switch (payment_method) {
|
|
21
|
-
case "bank_transfer":
|
|
22
|
-
if (!payment_details.bank_account) {
|
|
23
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Bank account details are required for bank transfer");
|
|
24
|
-
}
|
|
25
|
-
if (!payment_details.bank_account.account_number) {
|
|
26
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Bank account number is required");
|
|
27
|
-
}
|
|
28
|
-
if (!payment_details.bank_account.account_holder_name) {
|
|
29
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Account holder name is required");
|
|
30
|
-
}
|
|
31
|
-
// Currency-specific validations
|
|
32
|
-
if (currency_code === "INR") {
|
|
33
|
-
// For INR, IFSC code is required
|
|
34
|
-
if (!payment_details.bank_account.ifsc_code) {
|
|
35
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "IFSC code is required for Indian bank transfers");
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else if (currency_code === "USD") {
|
|
39
|
-
// For USD, routing number is required
|
|
40
|
-
if (!payment_details.bank_account.routing_number) {
|
|
41
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Routing number is required for US bank transfers");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// For international transfers, SWIFT code is recommended
|
|
46
|
-
if (!payment_details.bank_account.swift_code) {
|
|
47
|
-
console.warn(`SWIFT code not provided for international transfer (${currency_code}). This may cause delays.`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
break;
|
|
51
|
-
case "upi":
|
|
52
|
-
if (!payment_details.upi_id) {
|
|
53
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "UPI ID is required for UPI refund");
|
|
54
|
-
}
|
|
55
|
-
// Validate UPI ID format (basic check)
|
|
56
|
-
const upiIdPattern = /^[\w.-]+@[\w]+$/;
|
|
57
|
-
if (!upiIdPattern.test(payment_details.upi_id)) {
|
|
58
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid UPI ID format. Expected format: name@provider");
|
|
59
|
-
}
|
|
60
|
-
// UPI is only for INR
|
|
61
|
-
if (currency_code !== "INR") {
|
|
62
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "UPI is only supported for INR currency");
|
|
63
|
-
}
|
|
64
|
-
break;
|
|
65
|
-
case "wallet":
|
|
66
|
-
if (!payment_details.wallet) {
|
|
67
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Wallet details are required for wallet refund");
|
|
68
|
-
}
|
|
69
|
-
if (!payment_details.wallet.wallet_id) {
|
|
70
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Wallet ID is required");
|
|
71
|
-
}
|
|
72
|
-
// Wallets are primarily for INR
|
|
73
|
-
if (currency_code !== "INR") {
|
|
74
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Wallet refunds are only supported for INR currency");
|
|
75
|
-
}
|
|
76
|
-
break;
|
|
77
|
-
case "other":
|
|
78
|
-
if (!payment_details.other_details) {
|
|
79
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Other payment details are required");
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
default:
|
|
83
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Unsupported payment method: ${payment_method}`);
|
|
84
|
-
}
|
|
85
|
-
return new workflows_sdk_1.StepResponse({
|
|
86
|
-
valid: true,
|
|
87
|
-
payment_details,
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtcGF5bWVudC1kZXRhaWxzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3ZhbGlkYXRlLXBheW1lbnQtZGV0YWlscy1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFjL0QsUUFBQSwwQkFBMEIsR0FBRyxJQUFBLDBCQUFVLEVBQ2xELDBCQUEwQixFQUMxQixLQUFLLEVBQ0gsS0FBc0MsRUFDbUIsRUFBRTtJQUMzRCxNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFaEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDhCQUE4QixDQUMvQixDQUFBO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUNBQXFDLGNBQWMsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQ3JGLENBQUE7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLElBQUksZUFBZSxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUNwRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwrQkFBK0IsYUFBYSxTQUFTLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FDckYsQ0FBQTtJQUNILENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsUUFBUSxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLGVBQWU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZ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
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.verifyCodOrderStep = 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.verifyCodOrderStep = (0, workflows_sdk_1.createStep)("verify-cod-order", async (input, { container }) => {
|
|
8
|
-
const { order_id } = input;
|
|
9
|
-
if (!order_id) {
|
|
10
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order ID is required to verify COD order");
|
|
11
|
-
}
|
|
12
|
-
const orderService = container.resolve(utils_2.Modules.ORDER);
|
|
13
|
-
const order = await orderService.retrieveOrder(order_id, {
|
|
14
|
-
relations: ["payment_collection"],
|
|
15
|
-
});
|
|
16
|
-
if (!order) {
|
|
17
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order with ID ${order_id} not found`);
|
|
18
|
-
}
|
|
19
|
-
// Check if order is COD via metadata
|
|
20
|
-
const metadata = order.metadata;
|
|
21
|
-
const paymentType = metadata?.payment_type;
|
|
22
|
-
// Also check payment collection providers for COD
|
|
23
|
-
const orderWithPayment = order;
|
|
24
|
-
const paymentCollection = orderWithPayment.payment_collection;
|
|
25
|
-
const isCodByProvider = paymentCollection?.payment_providers?.some((provider) => provider.id === "cod" ||
|
|
26
|
-
provider.id === "manual" ||
|
|
27
|
-
provider.id?.toLowerCase().includes("cod")) ?? false;
|
|
28
|
-
const isCod = paymentType === "cod" ||
|
|
29
|
-
paymentType === "cash_on_delivery" ||
|
|
30
|
-
isCodByProvider;
|
|
31
|
-
if (!isCod) {
|
|
32
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Order ${order_id} is not a COD order. Automatic refund processing only applies to COD orders.`);
|
|
33
|
-
}
|
|
34
|
-
return new workflows_sdk_1.StepResponse({
|
|
35
|
-
is_cod: isCod,
|
|
36
|
-
order_id: order_id,
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LWNvZC1vcmRlci1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy92ZXJpZnktY29kLW9yZGVyLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxxREFBbUQ7QUFVdEMsUUFBQSxrQkFBa0IsR0FBRyxJQUFBLDBCQUFVLEVBQzFDLGtCQUFrQixFQUNsQixLQUFLLEVBQ0gsS0FBOEIsRUFDOUIsRUFBRSxTQUFTLEVBQUUsRUFDb0MsRUFBRTtJQUNuRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBDQUEwQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3BDLGVBQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQTtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDdkQsU0FBUyxFQUFFLENBQUMsb0JBQW9CLENBQUM7S0FDbEMsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsaUJBQWlCLFFBQVEsWUFBWSxDQUN0QyxDQUFBO0lBQ0gsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBMEMsQ0FBQTtJQUNqRSxNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsWUFBa0MsQ0FBQTtJQUVoRSxrREFBa0Q7SUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFvRCxDQUFBO0lBQzdFLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsa0JBRXZCLENBQUE7SUFDcEIsTUFBTSxlQUFlLEdBQ25CLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FDeEMsQ0FBQyxRQUF5QixFQUFFLEVBQUUsQ0FDNUIsUUFBUSxDQUFDLEVBQUUsS0FBSyxLQUFLO1FBQ3JCLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUTtRQUN4QixRQUFRLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDN0MsSUFBSSxLQUFLLENBQUE7SUFFWixNQUFNLEtBQUssR0FDVCxXQUFXLEtBQUssS0FBSztRQUNyQixXQUFXLEtBQUssa0JBQWtCO1FBQ2xDLGVBQWUsQ0FBQTtJQUVqQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3QixTQUFTLFFBQVEsOEVBQThFLENBQ2hHLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQTJCO1FBQ2hELE1BQU0sRUFBRSxLQUFLO1FBQ2IsUUFBUSxFQUFFLFFBQVE7S0FDbkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUEifQ==
|