@easypayment/medusa-payment-paypal 0.9.12 → 0.9.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +14 -14
- package/.medusa/server/src/admin/index.mjs +14 -14
- package/.medusa/server/src/api/store/paypal-complete/route.d.ts.map +1 -1
- package/.medusa/server/src/api/store/paypal-complete/route.js +22 -8
- package/.medusa/server/src/api/store/paypal-complete/route.js.map +1 -1
- package/package.json +19 -13
- package/src/api/store/paypal-complete/route.ts +22 -9
|
@@ -224,9 +224,6 @@ function AdditionalSettingsTab() {
|
|
|
224
224
|
)
|
|
225
225
|
] }) });
|
|
226
226
|
}
|
|
227
|
-
function PayPalApplePayPage() {
|
|
228
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
229
|
-
}
|
|
230
227
|
const DEFAULT_FORM = {
|
|
231
228
|
enabled: true,
|
|
232
229
|
title: "Credit or Debit Card",
|
|
@@ -311,9 +308,6 @@ function AdvancedCardPaymentsTab() {
|
|
|
311
308
|
)
|
|
312
309
|
] }) });
|
|
313
310
|
}
|
|
314
|
-
function PayPalGooglePayPage() {
|
|
315
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
316
|
-
}
|
|
317
311
|
const config = adminSdk.defineRouteConfig({
|
|
318
312
|
label: "PayPal Connection"
|
|
319
313
|
});
|
|
@@ -898,6 +892,12 @@ function PayPalConnectionPage() {
|
|
|
898
892
|
` })
|
|
899
893
|
] });
|
|
900
894
|
}
|
|
895
|
+
function PayPalApplePayPage() {
|
|
896
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
897
|
+
}
|
|
898
|
+
function PayPalGooglePayPage() {
|
|
899
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
900
|
+
}
|
|
901
901
|
function PayPalPayLaterMessagingPage() {
|
|
902
902
|
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
903
903
|
}
|
|
@@ -1119,22 +1119,22 @@ const routeModule = {
|
|
|
1119
1119
|
Component: AdditionalSettingsTab,
|
|
1120
1120
|
path: "/settings/paypal/additional-settings"
|
|
1121
1121
|
},
|
|
1122
|
-
{
|
|
1123
|
-
Component: PayPalApplePayPage,
|
|
1124
|
-
path: "/settings/paypal/apple-pay"
|
|
1125
|
-
},
|
|
1126
1122
|
{
|
|
1127
1123
|
Component: AdvancedCardPaymentsTab,
|
|
1128
1124
|
path: "/settings/paypal/advanced-card-payments"
|
|
1129
1125
|
},
|
|
1130
|
-
{
|
|
1131
|
-
Component: PayPalGooglePayPage,
|
|
1132
|
-
path: "/settings/paypal/google-pay"
|
|
1133
|
-
},
|
|
1134
1126
|
{
|
|
1135
1127
|
Component: PayPalConnectionPage,
|
|
1136
1128
|
path: "/settings/paypal/connection"
|
|
1137
1129
|
},
|
|
1130
|
+
{
|
|
1131
|
+
Component: PayPalApplePayPage,
|
|
1132
|
+
path: "/settings/paypal/apple-pay"
|
|
1133
|
+
},
|
|
1134
|
+
{
|
|
1135
|
+
Component: PayPalGooglePayPage,
|
|
1136
|
+
path: "/settings/paypal/google-pay"
|
|
1137
|
+
},
|
|
1138
1138
|
{
|
|
1139
1139
|
Component: PayPalPayLaterMessagingPage,
|
|
1140
1140
|
path: "/settings/paypal/pay-later-messaging"
|
|
@@ -223,9 +223,6 @@ function AdditionalSettingsTab() {
|
|
|
223
223
|
)
|
|
224
224
|
] }) });
|
|
225
225
|
}
|
|
226
|
-
function PayPalApplePayPage() {
|
|
227
|
-
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
228
|
-
}
|
|
229
226
|
const DEFAULT_FORM = {
|
|
230
227
|
enabled: true,
|
|
231
228
|
title: "Credit or Debit Card",
|
|
@@ -310,9 +307,6 @@ function AdvancedCardPaymentsTab() {
|
|
|
310
307
|
)
|
|
311
308
|
] }) });
|
|
312
309
|
}
|
|
313
|
-
function PayPalGooglePayPage() {
|
|
314
|
-
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
315
|
-
}
|
|
316
310
|
const config = defineRouteConfig({
|
|
317
311
|
label: "PayPal Connection"
|
|
318
312
|
});
|
|
@@ -897,6 +891,12 @@ function PayPalConnectionPage() {
|
|
|
897
891
|
` })
|
|
898
892
|
] });
|
|
899
893
|
}
|
|
894
|
+
function PayPalApplePayPage() {
|
|
895
|
+
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
896
|
+
}
|
|
897
|
+
function PayPalGooglePayPage() {
|
|
898
|
+
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
899
|
+
}
|
|
900
900
|
function PayPalPayLaterMessagingPage() {
|
|
901
901
|
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
902
902
|
}
|
|
@@ -1118,22 +1118,22 @@ const routeModule = {
|
|
|
1118
1118
|
Component: AdditionalSettingsTab,
|
|
1119
1119
|
path: "/settings/paypal/additional-settings"
|
|
1120
1120
|
},
|
|
1121
|
-
{
|
|
1122
|
-
Component: PayPalApplePayPage,
|
|
1123
|
-
path: "/settings/paypal/apple-pay"
|
|
1124
|
-
},
|
|
1125
1121
|
{
|
|
1126
1122
|
Component: AdvancedCardPaymentsTab,
|
|
1127
1123
|
path: "/settings/paypal/advanced-card-payments"
|
|
1128
1124
|
},
|
|
1129
|
-
{
|
|
1130
|
-
Component: PayPalGooglePayPage,
|
|
1131
|
-
path: "/settings/paypal/google-pay"
|
|
1132
|
-
},
|
|
1133
1125
|
{
|
|
1134
1126
|
Component: PayPalConnectionPage,
|
|
1135
1127
|
path: "/settings/paypal/connection"
|
|
1136
1128
|
},
|
|
1129
|
+
{
|
|
1130
|
+
Component: PayPalApplePayPage,
|
|
1131
|
+
path: "/settings/paypal/apple-pay"
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
Component: PayPalGooglePayPage,
|
|
1135
|
+
path: "/settings/paypal/google-pay"
|
|
1136
|
+
},
|
|
1137
1137
|
{
|
|
1138
1138
|
Component: PayPalPayLaterMessagingPage,
|
|
1139
1139
|
path: "/settings/paypal/pay-later-messaging"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/store/paypal-complete/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/store/paypal-complete/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAM7E,wBAAsB,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,2BAyGjE"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = POST;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const core_flows_1 = require("@medusajs/core-flows");
|
|
5
6
|
async function POST(req, res) {
|
|
6
7
|
const { cart_id } = req.body;
|
|
7
8
|
if (!cart_id || typeof cart_id !== "string") {
|
|
@@ -16,6 +17,7 @@ async function POST(req, res) {
|
|
|
16
17
|
entity: "cart",
|
|
17
18
|
fields: [
|
|
18
19
|
"id",
|
|
20
|
+
"completed_at",
|
|
19
21
|
"payment_collection.payment_sessions.id",
|
|
20
22
|
"payment_collection.payment_sessions.data",
|
|
21
23
|
"payment_collection.payment_sessions.status",
|
|
@@ -26,7 +28,11 @@ async function POST(req, res) {
|
|
|
26
28
|
],
|
|
27
29
|
filters: { id: cart_id },
|
|
28
30
|
});
|
|
29
|
-
const
|
|
31
|
+
const cart = carts?.[0];
|
|
32
|
+
if (cart?.completed_at) {
|
|
33
|
+
return res.json({ success: true, cart_id, already_completed: true });
|
|
34
|
+
}
|
|
35
|
+
const sessions = cart?.payment_collection?.payment_sessions || [];
|
|
30
36
|
const session = sessions
|
|
31
37
|
.filter((s) => String(s.provider_id || "").includes("paypal"))
|
|
32
38
|
.sort((a, b) => new Date(b.created_at || 0).getTime() - new Date(a.created_at || 0).getTime())[0];
|
|
@@ -58,18 +64,26 @@ async function POST(req, res) {
|
|
|
58
64
|
});
|
|
59
65
|
}
|
|
60
66
|
const currentStatus = String(session.status || "");
|
|
61
|
-
if (currentStatus
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
if (currentStatus !== "authorized") {
|
|
68
|
+
try {
|
|
69
|
+
await paymentModule.authorizePaymentSession(session.id, {});
|
|
70
|
+
console.info("[paypal-complete] authorizePaymentSession succeeded for session", session.id);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
console.warn("[paypal-complete] authorizePaymentSession non-fatal:", e?.message);
|
|
74
|
+
}
|
|
64
75
|
}
|
|
65
76
|
try {
|
|
66
|
-
await
|
|
67
|
-
|
|
77
|
+
const { result } = await (0, core_flows_1.completeCartWorkflow)(req.scope).run({
|
|
78
|
+
input: { id: cart_id },
|
|
79
|
+
});
|
|
80
|
+
console.info("[paypal-complete] cart completed, order:", result?.id);
|
|
81
|
+
return res.json({ success: true, cart_id, order_id: result?.id });
|
|
68
82
|
}
|
|
69
83
|
catch (e) {
|
|
70
|
-
console.warn("[paypal-complete]
|
|
84
|
+
console.warn("[paypal-complete] completeCartWorkflow failed:", e?.message);
|
|
85
|
+
return res.json({ success: true, session_id: session.id });
|
|
71
86
|
}
|
|
72
|
-
return res.json({ success: true, session_id: session.id });
|
|
73
87
|
}
|
|
74
88
|
catch (e) {
|
|
75
89
|
console.error("[paypal-complete] error:", e?.message || e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/store/paypal-complete/route.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/store/paypal-complete/route.ts"],"names":[],"mappings":";;AAMA,oBAyGC;AA7GD,qDAAmD;AACnD,qDAA2D;AAGpD,KAAK,UAAU,IAAI,CAAC,GAAkB,EAAE,GAAmB;IAChE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAA2B,CAAA;IAEnD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;YACxC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE;gBACN,IAAI;gBACJ,cAAc;gBACd,wCAAwC;gBACxC,0CAA0C;gBAC1C,4CAA4C;gBAC5C,iDAAiD;gBACjD,gDAAgD;gBAChD,4CAA4C;gBAC5C,mDAAmD;aACpD;YACD,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;SACzB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,EAAE,kBAAkB,EAAE,gBAAgB,IAAI,EAAE,CAAA;QACjE,MAAM,OAAO,GAAG,QAAQ;aACrB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aAClE,IAAI,CACH,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CACjB,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAChF,CAAC,CAAC,CAAC,CAAA;QAEN,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAO,CAAC,OAAO,CAA0B,CAAA;QAEjF,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAC3D,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EACpB,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAA;QAED,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAwB,CAAA;QAEjE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAsB,mBAAmB,CAAC,CAAA;QAC1E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,MAAM,YAAY,GAChB,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ;YAC5D,CAAC,CAAC,CAAE,QAA2C,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3D,CAAC,CAAC,EAAE,CAAA;QACR,MAAM,kBAAkB,GAAG,CAAC,YAAY,CAAC,mBAAmB,IAAI,EAAE,CAAwB,CAAA;QAC1F,MAAM,aAAa,GACjB,OAAO,kBAAkB,CAAC,aAAa,KAAK,QAAQ;YAClD,CAAC,CAAC,kBAAkB,CAAC,aAAa;YAClC,CAAC,CAAC,SAAS,CAAA;QAEf,MAAM,YAAY,GAAG,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAA;QAEpF,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,MAAO,aAAqB,CAAC,oBAAoB,CAAC;gBAChD,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE;oBACJ,GAAG,QAAQ;oBACX,CAAC,YAAY,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACzC;gBACD,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM;gBAC7C,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,OAAO,CAAC,aAAa;aACnE,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QAClD,IAAI,aAAa,KAAK,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAO,aAAqB,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBACpE,OAAO,CAAC,IAAI,CAAC,iEAAiE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;YAC7F,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YAClF,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,iCAAoB,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;gBAC3D,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;aACvB,CAAC,CAAA;YACF,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;YACpE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QACnE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YAC1E,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAA;QAC1D,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easypayment/medusa-payment-paypal",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"description": "PayPal integration for Medusa v2",
|
|
5
5
|
"author": "EasyPayment Plugins",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,27 +39,33 @@
|
|
|
39
39
|
"prepublishOnly": "npm run build"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@medusajs/admin-sdk": "2.
|
|
43
|
-
"@medusajs/cli": "2.
|
|
44
|
-
"@medusajs/framework": "2.
|
|
45
|
-
"@medusajs/
|
|
46
|
-
"@medusajs/
|
|
42
|
+
"@medusajs/admin-sdk": "^2.15.3",
|
|
43
|
+
"@medusajs/cli": "^2.15.3",
|
|
44
|
+
"@medusajs/framework": "^2.15.3",
|
|
45
|
+
"@medusajs/icons": "^2.15.3",
|
|
46
|
+
"@medusajs/medusa": "^2.15.3",
|
|
47
|
+
"@medusajs/test-utils": "^2.15.3",
|
|
47
48
|
"@medusajs/ui": "^4.0.0",
|
|
48
|
-
"@medusajs/icons": "2.12.5",
|
|
49
49
|
"@swc/core": "^1.5.7",
|
|
50
50
|
"typescript": "^5.6.2"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"@medusajs/admin-sdk": "^2.12.0",
|
|
54
54
|
"@medusajs/framework": "^2.12.0",
|
|
55
|
+
"@medusajs/icons": "^2.12.0",
|
|
55
56
|
"@medusajs/medusa": "^2.12.0",
|
|
56
|
-
"@medusajs/ui": "^4.0.0"
|
|
57
|
-
"@medusajs/icons": "^2.12.0"
|
|
57
|
+
"@medusajs/ui": "^4.0.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependenciesMeta": {
|
|
60
|
-
"@medusajs/admin-sdk": {
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
"@medusajs/admin-sdk": {
|
|
61
|
+
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"@medusajs/ui": {
|
|
64
|
+
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"@medusajs/icons": {
|
|
67
|
+
"optional": true
|
|
68
|
+
}
|
|
63
69
|
},
|
|
64
70
|
"publishConfig": {
|
|
65
71
|
"access": "public"
|
|
@@ -82,4 +88,4 @@
|
|
|
82
88
|
"medusa-paypal-integration",
|
|
83
89
|
"medusa-paypal"
|
|
84
90
|
]
|
|
85
|
-
}
|
|
91
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
|
2
2
|
import type { IPaymentModuleService } from "@medusajs/framework/types"
|
|
3
3
|
import { Modules } from "@medusajs/framework/utils"
|
|
4
|
+
import { completeCartWorkflow } from "@medusajs/core-flows"
|
|
4
5
|
import type PayPalModuleService from "../../../modules/paypal/service"
|
|
5
6
|
|
|
6
7
|
export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
@@ -20,6 +21,7 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
|
20
21
|
entity: "cart",
|
|
21
22
|
fields: [
|
|
22
23
|
"id",
|
|
24
|
+
"completed_at",
|
|
23
25
|
"payment_collection.payment_sessions.id",
|
|
24
26
|
"payment_collection.payment_sessions.data",
|
|
25
27
|
"payment_collection.payment_sessions.status",
|
|
@@ -31,7 +33,12 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
|
31
33
|
filters: { id: cart_id },
|
|
32
34
|
})
|
|
33
35
|
|
|
34
|
-
const
|
|
36
|
+
const cart = carts?.[0]
|
|
37
|
+
if (cart?.completed_at) {
|
|
38
|
+
return res.json({ success: true, cart_id, already_completed: true })
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const sessions = cart?.payment_collection?.payment_sessions || []
|
|
35
42
|
const session = sessions
|
|
36
43
|
.filter((s: any) => String(s.provider_id || "").includes("paypal"))
|
|
37
44
|
.sort(
|
|
@@ -79,19 +86,25 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
|
79
86
|
}
|
|
80
87
|
|
|
81
88
|
const currentStatus = String(session.status || "")
|
|
82
|
-
if (currentStatus
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
if (currentStatus !== "authorized") {
|
|
90
|
+
try {
|
|
91
|
+
await (paymentModule as any).authorizePaymentSession(session.id, {})
|
|
92
|
+
console.info("[paypal-complete] authorizePaymentSession succeeded for session", session.id)
|
|
93
|
+
} catch (e: any) {
|
|
94
|
+
console.warn("[paypal-complete] authorizePaymentSession non-fatal:", e?.message)
|
|
95
|
+
}
|
|
85
96
|
}
|
|
86
97
|
|
|
87
98
|
try {
|
|
88
|
-
await (
|
|
89
|
-
|
|
99
|
+
const { result } = await completeCartWorkflow(req.scope).run({
|
|
100
|
+
input: { id: cart_id },
|
|
101
|
+
})
|
|
102
|
+
console.info("[paypal-complete] cart completed, order:", result?.id)
|
|
103
|
+
return res.json({ success: true, cart_id, order_id: result?.id })
|
|
90
104
|
} catch (e: any) {
|
|
91
|
-
console.warn("[paypal-complete]
|
|
105
|
+
console.warn("[paypal-complete] completeCartWorkflow failed:", e?.message)
|
|
106
|
+
return res.json({ success: true, session_id: session.id })
|
|
92
107
|
}
|
|
93
|
-
|
|
94
|
-
return res.json({ success: true, session_id: session.id })
|
|
95
108
|
} catch (e: any) {
|
|
96
109
|
console.error("[paypal-complete] error:", e?.message || e)
|
|
97
110
|
return res.status(500).json({ message: "Internal error" })
|