order-management 0.0.76 → 0.0.77

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.
@@ -43,6 +43,7 @@ function normalizeOrderManagementOptions(input) {
43
43
  enabled: input.notifications?.enabled ?? false,
44
44
  statusConfig: input.notifications?.statusConfig ?? {},
45
45
  },
46
+ capture_payment_on_delivered: input.capture_payment_on_delivered ?? true,
46
47
  returnValidInDays,
47
48
  exchangeValidInDays,
48
49
  };
@@ -63,4 +64,4 @@ function resolveOrderManagementOptions(configModule) {
63
64
  }
64
65
  throw new Error("order-management: Plugin not found in configuration. Please add the plugin to medusa-config.ts");
65
66
  }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOztBQXFDSCwwRUFtREM7QUFFRCxzRUF3QkM7QUFoSEQscURBQW9EO0FBc0JwRCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQTtBQWF0QyxTQUFnQiwrQkFBK0IsQ0FDN0MsS0FBMkM7SUFFM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYixnR0FBZ0csQ0FDakcsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQztRQUN4RSxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtRQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRVAsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFUCxPQUFPO1FBQ0wsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1FBQ2xDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixLQUFLLEVBQUU7WUFDTCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLG9CQUFvQixJQUFJLElBQUk7WUFDL0QsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxJQUFJLElBQUk7U0FDOUM7UUFDRCxJQUFJLEVBQUU7WUFDSixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksS0FBSztZQUNyQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUk7WUFDdEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUk7WUFDbEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSTtZQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJO1NBQ3ZCO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxJQUFJLEtBQUs7WUFDOUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxJQUFJLEVBQUU7U0FDdEQ7UUFDRCxpQkFBaUI7UUFDakIsbUJBQW1CO0tBQ3BCLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsNkJBQTZCLENBQzNDLFlBQWdDO0lBRWhDLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO0lBRTNDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDM0Isd0VBQXdFO2dCQUN4RSxNQUFNLElBQUksS0FBSyxDQUNiLDZGQUE2RixDQUM5RixDQUFBO1lBQ0gsQ0FBQztZQUNELFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sK0JBQStCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixnR0FBZ0csQ0FDakcsQ0FBQTtBQUNILENBQUMifQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOztBQXFDSCwwRUFvREM7QUFFRCxzRUF3QkM7QUFqSEQscURBQW9EO0FBc0JwRCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQTtBQWF0QyxTQUFnQiwrQkFBK0IsQ0FDN0MsS0FBMkM7SUFFM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYixnR0FBZ0csQ0FDakcsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQztRQUN4RSxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtRQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRVAsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFUCxPQUFPO1FBQ0wsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1FBQ2xDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixLQUFLLEVBQUU7WUFDTCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLG9CQUFvQixJQUFJLElBQUk7WUFDL0QsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxJQUFJLElBQUk7U0FDOUM7UUFDRCxJQUFJLEVBQUU7WUFDSixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksS0FBSztZQUNyQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUk7WUFDdEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUk7WUFDbEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSTtZQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJO1NBQ3ZCO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxJQUFJLEtBQUs7WUFDOUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxJQUFJLEVBQUU7U0FDdEQ7UUFDRCw0QkFBNEIsRUFBRSxLQUFLLENBQUMsNEJBQTRCLElBQUksSUFBSTtRQUN4RSxpQkFBaUI7UUFDakIsbUJBQW1CO0tBQ3BCLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsNkJBQTZCLENBQzNDLFlBQWdDO0lBRWhDLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO0lBRTNDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDM0Isd0VBQXdFO2dCQUN4RSxNQUFNLElBQUksS0FBSyxDQUNiLDZGQUE2RixDQUM5RixDQUFBO1lBQ0gsQ0FBQztZQUNELFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sK0JBQStCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYixnR0FBZ0csQ0FDakcsQ0FBQTtBQUNILENBQUMifQ==
@@ -5,7 +5,237 @@ exports.getOrderIdFromFulfillment = getOrderIdFromFulfillment;
5
5
  exports.default = orderFulfilledHandler;
6
6
  const utils_1 = require("@medusajs/framework/utils");
7
7
  const utils_2 = require("@medusajs/framework/utils");
8
+ const core_flows_1 = require("@medusajs/core-flows");
8
9
  const template_1 = require("../utils/template");
10
+ const config_1 = require("../config");
11
+ function toNumber(value) {
12
+ if (typeof value === "number" && Number.isFinite(value))
13
+ return value;
14
+ if (typeof value === "string" && value.trim().length > 0) {
15
+ const parsed = Number(value);
16
+ return Number.isFinite(parsed) ? parsed : 0;
17
+ }
18
+ if (value && typeof value === "object" && "value" in value) {
19
+ const nested = value.value;
20
+ return toNumber(nested);
21
+ }
22
+ return 0;
23
+ }
24
+ function resolveCapturePayload(payment) {
25
+ const paymentId = typeof payment.id === "string" ? payment.id : "";
26
+ if (!paymentId)
27
+ return null;
28
+ const totalAmount = toNumber(payment.amount);
29
+ const capturedAmount = toNumber(payment.captured_amount);
30
+ const remaining = Math.max(0, totalAmount - capturedAmount);
31
+ if (remaining <= 0)
32
+ return null;
33
+ const status = typeof payment.status === "string" ? payment.status.toLowerCase() : "";
34
+ const capturableStatuses = new Set([
35
+ "authorized",
36
+ "partially_captured",
37
+ "requires_capture",
38
+ "pending",
39
+ ]);
40
+ if (status && !capturableStatuses.has(status)) {
41
+ return null;
42
+ }
43
+ return {
44
+ payment_id: paymentId,
45
+ amount: remaining,
46
+ };
47
+ }
48
+ async function executeCapture(container, paymentModuleService, payload, logger) {
49
+ logger?.info?.(`[Order Fulfilled] Triggering capture workflow for payment ${payload.payment_id} with amount ${payload.amount}.`);
50
+ await (0, core_flows_1.capturePaymentWorkflow)(container).run({
51
+ input: {
52
+ payment_id: payload.payment_id,
53
+ amount: payload.amount,
54
+ captured_by: "system-auto-delivery",
55
+ },
56
+ });
57
+ logger?.info?.(`[Order Fulfilled] Auto-captured payment ${payload.payment_id} for amount ${payload.amount}.`);
58
+ try {
59
+ const payments = await paymentModuleService.listPayments({ id: [payload.payment_id] });
60
+ const paymentList = Array.isArray(payments) ? payments : payments ? [payments] : [];
61
+ const payment = paymentList[0];
62
+ if (!payment) {
63
+ logger?.info?.(`[Order Fulfilled] Could not reload payment ${payload.payment_id} after capture for reconciliation.`);
64
+ return;
65
+ }
66
+ const totalAmount = toNumber(payment.amount);
67
+ const capturedAt = payment.captured_at;
68
+ const captures = await paymentModuleService.listCaptures({ payment_id: [payload.payment_id] });
69
+ const captureRows = Array.isArray(captures) ? captures : captures ? [captures] : [];
70
+ const capturedTotal = captureRows.reduce((sum, capture) => {
71
+ return sum + toNumber(capture.amount);
72
+ }, 0);
73
+ if (!capturedAt && totalAmount > 0 && capturedTotal >= totalAmount) {
74
+ logger?.info?.(`[Order Fulfilled] Payment ${payload.payment_id} has captured_total=${capturedTotal} and null captured_at; running reconciliation capture workflow.`);
75
+ await (0, core_flows_1.capturePaymentWorkflow)(container).run({
76
+ input: {
77
+ payment_id: payload.payment_id,
78
+ captured_by: "system-auto-delivery-finalize",
79
+ },
80
+ });
81
+ const finalized = await paymentModuleService.listPayments({ id: [payload.payment_id] });
82
+ const finalizedList = Array.isArray(finalized) ? finalized : finalized ? [finalized] : [];
83
+ const finalizedPayment = finalizedList[0];
84
+ logger?.info?.(`[Order Fulfilled] Reconciliation complete for payment ${payload.payment_id}; captured_at=${String(finalizedPayment?.captured_at ?? null)}.`);
85
+ }
86
+ }
87
+ catch (reconcileError) {
88
+ const reconcileErrorMessage = reconcileError instanceof Error
89
+ ? `${reconcileError.message}\n${reconcileError.stack ?? ""}`
90
+ : String(reconcileError);
91
+ logger?.error?.(`[Order Fulfilled] Reconciliation failed for payment ${payload.payment_id}: ${reconcileErrorMessage}`);
92
+ }
93
+ }
94
+ async function autoCaptureOrderPayments(container, orderId, remoteQuery, paymentModuleService, logger) {
95
+ logger?.info?.(`[Order Fulfilled] Resolving payment collections for order ${orderId}.`);
96
+ const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
97
+ entryPoint: "order",
98
+ fields: ["id", "payment_collections.id"],
99
+ filters: { id: [orderId] },
100
+ });
101
+ const orders = await remoteQuery(orderQuery);
102
+ const orderList = Array.isArray(orders) ? orders : orders ? [orders] : [];
103
+ const order = orderList.find((row) => row.id === orderId);
104
+ let collectionIds = (order?.payment_collections ?? []).map((collection) => collection.id);
105
+ logger?.info?.(`[Order Fulfilled] Order query returned ${collectionIds.length} payment collection(s) for order ${orderId}.`);
106
+ if (collectionIds.length === 0) {
107
+ const attemptPaymentCollectionQueries = [
108
+ (0, utils_1.remoteQueryObjectFromString)({
109
+ entryPoint: "payment_collection",
110
+ fields: ["id", "order.id"],
111
+ filters: { order: { id: [orderId] } },
112
+ }),
113
+ (0, utils_1.remoteQueryObjectFromString)({
114
+ entryPoint: "payment_collection",
115
+ fields: ["id", "order.id"],
116
+ filters: { order_id: [orderId] },
117
+ }),
118
+ ];
119
+ for (const query of attemptPaymentCollectionQueries) {
120
+ try {
121
+ const collections = await remoteQuery(query);
122
+ const list = Array.isArray(collections) ? collections : collections ? [collections] : [];
123
+ const ids = list
124
+ .map((row) => row.id)
125
+ .filter((id) => typeof id === "string" && id.length > 0);
126
+ if (ids.length > 0) {
127
+ collectionIds = ids;
128
+ logger?.info?.(`[Order Fulfilled] Fallback query resolved ${collectionIds.length} payment collection(s) for order ${orderId}.`);
129
+ break;
130
+ }
131
+ }
132
+ catch {
133
+ logger?.info?.(`[Order Fulfilled] Fallback payment collection query failed for order ${orderId}; trying next strategy.`);
134
+ }
135
+ }
136
+ }
137
+ if (collectionIds.length === 0) {
138
+ logger?.info?.(`[Order Fulfilled] No payment collections found for order ${orderId}; skipping auto-capture.`);
139
+ return;
140
+ }
141
+ const sessions = await paymentModuleService.listPaymentSessions({
142
+ payment_collection_id: collectionIds,
143
+ });
144
+ const sessionListRaw = Array.isArray(sessions) ? sessions : sessions ? [sessions] : [];
145
+ const sessionList = sessionListRaw.filter((session) => {
146
+ const row = session;
147
+ return (typeof row.payment_collection_id === "string" &&
148
+ collectionIds.includes(row.payment_collection_id));
149
+ });
150
+ const sessionIds = sessionList.map((session) => session.id).filter((id) => typeof id === "string");
151
+ logger?.info?.(`[Order Fulfilled] Found ${sessionIds.length} payment session(s) for order ${orderId}.`);
152
+ if (sessionIds.length === 0) {
153
+ logger?.info?.(`[Order Fulfilled] No payment sessions found for order ${orderId}; skipping auto-capture.`);
154
+ return;
155
+ }
156
+ const paymentCollectionQuery = (0, utils_1.remoteQueryObjectFromString)({
157
+ entryPoint: "payment_collection",
158
+ fields: [
159
+ "id",
160
+ "payments.id",
161
+ "payments.amount",
162
+ "payments.captured_amount",
163
+ "payments.status",
164
+ "payments.captured_at",
165
+ "payments.payment_session_id",
166
+ "payments.payment_collection_id",
167
+ ],
168
+ filters: { id: collectionIds },
169
+ });
170
+ const paymentCollectionRows = await remoteQuery(paymentCollectionQuery).catch(() => []);
171
+ const paymentCollectionListRaw = Array.isArray(paymentCollectionRows)
172
+ ? paymentCollectionRows
173
+ : paymentCollectionRows
174
+ ? [paymentCollectionRows]
175
+ : [];
176
+ const paymentCollectionList = paymentCollectionListRaw.filter((row) => {
177
+ const collectionId = row.id;
178
+ return typeof collectionId === "string" && collectionIds.includes(collectionId);
179
+ });
180
+ let paymentList = paymentCollectionList.flatMap((row) => {
181
+ const collection = row;
182
+ const collectionId = typeof collection.id === "string" ? collection.id : undefined;
183
+ const payments = Array.isArray(collection.payments) ? collection.payments : [];
184
+ return payments.map((payment) => {
185
+ const raw = payment;
186
+ return {
187
+ ...raw,
188
+ payment_collection_id: raw.payment_collection_id ?? collectionId,
189
+ };
190
+ });
191
+ });
192
+ paymentList = paymentList.filter((payment) => {
193
+ const row = payment;
194
+ const byCollection = typeof row.payment_collection_id === "string" &&
195
+ collectionIds.includes(row.payment_collection_id);
196
+ const bySession = typeof row.payment_session_id === "string" && sessionIds.includes(row.payment_session_id);
197
+ return byCollection || bySession;
198
+ });
199
+ logger?.info?.(`[Order Fulfilled] remoteQuery(payment_collection.payments) returned ${paymentList.length} payment(s) for order ${orderId}.`);
200
+ logger?.info?.(`[Order Fulfilled] Candidate payment IDs for order ${orderId}: ${paymentList
201
+ .map((p) => p.id)
202
+ .filter((id) => typeof id === "string")
203
+ .join(", ") || "none"}.`);
204
+ if (paymentList.length === 0) {
205
+ // Fallback for environments where payment_collection.payments is not expanded
206
+ const fallbackPayments = await paymentModuleService
207
+ .listPayments({
208
+ payment_collection_id: collectionIds,
209
+ })
210
+ .catch(() => []);
211
+ paymentList = Array.isArray(fallbackPayments)
212
+ ? fallbackPayments
213
+ : fallbackPayments
214
+ ? [fallbackPayments]
215
+ : [];
216
+ paymentList = paymentList.filter((payment) => {
217
+ const row = payment;
218
+ return (typeof row.payment_collection_id === "string" &&
219
+ collectionIds.includes(row.payment_collection_id));
220
+ });
221
+ logger?.info?.(`[Order Fulfilled] Fallback listPayments(payment_collection_id) returned ${paymentList.length} payment(s) for order ${orderId}.`);
222
+ logger?.info?.(`[Order Fulfilled] Fallback candidate payment IDs for order ${orderId}: ${paymentList
223
+ .map((p) => p.id)
224
+ .filter((id) => typeof id === "string")
225
+ .join(", ") || "none"}.`);
226
+ }
227
+ const capturable = paymentList
228
+ .map((payment) => resolveCapturePayload(payment))
229
+ .filter((value) => value !== null);
230
+ logger?.info?.(`[Order Fulfilled] Computed ${capturable.length} capturable payment(s) for order ${orderId}.`);
231
+ if (capturable.length === 0) {
232
+ logger?.info?.(`[Order Fulfilled] No capturable payments for order ${orderId}; skipping auto-capture.`);
233
+ return;
234
+ }
235
+ for (const capture of capturable) {
236
+ await executeCapture(container, paymentModuleService, capture, logger);
237
+ }
238
+ }
9
239
  /**
10
240
  * Resolve order_id from a fulfillment id using remote query.
11
241
  * Tries direct fulfillment.order_id first; falls back to querying orders with fulfillments
@@ -71,15 +301,44 @@ async function orderFulfilledHandler({ event, container, }) {
71
301
  return;
72
302
  }
73
303
  try {
304
+ logger?.info?.(`[Order Fulfilled] Received event ${event.name} with payload: ${JSON.stringify(data)}`);
74
305
  const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
75
306
  const orderModuleService = container.resolve(utils_2.Modules.ORDER);
307
+ const paymentModuleService = container.resolve(utils_2.Modules.PAYMENT);
308
+ if (!orderId && typeof data.id === "string" && data.id.startsWith("order_")) {
309
+ orderId = data.id;
310
+ logger?.info?.(`[Order Fulfilled] Resolved order ID directly from event payload id: ${orderId}.`);
311
+ }
76
312
  if (!orderId && fulfillmentId) {
77
313
  orderId = await getOrderIdFromFulfillment(fulfillmentId, remoteQuery) ?? undefined;
314
+ logger?.info?.(`[Order Fulfilled] Resolved order ID from fulfillment ${fulfillmentId}: ${orderId ?? "not-found"}.`);
78
315
  }
79
316
  if (!orderId) {
80
317
  logger?.info?.("[Order Fulfilled] No order_id found for delivery event; skipping order status update.");
81
318
  return;
82
319
  }
320
+ let captureOnDelivered = true;
321
+ try {
322
+ const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
323
+ const config = (0, config_1.resolveOrderManagementOptions)(configModule);
324
+ captureOnDelivered = config.capture_payment_on_delivered;
325
+ logger?.info?.(`[Order Fulfilled] capture_payment_on_delivered resolved to ${String(captureOnDelivered)} for order ${orderId}.`);
326
+ }
327
+ catch {
328
+ logger?.info?.(`[Order Fulfilled] Could not resolve plugin config for order ${orderId}; defaulting capture_payment_on_delivered=true.`);
329
+ }
330
+ if (captureOnDelivered) {
331
+ try {
332
+ await autoCaptureOrderPayments(container, orderId, remoteQuery, paymentModuleService, logger);
333
+ }
334
+ catch (captureError) {
335
+ const captureErrorMessage = captureError instanceof Error ? `${captureError.message}\n${captureError.stack ?? ""}` : String(captureError);
336
+ logger?.error?.(`[Order Fulfilled] Failed to auto-capture payments for order ${orderId}: ${captureErrorMessage}`);
337
+ }
338
+ }
339
+ else {
340
+ logger?.info?.(`[Order Fulfilled] Auto-capture disabled for order ${orderId}; skipping payment capture.`);
341
+ }
83
342
  let displaySuffix = "";
84
343
  try {
85
344
  const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
@@ -114,4 +373,4 @@ exports.config = {
114
373
  "fulfillment.shipment_delivered",
115
374
  ],
116
375
  };
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZnVsZmlsbGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWZ1bGZpbGxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQkEsOERBd0NDO0FBVUQsd0NBMERDO0FBL0hELHFEQUFrRztBQUVsRyxxREFBbUQ7QUFDbkQsZ0RBQTJEO0FBVTNEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxhQUFxQixFQUNyQixXQUFnQztJQUVoQyxJQUFJLENBQUM7UUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUEsbUNBQTJCLEVBQUM7WUFDbkQsVUFBVSxFQUFFLGFBQWE7WUFDekIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUMxQixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtTQUNqQyxDQUFDLENBQUE7UUFDRixNQUFNLFlBQVksR0FBRyxNQUFNLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDNUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssYUFBYSxDQUFzQyxDQUFBO1FBQ25ILElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQTtRQUM3QixDQUFDO1FBQ0QsMkZBQTJGO1FBQzNGLE1BQU0sVUFBVSxHQUFHLElBQUEsbUNBQTJCLEVBQUM7WUFDN0MsVUFBVSxFQUFFLE9B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
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZnVsZmlsbGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWZ1bGZpbGxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4VUEsOERBd0NDO0FBVUQsd0NBZ0dDO0FBL2RELHFEQUFrRztBQUVsRyxxREFBbUQ7QUFDbkQscURBQTZEO0FBQzdELGdEQUEyRDtBQUMzRCxzQ0FBaUY7QUFrQmpGLFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUNyRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM1QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFDRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFJLEtBQTZCLENBQUMsS0FBSyxDQUFBO1FBQ25ELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQTtBQUNWLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixPQUFnQztJQUVoQyxNQUFNLFNBQVMsR0FBRyxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7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
package/README.md CHANGED
@@ -188,6 +188,9 @@ module.exports = defineConfig({
188
188
  ]
189
189
  }
190
190
  },
191
+
192
+ // Optional: auto-capture payment on delivered events (default: true)
193
+ capture_payment_on_delivered: true,
191
194
  },
192
195
  },
193
196
  ],
@@ -239,6 +242,9 @@ When the window has expired the API returns:
239
242
  - **Push channel**: For `channel: "push"`, the recipient is treated as a **customer_id**. The code loads all active device tokens for that customer from the `notification_tokens` module (e.g. when using the `medusa-notification-token-management` plugin) and sends one push notification to each token. If the token module is not installed or the customer has no tokens, no push is sent.
240
243
  - **SMS channel**: The plugin sends the SMS body in a form compatible with **medusa-twilio-sms** (`content.text`) and as `text`/`body`/`data.text` for other adapters. If you use medusa-twilio-sms and patch it to also accept string `content` or `data.text`, use `npx patch-package medusa-twilio-sms` after editing so the fix persists across installs.
241
244
 
245
+ **Optional Delivery Payment Capture Option:**
246
+ - `capture_payment_on_delivered` - Automatically captures the remaining authorized payment amount when delivery events are received (default: `true`). Set to `false` to disable auto-capture.
247
+
242
248
  **Notes**:
243
249
  - `storefrontUrl` and `jwtSecret` are required. All other options are optional.
244
250
  - Order confirmation emails are only sent if a template path is provided. If no template is configured, emails will not be sent.
@@ -246,6 +252,7 @@ When the window has expired the API returns:
246
252
  - OTP templates should include `{{otp}}` placeholder for the verification code.
247
253
  - SMTP configuration is optional. If not enabled, emails will use Medusa's default email provider.
248
254
  - Status-based notifications are optional. If enabled, notifications will be sent whenever an order reaches a configured status.
255
+ - Payment auto-capture on delivery is enabled by default and captures only the remaining uncaptured amount, skipping already captured payments.
249
256
 
250
257
  ### Payment detail module
251
258
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "order-management",
3
- "version": "0.0.76",
3
+ "version": "0.0.77",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",