@easypayment/medusa-payment-paypal 0.9.29 → 0.9.30
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 +12 -10
- package/.medusa/server/src/admin/index.mjs +12 -10
- package/.medusa/server/src/api/admin/paypal/onboarding-link/route.d.ts.map +1 -1
- package/.medusa/server/src/api/admin/paypal/onboarding-link/route.js +24 -4
- package/.medusa/server/src/api/admin/paypal/onboarding-link/route.js.map +1 -1
- package/.medusa/server/src/api/store/paypal/capture-order/route.d.ts.map +1 -1
- package/.medusa/server/src/api/store/paypal/capture-order/route.js +4 -2
- package/.medusa/server/src/api/store/paypal/capture-order/route.js.map +1 -1
- package/.medusa/server/src/api/store/paypal/webhook/route.js +1 -1
- package/.medusa/server/src/api/store/paypal/webhook/route.js.map +1 -1
- package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.d.ts +6 -0
- package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.d.ts.map +1 -0
- package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.js +14 -0
- package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.js.map +1 -0
- package/.medusa/server/src/modules/paypal/payment-provider/card-service.d.ts +1 -1
- package/.medusa/server/src/modules/paypal/payment-provider/card-service.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/payment-provider/card-service.js +9 -35
- package/.medusa/server/src/modules/paypal/payment-provider/card-service.js.map +1 -1
- package/.medusa/server/src/modules/paypal/payment-provider/service.d.ts +2 -5
- package/.medusa/server/src/modules/paypal/payment-provider/service.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/payment-provider/service.js +14 -66
- package/.medusa/server/src/modules/paypal/payment-provider/service.js.map +1 -1
- package/.medusa/server/src/modules/paypal/service.d.ts +1 -1
- package/.medusa/server/src/modules/paypal/service.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/service.js +41 -22
- package/.medusa/server/src/modules/paypal/service.js.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/amounts.d.ts +1 -1
- package/.medusa/server/src/modules/paypal/utils/amounts.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/amounts.js +17 -6
- package/.medusa/server/src/modules/paypal/utils/amounts.js.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/credential-resolver.d.ts +42 -0
- package/.medusa/server/src/modules/paypal/utils/credential-resolver.d.ts.map +1 -0
- package/.medusa/server/src/modules/paypal/utils/credential-resolver.js +186 -0
- package/.medusa/server/src/modules/paypal/utils/credential-resolver.js.map +1 -0
- package/.medusa/server/src/modules/paypal/utils/payment-session.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/payment-session.js +7 -1
- package/.medusa/server/src/modules/paypal/utils/payment-session.js.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/paypal-fetch.d.ts +3 -11
- package/.medusa/server/src/modules/paypal/utils/paypal-fetch.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/paypal-fetch.js +119 -18
- package/.medusa/server/src/modules/paypal/utils/paypal-fetch.js.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/secret-crypto.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/utils/secret-crypto.js +6 -0
- package/.medusa/server/src/modules/paypal/utils/secret-crypto.js.map +1 -1
- package/.medusa/server/src/modules/paypal/webhook-processor.d.ts.map +1 -1
- package/.medusa/server/src/modules/paypal/webhook-processor.js +10 -9
- package/.medusa/server/src/modules/paypal/webhook-processor.js.map +1 -1
- package/package.json +15 -8
- package/src/admin/routes/settings/paypal/connection/page.tsx +6 -4
- package/src/api/admin/paypal/onboarding-link/route.ts +30 -5
- package/src/api/store/paypal/capture-order/route.ts +4 -2
- package/src/api/store/paypal/webhook/route.ts +1 -1
- package/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.ts +15 -0
- package/src/modules/paypal/payment-provider/card-service.ts +9 -40
- package/src/modules/paypal/payment-provider/service.ts +18 -68
- package/src/modules/paypal/service.ts +43 -23
- package/src/modules/paypal/utils/amounts.ts +17 -6
- package/src/modules/paypal/utils/credential-resolver.ts +257 -0
- package/src/modules/paypal/utils/payment-session.ts +11 -2
- package/src/modules/paypal/utils/paypal-fetch.ts +139 -17
- package/src/modules/paypal/utils/secret-crypto.ts +5 -0
- package/src/modules/paypal/webhook-processor.ts +15 -10
- package/.medusa/server/src/admin/index.d.ts +0 -2
- package/.medusa/server/src/admin/index.d.ts.map +0 -1
- package/.medusa/server/src/admin/index.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.d.ts +0 -8
- package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.js +0 -8
- package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.d.ts +0 -8
- package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.js +0 -8
- package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.js +0 -25
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.d.ts +0 -12
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.js +0 -22
- package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.d.ts +0 -7
- package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.js +0 -40
- package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.js +0 -76
- package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.js +0 -81
- package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.js +0 -9
- package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/connection/page.d.ts +0 -22
- package/.medusa/server/src/admin/routes/settings/paypal/connection/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/connection/page.js +0 -595
- package/.medusa/server/src/admin/routes/settings/paypal/connection/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.js +0 -9
- package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/page.d.ts +0 -4
- package/.medusa/server/src/admin/routes/settings/paypal/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/page.js +0 -14
- package/.medusa/server/src/admin/routes/settings/paypal/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.js +0 -9
- package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.js.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.d.ts +0 -2
- package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.d.ts.map +0 -1
- package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.js +0 -109
- package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.js.map +0 -1
|
@@ -141,7 +141,7 @@ async function findPayPalSession(container, cartId) {
|
|
|
141
141
|
}
|
|
142
142
|
const sessions = await paymentModule.listPaymentSessions({
|
|
143
143
|
payment_collection_id: collection.id,
|
|
144
|
-
});
|
|
144
|
+
}, { take: 50 });
|
|
145
145
|
const paypalSession = (sessions || [])
|
|
146
146
|
.filter((s) => (0, provider_ids_1.isPayPalProviderId)(s.provider_id))
|
|
147
147
|
.sort((a, b) => new Date(b.created_at || 0).getTime() -
|
|
@@ -212,18 +212,15 @@ async function processPayPalWebhookEvent(container, input) {
|
|
|
212
212
|
if (!cartId && (orderId || captureId)) {
|
|
213
213
|
try {
|
|
214
214
|
const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
|
|
215
|
-
// Fallback when the webhook resource carries no custom_id: locate the
|
|
216
|
-
// PayPal session whose stored data matches this order_id / capture_id.
|
|
217
|
-
// Paginate to exhaustion rather than scanning a single fixed page — on a
|
|
218
|
-
// busy store the matching session is frequently beyond the first page, so
|
|
219
|
-
// a hard cap would silently drop capture/refund status updates.
|
|
220
215
|
const PAGE_SIZE = 200;
|
|
221
|
-
const MAX_PAGES =
|
|
216
|
+
const MAX_PAGES = 5;
|
|
222
217
|
let matchedSession = null;
|
|
218
|
+
let totalScanned = 0;
|
|
223
219
|
for (let page = 0; page < MAX_PAGES && !matchedSession; page++) {
|
|
224
|
-
const sessions = await paymentModule.listPaymentSessions({ provider_id: [...provider_ids_1.PAYPAL_PROVIDER_IDS] }, { take: PAGE_SIZE, skip: page * PAGE_SIZE });
|
|
220
|
+
const sessions = await paymentModule.listPaymentSessions({ provider_id: [...provider_ids_1.PAYPAL_PROVIDER_IDS] }, { take: PAGE_SIZE, skip: page * PAGE_SIZE, order: { created_at: "DESC" } });
|
|
225
221
|
if (!sessions || sessions.length === 0)
|
|
226
222
|
break;
|
|
223
|
+
totalScanned += sessions.length;
|
|
227
224
|
matchedSession =
|
|
228
225
|
sessions.find((s) => {
|
|
229
226
|
const pp = (s.data || {}).paypal || {};
|
|
@@ -236,13 +233,17 @@ async function processPayPalWebhookEvent(container, input) {
|
|
|
236
233
|
if (sessions.length < PAGE_SIZE)
|
|
237
234
|
break;
|
|
238
235
|
}
|
|
236
|
+
if (!matchedSession && totalScanned >= MAX_PAGES * PAGE_SIZE) {
|
|
237
|
+
console.warn(`[PayPal] webhook: cartId fallback scan hit limit (${totalScanned} sessions). ` +
|
|
238
|
+
`Event ${input.eventType} may be lost. Ensure custom_id is set on PayPal orders.`, { orderId, captureId });
|
|
239
|
+
}
|
|
239
240
|
if (matchedSession?.payment_collection_id) {
|
|
240
241
|
const colls = await paymentModule.listPaymentCollections({ id: [matchedSession.payment_collection_id] }, { take: 1 });
|
|
241
242
|
cartId = String(colls?.[0]?.cart_id || "").trim() || null;
|
|
242
243
|
}
|
|
243
244
|
}
|
|
244
245
|
catch (e) {
|
|
245
|
-
console.warn(`[PayPal] webhook: cartId fallback lookup failed for ${input.eventType}:`, e
|
|
246
|
+
console.warn(`[PayPal] webhook: cartId fallback lookup failed for ${input.eventType}:`, e instanceof Error ? e.message : e);
|
|
246
247
|
}
|
|
247
248
|
}
|
|
248
249
|
let sessionUpdated = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-processor.js","sourceRoot":"","sources":["../../../../../src/modules/paypal/webhook-processor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webhook-processor.js","sourceRoot":"","sources":["../../../../../src/modules/paypal/webhook-processor.ts"],"names":[],"mappings":"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"}
|
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.30",
|
|
4
4
|
"description": "PayPal integration for Medusa v2",
|
|
5
5
|
"author": "EasyPayment Plugins",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,25 +44,32 @@
|
|
|
44
44
|
"@medusajs/admin-sdk": "2.12.5",
|
|
45
45
|
"@medusajs/cli": "2.12.5",
|
|
46
46
|
"@medusajs/framework": "2.12.5",
|
|
47
|
+
"@medusajs/icons": "2.12.5",
|
|
47
48
|
"@medusajs/medusa": "2.12.5",
|
|
48
49
|
"@medusajs/test-utils": "2.12.5",
|
|
49
50
|
"@medusajs/ui": "^4.0.0",
|
|
50
|
-
"@medusajs/icons": "2.12.5",
|
|
51
51
|
"@swc/core": "^1.5.7",
|
|
52
|
+
"ts-node": "^10.9.2",
|
|
52
53
|
"typescript": "^5.6.2",
|
|
53
54
|
"vitest": "^2.0.5"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
56
57
|
"@medusajs/admin-sdk": "^2.12.0",
|
|
57
58
|
"@medusajs/framework": "^2.12.0",
|
|
59
|
+
"@medusajs/icons": "^2.12.0",
|
|
58
60
|
"@medusajs/medusa": "^2.12.0",
|
|
59
|
-
"@medusajs/ui": "^4.0.0"
|
|
60
|
-
"@medusajs/icons": "^2.12.0"
|
|
61
|
+
"@medusajs/ui": "^4.0.0"
|
|
61
62
|
},
|
|
62
63
|
"peerDependenciesMeta": {
|
|
63
|
-
"@medusajs/admin-sdk": {
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
"@medusajs/admin-sdk": {
|
|
65
|
+
"optional": true
|
|
66
|
+
},
|
|
67
|
+
"@medusajs/ui": {
|
|
68
|
+
"optional": true
|
|
69
|
+
},
|
|
70
|
+
"@medusajs/icons": {
|
|
71
|
+
"optional": true
|
|
72
|
+
}
|
|
66
73
|
},
|
|
67
74
|
"publishConfig": {
|
|
68
75
|
"access": "public"
|
|
@@ -78,4 +85,4 @@
|
|
|
78
85
|
"medusa-v2",
|
|
79
86
|
"medusa-plugin-integration"
|
|
80
87
|
]
|
|
81
|
-
}
|
|
88
|
+
}
|
|
@@ -367,9 +367,11 @@ export default function PayPalConnectionPage() {
|
|
|
367
367
|
body: JSON.stringify({ products: ["PPCP"], environment: targetEnv }),
|
|
368
368
|
})
|
|
369
369
|
|
|
370
|
-
if (!res.ok) throw new Error(`Service returned ${res.status}`)
|
|
371
|
-
|
|
372
370
|
const data = await res.json()
|
|
371
|
+
|
|
372
|
+
if (!res.ok) {
|
|
373
|
+
throw new Error(data?.message || `Service returned ${res.status}`)
|
|
374
|
+
}
|
|
373
375
|
if (runId !== currentRunId.current) return
|
|
374
376
|
|
|
375
377
|
const href = data?.onboarding_url
|
|
@@ -383,9 +385,9 @@ export default function PayPalConnectionPage() {
|
|
|
383
385
|
|
|
384
386
|
writeCachedUrl(targetEnv, url)
|
|
385
387
|
activatePayPal(url, runId)
|
|
386
|
-
} catch {
|
|
388
|
+
} catch (err: any) {
|
|
387
389
|
if (runId !== currentRunId.current) return
|
|
388
|
-
showError("Unable to connect to service.")
|
|
390
|
+
showError(err?.message || "Unable to connect to service.")
|
|
389
391
|
}
|
|
390
392
|
},
|
|
391
393
|
[activatePayPal, showError]
|
|
@@ -3,6 +3,8 @@ import type {
|
|
|
3
3
|
MedusaRequest,
|
|
4
4
|
MedusaResponse,
|
|
5
5
|
} from "@medusajs/framework/http"
|
|
6
|
+
import type { IUserModuleService } from "@medusajs/framework/types"
|
|
7
|
+
import { Modules } from "@medusajs/framework/utils"
|
|
6
8
|
import type PayPalModuleService from "../../../../modules/paypal/service"
|
|
7
9
|
|
|
8
10
|
type Body = {
|
|
@@ -15,11 +17,34 @@ export async function POST(req: AuthenticatedMedusaRequest, res: MedusaResponse)
|
|
|
15
17
|
try {
|
|
16
18
|
const paypal = req.scope.resolve<PayPalModuleService>("paypal_onboarding")
|
|
17
19
|
const body = (req.body || {}) as Body
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
|
|
21
|
+
let authEmail: string | undefined
|
|
22
|
+
const actorId = req.auth_context?.actor_id
|
|
23
|
+
if (actorId) {
|
|
24
|
+
try {
|
|
25
|
+
const userModule = req.scope.resolve<IUserModuleService>(Modules.USER)
|
|
26
|
+
const user = await userModule.retrieveUser(actorId)
|
|
27
|
+
if (user.email && user.email.includes("@")) {
|
|
28
|
+
authEmail = user.email
|
|
29
|
+
}
|
|
30
|
+
} catch (err: any) {
|
|
31
|
+
console.warn(
|
|
32
|
+
"[paypal_onboarding] Could not resolve admin user email for actor",
|
|
33
|
+
actorId,
|
|
34
|
+
err?.message
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
console.warn("[paypal_onboarding] No actor_id in auth_context")
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const email = authEmail || (body.email && body.email.includes("@") ? body.email : undefined)
|
|
42
|
+
if (!email) {
|
|
43
|
+
return res.status(400).json({
|
|
44
|
+
message:
|
|
45
|
+
"Could not determine seller email. Please provide an email in the request body.",
|
|
46
|
+
})
|
|
47
|
+
}
|
|
23
48
|
const env =
|
|
24
49
|
body.environment === "sandbox" || body.environment === "live"
|
|
25
50
|
? body.environment
|
|
@@ -62,7 +62,8 @@ async function attachPayPalCaptureToSession(
|
|
|
62
62
|
scope
|
|
63
63
|
)
|
|
64
64
|
|
|
65
|
-
} catch {
|
|
65
|
+
} catch (e: unknown) {
|
|
66
|
+
console.warn("[PayPal] attachPayPalCaptureToSession failed:", e instanceof Error ? e.message : e)
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
|
|
@@ -94,7 +95,8 @@ async function attachPayPalAuthorizationToSession(
|
|
|
94
95
|
scope
|
|
95
96
|
)
|
|
96
97
|
|
|
97
|
-
} catch {
|
|
98
|
+
} catch (e: unknown) {
|
|
99
|
+
console.warn("[PayPal] attachPayPalAuthorizationToSession failed:", e instanceof Error ? e.message : e)
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
|
|
@@ -212,7 +212,7 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
|
212
212
|
|
|
213
213
|
if (transmissionId) {
|
|
214
214
|
try {
|
|
215
|
-
const existing = await paypal.listPayPalWebhookEvents({ transmission_id: transmissionId })
|
|
215
|
+
const existing = await paypal.listPayPalWebhookEvents({ transmission_id: transmissionId }, { take: 1 })
|
|
216
216
|
if ((existing || []).length > 0) {
|
|
217
217
|
console.info("[PayPal] webhook: duplicate transmission_id", {
|
|
218
218
|
transmissionId,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Migration } from "@medusajs/framework/mikro-orm/migrations"
|
|
2
|
+
|
|
3
|
+
export class Migration20270301000000 extends Migration {
|
|
4
|
+
async up(): Promise<void> {
|
|
5
|
+
this.addSql(
|
|
6
|
+
`CREATE INDEX IF NOT EXISTS "idx_paypal_webhook_event_transmission_id" ON "paypal_webhook_event" ("transmission_id") WHERE "transmission_id" IS NOT NULL;`
|
|
7
|
+
)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async down(): Promise<void> {
|
|
11
|
+
this.addSql(
|
|
12
|
+
`DROP INDEX IF EXISTS "idx_paypal_webhook_event_transmission_id";`
|
|
13
|
+
)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
isRefundFailureStatus,
|
|
38
38
|
mapPayPalCaptureStatus,
|
|
39
39
|
} from "./status-utils"
|
|
40
|
-
import
|
|
40
|
+
import { PayPalCredentialResolver } from "../utils/credential-resolver"
|
|
41
41
|
|
|
42
42
|
type Options = {}
|
|
43
43
|
|
|
@@ -55,41 +55,20 @@ class PayPalAdvancedCardProvider extends AbstractPaymentProvider<Options> {
|
|
|
55
55
|
static identifier = "paypal_card"
|
|
56
56
|
|
|
57
57
|
protected readonly options_: Options
|
|
58
|
+
private paypal: PayPalCredentialResolver
|
|
58
59
|
|
|
59
60
|
constructor(cradle: Record<string, any>, options: Options) {
|
|
60
61
|
super(cradle, options)
|
|
61
62
|
this.options_ = options
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
private resolvePayPalService() {
|
|
65
|
-
const container = this.container as {
|
|
66
|
-
resolve<T>(key: string): T
|
|
67
|
-
}
|
|
68
|
-
try {
|
|
69
|
-
return container.resolve<PayPalModuleService>("paypal_onboarding")
|
|
70
|
-
} catch {
|
|
71
|
-
return null as any
|
|
72
|
-
}
|
|
63
|
+
this.paypal = new PayPalCredentialResolver(cradle.pgConnection)
|
|
73
64
|
}
|
|
74
65
|
|
|
75
66
|
private async resolveSettings() {
|
|
76
|
-
const
|
|
77
|
-
if (!paypal) {
|
|
78
|
-
return {
|
|
79
|
-
additionalSettings: {} as Record<string, any>,
|
|
80
|
-
advancedCardSettings: {} as Record<string, any>,
|
|
81
|
-
apiDetails: {} as Record<string, any>,
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const settings = await paypal.getSettings().catch(() => ({}))
|
|
85
|
-
const data =
|
|
86
|
-
settings && typeof settings === "object" && "data" in settings
|
|
87
|
-
? ((settings as { data?: Record<string, any> }).data ?? {})
|
|
88
|
-
: {}
|
|
67
|
+
const settings = await this.paypal.getSettings()
|
|
89
68
|
return {
|
|
90
|
-
additionalSettings:
|
|
91
|
-
advancedCardSettings:
|
|
92
|
-
apiDetails:
|
|
69
|
+
additionalSettings: settings.additionalSettings as Record<string, any>,
|
|
70
|
+
advancedCardSettings: settings.advancedCardSettings as Record<string, any>,
|
|
71
|
+
apiDetails: settings.apiDetails as Record<string, any>,
|
|
93
72
|
}
|
|
94
73
|
}
|
|
95
74
|
|
|
@@ -102,17 +81,7 @@ class PayPalAdvancedCardProvider extends AbstractPaymentProvider<Options> {
|
|
|
102
81
|
}
|
|
103
82
|
|
|
104
83
|
private async getPayPalAccessToken() {
|
|
105
|
-
|
|
106
|
-
if (!paypal) {
|
|
107
|
-
throw new Error("PayPal service is not available. Cannot obtain access token without a valid PayPal connection.")
|
|
108
|
-
}
|
|
109
|
-
const creds = await paypal.getActiveCredentials()
|
|
110
|
-
const base =
|
|
111
|
-
creds.environment === "live"
|
|
112
|
-
? "https://api-m.paypal.com"
|
|
113
|
-
: "https://api-m.sandbox.paypal.com"
|
|
114
|
-
const accessToken = await paypal.getAppAccessToken()
|
|
115
|
-
return { accessToken, base }
|
|
84
|
+
return this.paypal.getAccessToken()
|
|
116
85
|
}
|
|
117
86
|
|
|
118
87
|
private async getOrderDetails(orderId: string) {
|
|
@@ -147,7 +116,7 @@ class PayPalAdvancedCardProvider extends AbstractPaymentProvider<Options> {
|
|
|
147
116
|
|
|
148
117
|
private async normalizePaymentData(input: { data?: Record<string, unknown> }) {
|
|
149
118
|
const data = (input.data || {}) as Record<string, any>
|
|
150
|
-
const amount =
|
|
119
|
+
const amount = toAmountNumber(data.amount)
|
|
151
120
|
const currencyOverride = await this.resolveCurrencyOverride()
|
|
152
121
|
const currencyCode = normalizeCurrencyCode(
|
|
153
122
|
data.currency_code || currencyOverride || "EUR"
|
|
@@ -24,12 +24,12 @@ import type {
|
|
|
24
24
|
ProviderWebhookPayload,
|
|
25
25
|
WebhookActionResult,
|
|
26
26
|
} from "@medusajs/framework/types"
|
|
27
|
-
import { formatAmountForPayPal,
|
|
27
|
+
import { formatAmountForPayPal, toAmountNumber } from "../utils/amounts"
|
|
28
28
|
import {
|
|
29
29
|
assertPayPalCurrencySupported,
|
|
30
30
|
normalizeCurrencyCode,
|
|
31
31
|
} from "../utils/currencies"
|
|
32
|
-
import
|
|
32
|
+
import { PayPalCredentialResolver } from "../utils/credential-resolver"
|
|
33
33
|
import { getPayPalWebhookActionAndData } from "./webhook-utils"
|
|
34
34
|
import { paypalFetch } from "../utils/paypal-fetch"
|
|
35
35
|
import {
|
|
@@ -55,40 +55,16 @@ class PayPalPaymentProvider extends AbstractPaymentProvider<Options> {
|
|
|
55
55
|
static identifier = "paypal"
|
|
56
56
|
|
|
57
57
|
protected readonly options_: Options
|
|
58
|
+
private paypal: PayPalCredentialResolver
|
|
58
59
|
|
|
59
60
|
constructor(cradle: Record<string, any>, options: Options) {
|
|
60
61
|
super(cradle, options)
|
|
61
62
|
this.options_ = options
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
private resolvePayPalService() {
|
|
65
|
-
const container = this.container as {
|
|
66
|
-
resolve<T>(key: string): T
|
|
67
|
-
}
|
|
68
|
-
try {
|
|
69
|
-
return container.resolve<PayPalModuleService>("paypal_onboarding")
|
|
70
|
-
} catch {
|
|
71
|
-
return null
|
|
72
|
-
}
|
|
63
|
+
this.paypal = new PayPalCredentialResolver(cradle.pgConnection)
|
|
73
64
|
}
|
|
74
65
|
|
|
75
66
|
async resolveSettings() {
|
|
76
|
-
|
|
77
|
-
if (!paypal) {
|
|
78
|
-
return {
|
|
79
|
-
additionalSettings: {} as Record<string, unknown>,
|
|
80
|
-
apiDetails: {} as Record<string, unknown>,
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
const settings = await paypal.getSettings().catch(() => ({}))
|
|
84
|
-
const data =
|
|
85
|
-
settings && typeof settings === "object" && "data" in settings
|
|
86
|
-
? ((settings as { data?: Record<string, unknown> }).data ?? {})
|
|
87
|
-
: {}
|
|
88
|
-
return {
|
|
89
|
-
additionalSettings: (data.additional_settings || {}) as Record<string, unknown>,
|
|
90
|
-
apiDetails: (data.api_details || {}) as Record<string, unknown>,
|
|
91
|
-
}
|
|
67
|
+
return this.paypal.getSettings()
|
|
92
68
|
}
|
|
93
69
|
|
|
94
70
|
private async resolveCurrencyOverride() {
|
|
@@ -100,19 +76,7 @@ class PayPalPaymentProvider extends AbstractPaymentProvider<Options> {
|
|
|
100
76
|
}
|
|
101
77
|
|
|
102
78
|
private async getPayPalAccessToken() {
|
|
103
|
-
|
|
104
|
-
if (!paypal) {
|
|
105
|
-
throw new Error(
|
|
106
|
-
"PayPal module service is unavailable. Ensure the paypal module is registered."
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
const creds = await paypal.getActiveCredentials()
|
|
110
|
-
const base =
|
|
111
|
-
creds.environment === "live"
|
|
112
|
-
? "https://api-m.paypal.com"
|
|
113
|
-
: "https://api-m.sandbox.paypal.com"
|
|
114
|
-
const accessToken = await paypal.getAppAccessToken()
|
|
115
|
-
return { accessToken, base }
|
|
79
|
+
return this.paypal.getAccessToken()
|
|
116
80
|
}
|
|
117
81
|
|
|
118
82
|
private async getOrderDetails(orderId: string) {
|
|
@@ -147,7 +111,7 @@ class PayPalPaymentProvider extends AbstractPaymentProvider<Options> {
|
|
|
147
111
|
|
|
148
112
|
private async normalizePaymentData(input: { data?: Record<string, unknown> }) {
|
|
149
113
|
const data = (input.data || {}) as Record<string, any>
|
|
150
|
-
const amount =
|
|
114
|
+
const amount = toAmountNumber(data.amount)
|
|
151
115
|
const currencyOverride = await this.resolveCurrencyOverride()
|
|
152
116
|
const currencyCode = normalizeCurrencyCode(
|
|
153
117
|
data.currency_code || currencyOverride || "EUR"
|
|
@@ -201,32 +165,16 @@ class PayPalPaymentProvider extends AbstractPaymentProvider<Options> {
|
|
|
201
165
|
}
|
|
202
166
|
|
|
203
167
|
private async recordFailure(eventType: string, metadata?: Record<string, unknown>) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
try {
|
|
207
|
-
await paypal.recordPaymentLog(eventType, metadata)
|
|
208
|
-
await paypal.recordAuditEvent(eventType, metadata)
|
|
209
|
-
await paypal.recordMetric(eventType)
|
|
210
|
-
} catch {
|
|
211
|
-
}
|
|
168
|
+
await this.paypal.recordAuditEvent(eventType, metadata)
|
|
169
|
+
await this.paypal.recordMetric(eventType, metadata)
|
|
212
170
|
}
|
|
213
171
|
|
|
214
172
|
private async recordSuccess(metricName: string) {
|
|
215
|
-
|
|
216
|
-
if (!paypal) return
|
|
217
|
-
try {
|
|
218
|
-
await paypal.recordMetric(metricName)
|
|
219
|
-
} catch {
|
|
220
|
-
}
|
|
173
|
+
await this.paypal.recordMetric(metricName)
|
|
221
174
|
}
|
|
222
175
|
|
|
223
176
|
private async recordPaymentEvent(eventType: string, metadata?: Record<string, unknown>) {
|
|
224
|
-
|
|
225
|
-
if (!paypal) return
|
|
226
|
-
try {
|
|
227
|
-
await paypal.recordPaymentLog(eventType, metadata)
|
|
228
|
-
} catch {
|
|
229
|
-
}
|
|
177
|
+
await this.paypal.recordAuditEvent(eventType, metadata)
|
|
230
178
|
}
|
|
231
179
|
|
|
232
180
|
async createAccountHolder(
|
|
@@ -758,7 +706,12 @@ class PayPalPaymentProvider extends AbstractPaymentProvider<Options> {
|
|
|
758
706
|
debug_id: debugId,
|
|
759
707
|
message: error?.message,
|
|
760
708
|
})
|
|
761
|
-
throw error
|
|
709
|
+
throw error instanceof MedusaError
|
|
710
|
+
? error
|
|
711
|
+
: new MedusaError(
|
|
712
|
+
MedusaError.Types.INVALID_DATA,
|
|
713
|
+
error?.message || "PayPal capture failed."
|
|
714
|
+
)
|
|
762
715
|
}
|
|
763
716
|
}
|
|
764
717
|
|
|
@@ -898,13 +851,10 @@ class PayPalPaymentProvider extends AbstractPaymentProvider<Options> {
|
|
|
898
851
|
debug_id: debugId,
|
|
899
852
|
message: error?.message,
|
|
900
853
|
})
|
|
901
|
-
// Surface the real reason to the admin. Medusa's error handler masks any
|
|
902
|
-
// non-MedusaError as a generic "An unknown error occurred." in production,
|
|
903
|
-
// which hid the actual PayPal failure from the order refund UI.
|
|
904
854
|
throw error instanceof MedusaError
|
|
905
855
|
? error
|
|
906
856
|
: new MedusaError(
|
|
907
|
-
MedusaError.Types.
|
|
857
|
+
MedusaError.Types.INVALID_DATA,
|
|
908
858
|
error?.message || "PayPal refund failed."
|
|
909
859
|
)
|
|
910
860
|
}
|
|
@@ -133,7 +133,10 @@ class PayPalModuleService extends MedusaService({
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
private async getCurrentRow(): Promise<any | null> {
|
|
136
|
-
const rows = await this.listPayPalConnections(
|
|
136
|
+
const rows = await this.listPayPalConnections(
|
|
137
|
+
{},
|
|
138
|
+
{ take: 1, order: { created_at: "DESC" } }
|
|
139
|
+
)
|
|
137
140
|
return rows?.[0] ?? null
|
|
138
141
|
}
|
|
139
142
|
|
|
@@ -1263,7 +1266,7 @@ class PayPalModuleService extends MedusaService({
|
|
|
1263
1266
|
}
|
|
1264
1267
|
|
|
1265
1268
|
async getSettings() {
|
|
1266
|
-
const rows = await this.listPayPalSettings({})
|
|
1269
|
+
const rows = await this.listPayPalSettings({}, { take: 1 })
|
|
1267
1270
|
const row = rows?.[0]
|
|
1268
1271
|
return { data: (row?.data || {}) as Record<string, any> }
|
|
1269
1272
|
}
|
|
@@ -1293,7 +1296,7 @@ class PayPalModuleService extends MedusaService({
|
|
|
1293
1296
|
}
|
|
1294
1297
|
|
|
1295
1298
|
async saveSettings(patch: Record<string, any>) {
|
|
1296
|
-
const rows = await this.listPayPalSettings({})
|
|
1299
|
+
const rows = await this.listPayPalSettings({}, { take: 1 })
|
|
1297
1300
|
const row = rows?.[0]
|
|
1298
1301
|
const current = (row?.data || {}) as Record<string, any>
|
|
1299
1302
|
|
|
@@ -1454,28 +1457,45 @@ class PayPalModuleService extends MedusaService({
|
|
|
1454
1457
|
}
|
|
1455
1458
|
|
|
1456
1459
|
async recordMetric(name: string, metadata?: Record<string, unknown>) {
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1460
|
+
try {
|
|
1461
|
+
const existing = await this.listPayPalMetrics({ name })
|
|
1462
|
+
const row = existing?.[0]
|
|
1463
|
+
const current = (row?.data || {}) as Record<string, any>
|
|
1464
|
+
const next = {
|
|
1465
|
+
...current,
|
|
1466
|
+
...(metadata || {}),
|
|
1467
|
+
count: Number(current.count || 0) + 1,
|
|
1468
|
+
last_recorded_at: new Date().toISOString(),
|
|
1469
|
+
}
|
|
1466
1470
|
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1471
|
+
if (!row) {
|
|
1472
|
+
try {
|
|
1473
|
+
return await this.createPayPalMetrics({ name, data: next })
|
|
1474
|
+
} catch {
|
|
1475
|
+
const retry = await this.listPayPalMetrics({ name })
|
|
1476
|
+
const retryRow = retry?.[0]
|
|
1477
|
+
if (retryRow) {
|
|
1478
|
+
const retryData = (retryRow.data || {}) as Record<string, any>
|
|
1479
|
+
return await this.updatePayPalMetrics({
|
|
1480
|
+
id: retryRow.id,
|
|
1481
|
+
name,
|
|
1482
|
+
data: {
|
|
1483
|
+
...retryData,
|
|
1484
|
+
...(metadata || {}),
|
|
1485
|
+
count: Number(retryData.count || 0) + 1,
|
|
1486
|
+
last_recorded_at: new Date().toISOString(),
|
|
1487
|
+
},
|
|
1488
|
+
})
|
|
1489
|
+
}
|
|
1490
|
+
throw new Error(`Failed to record metric "${name}"`)
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1473
1493
|
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
}
|
|
1494
|
+
return await this.updatePayPalMetrics({ id: row.id, name, data: next })
|
|
1495
|
+
} catch (e: unknown) {
|
|
1496
|
+
console.warn("[PayPal] recordMetric failed:", e instanceof Error ? e.message : e)
|
|
1497
|
+
return null
|
|
1498
|
+
}
|
|
1479
1499
|
}
|
|
1480
1500
|
|
|
1481
1501
|
async recordPaymentLog(eventType: string, metadata?: Record<string, unknown>) {
|
|
@@ -50,11 +50,17 @@ export function toAmountNumber(amount: unknown): number {
|
|
|
50
50
|
return 0
|
|
51
51
|
}
|
|
52
52
|
if (typeof amount === "number") {
|
|
53
|
-
|
|
53
|
+
if (!Number.isFinite(amount)) {
|
|
54
|
+
throw new Error(`Invalid payment amount: non-finite number (${amount})`)
|
|
55
|
+
}
|
|
56
|
+
return amount
|
|
54
57
|
}
|
|
55
58
|
if (typeof amount === "string") {
|
|
56
59
|
const parsed = Number(amount)
|
|
57
|
-
|
|
60
|
+
if (!Number.isFinite(parsed)) {
|
|
61
|
+
throw new Error(`Invalid payment amount: unparseable string "${amount}"`)
|
|
62
|
+
}
|
|
63
|
+
return parsed
|
|
58
64
|
}
|
|
59
65
|
if (typeof amount === "object") {
|
|
60
66
|
const obj = amount as Record<string, unknown>
|
|
@@ -65,11 +71,13 @@ export function toAmountNumber(amount: unknown): number {
|
|
|
65
71
|
// Serialized raw form: { value: "20", precision: 20 }.
|
|
66
72
|
if (obj.value !== undefined && obj.value !== null) {
|
|
67
73
|
const parsed = Number(obj.value)
|
|
68
|
-
|
|
74
|
+
if (!Number.isFinite(parsed)) {
|
|
75
|
+
throw new Error(`Invalid payment amount: unparseable BigNumber value "${obj.value}"`)
|
|
76
|
+
}
|
|
77
|
+
return parsed
|
|
69
78
|
}
|
|
70
79
|
}
|
|
71
|
-
|
|
72
|
-
return Number.isFinite(fallback) ? fallback : 0
|
|
80
|
+
throw new Error(`Invalid payment amount: unrecognized type (${typeof amount})`)
|
|
73
81
|
}
|
|
74
82
|
|
|
75
83
|
/**
|
|
@@ -81,6 +89,9 @@ export function toAmountNumber(amount: unknown): number {
|
|
|
81
89
|
* for the currency — it must NOT divide/convert to minor units.
|
|
82
90
|
*/
|
|
83
91
|
export function formatAmountForPayPal(amount: number, currencyCode: string) {
|
|
92
|
+
if (!Number.isFinite(amount)) {
|
|
93
|
+
throw new Error(`Invalid payment amount for PayPal formatting: ${amount}`)
|
|
94
|
+
}
|
|
84
95
|
const exponent = getCurrencyExponent(currencyCode)
|
|
85
|
-
return
|
|
96
|
+
return amount.toFixed(exponent)
|
|
86
97
|
}
|