@webbers/pay-payments-medusa 1.0.0
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 +90 -0
- package/.medusa/server/src/admin/index.js +229 -0
- package/.medusa/server/src/admin/index.mjs +228 -0
- package/.medusa/server/src/api/admin/pay/clear-cache/route.js +23 -0
- package/.medusa/server/src/api/admin/pay/payment-methods/route.js +36 -0
- package/.medusa/server/src/api/store/pay/payment-methods/route.js +36 -0
- package/.medusa/server/src/providers/pay/core/constants.js +52 -0
- package/.medusa/server/src/providers/pay/core/http-client.js +107 -0
- package/.medusa/server/src/providers/pay/core/pay-base.js +561 -0
- package/.medusa/server/src/providers/pay/core/pay-client.js +118 -0
- package/.medusa/server/src/providers/pay/index.js +22 -0
- package/.medusa/server/src/providers/pay/services/index.js +17 -0
- package/.medusa/server/src/providers/pay/services/pay-bancontact.js +21 -0
- package/.medusa/server/src/providers/pay/services/pay-creditcard.js +21 -0
- package/.medusa/server/src/providers/pay/services/pay-ideal.js +21 -0
- package/.medusa/server/src/providers/pay/services/pay-provider.js +23 -0
- package/.medusa/server/src/providers/pay/services/pay-softpos.js +20 -0
- package/.medusa/server/src/providers/pay/types/common.js +3 -0
- package/.medusa/server/src/providers/pay/types/index.js +28 -0
- package/.medusa/server/src/providers/pay/types/order.js +3 -0
- package/.medusa/server/src/providers/pay/types/transaction.js +3 -0
- package/.medusa/server/src/providers/pay/utils/getExpirationForPaymentMethod.js +16 -0
- package/.medusa/server/src/providers/pay/utils/getSortedPaymentMethods.js +20 -0
- package/.medusa/server/src/providers/pay/utils/paymentMethodMap.js +133 -0
- package/.medusa/server/src/workflows/hooks/order-created.js +96 -0
- package/README.md +221 -0
- package/package.json +90 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webbers/pay-payments-medusa",
|
|
3
|
+
"displayName": "Medusa v2 Pay. Plugin",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "The Pay.nl payment provider plugin for Medusa v2",
|
|
6
|
+
"author": "Webbers B.V. <development@webbers.com>",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"files": [
|
|
9
|
+
".medusa/server"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
"./package.json": "./package.json",
|
|
13
|
+
"./workflows": "./.medusa/server/src/workflows/index.js",
|
|
14
|
+
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
15
|
+
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
16
|
+
"./providers/*": "./.medusa/server/src/providers/*/index.js",
|
|
17
|
+
"./admin": {
|
|
18
|
+
"import": "./.medusa/server/src/admin/index.mjs",
|
|
19
|
+
"require": "./.medusa/server/src/admin/index.js",
|
|
20
|
+
"default": "./.medusa/server/src/admin/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./*": "./.medusa/server/src/*.js"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"medusa",
|
|
26
|
+
"plugin",
|
|
27
|
+
"medusa-plugin-other",
|
|
28
|
+
"medusa-plugin",
|
|
29
|
+
"medusa-v2"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "medusa plugin:build",
|
|
33
|
+
"dev": "medusa plugin:develop",
|
|
34
|
+
"prepublishOnly": "medusa plugin:build"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@medusajs/admin-sdk": "^2.7.1",
|
|
38
|
+
"@medusajs/cli": "^2.7.1",
|
|
39
|
+
"@medusajs/framework": "^2.7.1",
|
|
40
|
+
"@medusajs/icons": "^2.7.1",
|
|
41
|
+
"@medusajs/medusa": "^2.7.1",
|
|
42
|
+
"@medusajs/test-utils": "^2.7.1",
|
|
43
|
+
"@medusajs/types": "^2.7.1",
|
|
44
|
+
"@medusajs/ui": "^4.0.9",
|
|
45
|
+
"@mikro-orm/cli": "6.4.3",
|
|
46
|
+
"@mikro-orm/core": "6.4.3",
|
|
47
|
+
"@mikro-orm/knex": "6.4.3",
|
|
48
|
+
"@mikro-orm/migrations": "6.4.3",
|
|
49
|
+
"@mikro-orm/postgresql": "6.4.3",
|
|
50
|
+
"@swc/core": "1.5.7",
|
|
51
|
+
"@types/node": "^20.17.45",
|
|
52
|
+
"@types/react": "^18.3.21",
|
|
53
|
+
"@types/react-dom": "^18.3.7",
|
|
54
|
+
"awilix": "^8.0.1",
|
|
55
|
+
"pg": "^8.15.6",
|
|
56
|
+
"prettier": "^3.5.3",
|
|
57
|
+
"prop-types": "^15.8.1",
|
|
58
|
+
"react": "^18.2.0",
|
|
59
|
+
"react-dom": "^18.2.0",
|
|
60
|
+
"ts-node": "^10.9.2",
|
|
61
|
+
"typescript": "^5.6.2",
|
|
62
|
+
"vite": "^5.4.19",
|
|
63
|
+
"yalc": "^1.0.0-pre.53"
|
|
64
|
+
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"@medusajs/admin-sdk": "^2.7.1",
|
|
67
|
+
"@medusajs/cli": "^2.7.1",
|
|
68
|
+
"@medusajs/framework": "^2.7.1",
|
|
69
|
+
"@medusajs/icons": "^2.7.1",
|
|
70
|
+
"@medusajs/medusa": "^2.7.1",
|
|
71
|
+
"@medusajs/test-utils": "^2.7.1",
|
|
72
|
+
"@medusajs/ui": "4.0.3",
|
|
73
|
+
"@mikro-orm/cli": "6.4.3",
|
|
74
|
+
"@mikro-orm/core": "6.4.3",
|
|
75
|
+
"@mikro-orm/knex": "6.4.3",
|
|
76
|
+
"@mikro-orm/migrations": "6.4.3",
|
|
77
|
+
"@mikro-orm/postgresql": "6.4.3",
|
|
78
|
+
"awilix": "^8.0.1",
|
|
79
|
+
"pg": "^8.13.0"
|
|
80
|
+
},
|
|
81
|
+
"engines": {
|
|
82
|
+
"node": ">=20"
|
|
83
|
+
},
|
|
84
|
+
"packageManager": "pnpm@10.9.0",
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"@medusajs/core-flows": "^2.7.1",
|
|
87
|
+
"@medusajs/js-sdk": "^2.7.1",
|
|
88
|
+
"@tanstack/react-query": "^5.75.7"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
3
|
+
const ui = require("@medusajs/ui");
|
|
4
|
+
const adminSdk = require("@medusajs/admin-sdk");
|
|
5
|
+
const Medusa = require("@medusajs/js-sdk");
|
|
6
|
+
const reactQuery = require("@tanstack/react-query");
|
|
7
|
+
const react = require("react");
|
|
8
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
9
|
+
const Medusa__default = /* @__PURE__ */ _interopDefault(Medusa);
|
|
10
|
+
const PayLogo = ({}) => {
|
|
11
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "64", height: "40", viewBox: "0 0 64 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
12
|
+
/* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_596_748)", children: [
|
|
13
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
14
|
+
"path",
|
|
15
|
+
{
|
|
16
|
+
d: "M53.7703 39.9995H0V9.27536C0 4.16076 4.14642 0 9.24281 0H53.7703C58.8673 0 63.0137 4.16076 63.0137 9.27536V30.7241C63.0137 35.8387 58.8673 39.9995 53.7703 39.9995Z",
|
|
17
|
+
fill: "#585FFF"
|
|
18
|
+
}
|
|
19
|
+
),
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21
|
+
"path",
|
|
22
|
+
{
|
|
23
|
+
d: "M33.1375 14.5266C32.1051 13.9107 30.9287 13.5802 29.7277 13.5687C28.5267 13.5571 27.3442 13.865 26.3002 14.4609C25.2563 15.0568 24.3883 15.9195 23.7845 16.9613C23.1806 18.003 22.8625 19.1867 22.8625 20.3919C22.8625 21.597 23.1806 22.7807 23.7845 23.8225C24.3883 24.8643 25.2563 25.727 26.3002 26.3229C27.3442 26.9188 28.5267 27.2266 29.7277 27.2151C30.9287 27.2035 32.1051 26.873 33.1375 26.2571V27.1329H36.4663V13.6353H33.1375V14.5266ZM29.6619 23.8756C28.9754 23.8748 28.3046 23.6699 27.7342 23.2866C27.1638 22.9033 26.7194 22.359 26.4572 21.7224C26.1951 21.0857 26.1269 20.3854 26.2613 19.7099C26.3956 19.0343 26.7266 18.414 27.2123 17.9271C27.698 17.4403 28.3166 17.1089 28.9899 16.9748C29.6632 16.8407 30.3611 16.9099 30.9952 17.1737C31.6294 17.4375 32.1714 17.884 32.5527 18.4568C32.934 19.0296 33.1375 19.703 33.1375 20.3919C33.1365 21.3162 32.7698 22.2023 32.1181 22.8555C31.4665 23.5087 30.583 23.8756 29.6619 23.8756Z",
|
|
24
|
+
fill: "white"
|
|
25
|
+
}
|
|
26
|
+
),
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
28
|
+
"path",
|
|
29
|
+
{
|
|
30
|
+
d: "M15.7432 9.2207H9.16772V27.1326H12.4966V21.7074H15.8116C16.6315 21.7066 17.4433 21.5432 18.2002 21.2269C18.9571 20.9105 19.6443 20.4473 20.2224 19.8638C20.8005 19.2803 21.2581 18.588 21.569 17.8266C21.8799 17.0652 22.0379 16.2498 22.0339 15.427C22.0146 11.9798 19.1768 9.2207 15.7432 9.2207ZM15.763 18.3687H12.4966V12.5577H15.8116C16.1962 12.5583 16.5768 12.6356 16.9313 12.7852C17.2858 12.9349 17.6071 13.1538 17.8764 13.4294C18.1457 13.7049 18.3577 14.0314 18.5 14.39C18.6423 14.7485 18.712 15.1319 18.7051 15.5178C18.6748 17.1077 17.3474 18.366 15.763 18.366V18.3687Z",
|
|
31
|
+
fill: "white"
|
|
32
|
+
}
|
|
33
|
+
),
|
|
34
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
+
"path",
|
|
36
|
+
{
|
|
37
|
+
d: "M54.2222 27.2475C55.344 27.2475 56.2535 26.3349 56.2535 25.2092C56.2535 24.0835 55.344 23.1709 54.2222 23.1709C53.1003 23.1709 52.1909 24.0835 52.1909 25.2092C52.1909 26.3349 53.1003 27.2475 54.2222 27.2475Z",
|
|
38
|
+
fill: "white"
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
42
|
+
"path",
|
|
43
|
+
{
|
|
44
|
+
d: "M49.4673 13.5879L45.5603 23.7285L41.5358 13.6355H37.8948L43.2758 27.1331H44.2473L44.2297 27.1796C43.9764 27.8286 43.5347 28.3862 42.9618 28.7803C42.3889 29.1743 41.7113 29.3866 41.0167 29.3895H40.6239V32.7298H41.0719C42.4376 32.7239 43.7701 32.3065 44.8966 31.5317C46.0231 30.7568 46.8917 29.6603 47.3897 28.3842L53.0902 13.5879H49.4673Z",
|
|
45
|
+
fill: "white"
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: "clip0_596_748", children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "63.0137", height: "40", fill: "white" }) }) })
|
|
50
|
+
] });
|
|
51
|
+
};
|
|
52
|
+
const sdk = new Medusa__default.default({
|
|
53
|
+
baseUrl: "/",
|
|
54
|
+
debug: false,
|
|
55
|
+
auth: {
|
|
56
|
+
type: "session"
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const displayName = "Medusa v2 Pay. Plugin";
|
|
60
|
+
const version = "1.0.0";
|
|
61
|
+
function getSortedPaymentMethods(data) {
|
|
62
|
+
const { checkoutOptions, checkoutSequence } = data;
|
|
63
|
+
const { primary } = checkoutSequence.default;
|
|
64
|
+
const optionsMap = /* @__PURE__ */ new Map();
|
|
65
|
+
checkoutOptions.forEach((option) => optionsMap.set(option.tag, option));
|
|
66
|
+
const sortedPaymentMethods = [];
|
|
67
|
+
for (const tag of primary) {
|
|
68
|
+
const option = optionsMap.get(tag);
|
|
69
|
+
if (option && option.paymentMethods) {
|
|
70
|
+
sortedPaymentMethods.push(...option.paymentMethods);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return sortedPaymentMethods;
|
|
74
|
+
}
|
|
75
|
+
const formatter = new Intl.NumberFormat([], {
|
|
76
|
+
minimumFractionDigits: 0,
|
|
77
|
+
maximumFractionDigits: 2
|
|
78
|
+
});
|
|
79
|
+
const columnHelper = ui.createDataTableColumnHelper();
|
|
80
|
+
const columns = [
|
|
81
|
+
columnHelper.accessor("id", {
|
|
82
|
+
header: "ID",
|
|
83
|
+
enableSorting: true
|
|
84
|
+
}),
|
|
85
|
+
columnHelper.accessor("name", {
|
|
86
|
+
header: "Name",
|
|
87
|
+
enableSorting: true
|
|
88
|
+
}),
|
|
89
|
+
columnHelper.accessor("minAmount", {
|
|
90
|
+
header: "Min. amount",
|
|
91
|
+
enableSorting: false
|
|
92
|
+
}),
|
|
93
|
+
columnHelper.accessor("maxAmount", {
|
|
94
|
+
header: "Max. amount",
|
|
95
|
+
enableSorting: false
|
|
96
|
+
})
|
|
97
|
+
];
|
|
98
|
+
const PaySettingPage = () => {
|
|
99
|
+
const { data: config2, refetch: refetchConfig } = reactQuery.useQuery({
|
|
100
|
+
queryFn: () => sdk.client.fetch("/admin/pay/payment-methods"),
|
|
101
|
+
queryKey: ["pay-payment-methods"]
|
|
102
|
+
});
|
|
103
|
+
const paymentMethods = react.useMemo(() => {
|
|
104
|
+
if (!config2 || !config2.checkoutOptions) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
const result = getSortedPaymentMethods(config2);
|
|
108
|
+
return result.map((pm) => ({
|
|
109
|
+
id: pm.id.toString(),
|
|
110
|
+
name: pm.name,
|
|
111
|
+
minAmount: pm.minAmount ? formatter.format(pm.minAmount) : "-",
|
|
112
|
+
maxAmount: pm.maxAmount ? formatter.format(pm.maxAmount) : "-"
|
|
113
|
+
}));
|
|
114
|
+
}, [config2]);
|
|
115
|
+
const { refetch, isLoading } = reactQuery.useQuery({
|
|
116
|
+
queryFn: () => sdk.client.fetch("/admin/pay/clear-cache"),
|
|
117
|
+
queryKey: ["pay-clear-cache"],
|
|
118
|
+
refetchOnWindowFocus: false,
|
|
119
|
+
enabled: false
|
|
120
|
+
});
|
|
121
|
+
const getErrorMessage = (error) => {
|
|
122
|
+
var _a;
|
|
123
|
+
if ((_a = error == null ? void 0 : error.response) == null ? void 0 : _a.statusText) {
|
|
124
|
+
return `${error.response.statusText}: ${error.response.data}`;
|
|
125
|
+
}
|
|
126
|
+
return "Something went wrong, Please try again.";
|
|
127
|
+
};
|
|
128
|
+
const handleClearCache = async () => {
|
|
129
|
+
refetch().then(({ status }) => {
|
|
130
|
+
if (status !== "success") {
|
|
131
|
+
throw new Error("Something went wrong");
|
|
132
|
+
}
|
|
133
|
+
refetchConfig();
|
|
134
|
+
ui.toast.success("Success", { description: "Successfully cleared cache" });
|
|
135
|
+
}).catch((error) => {
|
|
136
|
+
ui.toast.error("Error", { description: getErrorMessage(error) });
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
const table = ui.useDataTable({
|
|
140
|
+
columns,
|
|
141
|
+
data: paymentMethods,
|
|
142
|
+
getRowId: (paymentMethod) => paymentMethod.id,
|
|
143
|
+
rowCount: paymentMethods.length,
|
|
144
|
+
isLoading: false
|
|
145
|
+
});
|
|
146
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col gap-y-3", children: [
|
|
147
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: /* @__PURE__ */ jsxRuntime.jsx(PayLogo, {}) }),
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle mt-2", size: "small", children: "Manage your Pay. settings" })
|
|
151
|
+
] }) }),
|
|
152
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center px-6 py-4", children: [
|
|
153
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", weight: "plus", children: "Version installed" }),
|
|
154
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "small", leading: "compact", children: [
|
|
155
|
+
displayName,
|
|
156
|
+
" - ",
|
|
157
|
+
version
|
|
158
|
+
] })
|
|
159
|
+
] }),
|
|
160
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center px-6 py-4", children: [
|
|
161
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", weight: "plus", children: "Clear cache, checkout options & payment methods are cached for max. 1 day" }),
|
|
162
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
163
|
+
ui.Button,
|
|
164
|
+
{
|
|
165
|
+
isLoading,
|
|
166
|
+
onClick: handleClearCache,
|
|
167
|
+
variant: "primary",
|
|
168
|
+
children: "Clear Cache"
|
|
169
|
+
}
|
|
170
|
+
) })
|
|
171
|
+
] })
|
|
172
|
+
] }),
|
|
173
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "divide-y p-0 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DataTable, { instance: table, children: [
|
|
174
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.DataTable.Toolbar, { className: "flex flex-col items-start justify-between gap-2 md:flex-row md:items-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
175
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: "Available payment methods" }),
|
|
176
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { className: "text-ui-fg-subtle mt-2", size: "small", children: [
|
|
177
|
+
"Activate payment methods in your",
|
|
178
|
+
" ",
|
|
179
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
180
|
+
"a",
|
|
181
|
+
{
|
|
182
|
+
href: "https://my.pay.nl/",
|
|
183
|
+
target: "_blank",
|
|
184
|
+
className: "underline",
|
|
185
|
+
children: "Pay. dashboard"
|
|
186
|
+
}
|
|
187
|
+
),
|
|
188
|
+
"."
|
|
189
|
+
] })
|
|
190
|
+
] }) }),
|
|
191
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.DataTable.Table, {})
|
|
192
|
+
] }) })
|
|
193
|
+
] });
|
|
194
|
+
};
|
|
195
|
+
const config = adminSdk.defineRouteConfig({
|
|
196
|
+
label: "Pay.",
|
|
197
|
+
icon: PayLogo
|
|
198
|
+
});
|
|
199
|
+
const widgetModule = { widgets: [] };
|
|
200
|
+
const routeModule = {
|
|
201
|
+
routes: [
|
|
202
|
+
{
|
|
203
|
+
Component: PaySettingPage,
|
|
204
|
+
path: "/settings/pay"
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
};
|
|
208
|
+
const menuItemModule = {
|
|
209
|
+
menuItems: [
|
|
210
|
+
{
|
|
211
|
+
label: config.label,
|
|
212
|
+
icon: config.icon,
|
|
213
|
+
path: "/settings/pay",
|
|
214
|
+
nested: void 0
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
};
|
|
218
|
+
const formModule = { customFields: {} };
|
|
219
|
+
const displayModule = {
|
|
220
|
+
displays: {}
|
|
221
|
+
};
|
|
222
|
+
const plugin = {
|
|
223
|
+
widgetModule,
|
|
224
|
+
routeModule,
|
|
225
|
+
menuItemModule,
|
|
226
|
+
formModule,
|
|
227
|
+
displayModule
|
|
228
|
+
};
|
|
229
|
+
module.exports = plugin;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createDataTableColumnHelper, useDataTable, Container, Heading, Text, Button, DataTable, toast } from "@medusajs/ui";
|
|
3
|
+
import { defineRouteConfig } from "@medusajs/admin-sdk";
|
|
4
|
+
import Medusa from "@medusajs/js-sdk";
|
|
5
|
+
import { useQuery } from "@tanstack/react-query";
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
const PayLogo = ({}) => {
|
|
8
|
+
return /* @__PURE__ */ jsxs("svg", { width: "64", height: "40", viewBox: "0 0 64 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
9
|
+
/* @__PURE__ */ jsxs("g", { clipPath: "url(#clip0_596_748)", children: [
|
|
10
|
+
/* @__PURE__ */ jsx(
|
|
11
|
+
"path",
|
|
12
|
+
{
|
|
13
|
+
d: "M53.7703 39.9995H0V9.27536C0 4.16076 4.14642 0 9.24281 0H53.7703C58.8673 0 63.0137 4.16076 63.0137 9.27536V30.7241C63.0137 35.8387 58.8673 39.9995 53.7703 39.9995Z",
|
|
14
|
+
fill: "#585FFF"
|
|
15
|
+
}
|
|
16
|
+
),
|
|
17
|
+
/* @__PURE__ */ jsx(
|
|
18
|
+
"path",
|
|
19
|
+
{
|
|
20
|
+
d: "M33.1375 14.5266C32.1051 13.9107 30.9287 13.5802 29.7277 13.5687C28.5267 13.5571 27.3442 13.865 26.3002 14.4609C25.2563 15.0568 24.3883 15.9195 23.7845 16.9613C23.1806 18.003 22.8625 19.1867 22.8625 20.3919C22.8625 21.597 23.1806 22.7807 23.7845 23.8225C24.3883 24.8643 25.2563 25.727 26.3002 26.3229C27.3442 26.9188 28.5267 27.2266 29.7277 27.2151C30.9287 27.2035 32.1051 26.873 33.1375 26.2571V27.1329H36.4663V13.6353H33.1375V14.5266ZM29.6619 23.8756C28.9754 23.8748 28.3046 23.6699 27.7342 23.2866C27.1638 22.9033 26.7194 22.359 26.4572 21.7224C26.1951 21.0857 26.1269 20.3854 26.2613 19.7099C26.3956 19.0343 26.7266 18.414 27.2123 17.9271C27.698 17.4403 28.3166 17.1089 28.9899 16.9748C29.6632 16.8407 30.3611 16.9099 30.9952 17.1737C31.6294 17.4375 32.1714 17.884 32.5527 18.4568C32.934 19.0296 33.1375 19.703 33.1375 20.3919C33.1365 21.3162 32.7698 22.2023 32.1181 22.8555C31.4665 23.5087 30.583 23.8756 29.6619 23.8756Z",
|
|
21
|
+
fill: "white"
|
|
22
|
+
}
|
|
23
|
+
),
|
|
24
|
+
/* @__PURE__ */ jsx(
|
|
25
|
+
"path",
|
|
26
|
+
{
|
|
27
|
+
d: "M15.7432 9.2207H9.16772V27.1326H12.4966V21.7074H15.8116C16.6315 21.7066 17.4433 21.5432 18.2002 21.2269C18.9571 20.9105 19.6443 20.4473 20.2224 19.8638C20.8005 19.2803 21.2581 18.588 21.569 17.8266C21.8799 17.0652 22.0379 16.2498 22.0339 15.427C22.0146 11.9798 19.1768 9.2207 15.7432 9.2207ZM15.763 18.3687H12.4966V12.5577H15.8116C16.1962 12.5583 16.5768 12.6356 16.9313 12.7852C17.2858 12.9349 17.6071 13.1538 17.8764 13.4294C18.1457 13.7049 18.3577 14.0314 18.5 14.39C18.6423 14.7485 18.712 15.1319 18.7051 15.5178C18.6748 17.1077 17.3474 18.366 15.763 18.366V18.3687Z",
|
|
28
|
+
fill: "white"
|
|
29
|
+
}
|
|
30
|
+
),
|
|
31
|
+
/* @__PURE__ */ jsx(
|
|
32
|
+
"path",
|
|
33
|
+
{
|
|
34
|
+
d: "M54.2222 27.2475C55.344 27.2475 56.2535 26.3349 56.2535 25.2092C56.2535 24.0835 55.344 23.1709 54.2222 23.1709C53.1003 23.1709 52.1909 24.0835 52.1909 25.2092C52.1909 26.3349 53.1003 27.2475 54.2222 27.2475Z",
|
|
35
|
+
fill: "white"
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
/* @__PURE__ */ jsx(
|
|
39
|
+
"path",
|
|
40
|
+
{
|
|
41
|
+
d: "M49.4673 13.5879L45.5603 23.7285L41.5358 13.6355H37.8948L43.2758 27.1331H44.2473L44.2297 27.1796C43.9764 27.8286 43.5347 28.3862 42.9618 28.7803C42.3889 29.1743 41.7113 29.3866 41.0167 29.3895H40.6239V32.7298H41.0719C42.4376 32.7239 43.7701 32.3065 44.8966 31.5317C46.0231 30.7568 46.8917 29.6603 47.3897 28.3842L53.0902 13.5879H49.4673Z",
|
|
42
|
+
fill: "white"
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
] }),
|
|
46
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "clip0_596_748", children: /* @__PURE__ */ jsx("rect", { width: "63.0137", height: "40", fill: "white" }) }) })
|
|
47
|
+
] });
|
|
48
|
+
};
|
|
49
|
+
const sdk = new Medusa({
|
|
50
|
+
baseUrl: "/",
|
|
51
|
+
debug: false,
|
|
52
|
+
auth: {
|
|
53
|
+
type: "session"
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const displayName = "Medusa v2 Pay. Plugin";
|
|
57
|
+
const version = "1.0.0";
|
|
58
|
+
function getSortedPaymentMethods(data) {
|
|
59
|
+
const { checkoutOptions, checkoutSequence } = data;
|
|
60
|
+
const { primary } = checkoutSequence.default;
|
|
61
|
+
const optionsMap = /* @__PURE__ */ new Map();
|
|
62
|
+
checkoutOptions.forEach((option) => optionsMap.set(option.tag, option));
|
|
63
|
+
const sortedPaymentMethods = [];
|
|
64
|
+
for (const tag of primary) {
|
|
65
|
+
const option = optionsMap.get(tag);
|
|
66
|
+
if (option && option.paymentMethods) {
|
|
67
|
+
sortedPaymentMethods.push(...option.paymentMethods);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return sortedPaymentMethods;
|
|
71
|
+
}
|
|
72
|
+
const formatter = new Intl.NumberFormat([], {
|
|
73
|
+
minimumFractionDigits: 0,
|
|
74
|
+
maximumFractionDigits: 2
|
|
75
|
+
});
|
|
76
|
+
const columnHelper = createDataTableColumnHelper();
|
|
77
|
+
const columns = [
|
|
78
|
+
columnHelper.accessor("id", {
|
|
79
|
+
header: "ID",
|
|
80
|
+
enableSorting: true
|
|
81
|
+
}),
|
|
82
|
+
columnHelper.accessor("name", {
|
|
83
|
+
header: "Name",
|
|
84
|
+
enableSorting: true
|
|
85
|
+
}),
|
|
86
|
+
columnHelper.accessor("minAmount", {
|
|
87
|
+
header: "Min. amount",
|
|
88
|
+
enableSorting: false
|
|
89
|
+
}),
|
|
90
|
+
columnHelper.accessor("maxAmount", {
|
|
91
|
+
header: "Max. amount",
|
|
92
|
+
enableSorting: false
|
|
93
|
+
})
|
|
94
|
+
];
|
|
95
|
+
const PaySettingPage = () => {
|
|
96
|
+
const { data: config2, refetch: refetchConfig } = useQuery({
|
|
97
|
+
queryFn: () => sdk.client.fetch("/admin/pay/payment-methods"),
|
|
98
|
+
queryKey: ["pay-payment-methods"]
|
|
99
|
+
});
|
|
100
|
+
const paymentMethods = useMemo(() => {
|
|
101
|
+
if (!config2 || !config2.checkoutOptions) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
const result = getSortedPaymentMethods(config2);
|
|
105
|
+
return result.map((pm) => ({
|
|
106
|
+
id: pm.id.toString(),
|
|
107
|
+
name: pm.name,
|
|
108
|
+
minAmount: pm.minAmount ? formatter.format(pm.minAmount) : "-",
|
|
109
|
+
maxAmount: pm.maxAmount ? formatter.format(pm.maxAmount) : "-"
|
|
110
|
+
}));
|
|
111
|
+
}, [config2]);
|
|
112
|
+
const { refetch, isLoading } = useQuery({
|
|
113
|
+
queryFn: () => sdk.client.fetch("/admin/pay/clear-cache"),
|
|
114
|
+
queryKey: ["pay-clear-cache"],
|
|
115
|
+
refetchOnWindowFocus: false,
|
|
116
|
+
enabled: false
|
|
117
|
+
});
|
|
118
|
+
const getErrorMessage = (error) => {
|
|
119
|
+
var _a;
|
|
120
|
+
if ((_a = error == null ? void 0 : error.response) == null ? void 0 : _a.statusText) {
|
|
121
|
+
return `${error.response.statusText}: ${error.response.data}`;
|
|
122
|
+
}
|
|
123
|
+
return "Something went wrong, Please try again.";
|
|
124
|
+
};
|
|
125
|
+
const handleClearCache = async () => {
|
|
126
|
+
refetch().then(({ status }) => {
|
|
127
|
+
if (status !== "success") {
|
|
128
|
+
throw new Error("Something went wrong");
|
|
129
|
+
}
|
|
130
|
+
refetchConfig();
|
|
131
|
+
toast.success("Success", { description: "Successfully cleared cache" });
|
|
132
|
+
}).catch((error) => {
|
|
133
|
+
toast.error("Error", { description: getErrorMessage(error) });
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
const table = useDataTable({
|
|
137
|
+
columns,
|
|
138
|
+
data: paymentMethods,
|
|
139
|
+
getRowId: (paymentMethod) => paymentMethod.id,
|
|
140
|
+
rowCount: paymentMethods.length,
|
|
141
|
+
isLoading: false
|
|
142
|
+
});
|
|
143
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col gap-y-3", children: [
|
|
144
|
+
/* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
|
|
145
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
146
|
+
/* @__PURE__ */ jsx(Heading, { children: /* @__PURE__ */ jsx(PayLogo, {}) }),
|
|
147
|
+
/* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle mt-2", size: "small", children: "Manage your Pay. settings" })
|
|
148
|
+
] }) }),
|
|
149
|
+
/* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center px-6 py-4", children: [
|
|
150
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: "Version installed" }),
|
|
151
|
+
/* @__PURE__ */ jsxs(Text, { size: "small", leading: "compact", children: [
|
|
152
|
+
displayName,
|
|
153
|
+
" - ",
|
|
154
|
+
version
|
|
155
|
+
] })
|
|
156
|
+
] }),
|
|
157
|
+
/* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 items-center px-6 py-4", children: [
|
|
158
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: "Clear cache, checkout options & payment methods are cached for max. 1 day" }),
|
|
159
|
+
/* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", children: /* @__PURE__ */ jsx(
|
|
160
|
+
Button,
|
|
161
|
+
{
|
|
162
|
+
isLoading,
|
|
163
|
+
onClick: handleClearCache,
|
|
164
|
+
variant: "primary",
|
|
165
|
+
children: "Clear Cache"
|
|
166
|
+
}
|
|
167
|
+
) })
|
|
168
|
+
] })
|
|
169
|
+
] }),
|
|
170
|
+
/* @__PURE__ */ jsx(Container, { className: "divide-y p-0 overflow-hidden", children: /* @__PURE__ */ jsxs(DataTable, { instance: table, children: [
|
|
171
|
+
/* @__PURE__ */ jsx(DataTable.Toolbar, { className: "flex flex-col items-start justify-between gap-2 md:flex-row md:items-center", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
172
|
+
/* @__PURE__ */ jsx(Heading, { children: "Available payment methods" }),
|
|
173
|
+
/* @__PURE__ */ jsxs(Text, { className: "text-ui-fg-subtle mt-2", size: "small", children: [
|
|
174
|
+
"Activate payment methods in your",
|
|
175
|
+
" ",
|
|
176
|
+
/* @__PURE__ */ jsx(
|
|
177
|
+
"a",
|
|
178
|
+
{
|
|
179
|
+
href: "https://my.pay.nl/",
|
|
180
|
+
target: "_blank",
|
|
181
|
+
className: "underline",
|
|
182
|
+
children: "Pay. dashboard"
|
|
183
|
+
}
|
|
184
|
+
),
|
|
185
|
+
"."
|
|
186
|
+
] })
|
|
187
|
+
] }) }),
|
|
188
|
+
/* @__PURE__ */ jsx(DataTable.Table, {})
|
|
189
|
+
] }) })
|
|
190
|
+
] });
|
|
191
|
+
};
|
|
192
|
+
const config = defineRouteConfig({
|
|
193
|
+
label: "Pay.",
|
|
194
|
+
icon: PayLogo
|
|
195
|
+
});
|
|
196
|
+
const widgetModule = { widgets: [] };
|
|
197
|
+
const routeModule = {
|
|
198
|
+
routes: [
|
|
199
|
+
{
|
|
200
|
+
Component: PaySettingPage,
|
|
201
|
+
path: "/settings/pay"
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
};
|
|
205
|
+
const menuItemModule = {
|
|
206
|
+
menuItems: [
|
|
207
|
+
{
|
|
208
|
+
label: config.label,
|
|
209
|
+
icon: config.icon,
|
|
210
|
+
path: "/settings/pay",
|
|
211
|
+
nested: void 0
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
};
|
|
215
|
+
const formModule = { customFields: {} };
|
|
216
|
+
const displayModule = {
|
|
217
|
+
displays: {}
|
|
218
|
+
};
|
|
219
|
+
const plugin = {
|
|
220
|
+
widgetModule,
|
|
221
|
+
routeModule,
|
|
222
|
+
menuItemModule,
|
|
223
|
+
formModule,
|
|
224
|
+
displayModule
|
|
225
|
+
};
|
|
226
|
+
export {
|
|
227
|
+
plugin as default
|
|
228
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const constants_1 = require("../../../../providers/pay/core/constants");
|
|
6
|
+
const GET = async (req, res) => {
|
|
7
|
+
const cacheModuleService = req.scope.resolve(utils_1.Modules.CACHE);
|
|
8
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
9
|
+
try {
|
|
10
|
+
const payProviderOptions = configModule.modules
|
|
11
|
+
.payment.options.providers.find((p) => p.id === "pay")
|
|
12
|
+
.options;
|
|
13
|
+
const slCode = payProviderOptions.slCode;
|
|
14
|
+
const key = `${constants_1.PAY_CACHE_KEY.CONFIG}:${slCode}`;
|
|
15
|
+
await cacheModuleService.invalidate(key);
|
|
16
|
+
return res.status(200).send("Successfully cleared cache");
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return res.status(500).send(err);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.GET = GET;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BheS9jbGVhci1jYWNoZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBNEU7QUFDNUUsd0VBQXNFO0FBRy9ELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLGtCQUFrQixHQUFJLFlBQVksQ0FBQyxPQUFRO2FBQzlDLE9BQWdCLENBQUMsT0FBUSxDQUFDLFNBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDO2FBQ2hFLE9BQTBCLENBQUE7UUFFN0IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFBO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLEdBQUcseUJBQWEsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUE7UUFFL0MsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBdkJZLFFBQUEsR0FBRyxPQXVCZiJ9
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const constants_1 = require("../../../../providers/pay/core/constants");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const pay_client_1 = require("../../../../providers/pay/core/pay-client");
|
|
7
|
+
const GET = async (req, res) => {
|
|
8
|
+
const cacheModuleService = req.scope.resolve(utils_1.Modules.CACHE);
|
|
9
|
+
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
10
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
11
|
+
const payProviderOptions = configModule.modules
|
|
12
|
+
.payment.options.providers.find((p) => p.id === "pay")
|
|
13
|
+
.options;
|
|
14
|
+
const payClient = new pay_client_1.PayClient(payProviderOptions, logger);
|
|
15
|
+
const cacheTtl = 86400; // Day in seconds
|
|
16
|
+
const slCode = payProviderOptions.slCode;
|
|
17
|
+
const key = `${constants_1.PAY_CACHE_KEY.CONFIG}:${slCode}`;
|
|
18
|
+
let checkoutOptions = await cacheModuleService.get(key);
|
|
19
|
+
if (!checkoutOptions) {
|
|
20
|
+
try {
|
|
21
|
+
const config = await payClient.getConfig();
|
|
22
|
+
checkoutOptions = {
|
|
23
|
+
checkoutOptions: config.checkoutOptions,
|
|
24
|
+
checkoutSequence: config.checkoutSequence,
|
|
25
|
+
checkoutTexts: config.checkoutTexts,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
logger.error("Error retrieving Pay checkout options", e.message);
|
|
30
|
+
}
|
|
31
|
+
await cacheModuleService.set(key, checkoutOptions, cacheTtl);
|
|
32
|
+
}
|
|
33
|
+
res.json(checkoutOptions);
|
|
34
|
+
};
|
|
35
|
+
exports.GET = GET;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BheS9wYXltZW50LW1ldGhvZHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQXNFO0FBRXRFLHFEQUE0RTtBQUU1RSwwRUFBbUU7QUFFNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3BDLGlDQUF5QixDQUFDLGFBQWEsQ0FDeEMsQ0FBQTtJQUVELE1BQU0sa0JBQWtCLEdBQUksWUFBWSxDQUFDLE9BQVE7U0FDOUMsT0FBZ0IsQ0FBQyxPQUFRLENBQUMsU0FBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUM7U0FDaEUsT0FBMEIsQ0FBQTtJQUU3QixNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFTLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFM0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFBLENBQUMsaUJBQWlCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQTtJQUN4QyxNQUFNLEdBQUcsR0FBRyxHQUFHLHlCQUFhLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFBO0lBRS9DLElBQUksZUFBZSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXZELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUUxQyxlQUFlLEdBQUc7Z0JBQ2hCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDdkMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtnQkFDekMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO2FBQ3BDLENBQUE7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2xFLENBQUM7UUFFRCxNQUFNLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBQzNCLENBQUMsQ0FBQTtBQXZDWSxRQUFBLEdBQUcsT0F1Q2YifQ==
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const constants_1 = require("../../../../providers/pay/core/constants");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const pay_client_1 = require("../../../../providers/pay/core/pay-client");
|
|
7
|
+
const GET = async (req, res) => {
|
|
8
|
+
const cacheModuleService = req.scope.resolve(utils_1.Modules.CACHE);
|
|
9
|
+
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
10
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
11
|
+
const payProviderOptions = configModule.modules
|
|
12
|
+
.payment.options.providers.find((p) => p.id === "pay")
|
|
13
|
+
.options;
|
|
14
|
+
const payClient = new pay_client_1.PayClient(payProviderOptions, logger);
|
|
15
|
+
const cacheTtl = 86400; // Day in seconds
|
|
16
|
+
const slCode = payProviderOptions.slCode;
|
|
17
|
+
const key = `${constants_1.PAY_CACHE_KEY.CONFIG}:${slCode}`;
|
|
18
|
+
let checkoutOptions = await cacheModuleService.get(key);
|
|
19
|
+
if (!checkoutOptions) {
|
|
20
|
+
try {
|
|
21
|
+
const config = await payClient.getConfig();
|
|
22
|
+
checkoutOptions = {
|
|
23
|
+
checkoutOptions: config.checkoutOptions,
|
|
24
|
+
checkoutSequence: config.checkoutSequence,
|
|
25
|
+
checkoutTexts: config.checkoutTexts,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
logger.error("Error retrieving Pay checkout options", e.message);
|
|
30
|
+
}
|
|
31
|
+
await cacheModuleService.set(key, checkoutOptions, cacheTtl);
|
|
32
|
+
}
|
|
33
|
+
res.json(checkoutOptions);
|
|
34
|
+
};
|
|
35
|
+
exports.GET = GET;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BheS9wYXltZW50LW1ldGhvZHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQXNFO0FBRXRFLHFEQUE0RTtBQUU1RSwwRUFBbUU7QUFFNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxNQUFNLGtCQUFrQixHQUFJLFlBQVksQ0FBQyxPQUFRO1NBQzlDLE9BQWdCLENBQUMsT0FBUSxDQUFDLFNBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDO1NBQ2hFLE9BQTBCLENBQUE7SUFFN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQSxDQUFDLGlCQUFpQjtJQUN4QyxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUE7SUFDeEMsTUFBTSxHQUFHLEdBQUcsR0FBRyx5QkFBYSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQTtJQUUvQyxJQUFJLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV2RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7WUFFMUMsZUFBZSxHQUFHO2dCQUNoQixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7Z0JBQ3ZDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7Z0JBQ3pDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTthQUNwQyxDQUFBO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNsRSxDQUFDO1FBRUQsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUMzQixDQUFDLENBQUE7QUFwQ1ksUUFBQSxHQUFHLE9Bb0NmIn0=
|