@easypayment/medusa-payment-paypal 0.9.15 → 0.9.16

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 (74) hide show
  1. package/.medusa/server/src/admin/index.js +17 -17
  2. package/.medusa/server/src/admin/index.mjs +17 -17
  3. package/.medusa/server/src/api/store/paypal/capture-order/route.d.ts.map +1 -1
  4. package/.medusa/server/src/api/store/paypal/capture-order/route.js +21 -10
  5. package/.medusa/server/src/api/store/paypal/capture-order/route.js.map +1 -1
  6. package/.medusa/server/src/api/store/paypal/create-order/route.d.ts.map +1 -1
  7. package/.medusa/server/src/api/store/paypal/create-order/route.js +76 -54
  8. package/.medusa/server/src/api/store/paypal/create-order/route.js.map +1 -1
  9. package/.medusa/server/src/api/store/paypal/webhook/route.d.ts.map +1 -1
  10. package/.medusa/server/src/api/store/paypal/webhook/route.js +2 -1
  11. package/.medusa/server/src/api/store/paypal/webhook/route.js.map +1 -1
  12. package/.medusa/server/src/api/store/paypal-complete/route.d.ts.map +1 -1
  13. package/.medusa/server/src/api/store/paypal-complete/route.js +29 -27
  14. package/.medusa/server/src/api/store/paypal-complete/route.js.map +1 -1
  15. package/.medusa/server/src/jobs/paypal-webhook-retry.d.ts.map +1 -1
  16. package/.medusa/server/src/jobs/paypal-webhook-retry.js +42 -1
  17. package/.medusa/server/src/jobs/paypal-webhook-retry.js.map +1 -1
  18. package/.medusa/server/src/modules/paypal/clients/paypal-seller.client.d.ts.map +1 -1
  19. package/.medusa/server/src/modules/paypal/clients/paypal-seller.client.js +5 -4
  20. package/.medusa/server/src/modules/paypal/clients/paypal-seller.client.js.map +1 -1
  21. package/.medusa/server/src/modules/paypal/payment-provider/card-service.d.ts.map +1 -1
  22. package/.medusa/server/src/modules/paypal/payment-provider/card-service.js +13 -10
  23. package/.medusa/server/src/modules/paypal/payment-provider/card-service.js.map +1 -1
  24. package/.medusa/server/src/modules/paypal/payment-provider/service.d.ts.map +1 -1
  25. package/.medusa/server/src/modules/paypal/payment-provider/service.js +10 -9
  26. package/.medusa/server/src/modules/paypal/payment-provider/service.js.map +1 -1
  27. package/.medusa/server/src/modules/paypal/payment-provider/webhook-utils.d.ts +12 -0
  28. package/.medusa/server/src/modules/paypal/payment-provider/webhook-utils.d.ts.map +1 -1
  29. package/.medusa/server/src/modules/paypal/payment-provider/webhook-utils.js +12 -0
  30. package/.medusa/server/src/modules/paypal/payment-provider/webhook-utils.js.map +1 -1
  31. package/.medusa/server/src/modules/paypal/service.d.ts +10 -1
  32. package/.medusa/server/src/modules/paypal/service.d.ts.map +1 -1
  33. package/.medusa/server/src/modules/paypal/service.js +71 -21
  34. package/.medusa/server/src/modules/paypal/service.js.map +1 -1
  35. package/.medusa/server/src/modules/paypal/utils/amounts.d.ts +9 -1
  36. package/.medusa/server/src/modules/paypal/utils/amounts.d.ts.map +1 -1
  37. package/.medusa/server/src/modules/paypal/utils/amounts.js +17 -5
  38. package/.medusa/server/src/modules/paypal/utils/amounts.js.map +1 -1
  39. package/.medusa/server/src/modules/paypal/utils/paypal-auth.d.ts +0 -8
  40. package/.medusa/server/src/modules/paypal/utils/paypal-auth.d.ts.map +1 -1
  41. package/.medusa/server/src/modules/paypal/utils/paypal-auth.js +0 -22
  42. package/.medusa/server/src/modules/paypal/utils/paypal-auth.js.map +1 -1
  43. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.d.ts +16 -0
  44. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.d.ts.map +1 -0
  45. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.js +31 -0
  46. package/.medusa/server/src/modules/paypal/utils/paypal-fetch.js.map +1 -0
  47. package/.medusa/server/src/modules/paypal/utils/secret-crypto.d.ts +14 -0
  48. package/.medusa/server/src/modules/paypal/utils/secret-crypto.d.ts.map +1 -0
  49. package/.medusa/server/src/modules/paypal/utils/secret-crypto.js +91 -0
  50. package/.medusa/server/src/modules/paypal/utils/secret-crypto.js.map +1 -0
  51. package/.medusa/server/src/modules/paypal/webhook-processor.d.ts.map +1 -1
  52. package/.medusa/server/src/modules/paypal/webhook-processor.js +29 -13
  53. package/.medusa/server/src/modules/paypal/webhook-processor.js.map +1 -1
  54. package/.medusa/server/src/subscribers/paypal-order-invoice.d.ts.map +1 -1
  55. package/.medusa/server/src/subscribers/paypal-order-invoice.js +5 -3
  56. package/.medusa/server/src/subscribers/paypal-order-invoice.js.map +1 -1
  57. package/README.md +12 -0
  58. package/package.json +5 -2
  59. package/src/api/store/paypal/capture-order/route.ts +24 -13
  60. package/src/api/store/paypal/create-order/route.ts +93 -62
  61. package/src/api/store/paypal/webhook/route.ts +2 -1
  62. package/src/api/store/paypal-complete/route.ts +32 -38
  63. package/src/jobs/paypal-webhook-retry.ts +51 -1
  64. package/src/modules/paypal/clients/paypal-seller.client.ts +6 -4
  65. package/src/modules/paypal/payment-provider/card-service.ts +13 -10
  66. package/src/modules/paypal/payment-provider/service.ts +10 -9
  67. package/src/modules/paypal/payment-provider/webhook-utils.ts +12 -0
  68. package/src/modules/paypal/service.ts +76 -21
  69. package/src/modules/paypal/utils/amounts.ts +17 -8
  70. package/src/modules/paypal/utils/paypal-auth.ts +0 -27
  71. package/src/modules/paypal/utils/paypal-fetch.ts +30 -0
  72. package/src/modules/paypal/utils/secret-crypto.ts +94 -0
  73. package/src/modules/paypal/webhook-processor.ts +32 -15
  74. package/src/subscribers/paypal-order-invoice.ts +6 -4
@@ -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":";;;AAiCA,kDAEC;AAUD,gDAEC;AAWD,4CAKC;AAMD,gDAKC;AAGD,8CAWC;AAED,sDASC;AAUD,gDA2CC;AAuHD,8DA+GC;AA7XD,qDAAmD;AACnD,uDAA8E;AAGjE,QAAA,gBAAgB,GAGzB;IACF,yBAAyB,EAAE,YAAY;IACvC,0BAA0B,EAAE,UAAU;IACtC,2BAA2B,EAAE,UAAU;IACvC,wBAAwB,EAAE,OAAO;IACjC,yBAAyB,EAAE,YAAY;IACvC,0BAA0B,EAAE,UAAU;IACtC,0BAA0B,EAAE,UAAU;IACtC,+BAA+B,EAAE,YAAY;IAC7C,8BAA8B,EAAE,UAAU;IAC1C,8BAA8B,EAAE,OAAO;IACvC,+BAA+B,EAAE,UAAU;IAC3C,0BAA0B,EAAE,UAAU;IACtC,uBAAuB,EAAE,OAAO;CACjC,CAAA;AAGD,MAAM,mBAAmB,GAAgC;IACvD,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACjE,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACtD,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC/B,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IACrB,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;CACvD,CAAA;AAED,SAAgB,mBAAmB,CAAC,IAAY,EAAE,EAAU;IAC1D,OAAO,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;AACpD,CAAC;AAGY,QAAA,wBAAwB,GAAG;IACtC,kBAAkB;IAClB,iBAAiB;IACjB,wBAAwB;IACxB,iBAAiB;CAClB,CAAA;AAED,SAAgB,kBAAkB,CAAC,SAAiB;IAClD,OAAO,gCAAwB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAChF,CAAC;AAGD,MAAM,sBAAsB,GAAG;IAC7B,8BAA8B;IAC9B,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;CACxB,CAAA;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,MAAM,CACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CACrD,CAAC,WAAW,EAAE,CAAA;IACf,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAGD,MAAM,sBAAsB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AACtC,QAAA,oBAAoB,GAAG,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAA;AAErE,SAAgB,kBAAkB,CAAC,YAAoB;IACrD,MAAM,GAAG,GAAG,YAAY,GAAG,CAAC,CAAA;IAC5B,MAAM,YAAY,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAChD,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAChE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;AACxD,CAAC;AAGD,SAAgB,iBAAiB,CAAC,OAA4B;IAC5D,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAA;IAClC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IACxB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IACD,OAAO,QAA+B,CAAA;AACxC,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAA4B;IAChE,MAAM,GAAG,GACP,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,QAAQ,EAAE,gBAAgB;QACnC,OAAO,EAAE,QAAQ,EAAE,OAAO;QAC1B,IAAI,CAAA;IACN,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAC9C,CAAC;AAUD,SAAgB,kBAAkB,CAChC,QAA6B,EAC7B,SAAiB;IAEjB,MAAM,OAAO,GAAG,QAAQ,EAAE,kBAAkB,EAAE,WAAW,IAAI,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;IACvD,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC1D,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAA;IACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAExD,IAAI,OAAO,GAAkB,IAAI,CAAA;IACjC,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,IAAI,QAAQ,GAAkB,IAAI,CAAA;IAClC,IAAI,MAAM,GAAkB,IAAI,CAAA;IAEhC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QACnD,MAAM;YACJ,MAAM,CACJ,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,QAAQ,EAAE,SAAS,IAAI,EAAE,CACtE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QAClB,SAAS;YACP,MAAM,CACJ,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CACjE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;IACpB,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QACrD,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QACxD,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;IAC3D,CAAC;SAAM,IAAI,eAAe,EAAE,CAAC;QAC3B,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QACxD,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;IAC3D,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QACpD,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QACxD,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;QAC5D,4EAA4E;QAC5E,4EAA4E;QAC5E,4CAA4C;QAC5C,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;IAC3D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AACjD,CAAC;AAUD,KAAK,UAAU,iBAAiB,CAC9B,SAA0B,EAC1B,MAAc;IAEd,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,eAAO,CAAC,OAAO,CAAQ,CAAA;IAE/D,IAAI,WAAkB,CAAA;IACtB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,aAAa,CAAC,sBAAsB,CACtD,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,EACrB,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IACnC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAAC;QACvD,qBAAqB,EAAE,UAAU,CAAC,EAAE;KACrC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;SACnC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAA,iCAAkB,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC;SACrD,IAAI,CACH,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CACjB,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CACxC,CAAC,CAAC,CAAC,CAAA;IAEN,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,yCAAyC,UAAU,CAAC,EAAE,aAAa,MAAM,EAAE,CAC5E,CAAA;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,aAAa,CAAC,EAAE;QAC3B,WAAW,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAwB;QAC9D,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,SAAS,CAAC;QACxD,YAAY,EAAE,UAAU,CAAC,EAAE;KAC5B,CAAA;AACH,CAAC;AAGD,SAAS,YAAY,CAAC,QAAe,EAAE,QAAe;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,MAAM,GAAU,EAAE,CAAA;IACxB,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACnC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAQ;QAChC,IAAI,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,SAA0B,EAC1B,QAAyB,EACzB,MAAc,EACd,KAA8B;IAE9B,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,eAAO,CAAC,OAAO,CAAQ,CAAA;IAE/D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CACV,oDAAoD,QAAQ,CAAC,aAAa,MAAM,MAAM,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAC3H,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,CAAwB,CAAA;IACjF,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;QAC3D,CAAC,CAAC,cAAc,CAAC,OAAO;QACxB,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAClD,CAAC,CAAE,KAAK,CAAC,OAAiB;QAC1B,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,WAAW,GAAG,eAAe;QACjC,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,eAAe,CAAC;QAChD,CAAC,CAAC,eAAe,CAAA;IAEnB,MAAM,aAAa,CAAC,oBAAoB,CAAC;QACvC,EAAE,EAAE,QAAQ,CAAC,SAAS;QACtB,MAAM;QACN,IAAI,EAAE;YACJ,GAAG,QAAQ,CAAC,WAAW;YACvB,MAAM,EAAE;gBACN,GAAG,cAAc;gBACjB,GAAG,KAAK;gBACR,OAAO,EAAE,WAAW;aACrB;SACF;KACF,CAAC,CAAA;AACJ,CAAC;AAWM,KAAK,UAAU,yBAAyB,CAC7C,SAA0B,EAC1B,KAGC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAC5E,QAAQ,EACR,KAAK,CAAC,SAAS,CAChB,CAAA;IAED,MAAM,YAAY,GAChB,MAAM,CACJ,QAAQ,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,WAAW,IAAI,EAAE,CAC3E,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IACvB,MAAM,gBAAgB,GACpB,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAClE,SAAS,CAAA;IAEX,MAAM,YAAY,GAAG,wBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACtD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAA;IACnF,CAAC;IAED,IAAI,MAAM,GAAG,SAAS,CAAA;IAEtB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,eAAO,CAAC,OAAO,CAAQ,CAAA;YAC/D,sEAAsE;YACtE,uEAAuE;YACvE,yEAAyE;YACzE,0EAA0E;YAC1E,gEAAgE;YAChE,MAAM,SAAS,GAAG,GAAG,CAAA;YACrB,MAAM,SAAS,GAAG,GAAG,CAAA,CAAC,2DAA2D;YACjF,IAAI,cAAc,GAAmC,IAAI,CAAA;YAEzD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,mBAAmB,CACtD,EAAE,WAAW,EAAE,CAAC,GAAG,kCAAmB,CAAC,EAAE,EACzC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,CAC5C,CAAA;gBACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAK;gBAC7C,cAAc;oBACZ,QAAQ,CAAC,IAAI,CAAC,CAAC,CAA0B,EAAE,EAAE;wBAC3C,MAAM,EAAE,GACJ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAA6B,CAAC,MAAkC,IAAI,EAAE,CAAA;wBACvF,IAAI,OAAO,IAAI,EAAE,CAAC,QAAQ,KAAK,OAAO;4BAAE,OAAO,IAAI,CAAA;wBACnD,IAAI,SAAS,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS;4BAAE,OAAO,IAAI,CAAA;wBACzD,OAAO,KAAK,CAAA;oBACd,CAAC,CAAC,IAAI,IAAI,CAAA;gBACZ,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS;oBAAE,MAAK;YACxC,CAAC;YAED,IAAI,cAAc,EAAE,qBAAqB,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,sBAAsB,CACtD,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,qBAAqB,CAAC,EAAE,EAC9C,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAA;gBACD,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CACV,uDAAuD,KAAK,CAAC,SAAS,GAAG,EACzE,CAAC,EAAE,OAAO,CACX,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,QAAQ;gBAC1B,CAAC,CAAC;oBACE;wBACE,EAAE,EAAE,QAAQ;wBACZ,MAAM,EAAE,QAAQ,EAAE,MAAM;wBACxB,MAAM,EAAE,YAAY;wBACpB,WAAW,EAAE,gBAAgB;wBAC7B,MAAM,EAAE,QAAQ,EAAE,MAAM;wBACxB,GAAG,EAAE,QAAQ;qBACd;iBACF;gBACH,CAAC,CAAC,IAAI,CAAA;YAER,MAAM,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE;gBAC5D,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,SAAS,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,IAAI,SAAS;gBAC7E,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS;gBACtD,aAAa,EAAE,YAAY;gBAC3B,kBAAkB,EAAE,gBAAgB;gBACpC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,kBAAkB,EAAE,KAAK,CAAC,SAAS;gBACnC,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC1C,CAAC,CAAA;YACF,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CACV,wDAAwD,KAAK,CAAC,SAAS,EAAE,EACzE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CACjC,CAAA;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;AACjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"paypal-order-invoice.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/paypal-order-invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAO3E,wBAA8B,yBAAyB,CAAC,EACtD,KAAK,EACL,SAAS,GACV,EAAE,cAAc,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,iBA4JhC;AAED,eAAO,MAAM,MAAM,EAAE,gBAEpB,CAAA"}
1
+ {"version":3,"file":"paypal-order-invoice.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/paypal-order-invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAQ3E,wBAA8B,yBAAyB,CAAC,EACtD,KAAK,EACL,SAAS,GACV,EAAE,cAAc,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,iBA6JhC;AAED,eAAO,MAAM,MAAM,EAAE,gBAEpB,CAAA"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.config = void 0;
4
4
  exports.default = paypalOrderInvoiceHandler;
5
5
  const paypal_auth_1 = require("../modules/paypal/utils/paypal-auth");
6
+ const paypal_fetch_1 = require("../modules/paypal/utils/paypal-fetch");
6
7
  const provider_ids_1 = require("../modules/paypal/utils/provider-ids");
7
8
  const PATCHABLE_STATUSES = new Set(["CREATED", "APPROVED", "SAVED"]);
8
9
  async function paypalOrderInvoiceHandler({ event, container, }) {
@@ -56,11 +57,12 @@ async function paypalOrderInvoiceHandler({ event, container, }) {
56
57
  if (!invoiceId)
57
58
  return;
58
59
  const creds = await paypal.getActiveCredentials();
59
- const { accessToken, base } = await (0, paypal_auth_1.getPayPalAccessToken)(creds);
60
+ const base = (0, paypal_auth_1.getPayPalApiBase)(creds.environment);
61
+ const accessToken = await paypal.getAppAccessToken();
60
62
  let paypalOrderStatus = "";
61
63
  let currentInvoiceId = "";
62
64
  try {
63
- const statusResp = await fetch(`${base}/v2/checkout/orders/${encodeURIComponent(paypalOrderId)}`, { headers: { Authorization: `Bearer ${accessToken}` } });
65
+ const statusResp = await (0, paypal_fetch_1.paypalFetch)(`${base}/v2/checkout/orders/${encodeURIComponent(paypalOrderId)}`, { headers: { Authorization: `Bearer ${accessToken}` } });
64
66
  if (statusResp.ok) {
65
67
  const currentOrder = await statusResp.json().catch(() => ({}));
66
68
  paypalOrderStatus = String(currentOrder?.status || "").toUpperCase();
@@ -86,7 +88,7 @@ async function paypalOrderInvoiceHandler({ event, container, }) {
86
88
  console.info(`[PayPal] invoice_id already "${invoiceId}" — skipping PATCH`);
87
89
  return;
88
90
  }
89
- const patchResp = await fetch(`${base}/v2/checkout/orders/${encodeURIComponent(paypalOrderId)}`, {
91
+ const patchResp = await (0, paypal_fetch_1.paypalFetch)(`${base}/v2/checkout/orders/${encodeURIComponent(paypalOrderId)}`, {
90
92
  method: "PATCH",
91
93
  headers: {
92
94
  Authorization: `Bearer ${accessToken}`,
@@ -1 +1 @@
1
- {"version":3,"file":"paypal-order-invoice.js","sourceRoot":"","sources":["../../../../src/subscribers/paypal-order-invoice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paypal-order-invoice.js","sourceRoot":"","sources":["../../../../src/subscribers/paypal-order-invoice.ts"],"names":[],"mappings":"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"}
package/README.md CHANGED
@@ -131,6 +131,10 @@ npx medusa db:migrate
131
131
 
132
132
  Credentials are saved automatically. Prefer manual setup? Click **Insert credentials manually** and paste your Client ID and Secret from [developer.paypal.com](https://developer.paypal.com/dashboard/).
133
133
 
134
+ > **🔐 Encrypt secrets at rest (recommended for production).** Set `PAYPAL_ENCRYPTION_KEY` to any strong random string. The seller client secret and PayPal app access token are then stored AES‑256‑GCM‑encrypted in the database; without it they are stored in plaintext (the previous default). Encryption is transparent — existing plaintext credentials keep working and are upgraded to ciphertext the next time they are saved/refreshed.
135
+ >
136
+ > Keep this key safe and backed up: **if it is lost, stored credentials cannot be decrypted** and you must reconnect PayPal. Rotating the key requires re‑saving credentials.
137
+
134
138
  ---
135
139
 
136
140
  ### Step 4 — Enable providers in your region
@@ -167,6 +171,14 @@ See the [storefront integration & testing guide →](https://www.npmjs.com/packa
167
171
 
168
172
  ---
169
173
 
174
+ ## 📊 Observability
175
+
176
+ - **Metrics** — operational counters (e.g. `create_order_success`, `capture_order_failed`, `webhook_success`, `webhook_dead_letter`) are persisted in the `paypal_metric` table.
177
+ - **Audit trail** — security/lifecycle events (credential changes, environment switches, webhook registration, capture/refund failures, alerts) are emitted as structured JSON log lines tagged `"log":"paypal_audit"`. In production, ship stdout to your log aggregator and filter on that tag. Sensitive fields (secrets, tokens) are redacted before logging.
178
+ - **Webhooks** — every received event is recorded in `paypal_webhook_event` with status (`processed` / `failed` / `dead_letter` / `ignored`), attempt count, and last error; failures are retried by the `paypal-webhook-retry` job.
179
+
180
+ ---
181
+
170
182
  ## 📄 License
171
183
 
172
184
  MIT © [Easy Payment](https://www.npmjs.com/package/@easypayment/medusa-payment-paypal)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easypayment/medusa-payment-paypal",
3
- "version": "0.9.15",
3
+ "version": "0.9.16",
4
4
  "description": "PayPal integration for Medusa v2",
5
5
  "author": "EasyPayment Plugins",
6
6
  "license": "MIT",
@@ -36,6 +36,8 @@
36
36
  "scripts": {
37
37
  "build": "medusa plugin:build",
38
38
  "develop": "medusa plugin:develop",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest",
39
41
  "prepublishOnly": "npm run build"
40
42
  },
41
43
  "devDependencies": {
@@ -47,7 +49,8 @@
47
49
  "@medusajs/ui": "^4.0.0",
48
50
  "@medusajs/icons": "2.12.5",
49
51
  "@swc/core": "^1.5.7",
50
- "typescript": "^5.6.2"
52
+ "typescript": "^5.6.2",
53
+ "vitest": "^2.0.5"
51
54
  },
52
55
  "peerDependencies": {
53
56
  "@medusajs/admin-sdk": "^2.12.0",
@@ -3,7 +3,8 @@ import type { IPaymentModuleService, Logger } from "@medusajs/framework/types"
3
3
  import { ContainerRegistrationKeys, Modules } from "@medusajs/framework/utils"
4
4
  import { randomUUID } from "crypto"
5
5
  import type PayPalModuleService from "../../../../modules/paypal/service"
6
- import { getPayPalAccessToken } from "../../../../modules/paypal/utils/paypal-auth"
6
+ import { getPayPalApiBase } from "../../../../modules/paypal/utils/paypal-auth"
7
+ import { paypalFetch } from "../../../../modules/paypal/utils/paypal-fetch"
7
8
  import { isPayPalProviderId } from "../../../../modules/paypal/utils/provider-ids"
8
9
 
9
10
  const BN_CODE = "MBJTechnolabs_SI_SPB"
@@ -196,17 +197,24 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
196
197
  return res.status(400).json({ message: "Invalid order_id format" })
197
198
  }
198
199
 
200
+ // Bind the capture to the cart's own PayPal session, fail-closed: the
201
+ // order_id MUST be the one this cart's session created (stored by
202
+ // create-order). This prevents capturing an arbitrary, caller-supplied
203
+ // order_id against the merchant account.
199
204
  const session = await findPayPalSessionForCart(cartId, scope)
200
- if (session) {
201
- const sessionOrderId = String(
202
- (session.session_data?.paypal as Record<string, unknown>)?.order_id ||
203
- session.session_data?.order_id || ""
204
- )
205
- if (sessionOrderId && sessionOrderId !== orderId) {
206
- return res.status(400).json({
207
- message: "order_id does not match the payment session for this cart",
208
- })
209
- }
205
+ const sessionOrderId = String(
206
+ (session?.session_data?.paypal as Record<string, unknown>)?.order_id ||
207
+ session?.session_data?.order_id || ""
208
+ )
209
+ if (!session || !sessionOrderId) {
210
+ return res.status(409).json({
211
+ message: "No PayPal order is associated with this cart's payment session",
212
+ })
213
+ }
214
+ if (sessionOrderId !== orderId) {
215
+ return res.status(400).json({
216
+ message: "order_id does not match the payment session for this cart",
217
+ })
210
218
  }
211
219
 
212
220
  const existingCapture = await getExistingCapture(cartId, orderId, scope)
@@ -215,7 +223,10 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
215
223
  }
216
224
 
217
225
  const creds = await paypal.getActiveCredentials()
218
- const { accessToken, base } = await getPayPalAccessToken(creds)
226
+ // Cached app access token (single-flight refresh) — avoids an OAuth
227
+ // round-trip on every capture-order call.
228
+ const base = getPayPalApiBase(creds.environment)
229
+ const accessToken = await paypal.getAppAccessToken()
219
230
  const settings = await paypal.getSettings().catch(() => ({}))
220
231
  const data =
221
232
  settings && typeof settings === "object" && "data" in settings
@@ -234,7 +245,7 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
234
245
  ? `${base}/v2/checkout/orders/${safeOrderId}/authorize`
235
246
  : `${base}/v2/checkout/orders/${safeOrderId}/capture`
236
247
 
237
- const ppResp = await fetch(endpoint, {
248
+ const ppResp = await paypalFetch(endpoint, {
238
249
  method: "POST",
239
250
  headers: {
240
251
  Authorization: `Bearer ${accessToken}`,
@@ -7,7 +7,8 @@ import {
7
7
  assertPayPalCurrencySupported,
8
8
  normalizeCurrencyCode,
9
9
  } from "../../../../modules/paypal/utils/currencies"
10
- import { getPayPalAccessToken } from "../../../../modules/paypal/utils/paypal-auth"
10
+ import { getPayPalApiBase } from "../../../../modules/paypal/utils/paypal-auth"
11
+ import { paypalFetch } from "../../../../modules/paypal/utils/paypal-fetch"
11
12
  import type PayPalModuleService from "../../../../modules/paypal/service"
12
13
  import { isPayPalProviderId } from "../../../../modules/paypal/utils/provider-ids"
13
14
 
@@ -300,87 +301,113 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
300
301
 
301
302
  const finalPurchaseItems = purchaseItemsRaw.map((item: any) => item.paypalItem)
302
303
 
303
- const adjustedItemTotal = sendItemDetails && finalPurchaseItems.length > 0
304
- ? roundedItemSumFixed
305
- : subtotalMajor
304
+ // Reconcile rounding drift so the items we send sum to the cart subtotal.
305
+ if (finalPurchaseItems.length > 0) {
306
+ const diff = parseFloat((subtotalMajor - roundedItemSumFixed).toFixed(exponent))
307
+ if (Math.abs(diff) > 0.000001) {
308
+ finalPurchaseItems.push({
309
+ name: "Line Item Amount Offset",
310
+ quantity: "1",
311
+ unit_amount: {
312
+ currency_code: currency,
313
+ value: diff.toFixed(exponent),
314
+ },
315
+ })
316
+ }
317
+ }
306
318
 
307
- const diff = parseFloat((subtotalMajor - roundedItemSumFixed).toFixed(exponent))
319
+ // Only send line items (and an item_total) when we actually have them.
320
+ const sendItems = finalPurchaseItems.length > 0
321
+
322
+ // item_total MUST equal the exact sum of (unit_amount * quantity) of the
323
+ // items we send; otherwise PayPal rejects with ITEM_TOTAL_MISMATCH.
324
+ const itemsTotalMajor = sendItems
325
+ ? parseFloat(
326
+ finalPurchaseItems
327
+ .reduce(
328
+ (sum: number, it: any) =>
329
+ sum + Number(it.unit_amount.value) * Number(it.quantity),
330
+ 0
331
+ )
332
+ .toFixed(exponent)
333
+ )
334
+ : 0
308
335
 
309
- if (Math.abs(diff) > 0.000001 && sendItemDetails && finalPurchaseItems.length > 0) {
310
- finalPurchaseItems.push({
311
- name: "Line Item Amount Offset",
312
- quantity: "1",
313
- unit_amount: {
314
- currency_code: currency,
315
- value: diff.toFixed(exponent),
316
- },
317
- })
318
- }
336
+ const discountValue = discountMajor + giftCardMajor
319
337
 
338
+ // Build a breakdown only when we send line items. A breakdown whose
339
+ // item_total has no matching items (or items with no item_total) is
340
+ // rejected by PayPal, so with no items we send just the order total.
320
341
  const breakdown: Record<string, any> = {}
321
- if (adjustedItemTotal > 0) {
322
- breakdown.item_total = {
323
- currency_code: currency,
324
- value: adjustedItemTotal.toFixed(exponent),
325
- }
326
- }
327
- if (shippingMajor > 0) {
328
- breakdown.shipping = {
329
- currency_code: currency,
330
- value: shippingMajor.toFixed(exponent),
331
- }
332
- }
333
- if (taxMajor > 0) {
334
- breakdown.tax_total = {
335
- currency_code: currency,
336
- value: taxMajor.toFixed(exponent),
342
+ if (sendItems) {
343
+ if (itemsTotalMajor > 0) {
344
+ breakdown.item_total = {
345
+ currency_code: currency,
346
+ value: itemsTotalMajor.toFixed(exponent),
347
+ }
337
348
  }
338
- }
339
-
340
- const discountValue = discountMajor + giftCardMajor
341
- if (discountValue > 0 && finalPurchaseItems.length > 0) {
342
- breakdown.discount = {
343
- currency_code: currency,
344
- value: discountValue.toFixed(exponent),
349
+ if (shippingMajor > 0) {
350
+ breakdown.shipping = {
351
+ currency_code: currency,
352
+ value: shippingMajor.toFixed(exponent),
353
+ }
345
354
  }
346
- }
347
-
348
- const breakdownSum = parseFloat(
349
- (adjustedItemTotal + shippingMajor + taxMajor - discountValue).toFixed(exponent)
350
- )
351
-
352
- if (Math.abs(breakdownSum - totalMajor) > 0.000001) {
353
- const gap = parseFloat((totalMajor - breakdownSum).toFixed(exponent))
354
-
355
- if (gap > 0) {
355
+ if (taxMajor > 0) {
356
356
  breakdown.tax_total = {
357
357
  currency_code: currency,
358
- value: parseFloat(
359
- ((Number(breakdown.tax_total?.value || 0) + gap).toFixed(exponent))
360
- ).toFixed(exponent),
358
+ value: taxMajor.toFixed(exponent),
361
359
  }
362
- } else {
363
- breakdown.shipping_discount = {
360
+ }
361
+ if (discountValue > 0) {
362
+ breakdown.discount = {
364
363
  currency_code: currency,
365
- value: Math.abs(gap).toFixed(exponent),
364
+ value: discountValue.toFixed(exponent),
365
+ }
366
+ }
367
+
368
+ const breakdownSum = parseFloat(
369
+ (itemsTotalMajor + shippingMajor + taxMajor - discountValue).toFixed(exponent)
370
+ )
371
+
372
+ if (Math.abs(breakdownSum - totalMajor) > 0.000001) {
373
+ const gap = parseFloat((totalMajor - breakdownSum).toFixed(exponent))
374
+
375
+ if (gap > 0) {
376
+ breakdown.tax_total = {
377
+ currency_code: currency,
378
+ value: parseFloat(
379
+ ((Number(breakdown.tax_total?.value || 0) + gap).toFixed(exponent))
380
+ ).toFixed(exponent),
381
+ }
382
+ } else {
383
+ breakdown.shipping_discount = {
384
+ currency_code: currency,
385
+ value: Math.abs(gap).toFixed(exponent),
386
+ }
366
387
  }
367
388
  }
368
389
  }
369
390
 
370
- const { accessToken, base } = await getPayPalAccessToken({
371
- environment: creds.environment,
372
- client_id: creds.client_id,
373
- client_secret: creds.client_secret,
374
- })
391
+ logger.debug(
392
+ `[paypal] create-order line items (request_id=${requestId}): send_item_details=${sendItemDetails}, cart_items=${lineItems.length}, sent_items=${finalPurchaseItems.length}, items_total=${itemsTotalMajor}, subtotal=${subtotalMajor}, total=${totalMajor}`
393
+ )
394
+
395
+ // Use the module's cached app access token (single-flight refresh, ~9h TTL)
396
+ // instead of minting a fresh OAuth token on every create-order call.
397
+ const base = getPayPalApiBase(creds.environment)
398
+ const accessToken = await paypal.getAppAccessToken()
375
399
 
376
- const requestId = resolveIdempotencyKey(req, "create-order", `pp-create-${cart.id}`)
400
+ // Deterministic-per-cart idempotency key for the PayPal call. Kept distinct
401
+ // from `requestId` (the log/response correlation id declared at the top of
402
+ // POST) so the two never shadow each other.
403
+ const paypalRequestId = resolveIdempotencyKey(req, "create-order", `pp-create-${cart.id}`)
377
404
 
378
- const ppResp = await fetch(`${base}/v2/checkout/orders`, {
405
+ const ppResp = await paypalFetch(`${base}/v2/checkout/orders`, {
379
406
  method: "POST",
380
407
  headers: {
381
408
  Authorization: `Bearer ${accessToken}`,
382
409
  "Content-Type": "application/json",
383
- "PayPal-Request-Id": requestId,
410
+ "PayPal-Request-Id": paypalRequestId,
384
411
  "PayPal-Partner-Attribution-Id": BN_CODE,
385
412
  },
386
413
  body: JSON.stringify({
@@ -388,6 +415,10 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
388
415
  purchase_units: [
389
416
  {
390
417
  reference_id: "default",
418
+ // Set custom_id on the purchase unit (not just the order) so PayPal
419
+ // propagates the cart id onto capture/refund webhook resources,
420
+ // letting webhooks resolve the session directly without a scan.
421
+ custom_id: cart.id,
391
422
  invoice_id: invoiceId,
392
423
  ...(statementName ? { soft_descriptor: statementName.slice(0, 22) } : {}),
393
424
  amount: {
@@ -1,5 +1,6 @@
1
1
  import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
2
2
  import type PayPalModuleService from "../../../../modules/paypal/service"
3
+ import { paypalFetch } from "../../../../modules/paypal/utils/paypal-fetch"
3
4
  import {
4
5
  computeNextRetryAt,
5
6
  isAllowedEventType,
@@ -158,7 +159,7 @@ async function verifyWebhookSignature(
158
159
  throw new Error(`Missing required PayPal webhook headers: ${missing.join(", ")}`)
159
160
  }
160
161
 
161
- const resp = await fetch(`${base}/v1/notifications/verify-webhook-signature`, {
162
+ const resp = await paypalFetch(`${base}/v1/notifications/verify-webhook-signature`, {
162
163
  method: "POST",
163
164
  headers: {
164
165
  Authorization: `Bearer ${accessToken}`,
@@ -3,7 +3,7 @@ import type { IPaymentModuleService, Logger } from "@medusajs/framework/types"
3
3
  import { ContainerRegistrationKeys, Modules } from "@medusajs/framework/utils"
4
4
  import { completeCartWorkflow } from "@medusajs/core-flows"
5
5
  import { randomUUID } from "crypto"
6
- import type PayPalModuleService from "../../../modules/paypal/service"
6
+ import { isPayPalProviderId } from "../../../modules/paypal/utils/provider-ids"
7
7
 
8
8
  export async function POST(req: MedusaRequest, res: MedusaResponse) {
9
9
  const logger = req.scope.resolve<Logger>(ContainerRegistrationKeys.LOGGER)
@@ -43,7 +43,7 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
43
43
 
44
44
  const sessions = cart?.payment_collection?.payment_sessions || []
45
45
  const session = sessions
46
- .filter((s: any) => String(s.provider_id || "").includes("paypal"))
46
+ .filter((s: any) => isPayPalProviderId(s.provider_id))
47
47
  .sort(
48
48
  (a: any, b: any) =>
49
49
  new Date(b.created_at || 0).getTime() - new Date(a.created_at || 0).getTime()
@@ -55,38 +55,11 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
55
55
 
56
56
  const paymentModule = req.scope.resolve(Modules.PAYMENT) as IPaymentModuleService
57
57
 
58
- const [liveSession] = await paymentModule.listPaymentSessions(
59
- { id: [session.id] },
60
- { take: 1 }
61
- )
62
-
63
- const liveData = (liveSession?.data || {}) as Record<string, any>
64
-
65
- const paypal = req.scope.resolve<PayPalModuleService>("paypal_onboarding")
66
- const settings = await paypal.getSettings().catch(() => ({}))
67
- const settingsData =
68
- settings && typeof settings === "object" && "data" in settings
69
- ? ((settings as { data?: Record<string, any> }).data ?? {})
70
- : {}
71
- const additionalSettings = (settingsData.additional_settings || {}) as Record<string, any>
72
- const paymentAction =
73
- typeof additionalSettings.paymentAction === "string"
74
- ? additionalSettings.paymentAction
75
- : "capture"
76
-
77
- const timestampKey = paymentAction === "authorize" ? "authorized_at" : "captured_at"
78
-
79
- if (!liveData[timestampKey]) {
80
- await (paymentModule as any).updatePaymentSession({
81
- id: session.id,
82
- data: {
83
- ...liveData,
84
- [timestampKey]: new Date().toISOString(),
85
- },
86
- amount: liveSession?.amount ?? session.amount,
87
- currency_code: liveSession?.currency_code ?? session.currency_code,
88
- })
89
- }
58
+ // Do NOT fabricate captured_at/authorized_at here. The authoritative
59
+ // timestamp and status are set by the provider's authorizePayment (invoked
60
+ // via authorizePaymentSession below) only after it verifies the capture /
61
+ // authorization against PayPal. Stamping it ourselves would mark an unpaid
62
+ // session as paid.
90
63
 
91
64
  const currentStatus = String(session.status || "")
92
65
  if (currentStatus !== "authorized") {
@@ -96,8 +69,10 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
96
69
  `[paypal] paypal-complete authorizePaymentSession succeeded (request_id=${requestId}, session_id=${session.id})`
97
70
  )
98
71
  } catch (e: any) {
72
+ // Authorization is the gate for completion; if it fails, the
73
+ // completeCartWorkflow below fails too and we report that honestly.
99
74
  logger.warn(
100
- `[paypal] paypal-complete authorizePaymentSession non-fatal (request_id=${requestId}, session_id=${session.id}): ${
75
+ `[paypal] paypal-complete authorizePaymentSession failed (request_id=${requestId}, session_id=${session.id}): ${
101
76
  e?.message ?? String(e)
102
77
  }`
103
78
  )
@@ -113,12 +88,31 @@ export async function POST(req: MedusaRequest, res: MedusaResponse) {
113
88
  )
114
89
  return res.json({ success: true, cart_id, order_id: result?.id, request_id: requestId })
115
90
  } catch (e: any) {
116
- logger.warn(
91
+ // The cart may have been completed by a concurrent request between our
92
+ // initial check and now — treat that as success, not an error.
93
+ const recheck = await query
94
+ .graph({ entity: "cart", fields: ["id", "completed_at"], filters: { id: cart_id } })
95
+ .catch(() => ({ data: [] as any[] }))
96
+ if (recheck?.data?.[0]?.completed_at) {
97
+ return res.json({ success: true, cart_id, already_completed: true, request_id: requestId })
98
+ }
99
+
100
+ logger.error(
117
101
  `[paypal] paypal-complete completeCartWorkflow failed (request_id=${requestId}, cart_id=${cart_id}): ${
118
102
  e?.message ?? String(e)
119
- }`
103
+ }`,
104
+ e instanceof Error ? e : undefined
120
105
  )
121
- return res.json({ success: true, session_id: session.id, request_id: requestId })
106
+ // The payment may have been captured at PayPal but the order was not
107
+ // finalized. Report failure (not a false success) so the storefront can
108
+ // surface a "payment taken, contact support" state.
109
+ return res.status(500).json({
110
+ success: false,
111
+ cart_id,
112
+ session_id: session.id,
113
+ message: "Payment was processed but the order could not be finalized.",
114
+ request_id: requestId,
115
+ })
122
116
  }
123
117
  } catch (e: any) {
124
118
  logger.error(
@@ -1,4 +1,5 @@
1
1
  import type { MedusaContainer } from "@medusajs/framework/types"
2
+ import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
2
3
  import type PayPalModuleService from "../modules/paypal/service"
3
4
  import {
4
5
  computeNextRetryAt,
@@ -8,11 +9,60 @@ import {
8
9
  processPayPalWebhookEvent,
9
10
  } from "../modules/paypal/webhook-processor"
10
11
 
12
+ // Bound how many failed events one run drains so the cron can't load an
13
+ // unbounded backlog into memory.
14
+ const RETRY_BATCH_SIZE = 100
15
+
16
+ // Stable key for the Postgres advisory lock that serializes this cron across
17
+ // instances. pg_try_advisory_xact_lock auto-releases at transaction end, so
18
+ // there is no unlock to pair (and no risk of a leaked lock).
19
+ const RETRY_ADVISORY_LOCK_KEY = 838907812
20
+
11
21
  export default async function paypalWebhookRetry(container: MedusaContainer) {
22
+ // Run the sweep under a Postgres advisory lock so that with multiple server
23
+ // instances running this cron, only one drains the queue per cycle (each
24
+ // event is processed at most once). Falls back to running directly if the
25
+ // raw connection isn't resolvable, so the job degrades gracefully rather
26
+ // than breaking.
27
+ let pg: any = null
28
+ try {
29
+ pg = container.resolve(ContainerRegistrationKeys.PG_CONNECTION)
30
+ } catch {
31
+ pg = null
32
+ }
33
+
34
+ if (!pg?.transaction) {
35
+ await runRetrySweep(container)
36
+ return
37
+ }
38
+
39
+ try {
40
+ await pg.transaction(async (trx: any) => {
41
+ const res = await trx.raw(
42
+ "SELECT pg_try_advisory_xact_lock(?) AS locked",
43
+ [RETRY_ADVISORY_LOCK_KEY]
44
+ )
45
+ const locked = res?.rows?.[0]?.locked ?? res?.[0]?.locked ?? false
46
+ if (!locked) {
47
+ console.info("[PayPal] webhook-retry: another instance holds the lock, skipping")
48
+ return
49
+ }
50
+ await runRetrySweep(container)
51
+ })
52
+ } catch (e: any) {
53
+ console.warn("[PayPal] webhook-retry: advisory lock path failed, running unlocked:", e?.message)
54
+ await runRetrySweep(container)
55
+ }
56
+ }
57
+
58
+ async function runRetrySweep(container: MedusaContainer) {
12
59
  const paypal = container.resolve<PayPalModuleService>("paypal_onboarding")
13
60
  const now = Date.now()
14
61
 
15
- const candidates = await paypal.listPayPalWebhookEvents({ status: "failed" })
62
+ const candidates = await paypal.listPayPalWebhookEvents(
63
+ { status: "failed" },
64
+ { take: RETRY_BATCH_SIZE, order: { next_retry_at: "ASC" } }
65
+ )
16
66
  if (!candidates?.length) return
17
67
 
18
68
  console.info(