@easypayment/medusa-payment-paypal 0.9.29 → 0.9.31

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.
Files changed (117) hide show
  1. package/.medusa/server/src/admin/index.js +15 -13
  2. package/.medusa/server/src/admin/index.mjs +15 -13
  3. package/.medusa/server/src/api/admin/paypal/onboarding-link/route.d.ts.map +1 -1
  4. package/.medusa/server/src/api/admin/paypal/onboarding-link/route.js +24 -4
  5. package/.medusa/server/src/api/admin/paypal/onboarding-link/route.js.map +1 -1
  6. package/.medusa/server/src/api/store/paypal/capture-order/route.d.ts.map +1 -1
  7. package/.medusa/server/src/api/store/paypal/capture-order/route.js +4 -2
  8. package/.medusa/server/src/api/store/paypal/capture-order/route.js.map +1 -1
  9. package/.medusa/server/src/api/store/paypal/webhook/route.js +1 -1
  10. package/.medusa/server/src/api/store/paypal/webhook/route.js.map +1 -1
  11. package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.d.ts +6 -0
  12. package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.d.ts.map +1 -0
  13. package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.js +14 -0
  14. package/.medusa/server/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.js.map +1 -0
  15. package/.medusa/server/src/modules/paypal/payment-provider/card-service.d.ts +1 -1
  16. package/.medusa/server/src/modules/paypal/payment-provider/card-service.d.ts.map +1 -1
  17. package/.medusa/server/src/modules/paypal/payment-provider/card-service.js +9 -35
  18. package/.medusa/server/src/modules/paypal/payment-provider/card-service.js.map +1 -1
  19. package/.medusa/server/src/modules/paypal/payment-provider/service.d.ts +2 -5
  20. package/.medusa/server/src/modules/paypal/payment-provider/service.d.ts.map +1 -1
  21. package/.medusa/server/src/modules/paypal/payment-provider/service.js +14 -66
  22. package/.medusa/server/src/modules/paypal/payment-provider/service.js.map +1 -1
  23. package/.medusa/server/src/modules/paypal/service.d.ts +1 -1
  24. package/.medusa/server/src/modules/paypal/service.d.ts.map +1 -1
  25. package/.medusa/server/src/modules/paypal/service.js +41 -22
  26. package/.medusa/server/src/modules/paypal/service.js.map +1 -1
  27. package/.medusa/server/src/modules/paypal/utils/amounts.d.ts +1 -1
  28. package/.medusa/server/src/modules/paypal/utils/amounts.d.ts.map +1 -1
  29. package/.medusa/server/src/modules/paypal/utils/amounts.js +17 -6
  30. package/.medusa/server/src/modules/paypal/utils/amounts.js.map +1 -1
  31. package/.medusa/server/src/modules/paypal/utils/credential-resolver.d.ts +42 -0
  32. package/.medusa/server/src/modules/paypal/utils/credential-resolver.d.ts.map +1 -0
  33. package/.medusa/server/src/modules/paypal/utils/credential-resolver.js +186 -0
  34. package/.medusa/server/src/modules/paypal/utils/credential-resolver.js.map +1 -0
  35. package/.medusa/server/src/modules/paypal/utils/payment-session.d.ts.map +1 -1
  36. package/.medusa/server/src/modules/paypal/utils/payment-session.js +7 -1
  37. package/.medusa/server/src/modules/paypal/utils/payment-session.js.map +1 -1
  38. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.d.ts +3 -11
  39. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.d.ts.map +1 -1
  40. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.js +119 -18
  41. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.js.map +1 -1
  42. package/.medusa/server/src/modules/paypal/utils/secret-crypto.d.ts.map +1 -1
  43. package/.medusa/server/src/modules/paypal/utils/secret-crypto.js +6 -0
  44. package/.medusa/server/src/modules/paypal/utils/secret-crypto.js.map +1 -1
  45. package/.medusa/server/src/modules/paypal/webhook-processor.d.ts.map +1 -1
  46. package/.medusa/server/src/modules/paypal/webhook-processor.js +10 -9
  47. package/.medusa/server/src/modules/paypal/webhook-processor.js.map +1 -1
  48. package/package.json +15 -8
  49. package/src/admin/routes/settings/paypal/connection/page.tsx +6 -4
  50. package/src/api/admin/paypal/onboarding-link/route.ts +30 -5
  51. package/src/api/store/paypal/capture-order/route.ts +4 -2
  52. package/src/api/store/paypal/webhook/route.ts +1 -1
  53. package/src/modules/paypal/migrations/20270301000000_add_webhook_transmission_id_index.ts +15 -0
  54. package/src/modules/paypal/payment-provider/card-service.ts +9 -40
  55. package/src/modules/paypal/payment-provider/service.ts +18 -68
  56. package/src/modules/paypal/service.ts +43 -23
  57. package/src/modules/paypal/utils/amounts.ts +17 -6
  58. package/src/modules/paypal/utils/credential-resolver.ts +257 -0
  59. package/src/modules/paypal/utils/payment-session.ts +11 -2
  60. package/src/modules/paypal/utils/paypal-fetch.ts +139 -17
  61. package/src/modules/paypal/utils/secret-crypto.ts +5 -0
  62. package/src/modules/paypal/webhook-processor.ts +15 -10
  63. package/.medusa/server/src/admin/index.d.ts +0 -2
  64. package/.medusa/server/src/admin/index.d.ts.map +0 -1
  65. package/.medusa/server/src/admin/index.js.map +0 -1
  66. package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.d.ts +0 -8
  67. package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.d.ts.map +0 -1
  68. package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.js +0 -8
  69. package/.medusa/server/src/admin/routes/settings/paypal/_components/FieldRow.js.map +0 -1
  70. package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.d.ts +0 -8
  71. package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.d.ts.map +0 -1
  72. package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.js +0 -8
  73. package/.medusa/server/src/admin/routes/settings/paypal/_components/SectionCard.js.map +0 -1
  74. package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.d.ts +0 -2
  75. package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.d.ts.map +0 -1
  76. package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.js +0 -25
  77. package/.medusa/server/src/admin/routes/settings/paypal/_components/Tabs.js.map +0 -1
  78. package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.d.ts +0 -12
  79. package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.d.ts.map +0 -1
  80. package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.js +0 -22
  81. package/.medusa/server/src/admin/routes/settings/paypal/_components/Toast.js.map +0 -1
  82. package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.d.ts +0 -7
  83. package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.d.ts.map +0 -1
  84. package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.js +0 -40
  85. package/.medusa/server/src/admin/routes/settings/paypal/_utils/adminFetch.js.map +0 -1
  86. package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.d.ts +0 -2
  87. package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.d.ts.map +0 -1
  88. package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.js +0 -76
  89. package/.medusa/server/src/admin/routes/settings/paypal/additional-settings/page.js.map +0 -1
  90. package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.d.ts +0 -2
  91. package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.d.ts.map +0 -1
  92. package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.js +0 -81
  93. package/.medusa/server/src/admin/routes/settings/paypal/advanced-card-payments/page.js.map +0 -1
  94. package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.d.ts +0 -2
  95. package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.d.ts.map +0 -1
  96. package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.js +0 -9
  97. package/.medusa/server/src/admin/routes/settings/paypal/apple-pay/page.js.map +0 -1
  98. package/.medusa/server/src/admin/routes/settings/paypal/connection/page.d.ts +0 -22
  99. package/.medusa/server/src/admin/routes/settings/paypal/connection/page.d.ts.map +0 -1
  100. package/.medusa/server/src/admin/routes/settings/paypal/connection/page.js +0 -595
  101. package/.medusa/server/src/admin/routes/settings/paypal/connection/page.js.map +0 -1
  102. package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.d.ts +0 -2
  103. package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.d.ts.map +0 -1
  104. package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.js +0 -9
  105. package/.medusa/server/src/admin/routes/settings/paypal/google-pay/page.js.map +0 -1
  106. package/.medusa/server/src/admin/routes/settings/paypal/page.d.ts +0 -4
  107. package/.medusa/server/src/admin/routes/settings/paypal/page.d.ts.map +0 -1
  108. package/.medusa/server/src/admin/routes/settings/paypal/page.js +0 -14
  109. package/.medusa/server/src/admin/routes/settings/paypal/page.js.map +0 -1
  110. package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.d.ts +0 -2
  111. package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.d.ts.map +0 -1
  112. package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.js +0 -9
  113. package/.medusa/server/src/admin/routes/settings/paypal/pay-later-messaging/page.js.map +0 -1
  114. package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.d.ts +0 -2
  115. package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.d.ts.map +0 -1
  116. package/.medusa/server/src/admin/routes/settings/paypal/paypal-settings/page.js +0 -109
  117. 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 = 100; // safety bound (20k sessions) against a misbehaving driver
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?.message);
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.29",
3
+ "version": "0.9.31",
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": { "optional": true },
64
- "@medusajs/ui": { "optional": true },
65
- "@medusajs/icons": { "optional": true }
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
- const authEmail =
19
- typeof req.auth_context?.user_metadata?.email === "string"
20
- ? String(req.auth_context.user_metadata.email)
21
- : undefined
22
- const email = authEmail ?? body.email ?? "admin@paypal.com"
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 type PayPalModuleService from "../service"
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 paypal = this.resolvePayPalService()
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: (data.additional_settings || {}) as Record<string, any>,
91
- advancedCardSettings: (data.advanced_card_payments || {}) as Record<string, any>,
92
- apiDetails: (data.api_details || {}) as Record<string, any>,
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
- const paypal = this.resolvePayPalService()
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 = Number(data.amount ?? 0)
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, getCurrencyExponent, toAmountNumber } from "../utils/amounts"
27
+ import { formatAmountForPayPal, toAmountNumber } from "../utils/amounts"
28
28
  import {
29
29
  assertPayPalCurrencySupported,
30
30
  normalizeCurrencyCode,
31
31
  } from "../utils/currencies"
32
- import type PayPalModuleService from "../service"
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
- const paypal = this.resolvePayPalService()
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
- const paypal = this.resolvePayPalService()
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 = Number(data.amount ?? 0)
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
- const paypal = this.resolvePayPalService()
205
- if (!paypal) return
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
- const paypal = this.resolvePayPalService()
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
- const paypal = this.resolvePayPalService()
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.UNEXPECTED_STATE,
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
- const existing = await this.listPayPalMetrics({ name })
1458
- const row = existing?.[0]
1459
- const current = (row?.data || {}) as Record<string, any>
1460
- const next = {
1461
- ...current,
1462
- ...(metadata || {}),
1463
- count: Number(current.count || 0) + 1,
1464
- last_recorded_at: new Date().toISOString(),
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
- if (!row) {
1468
- return await this.createPayPalMetrics({
1469
- name,
1470
- data: next,
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
- return await this.updatePayPalMetrics({
1475
- id: row.id,
1476
- name,
1477
- data: next,
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
- return Number.isFinite(amount) ? amount : 0
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
- return Number.isFinite(parsed) ? parsed : 0
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
- return Number.isFinite(parsed) ? parsed : 0
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
- const fallback = Number(amount as never)
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 Number(amount || 0).toFixed(exponent)
96
+ return amount.toFixed(exponent)
86
97
  }