diff --git a/packages/medusa-payment-stripe-processor/package.json b/packages/medusa-payment-stripe-processor/package.json index f4b739e59448e..70d7806ed00c8 100644 --- a/packages/medusa-payment-stripe-processor/package.json +++ b/packages/medusa-payment-stripe-processor/package.json @@ -1,5 +1,5 @@ { - "name": "medusa-payment-stripe-processor", + "name": "@medusajs/medusa-payment-stripe-processor", "version": "0.0.1", "description": "Stripe Payment provider for Meduas Commerce", "main": "dist/index.js", diff --git a/packages/medusa-payment-stripe-processor/src/helpers/__fixtures__/stripe-test.ts b/packages/medusa-payment-stripe-processor/src/core/__fixtures__/stripe-test.ts similarity index 100% rename from packages/medusa-payment-stripe-processor/src/helpers/__fixtures__/stripe-test.ts rename to packages/medusa-payment-stripe-processor/src/core/__fixtures__/stripe-test.ts diff --git a/packages/medusa-payment-stripe-processor/src/helpers/__tests__/stripe-base.js b/packages/medusa-payment-stripe-processor/src/core/__tests__/stripe-base.js similarity index 100% rename from packages/medusa-payment-stripe-processor/src/helpers/__tests__/stripe-base.js rename to packages/medusa-payment-stripe-processor/src/core/__tests__/stripe-base.js diff --git a/packages/medusa-payment-stripe-processor/src/helpers/__tests__/stripe-base.spec.ts b/packages/medusa-payment-stripe-processor/src/core/__tests__/stripe-base.spec.ts similarity index 100% rename from packages/medusa-payment-stripe-processor/src/helpers/__tests__/stripe-base.spec.ts rename to packages/medusa-payment-stripe-processor/src/core/__tests__/stripe-base.spec.ts diff --git a/packages/medusa-payment-stripe-processor/src/helpers/stripe-base.ts b/packages/medusa-payment-stripe-processor/src/core/stripe-base.ts similarity index 88% rename from packages/medusa-payment-stripe-processor/src/helpers/stripe-base.ts rename to packages/medusa-payment-stripe-processor/src/core/stripe-base.ts index c892fed5506da..cf6e1875f5117 100644 --- a/packages/medusa-payment-stripe-processor/src/helpers/stripe-base.ts +++ b/packages/medusa-payment-stripe-processor/src/core/stripe-base.ts @@ -56,8 +56,11 @@ abstract class StripeBase extends AbstractPaymentProcessor { return options } - async getPaymentStatus(paymentId: string): Promise { - const paymentIntent = await this.stripe_.paymentIntents.retrieve(paymentId) + async getPaymentStatus( + paymentSessionData: Record + ): Promise { + const id = paymentSessionData.id as string + const paymentIntent = await this.stripe_.paymentIntents.retrieve(id) switch (paymentIntent.status) { case "requires_payment_method": @@ -148,20 +151,28 @@ abstract class StripeBase extends AbstractPaymentProcessor { } async authorizePayment( - context: PaymentProcessorContext - ): Promise { - const id = context.paymentSessionData.id as string - await this.getPaymentStatus(id) + paymentSessionData: Record, + context: Record + ): Promise< + | PaymentProcessorError + | { + status: PaymentSessionStatus + data: PaymentProcessorSessionResponse["session_data"] + } + > { + const status = await this.getPaymentStatus(paymentSessionData) + return { data: paymentSessionData, status } } async cancelPayment( - paymentId: string + paymentSessionData: Record ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > { try { + const id = paymentSessionData.id as string return (await this.stripe_.paymentIntents.cancel( - paymentId + id )) as unknown as PaymentProcessorSessionResponse["session_data"] } catch (error) { if (error.payment_intent.status === ErrorIntentStatus.CANCELED) { @@ -180,9 +191,9 @@ abstract class StripeBase extends AbstractPaymentProcessor { ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > { - const { id } = context.paymentSessionData + const id = context.paymentSessionData.id as string try { - const intent = await this.stripe_.paymentIntents.capture(id as string) + const intent = await this.stripe_.paymentIntents.capture(id) return intent as unknown as PaymentProcessorSessionResponse["session_data"] } catch (error) { if (error.code === ErrorCodes.PAYMENT_INTENT_UNEXPECTED_STATE) { @@ -199,24 +210,24 @@ abstract class StripeBase extends AbstractPaymentProcessor { } async deletePayment( - paymentId: string + paymentSessionData: Record ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > { - return await this.cancelPayment(paymentId) + return await this.cancelPayment(paymentSessionData) } async refundPayment( - context: PaymentProcessorContext + paymentSessionData: Record, + refundAmount: number ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > { - const { amount } = context - const { id } = context.paymentSessionData + const id = paymentSessionData.id as string try { await this.stripe_.refunds.create({ - amount: Math.round(amount), + amount: Math.round(refundAmount), payment_intent: id as string, }) } catch (e) { @@ -226,16 +237,17 @@ abstract class StripeBase extends AbstractPaymentProcessor { ) } - return context.paymentSessionData + return paymentSessionData } async retrievePayment( - paymentId: string + paymentSessionData: Record ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > { try { - const intent = await this.stripe_.paymentIntents.retrieve(paymentId) + const id = paymentSessionData.id as string + const intent = await this.stripe_.paymentIntents.retrieve(id) return intent as unknown as PaymentProcessorSessionResponse["session_data"] } catch (e) { return this.buildError("An error occurred in retrievePayment", e) diff --git a/packages/medusa-payment-stripe-processor/src/services/stripe-bancontact.ts b/packages/medusa-payment-stripe-processor/src/services/stripe-bancontact.ts index d39babbf22545..970e04d64ab2b 100644 --- a/packages/medusa-payment-stripe-processor/src/services/stripe-bancontact.ts +++ b/packages/medusa-payment-stripe-processor/src/services/stripe-bancontact.ts @@ -1,5 +1,5 @@ -import StripeBase from "../helpers/stripe-base" -import { PaymentIntentOptions } from "../types"; +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions } from "../types" class BancontactProviderService extends StripeBase { static identifier = "stripe-bancontact" diff --git a/packages/medusa-payment-stripe-processor/src/services/stripe-blik.ts b/packages/medusa-payment-stripe-processor/src/services/stripe-blik.ts index ece460b6b32e1..895003e6fd356 100644 --- a/packages/medusa-payment-stripe-processor/src/services/stripe-blik.ts +++ b/packages/medusa-payment-stripe-processor/src/services/stripe-blik.ts @@ -1,5 +1,5 @@ -import StripeBase from "../helpers/stripe-base" -import { PaymentIntentOptions } from "../types"; +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions } from "../types" class BlikProviderService extends StripeBase { static identifier = "stripe-blik" diff --git a/packages/medusa-payment-stripe-processor/src/services/stripe-giropay.ts b/packages/medusa-payment-stripe-processor/src/services/stripe-giropay.ts index 123eb0fc62deb..c486e5dbe2697 100644 --- a/packages/medusa-payment-stripe-processor/src/services/stripe-giropay.ts +++ b/packages/medusa-payment-stripe-processor/src/services/stripe-giropay.ts @@ -1,5 +1,5 @@ -import StripeBase from "../helpers/stripe-base" -import { PaymentIntentOptions } from "../types"; +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions } from "../types" class GiropayProviderService extends StripeBase { static identifier = "stripe-giropay" diff --git a/packages/medusa-payment-stripe-processor/src/services/stripe-ideal.ts b/packages/medusa-payment-stripe-processor/src/services/stripe-ideal.ts index e4c8408c25085..336b9c698e45a 100644 --- a/packages/medusa-payment-stripe-processor/src/services/stripe-ideal.ts +++ b/packages/medusa-payment-stripe-processor/src/services/stripe-ideal.ts @@ -1,5 +1,5 @@ -import StripeBase from "../helpers/stripe-base" -import { PaymentIntentOptions } from "../types"; +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions } from "../types" class IdealProviderService extends StripeBase { static identifier = "stripe-ideal" diff --git a/packages/medusa-payment-stripe-processor/src/services/stripe-provider.ts b/packages/medusa-payment-stripe-processor/src/services/stripe-provider.ts index 7b9512253991d..547f2dd72ee01 100644 --- a/packages/medusa-payment-stripe-processor/src/services/stripe-provider.ts +++ b/packages/medusa-payment-stripe-processor/src/services/stripe-provider.ts @@ -1,5 +1,5 @@ -import StripeBase from "../helpers/stripe-base"; -import { PaymentIntentOptions } from "../types"; +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions } from "../types" class StripeProviderService extends StripeBase { static identifier = "stripe" diff --git a/packages/medusa-payment-stripe-processor/src/services/stripe-przelewy24.ts b/packages/medusa-payment-stripe-processor/src/services/stripe-przelewy24.ts index cec220c26f385..62daf61b1b457 100644 --- a/packages/medusa-payment-stripe-processor/src/services/stripe-przelewy24.ts +++ b/packages/medusa-payment-stripe-processor/src/services/stripe-przelewy24.ts @@ -1,5 +1,5 @@ -import StripeBase from "../helpers/stripe-base" -import { PaymentIntentOptions } from "../types"; +import StripeBase from "../core/stripe-base" +import { PaymentIntentOptions } from "../types" class Przelewy24ProviderService extends StripeBase { static identifier = "stripe-przelewy24" diff --git a/packages/medusa/src/interfaces/payment-processor.ts b/packages/medusa/src/interfaces/payment-processor.ts index d1bbeda55a6a0..2e0ed62c822e6 100644 --- a/packages/medusa/src/interfaces/payment-processor.ts +++ b/packages/medusa/src/interfaces/payment-processor.ts @@ -56,9 +56,11 @@ export interface PaymentProcessor { /** * Refund an existing session * @param paymentSessionData + * @param refundAmount */ refundPayment( - paymentSessionData: Record + paymentSessionData: Record, + refundAmount: number ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > @@ -185,7 +187,8 @@ export abstract class AbstractPaymentProcessor implements PaymentProcessor { ): Promise abstract refundPayment( - paymentSessionData: Record + paymentSessionData: Record, + refundAmount: number ): Promise< PaymentProcessorError | PaymentProcessorSessionResponse["session_data"] > diff --git a/packages/medusa/src/services/payment-provider.ts b/packages/medusa/src/services/payment-provider.ts index 95092699d5104..ce59da982ca9b 100644 --- a/packages/medusa/src/services/payment-provider.ts +++ b/packages/medusa/src/services/payment-provider.ts @@ -711,8 +711,11 @@ export default class PaymentProviderService extends TransactionBaseService { const provider = this.retrieveProvider(paymentToRefund.provider_id) if (provider instanceof AbstractPaymentProcessor) { - const res = await provider.refundPayment(paymentToRefund.data) - if ("error" in res) { + const res = await provider.refundPayment( + paymentToRefund.data, + refundAmount + ) + if (isPaymentProcessorError(res)) { this.throwFromPaymentProcessorError(res as PaymentProcessorError) } else { // Use else to avoid casting the object and infer the type instead @@ -777,8 +780,8 @@ export default class PaymentProviderService extends TransactionBaseService { const provider = this.retrieveProvider(payment.provider_id) if (provider instanceof AbstractPaymentProcessor) { - const res = await provider.refundPayment(payment.data) - if ("error" in res) { + const res = await provider.refundPayment(payment.data, amount) + if (isPaymentProcessorError(res)) { this.throwFromPaymentProcessorError(res as PaymentProcessorError) } else { // Use else to avoid casting the object and infer the type instead diff --git a/yarn.lock b/yarn.lock index 18dfd5c30e0c1..9cc22a7a5a936 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4845,6 +4845,23 @@ __metadata: languageName: unknown linkType: soft +"@medusajs/medusa-payment-stripe-processor@workspace:packages/medusa-payment-stripe-processor": + version: 0.0.0-use.local + resolution: "@medusajs/medusa-payment-stripe-processor@workspace:packages/medusa-payment-stripe-processor" + dependencies: + "@medusajs/medusa": ^1.7.7 + "@types/stripe": ^8.0.417 + body-parser: ^1.19.0 + cross-env: ^5.2.1 + express: ^4.17.1 + jest: ^25.5.4 + medusa-core-utils: ^1.1.38 + stripe: ^11.10.0 + peerDependencies: + "@medusajs/medusa": ^1.7.7 + languageName: unknown + linkType: soft + "@medusajs/medusa@*, @medusajs/medusa@^1.7.6, @medusajs/medusa@workspace:packages/medusa": version: 0.0.0-use.local resolution: "@medusajs/medusa@workspace:packages/medusa" @@ -25003,23 +25020,6 @@ __metadata: languageName: unknown linkType: soft -"medusa-payment-stripe-processor@workspace:packages/medusa-payment-stripe-processor": - version: 0.0.0-use.local - resolution: "medusa-payment-stripe-processor@workspace:packages/medusa-payment-stripe-processor" - dependencies: - "@medusajs/medusa": ^1.7.7 - "@types/stripe": ^8.0.417 - body-parser: ^1.19.0 - cross-env: ^5.2.1 - express: ^4.17.1 - jest: ^25.5.4 - medusa-core-utils: ^1.1.38 - stripe: ^11.10.0 - peerDependencies: - "@medusajs/medusa": ^1.7.7 - languageName: unknown - linkType: soft - "medusa-payment-stripe@workspace:packages/medusa-payment-stripe": version: 0.0.0-use.local resolution: "medusa-payment-stripe@workspace:packages/medusa-payment-stripe"