From 01ba96692b4e9d1942ba9e277c59855c7f2c627f Mon Sep 17 00:00:00 2001 From: bc-nick Date: Tue, 24 Dec 2024 11:56:43 +0100 Subject: [PATCH] feat(payment): PAYPAL-4937 updates after review --- .../payment/payment-method-request-sender.ts | 39 +++---------------- .../src/payment/payment-method-transformer.ts | 32 +++++++++++++++ 2 files changed, 37 insertions(+), 34 deletions(-) create mode 100644 packages/core/src/payment/payment-method-transformer.ts diff --git a/packages/core/src/payment/payment-method-request-sender.ts b/packages/core/src/payment/payment-method-request-sender.ts index 8411202e8a..df5eb921bf 100644 --- a/packages/core/src/payment/payment-method-request-sender.ts +++ b/packages/core/src/payment/payment-method-request-sender.ts @@ -14,6 +14,7 @@ import { HeadlessPaymentRequestOptions, } from './headless-payment'; import PaymentMethod from './payment-method'; +import paymentMethodTransformer from './payment-method-transformer'; export default class PaymentMethodRequestSender { constructor(private _requestSender: RequestSender) {} @@ -58,12 +59,12 @@ export default class PaymentMethodRequestSender { methodId: string, options: HeadlessPaymentRequestOptions, ): Promise> { - const entityId = this.getPaymentEntityId(methodId); + const entityId = this._getPaymentEntityId(methodId); const graphQLQuery = ` query { site { - paymentWalletWithInitializationData(filter: {paymentWalletEntityId: "${entityId}"}) { + paymentWalletWithInitializationData(filter: { paymentWalletEntityId: "${entityId}" }) { clientToken initializationData } @@ -83,40 +84,10 @@ export default class PaymentMethodRequestSender { return this._requestSender .post('/graphql', requestOptions) - .then((response) => this.transformToPaymentMethodResponse(response, methodId)); + .then((response) => paymentMethodTransformer(response, methodId)); } - private transformToPaymentMethodResponse( - response: Response, - methodId: string, - ): Response { - const { - body: { - data: { - site: { - paymentWalletWithInitializationData: { clientToken, initializationData }, - }, - }, - }, - } = response; - - return { - ...response, - body: { - initializationData: initializationData - ? JSON.parse(atob(initializationData)) - : null, - clientToken, - id: methodId, - config: {}, - method: '', - supportedCards: [], - type: 'PAYMENT_TYPE_API', - }, - }; - } - - private getPaymentEntityId(methodId: string): HeadlessPaymentMethodType { + private _getPaymentEntityId(methodId: string): HeadlessPaymentMethodType { const entityId = HeadlessPaymentMethodConfig[methodId]; if (!entityId) { diff --git a/packages/core/src/payment/payment-method-transformer.ts b/packages/core/src/payment/payment-method-transformer.ts new file mode 100644 index 0000000000..17f9e8b4bd --- /dev/null +++ b/packages/core/src/payment/payment-method-transformer.ts @@ -0,0 +1,32 @@ +import { Response } from '@bigcommerce/request-sender'; + +import { HeadlessPaymentMethodResponse } from './headless-payment'; +import PaymentMethod from './payment-method'; + +export default function paymentMethodTransformer( + response: Response, + methodId: string, +): Response { + const { + body: { + data: { + site: { + paymentWalletWithInitializationData: { clientToken, initializationData }, + }, + }, + }, + } = response; + + return { + ...response, + body: { + initializationData: initializationData ? JSON.parse(atob(initializationData)) : null, + clientToken, + id: methodId, + config: {}, + method: '', + supportedCards: [], + type: 'PAYMENT_TYPE_API', + }, + }; +}