@webbers/pay-payments-medusa 2.2.52 → 2.2.54
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/package.json +1 -1
- package/.medusa/server/src/admin/index.js +63 -1
- package/.medusa/server/src/admin/index.mjs +64 -2
- package/.medusa/server/src/api/admin/pay/orders/[id]/reversal/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/pay/orders/[id]/reversal/route.d.ts.map +1 -0
- package/.medusa/server/src/api/admin/pay/orders/[id]/reversal/route.js +17 -0
- package/.medusa/server/src/subscribers/direct-debit-exchange.d.ts.map +1 -1
- package/.medusa/server/src/subscribers/direct-debit-exchange.js +7 -16
- package/.medusa/server/src/subscribers/payment-failed.d.ts.map +1 -1
- package/.medusa/server/src/subscribers/payment-failed.js +3 -2
- package/.medusa/server/src/utils/getPayClient.d.ts +12 -0
- package/.medusa/server/src/utils/getPayClient.d.ts.map +1 -0
- package/.medusa/server/src/utils/getPayClient.js +20 -0
- package/.medusa/server/src/utils/index.d.ts +4 -0
- package/.medusa/server/src/utils/index.d.ts.map +1 -1
- package/.medusa/server/src/utils/index.js +8 -1
- package/.medusa/server/src/utils/paymentReversal.d.ts +24 -0
- package/.medusa/server/src/utils/paymentReversal.d.ts.map +1 -0
- package/.medusa/server/src/utils/paymentReversal.js +80 -0
- package/.medusa/server/src/utils/reverseCapturedPayment.d.ts +15 -2
- package/.medusa/server/src/utils/reverseCapturedPayment.d.ts.map +1 -1
- package/.medusa/server/src/utils/reverseCapturedPayment.js +31 -3
- package/README.md +8 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webbers/pay-payments-medusa",
|
|
3
3
|
"displayName": "Medusa v2 Pay. Plugin",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.54",
|
|
5
5
|
"description": "The Pay.nl payment provider plugin for Medusa v2",
|
|
6
6
|
"author": "Webbers B.V. <development@webbers.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -128,6 +128,64 @@ const PayDirectDebitSimulatorWidget = ({
|
|
|
128
128
|
adminSdk.defineWidgetConfig({
|
|
129
129
|
zone: "order.details.side.after"
|
|
130
130
|
});
|
|
131
|
+
const KIND_LABELS = {
|
|
132
|
+
chargeback: "Chargeback",
|
|
133
|
+
storno: "Storno",
|
|
134
|
+
failure: "Failed collection"
|
|
135
|
+
};
|
|
136
|
+
const formatAmount = (amount, currency) => {
|
|
137
|
+
if (!currency) {
|
|
138
|
+
return amount.toFixed(2);
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
return new Intl.NumberFormat(void 0, {
|
|
142
|
+
style: "currency",
|
|
143
|
+
currency: currency.toUpperCase()
|
|
144
|
+
}).format(amount);
|
|
145
|
+
} catch {
|
|
146
|
+
return `${amount.toFixed(2)} ${currency.toUpperCase()}`;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const formatDate = (iso) => iso ? new Intl.DateTimeFormat(void 0, {
|
|
150
|
+
dateStyle: "medium",
|
|
151
|
+
timeStyle: "short"
|
|
152
|
+
}).format(new Date(iso)) : null;
|
|
153
|
+
const PayPaymentReversedWidget = ({
|
|
154
|
+
data: order
|
|
155
|
+
}) => {
|
|
156
|
+
const { data: reversal } = reactQuery.useQuery({
|
|
157
|
+
queryKey: ["pay-payment-reversal", order.id],
|
|
158
|
+
queryFn: () => sdk.client.fetch(`/admin/pay/orders/${order.id}/reversal`)
|
|
159
|
+
});
|
|
160
|
+
if (!(reversal == null ? void 0 : reversal.reversed)) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const kindLabel = reversal.kind ? KIND_LABELS[reversal.kind] : "Reversal";
|
|
164
|
+
const when = formatDate(reversal.at);
|
|
165
|
+
const returned = formatAmount(reversal.amount, reversal.currency_code);
|
|
166
|
+
const outstanding = formatAmount(reversal.outstanding, reversal.currency_code);
|
|
167
|
+
const stillOwed = reversal.outstanding > 0;
|
|
168
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ui.Alert, { variant: "warning", className: "items-start", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-2", children: [
|
|
169
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
170
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", weight: "plus", children: "Payment reversed, action required" }),
|
|
171
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { size: "2xsmall", color: "orange", children: kindLabel }),
|
|
172
|
+
reversal.statusCode !== null && /* @__PURE__ */ jsxRuntime.jsxs(ui.Badge, { size: "2xsmall", color: "grey", children: [
|
|
173
|
+
"Pay. status ",
|
|
174
|
+
reversal.statusCode
|
|
175
|
+
] })
|
|
176
|
+
] }),
|
|
177
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: [
|
|
178
|
+
reversal.kind === "chargeback" ? `The customer charged back the Pay. payment${when ? ` on ${when}` : ""}: ${returned} went back to them.` : reversal.kind === "storno" ? `The customer reversed the direct debit${when ? ` on ${when}` : ""}: ${returned} went back to them.` : `The bank did not collect the direct debit${when ? ` (${when})` : ""}: ${returned} was never received.`,
|
|
179
|
+
" ",
|
|
180
|
+
stillOwed ? `This order is not paid, ${outstanding} is still outstanding.${reversal.payable ? ' Use "Copy payment link" in the summary to let the customer pay again, or mark it as paid once the money arrived another way.' : ""}` : "The outstanding amount has since been settled.",
|
|
181
|
+
" ",
|
|
182
|
+
`The "Refunded" payment status is Medusa's wording for the reversal, no refund was sent by the shop.`
|
|
183
|
+
] })
|
|
184
|
+
] }) });
|
|
185
|
+
};
|
|
186
|
+
adminSdk.defineWidgetConfig({
|
|
187
|
+
zone: "order.details.before"
|
|
188
|
+
});
|
|
131
189
|
const PayLogo = ({}) => {
|
|
132
190
|
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "64", height: "40", viewBox: "0 0 64 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
133
191
|
/* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_596_748)", children: [
|
|
@@ -171,7 +229,7 @@ const PayLogo = ({}) => {
|
|
|
171
229
|
] });
|
|
172
230
|
};
|
|
173
231
|
const displayName = "Medusa v2 Pay. Plugin";
|
|
174
|
-
const version = "2.2.
|
|
232
|
+
const version = "2.2.54";
|
|
175
233
|
function getSortedPaymentMethods(data) {
|
|
176
234
|
const { checkoutOptions, checkoutSequence } = data;
|
|
177
235
|
const { primary } = checkoutSequence.default;
|
|
@@ -356,6 +414,10 @@ const widgetModule = { widgets: [
|
|
|
356
414
|
{
|
|
357
415
|
Component: PayDirectDebitSimulatorWidget,
|
|
358
416
|
zone: ["order.details.side.after"]
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
Component: PayPaymentReversedWidget,
|
|
420
|
+
zone: ["order.details.before"]
|
|
359
421
|
}
|
|
360
422
|
] };
|
|
361
423
|
const routeModule = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
|
|
3
|
-
import { toast, Container, Text, Badge, Button, createDataTableColumnHelper, useDataTable, Heading, Switch, DataTable } from "@medusajs/ui";
|
|
3
|
+
import { toast, Container, Text, Badge, Button, Alert, createDataTableColumnHelper, useDataTable, Heading, Switch, DataTable } from "@medusajs/ui";
|
|
4
4
|
import { useQueryClient, useQuery, useMutation } from "@tanstack/react-query";
|
|
5
5
|
import Medusa from "@medusajs/js-sdk";
|
|
6
6
|
import { useMemo } from "react";
|
|
@@ -125,6 +125,64 @@ const PayDirectDebitSimulatorWidget = ({
|
|
|
125
125
|
defineWidgetConfig({
|
|
126
126
|
zone: "order.details.side.after"
|
|
127
127
|
});
|
|
128
|
+
const KIND_LABELS = {
|
|
129
|
+
chargeback: "Chargeback",
|
|
130
|
+
storno: "Storno",
|
|
131
|
+
failure: "Failed collection"
|
|
132
|
+
};
|
|
133
|
+
const formatAmount = (amount, currency) => {
|
|
134
|
+
if (!currency) {
|
|
135
|
+
return amount.toFixed(2);
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
return new Intl.NumberFormat(void 0, {
|
|
139
|
+
style: "currency",
|
|
140
|
+
currency: currency.toUpperCase()
|
|
141
|
+
}).format(amount);
|
|
142
|
+
} catch {
|
|
143
|
+
return `${amount.toFixed(2)} ${currency.toUpperCase()}`;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
const formatDate = (iso) => iso ? new Intl.DateTimeFormat(void 0, {
|
|
147
|
+
dateStyle: "medium",
|
|
148
|
+
timeStyle: "short"
|
|
149
|
+
}).format(new Date(iso)) : null;
|
|
150
|
+
const PayPaymentReversedWidget = ({
|
|
151
|
+
data: order
|
|
152
|
+
}) => {
|
|
153
|
+
const { data: reversal } = useQuery({
|
|
154
|
+
queryKey: ["pay-payment-reversal", order.id],
|
|
155
|
+
queryFn: () => sdk.client.fetch(`/admin/pay/orders/${order.id}/reversal`)
|
|
156
|
+
});
|
|
157
|
+
if (!(reversal == null ? void 0 : reversal.reversed)) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
const kindLabel = reversal.kind ? KIND_LABELS[reversal.kind] : "Reversal";
|
|
161
|
+
const when = formatDate(reversal.at);
|
|
162
|
+
const returned = formatAmount(reversal.amount, reversal.currency_code);
|
|
163
|
+
const outstanding = formatAmount(reversal.outstanding, reversal.currency_code);
|
|
164
|
+
const stillOwed = reversal.outstanding > 0;
|
|
165
|
+
return /* @__PURE__ */ jsx(Alert, { variant: "warning", className: "items-start", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
|
|
166
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
167
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: "Payment reversed, action required" }),
|
|
168
|
+
/* @__PURE__ */ jsx(Badge, { size: "2xsmall", color: "orange", children: kindLabel }),
|
|
169
|
+
reversal.statusCode !== null && /* @__PURE__ */ jsxs(Badge, { size: "2xsmall", color: "grey", children: [
|
|
170
|
+
"Pay. status ",
|
|
171
|
+
reversal.statusCode
|
|
172
|
+
] })
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ jsxs(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: [
|
|
175
|
+
reversal.kind === "chargeback" ? `The customer charged back the Pay. payment${when ? ` on ${when}` : ""}: ${returned} went back to them.` : reversal.kind === "storno" ? `The customer reversed the direct debit${when ? ` on ${when}` : ""}: ${returned} went back to them.` : `The bank did not collect the direct debit${when ? ` (${when})` : ""}: ${returned} was never received.`,
|
|
176
|
+
" ",
|
|
177
|
+
stillOwed ? `This order is not paid, ${outstanding} is still outstanding.${reversal.payable ? ' Use "Copy payment link" in the summary to let the customer pay again, or mark it as paid once the money arrived another way.' : ""}` : "The outstanding amount has since been settled.",
|
|
178
|
+
" ",
|
|
179
|
+
`The "Refunded" payment status is Medusa's wording for the reversal, no refund was sent by the shop.`
|
|
180
|
+
] })
|
|
181
|
+
] }) });
|
|
182
|
+
};
|
|
183
|
+
defineWidgetConfig({
|
|
184
|
+
zone: "order.details.before"
|
|
185
|
+
});
|
|
128
186
|
const PayLogo = ({}) => {
|
|
129
187
|
return /* @__PURE__ */ jsxs("svg", { width: "64", height: "40", viewBox: "0 0 64 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
130
188
|
/* @__PURE__ */ jsxs("g", { clipPath: "url(#clip0_596_748)", children: [
|
|
@@ -168,7 +226,7 @@ const PayLogo = ({}) => {
|
|
|
168
226
|
] });
|
|
169
227
|
};
|
|
170
228
|
const displayName = "Medusa v2 Pay. Plugin";
|
|
171
|
-
const version = "2.2.
|
|
229
|
+
const version = "2.2.54";
|
|
172
230
|
function getSortedPaymentMethods(data) {
|
|
173
231
|
const { checkoutOptions, checkoutSequence } = data;
|
|
174
232
|
const { primary } = checkoutSequence.default;
|
|
@@ -353,6 +411,10 @@ const widgetModule = { widgets: [
|
|
|
353
411
|
{
|
|
354
412
|
Component: PayDirectDebitSimulatorWidget,
|
|
355
413
|
zone: ["order.details.side.after"]
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
Component: PayPaymentReversedWidget,
|
|
417
|
+
zone: ["order.details.before"]
|
|
356
418
|
}
|
|
357
419
|
] };
|
|
358
420
|
const routeModule = {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
/**
|
|
3
|
+
* Whether a Pay. chargeback / storno reversed this order's payment, for the
|
|
4
|
+
* "payment reversed" banner on the order detail page.
|
|
5
|
+
*/
|
|
6
|
+
export declare const GET: (req: AuthenticatedMedusaRequest, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
7
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/api/admin/pay/orders/[id]/reversal/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAE,cAAc,EAAC,MAAM,0BAA0B,CAAA;AAGnF;;;GAGG;AACH,eAAO,MAAM,GAAG,GACd,KAAK,0BAA0B,EAC/B,KAAK,cAAc,4BASpB,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const paymentReversal_1 = require("../../../../../../utils/paymentReversal");
|
|
5
|
+
/**
|
|
6
|
+
* Whether a Pay. chargeback / storno reversed this order's payment, for the
|
|
7
|
+
* "payment reversed" banner on the order detail page.
|
|
8
|
+
*/
|
|
9
|
+
const GET = async (req, res) => {
|
|
10
|
+
const reversal = await (0, paymentReversal_1.getPaymentReversal)(req.scope, req.params.id);
|
|
11
|
+
if (!reversal) {
|
|
12
|
+
return res.status(404).json({ message: "Order not found" });
|
|
13
|
+
}
|
|
14
|
+
return res.json(reversal);
|
|
15
|
+
};
|
|
16
|
+
exports.GET = GET;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BheS9vcmRlcnMvW2lkXS9yZXZlcnNhbC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2RUFBMEU7QUFFMUU7OztHQUdHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLG9DQUFrQixFQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVuRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzNCLENBQUMsQ0FBQTtBQVhZLFFBQUEsR0FBRyxPQVdmIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-debit-exchange.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/direct-debit-exchange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"direct-debit-exchange.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/direct-debit-exchange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AA8EpE;;;;;GAKG;AACH,wBAA8B,6BAA6B,CAAC,EAC1D,KAAK,EAAE,EAAC,IAAI,EAAC,EACb,SAAS,GACV,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAC,CAAC,iBAkThD;AAED,eAAO,MAAM,MAAM,EAAE,gBAEpB,CAAA"}
|
|
@@ -8,22 +8,11 @@ exports.default = payDirectDebitExchangeHandler;
|
|
|
8
8
|
const utils_1 = require("@medusajs/framework/utils");
|
|
9
9
|
const core_flows_1 = require("@medusajs/core-flows");
|
|
10
10
|
const getPayPaymentSession_1 = __importDefault(require("../utils/getPayPaymentSession"));
|
|
11
|
+
const getPayClient_1 = require("../utils/getPayClient");
|
|
11
12
|
const reverseCapturedPayment_1 = require("../utils/reverseCapturedPayment");
|
|
12
13
|
const types_1 = require("../providers/pay/types");
|
|
13
|
-
const pay_client_1 = require("../providers/pay/core/pay-client");
|
|
14
14
|
const constants_1 = require("../providers/pay/core/constants");
|
|
15
15
|
const directDebitExchange_1 = require("../utils/directDebitExchange");
|
|
16
|
-
const getPayClient = (container, logger) => {
|
|
17
|
-
const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
18
|
-
const payModuleConfig = configModule.modules?.payment?.options
|
|
19
|
-
?.providers?.find((p) => p.id === "pay");
|
|
20
|
-
if (!payModuleConfig?.options) {
|
|
21
|
-
logger.warn("Pay. - Ignoring direct debit exchange: no Pay. provider options found");
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
const options = payModuleConfig.options;
|
|
25
|
-
return { client: new pay_client_1.PayClient(options, logger), options };
|
|
26
|
-
};
|
|
27
16
|
/**
|
|
28
17
|
* The order display id a simulated exchange belongs to: the body's
|
|
29
18
|
* `reference`, or the order behind the payment session encoded in the
|
|
@@ -60,8 +49,9 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
|
|
|
60
49
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
61
50
|
const payload = data.payload ?? {};
|
|
62
51
|
const action = (0, directDebitExchange_1.normalizeAction)(payload.action);
|
|
63
|
-
const pay = getPayClient(container, logger);
|
|
52
|
+
const pay = (0, getPayClient_1.getPayClient)(container, logger);
|
|
64
53
|
if (!pay) {
|
|
54
|
+
logger.warn("Pay. - Ignoring direct debit exchange: no Pay. provider options found");
|
|
65
55
|
return;
|
|
66
56
|
}
|
|
67
57
|
const { client, options } = pay;
|
|
@@ -213,10 +203,11 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
|
|
|
213
203
|
orderId: order.id,
|
|
214
204
|
paymentId: payment.id,
|
|
215
205
|
paymentCollectionId,
|
|
216
|
-
|
|
206
|
+
kind: statusCode === constants_1.PayDirectDebitStatusCode.STORNO ||
|
|
217
207
|
statusAction === "storno"
|
|
218
208
|
? "storno"
|
|
219
|
-
: "failure"
|
|
209
|
+
: "failure",
|
|
210
|
+
statusCode: statusLabel,
|
|
220
211
|
});
|
|
221
212
|
}
|
|
222
213
|
else {
|
|
@@ -252,4 +243,4 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
|
|
|
252
243
|
exports.config = {
|
|
253
244
|
event: directDebitExchange_1.PAY_DIRECT_DEBIT_EXCHANGE_EVENT,
|
|
254
245
|
};
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0LWRlYml0LWV4Y2hhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2RpcmVjdC1kZWJpdC1leGNoYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2R0EsZ0RBa1RDO0FBN1pELHFEQUlrQztBQUNsQyxxREFBMkQ7QUFPM0QseUZBQWdFO0FBQ2hFLDRFQUFzRTtBQUN0RSxrREFJK0I7QUFDL0IsaUVBQTBEO0FBRTFELCtEQUF3RTtBQUN4RSxzRUFnQnFDO0FBRXJDLE1BQU0sWUFBWSxHQUFHLENBQ25CLFNBQTBCLEVBQzFCLE1BQWMsRUFDd0MsRUFBRTtJQUN4RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxNQUFNLGVBQWUsR0FBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQWUsRUFBRSxPQUFPO1FBQ3JFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQTtJQUUxQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsdUVBQXVFLENBQ3hFLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBMEIsQ0FBQTtJQUUxRCxPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFDLENBQUE7QUFDMUQsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0seUJBQXlCLEdBQUcsS0FBSyxFQUNyQyxTQUEwQixFQUMxQixPQUE0QixFQUM1QixTQUFpQixFQUNPLEVBQUU7SUFDMUIsTUFBTSxX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
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0LWRlYml0LWV4Y2hhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2RpcmVjdC1kZWJpdC1leGNoYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFvRkEsZ0RBcVRDO0FBdllELHFEQUlrQztBQUNsQyxxREFBMkQ7QUFNM0QseUZBQWdFO0FBQ2hFLHdEQUFrRDtBQUNsRCw0RUFBc0U7QUFDdEUsa0RBRytCO0FBRS9CLCtEQUF3RTtBQUN4RSxzRUFnQnFDO0FBRXJDOzs7O0dBSUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHLEtBQUssRUFDckMsU0FBMEIsRUFDMUIsT0FBNEIsRUFDNUIsU0FBaUIsRUFDTyxFQUFFO0lBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUEsdUNBQWlCLEVBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXhELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUEsbURBQTZCLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFFMUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQ2hCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLHFDQUFxQyxDQUFDO1FBQ3JELE9BQU8sRUFBRSxFQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUM7S0FDekIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxTQUFTLEdBQUksT0FBZSxFQUFFLGtCQUFr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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-failed.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/payment-failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAapE,wBAA8B,uBAAuB,CAAC,EACpD,KAAK,EAAE,EAAC,IAAI,EAAC,EACb,SAAS,GACV,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"payment-failed.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/payment-failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAapE,wBAA8B,uBAAuB,CAAC,EACpD,KAAK,EAAE,EAAC,IAAI,EAAC,EACb,SAAS,GACV,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,iBAmFnD;AAED,eAAO,MAAM,MAAM,EAAE,gBAEpB,CAAA"}
|
|
@@ -55,7 +55,8 @@ async function payPaymentFailedHandler({ event: { data }, container, }) {
|
|
|
55
55
|
orderId: order.id,
|
|
56
56
|
paymentId: capturedPayment.id,
|
|
57
57
|
paymentCollectionId,
|
|
58
|
-
|
|
58
|
+
kind: "chargeback",
|
|
59
|
+
statusCode: data.statusCode,
|
|
59
60
|
});
|
|
60
61
|
return;
|
|
61
62
|
}
|
|
@@ -71,4 +72,4 @@ async function payPaymentFailedHandler({ event: { data }, container, }) {
|
|
|
71
72
|
exports.config = {
|
|
72
73
|
event: ["pay_payment.failed"],
|
|
73
74
|
};
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1mYWlsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGF5bWVudC1mYWlsZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBYUEsMENBc0ZDO0FBakdELHFEQUtrQztBQUVsQyx5RkFBZ0U7QUFDaEUsNEVBQXNFO0FBQ3RFLCtEQUFnRTtBQUVqRCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsRUFDcEQsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQ2IsU0FBUyxHQUN5QztJQUNsRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM1QyxlQUFPLENBQUMsT0FBTyxDQUNoQixDQUFBO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBRTFDLElBQUksQ0FBQztRQUNILE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDZCxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLHVCQUF1QjtnQkFDdkIsMENBQTBDO2dCQUMxQyx3Q0FBd0M7Z0JBQ3hDLGlEQUFpRDtnQkFDakQsMERBQTBEO2FBQzNEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTthQUNwQjtTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLHFDQUFxQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQy9DLENBQUE7UUFDSCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLDhFQUE4RTtRQUM5RSxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDL0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNMLEVBQUUsQ0FBQyxNQUFNLEtBQUssK0JBQXVCLENBQUMsU0FBUztZQUMvQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUMvRCxDQUFBO1FBRUQsSUFBSSxrQkFBa0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLDRCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLDZCQUE2QixDQUMxRSxDQUFBO1lBQ0QsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUEsOEJBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFFckQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FDVCwyQ0FBMkMsS0FBSyxDQUFDLEVBQUUsMkJBQTJCLENBQy9FLENBQUE7WUFDRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQ3ZCLGlCQUFpQixDQUFDLHFCQUErQixDQUFBO1FBQ25ELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxXQUFXO1lBQzVELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPO1lBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFYixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssNEJBQWdCLENBQUMsVUFBVSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3ZFLG9FQUFvRTtZQUNwRSxNQUFNLElBQUEsK0NBQXNCLEVBQUMsU0FBUyxFQUFFO2dCQUN0QyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRTtnQkFDN0IsbUJBQW1CO2dCQUNuQixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsRUFBRTtZQUN2RSxNQUFNLEVBQUUsK0JBQXVCLENBQUMsTUFBTTtTQUN2QyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDZixNQUFNLENBQUMsQ0FBQTtJQUNULENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxDQUFDLG9CQUFvQixDQUFDO0NBQzlCLENBQUEifQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Logger, MedusaContainer } from "@medusajs/types";
|
|
2
|
+
import { PayClient } from "../providers/pay/core/pay-client";
|
|
3
|
+
import { ProviderOptions } from "../providers/pay/types";
|
|
4
|
+
/**
|
|
5
|
+
* Builds a Pay. API client from the options of the payment provider with id
|
|
6
|
+
* `pay` in medusa-config. Returns null when that provider is not configured.
|
|
7
|
+
*/
|
|
8
|
+
export declare const getPayClient: (container: MedusaContainer, logger: Logger) => {
|
|
9
|
+
client: PayClient;
|
|
10
|
+
options: ProviderOptions;
|
|
11
|
+
} | null;
|
|
12
|
+
//# sourceMappingURL=getPayClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPayClient.d.ts","sourceRoot":"","sources":["../../../../src/utils/getPayClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAC,SAAS,EAAC,MAAM,kCAAkC,CAAA;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAA;AAEtD;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,WAAW,eAAe,EAC1B,QAAQ,MAAM,KACb;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAC,GAAG,IAgBlD,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPayClient = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const pay_client_1 = require("../providers/pay/core/pay-client");
|
|
6
|
+
/**
|
|
7
|
+
* Builds a Pay. API client from the options of the payment provider with id
|
|
8
|
+
* `pay` in medusa-config. Returns null when that provider is not configured.
|
|
9
|
+
*/
|
|
10
|
+
const getPayClient = (container, logger) => {
|
|
11
|
+
const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
12
|
+
const payModuleConfig = configModule.modules?.payment?.options?.providers?.find((p) => p.id === "pay");
|
|
13
|
+
if (!payModuleConfig?.options) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const options = payModuleConfig.options;
|
|
17
|
+
return { client: new pay_client_1.PayClient(options, logger), options };
|
|
18
|
+
};
|
|
19
|
+
exports.getPayClient = getPayClient;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0UGF5Q2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL2dldFBheUNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBbUU7QUFFbkUsaUVBQTBEO0FBRzFEOzs7R0FHRztBQUNJLE1BQU0sWUFBWSxHQUFHLENBQzFCLFNBQTBCLEVBQzFCLE1BQWMsRUFDd0MsRUFBRTtJQUN4RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxNQUFNLGVBQWUsR0FDbkIsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUN2QixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFBO0lBRWxELElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQTBCLENBQUE7SUFFMUQsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBQyxDQUFBO0FBQzFELENBQUMsQ0FBQTtBQW5CWSxRQUFBLFlBQVksZ0JBbUJ4QiJ9
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export * from "./createPayOrder";
|
|
2
2
|
export * from "./reverseCapturedPayment";
|
|
3
|
+
export * from "./paymentReversal";
|
|
4
|
+
export * from "./getPayClient";
|
|
5
|
+
export { PayClient } from "../providers/pay/core/pay-client";
|
|
6
|
+
export { PayPaymentStatus } from "../providers/pay/core/constants";
|
|
3
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,kCAAkC,CAAA;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAA"}
|
|
@@ -14,6 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.PayPaymentStatus = exports.PayClient = void 0;
|
|
17
18
|
__exportStar(require("./createPayOrder"), exports);
|
|
18
19
|
__exportStar(require("./reverseCapturedPayment"), exports);
|
|
19
|
-
|
|
20
|
+
__exportStar(require("./paymentReversal"), exports);
|
|
21
|
+
__exportStar(require("./getPayClient"), exports);
|
|
22
|
+
var pay_client_1 = require("../providers/pay/core/pay-client");
|
|
23
|
+
Object.defineProperty(exports, "PayClient", { enumerable: true, get: function () { return pay_client_1.PayClient; } });
|
|
24
|
+
var constants_1 = require("../providers/pay/core/constants");
|
|
25
|
+
Object.defineProperty(exports, "PayPaymentStatus", { enumerable: true, get: function () { return constants_1.PayPaymentStatus; } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBZ0M7QUFDaEMsMkRBQXdDO0FBQ3hDLG9EQUFpQztBQUNqQyxpREFBOEI7QUFDOUIsK0RBQTBEO0FBQWxELHVHQUFBLFNBQVMsT0FBQTtBQUNqQiw2REFBZ0U7QUFBeEQsNkdBQUEsZ0JBQWdCLE9BQUEifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MedusaContainer } from "@medusajs/types";
|
|
2
|
+
import { PaymentReversalKind } from "./reverseCapturedPayment";
|
|
3
|
+
export type PaymentReversal = {
|
|
4
|
+
/** Whether a Pay. chargeback / storno reversed a captured payment */
|
|
5
|
+
reversed: boolean;
|
|
6
|
+
kind: PaymentReversalKind | null;
|
|
7
|
+
statusCode: number | null;
|
|
8
|
+
/** When the (latest) reversal was recorded */
|
|
9
|
+
at: string | null;
|
|
10
|
+
/** Total amount that went back to the customer */
|
|
11
|
+
amount: number;
|
|
12
|
+
currency_code: string | null;
|
|
13
|
+
/** What the customer still owes on the order */
|
|
14
|
+
outstanding: number;
|
|
15
|
+
/** Whether a not_paid payment collection exists to collect it with */
|
|
16
|
+
payable: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Finds the reversal reverseCapturedPayment recorded on an order, recognised
|
|
20
|
+
* by the note on the refund. Used by the "payment reversed" order banner,
|
|
21
|
+
* since Medusa's own payment status can only say "refunded" for it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getPaymentReversal(container: MedusaContainer, orderId: string): Promise<PaymentReversal | null>;
|
|
24
|
+
//# sourceMappingURL=paymentReversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymentReversal.d.ts","sourceRoot":"","sources":["../../../../src/utils/paymentReversal.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAEL,mBAAmB,EACpB,MAAM,0BAA0B,CAAA;AAEjC,MAAM,MAAM,eAAe,GAAG;IAC5B,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,8CAA8C;IAC9C,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;IACnB,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAYD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkFjC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPaymentReversal = getPaymentReversal;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const reverseCapturedPayment_1 = require("./reverseCapturedPayment");
|
|
6
|
+
const toNumber = (value) => {
|
|
7
|
+
if (value === null || value === undefined || value === "") {
|
|
8
|
+
return 0;
|
|
9
|
+
}
|
|
10
|
+
const numeric = Number(value);
|
|
11
|
+
return Number.isFinite(numeric) ? numeric : 0;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Finds the reversal reverseCapturedPayment recorded on an order, recognised
|
|
15
|
+
* by the note on the refund. Used by the "payment reversed" order banner,
|
|
16
|
+
* since Medusa's own payment status can only say "refunded" for it.
|
|
17
|
+
*/
|
|
18
|
+
async function getPaymentReversal(container, orderId) {
|
|
19
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
20
|
+
const { data: [order], } = await query.graph({
|
|
21
|
+
entity: "order",
|
|
22
|
+
fields: [
|
|
23
|
+
"id",
|
|
24
|
+
"currency_code",
|
|
25
|
+
"summary",
|
|
26
|
+
"payment_collections.id",
|
|
27
|
+
"payment_collections.status",
|
|
28
|
+
"payment_collections.payments.id",
|
|
29
|
+
"payment_collections.payments.refunds.id",
|
|
30
|
+
"payment_collections.payments.refunds.amount",
|
|
31
|
+
"payment_collections.payments.refunds.note",
|
|
32
|
+
"payment_collections.payments.refunds.created_at",
|
|
33
|
+
],
|
|
34
|
+
filters: { id: orderId },
|
|
35
|
+
});
|
|
36
|
+
if (!order) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const collections = (order.payment_collections ?? []);
|
|
40
|
+
const reversals = collections
|
|
41
|
+
.flatMap((collection) => collection?.payments ?? [])
|
|
42
|
+
.flatMap((payment) => payment?.refunds ?? [])
|
|
43
|
+
.map((refund) => ({
|
|
44
|
+
refund,
|
|
45
|
+
parsed: (0, reverseCapturedPayment_1.parsePayReversalNote)(refund?.note),
|
|
46
|
+
}))
|
|
47
|
+
.filter((entry) => entry.parsed !== null)
|
|
48
|
+
.sort((a, b) => new Date(b.refund.created_at ?? 0).getTime() -
|
|
49
|
+
new Date(a.refund.created_at ?? 0).getTime());
|
|
50
|
+
const summary = (order.summary ?? {});
|
|
51
|
+
const outstanding = toNumber(summary.pending_difference);
|
|
52
|
+
const payable = collections.some((collection) => collection?.status === "not_paid");
|
|
53
|
+
if (!reversals.length) {
|
|
54
|
+
return {
|
|
55
|
+
reversed: false,
|
|
56
|
+
kind: null,
|
|
57
|
+
statusCode: null,
|
|
58
|
+
at: null,
|
|
59
|
+
amount: 0,
|
|
60
|
+
currency_code: order.currency_code ?? null,
|
|
61
|
+
outstanding,
|
|
62
|
+
payable,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const latest = reversals[0];
|
|
66
|
+
const amount = reversals.reduce((total, entry) => utils_1.MathBN.add(total, entry.refund.amount ?? 0), utils_1.MathBN.convert(0));
|
|
67
|
+
return {
|
|
68
|
+
reversed: true,
|
|
69
|
+
kind: latest.parsed.kind,
|
|
70
|
+
statusCode: latest.parsed.statusCode,
|
|
71
|
+
at: latest.refund.created_at
|
|
72
|
+
? new Date(latest.refund.created_at).toISOString()
|
|
73
|
+
: null,
|
|
74
|
+
amount: toNumber(amount.toString()),
|
|
75
|
+
currency_code: order.currency_code ?? null,
|
|
76
|
+
outstanding,
|
|
77
|
+
payable,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudFJldmVyc2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3BheW1lbnRSZXZlcnNhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNDQSxnREFxRkM7QUEzSEQscURBQTJFO0FBRTNFLHFFQUdpQztBQWtCakMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQVUsRUFBRTtJQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDMUQsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTdCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDL0MsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsU0FBMEIsRUFDMUIsT0FBZTtJQUVmLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLGVBQWU7WUFDZixTQUFTO1lBQ1Qsd0JBQXdCO1lBQ3hCLDRCQUE0QjtZQUM1QixpQ0FBaUM7WUFDakMseUNBQXlDO1lBQ3pDLDZDQUE2QztZQUM3QywyQ0FBMkM7WUFDM0MsaURBQWlEO1NBQ2xEO1FBQ0QsT0FBTyxFQUFFLEVBQUMsRUFBRSxFQUFFLE9BQU8sRUFBQztLQUN2QixDQUFDLENBQUE7SUFFRixJQUFJ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
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { MedusaContainer } from "@medusajs/types";
|
|
2
|
+
export type PaymentReversalKind = "chargeback" | "storno" | "failure";
|
|
2
3
|
export type ReverseCapturedPaymentInput = {
|
|
3
4
|
orderId: string;
|
|
4
5
|
paymentId: string;
|
|
5
6
|
paymentCollectionId: string;
|
|
6
|
-
/**
|
|
7
|
-
|
|
7
|
+
/** What reversed the payment, becomes the refund note */
|
|
8
|
+
kind: PaymentReversalKind;
|
|
9
|
+
/** The Pay. status code that reported it, when known */
|
|
10
|
+
statusCode?: number | string;
|
|
8
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* The refund note that marks a reversal, e.g. "Pay. chargeback (status -71)"
|
|
14
|
+
* or "Pay. direct debit storno (status 127)". Medusa 2.11 refunds carry no
|
|
15
|
+
* metadata, so the note is what the admin banner recognises a reversal by.
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatPayReversalNote(kind: PaymentReversalKind, statusCode?: number | string): string;
|
|
18
|
+
export declare function parsePayReversalNote(note: unknown): {
|
|
19
|
+
kind: PaymentReversalKind;
|
|
20
|
+
statusCode: number | null;
|
|
21
|
+
} | null;
|
|
9
22
|
/**
|
|
10
23
|
* A chargeback or direct debit storno reverses a payment Medusa already
|
|
11
24
|
* captured. Reflect that on the order so it shows as unpaid and can be paid
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverseCapturedPayment.d.ts","sourceRoot":"","sources":["../../../../src/utils/reverseCapturedPayment.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,
|
|
1
|
+
{"version":3,"file":"reverseCapturedPayment.d.ts","sourceRoot":"","sources":["../../../../src/utils/reverseCapturedPayment.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAA;AAErE,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,yDAAyD;IACzD,IAAI,EAAE,mBAAmB,CAAA;IACzB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B,CAAA;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,mBAAmB,EACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAC3B,MAAM,CAQR;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,GACZ;IAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAC,GAAG,IAAI,CAe/D;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,IAAI,CAAC,CAiFf;AAED,eAAe,sBAAsB,CAAA"}
|
|
@@ -1,8 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatPayReversalNote = formatPayReversalNote;
|
|
4
|
+
exports.parsePayReversalNote = parsePayReversalNote;
|
|
3
5
|
exports.reverseCapturedPayment = reverseCapturedPayment;
|
|
4
6
|
const core_flows_1 = require("@medusajs/core-flows");
|
|
5
7
|
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const REVERSAL_NOTE_PATTERN = /^Pay\. (chargeback|direct debit (?:storno|failure)) \(status (-?\d+|unknown)\)$/;
|
|
9
|
+
/**
|
|
10
|
+
* The refund note that marks a reversal, e.g. "Pay. chargeback (status -71)"
|
|
11
|
+
* or "Pay. direct debit storno (status 127)". Medusa 2.11 refunds carry no
|
|
12
|
+
* metadata, so the note is what the admin banner recognises a reversal by.
|
|
13
|
+
*/
|
|
14
|
+
function formatPayReversalNote(kind, statusCode) {
|
|
15
|
+
const what = kind === "chargeback" ? "chargeback" : `direct debit ${kind}`;
|
|
16
|
+
const status = statusCode === undefined || statusCode === null || statusCode === ""
|
|
17
|
+
? "unknown"
|
|
18
|
+
: String(statusCode);
|
|
19
|
+
return `Pay. ${what} (status ${status})`;
|
|
20
|
+
}
|
|
21
|
+
function parsePayReversalNote(note) {
|
|
22
|
+
if (typeof note !== "string") {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const match = note.trim().match(REVERSAL_NOTE_PATTERN);
|
|
26
|
+
if (!match) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const kind = match[1].replace("direct debit ", "");
|
|
30
|
+
const statusCode = match[2] === "unknown" ? null : Number(match[2]);
|
|
31
|
+
return { kind, statusCode };
|
|
32
|
+
}
|
|
6
33
|
const sumAmounts = (items) => (items ?? []).reduce((total, item) => utils_1.MathBN.add(total, item.amount), utils_1.MathBN.convert(0));
|
|
7
34
|
/**
|
|
8
35
|
* A chargeback or direct debit storno reverses a payment Medusa already
|
|
@@ -31,14 +58,15 @@ async function reverseCapturedPayment(container, input) {
|
|
|
31
58
|
relations: ["captures", "refunds"],
|
|
32
59
|
});
|
|
33
60
|
const outstanding = utils_1.MathBN.sub(sumAmounts(payment.captures), sumAmounts(payment.refunds));
|
|
61
|
+
const note = formatPayReversalNote(input.kind, input.statusCode);
|
|
34
62
|
if (utils_1.MathBN.gt(outstanding, 0)) {
|
|
35
63
|
const amount = new utils_1.BigNumber(outstanding).numeric;
|
|
36
64
|
payment = await paymentModuleService.refundPayment({
|
|
37
65
|
payment_id: payment.id,
|
|
38
66
|
amount,
|
|
39
|
-
note
|
|
67
|
+
note,
|
|
40
68
|
});
|
|
41
|
-
logger.info(`Pay. - Recorded reversal of ${payment.currency_code} ${amount} on payment ${payment.id} for order ${input.orderId}: ${
|
|
69
|
+
logger.info(`Pay. - Recorded reversal of ${payment.currency_code} ${amount} on payment ${payment.id} for order ${input.orderId}: ${note}`);
|
|
42
70
|
}
|
|
43
71
|
else {
|
|
44
72
|
logger.info(`Pay. - Payment ${payment.id} for order ${input.orderId} is already fully reversed`);
|
|
@@ -69,4 +97,4 @@ async function reverseCapturedPayment(container, input) {
|
|
|
69
97
|
logger.info(`Pay. - Order ${input.orderId} is payable again through payment collection ${collections.map((collection) => collection.id).join(", ") || "(none)"}`);
|
|
70
98
|
}
|
|
71
99
|
exports.default = reverseCapturedPayment;
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZUNhcHR1cmVkUGF5bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9yZXZlcnNlQ2FwdHVyZWRQYXltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0NBLHNEQVdDO0FBRUQsb0RBaUJDO0FBMkJELHdEQW9GQztBQWpMRCxxREFBaUY7QUFDakYscURBTWtDO0FBcUJsQyxNQUFNLHFCQUFxQixHQUN6QixpRkFBaUYsQ0FBQTtBQUVuRjs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLElBQXlCLEVBQ3pCLFVBQTRCO0lBRTVCLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFBO0lBQzFFLE1BQU0sTUFBTSxHQUNWLFVBQVUsS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssRUFBRTtRQUNsRSxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFeEIsT0FBTyxRQUFRLElBQUksWUFBWSxNQUFNLEdBQUcsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLElBQWE7SUFFYixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUV0RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQXdCLENB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
|
package/README.md
CHANGED
|
@@ -274,6 +274,14 @@ resolved from the mandate code. The webhook route processes exchanges asynchrono
|
|
|
274
274
|
the server a moment before checking the order. The payment link opens the regular Pay. hosted checkout, so the
|
|
275
275
|
outstanding amount can be paid with any test payment method.
|
|
276
276
|
|
|
277
|
+
#### Reversed payments in the admin
|
|
278
|
+
|
|
279
|
+
When a chargeback or storno reverses a captured payment, the plugin refunds the payment in Medusa (without contacting
|
|
280
|
+
Pay.), books the amount as outstanding again and opens a new payment collection, so the order offers "Copy payment
|
|
281
|
+
link" and "Mark as paid". Medusa's own payment status can only call that "Refunded", so the plugin adds a
|
|
282
|
+
"Payment reversed, action required" banner on top of the order page that names the cause (chargeback, storno, failed
|
|
283
|
+
collection), the amount that went back to the customer and what is still outstanding.
|
|
284
|
+
|
|
277
285
|
#### Simulator widget in the admin
|
|
278
286
|
|
|
279
287
|
The same exchanges can be triggered from the order detail page. Switch on **SEPA testing** in Settings > Pay (off by
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webbers/pay-payments-medusa",
|
|
3
3
|
"displayName": "Medusa v2 Pay. Plugin",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.54",
|
|
5
5
|
"description": "The Pay.nl payment provider plugin for Medusa v2",
|
|
6
6
|
"author": "Webbers B.V. <development@webbers.com>",
|
|
7
7
|
"license": "MIT",
|