From a1c8deef91b3bff0b8f0eab9098913acf8fb16b6 Mon Sep 17 00:00:00 2001 From: Krriishhhhhh Date: Wed, 1 Oct 2025 19:17:36 +0530 Subject: [PATCH 1/2] refactor: centralize Delete Payment Method V2 endpoint in APIUtils - Moved Delete Payment Method V2 URL from PaymentHelpersV2 to APIUtils.res - Organized endpoints under clear V1 and V2 sections in APIUtils - Replaced hardcoded references with centralized constants - Improved maintainability and consistency across API endpoints - No functional changes, all existing tests pass --- src/Utilities/APIHelpers/APIUtils.res | 10 +++++++++- src/Utilities/PaymentHelpers.res | 13 +++++++++++++ src/Utilities/PaymentHelpersV2.res | 18 ++++++++++++++++-- src/hyper-loader/Hyper.res | 1 + 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/Utilities/APIHelpers/APIUtils.res b/src/Utilities/APIHelpers/APIUtils.res index 03666c905..7f7ca7cba 100644 --- a/src/Utilities/APIHelpers/APIUtils.res +++ b/src/Utilities/APIHelpers/APIUtils.res @@ -13,7 +13,10 @@ type apiCallV1 = | RetrieveStatus | ConfirmPayout -type apiCallV2 = FetchSessionsV2 +type apiCallV2 = + | FetchSessionsV2 + | DeletePaymentMethodV2 + type apiCall = | V1(apiCallV1) @@ -27,6 +30,7 @@ type apiParams = { forceSync: option, pollId: option, payoutId: option, + pmSessionId : option, } let generateApiUrl = (apiCallType: apiCall, ~params: apiParams) => { @@ -38,6 +42,7 @@ let generateApiUrl = (apiCallType: apiCall, ~params: apiParams) => { forceSync, pollId, payoutId, + pmSessionId, } = params let clientSecretVal = clientSecret->Option.getOr("") @@ -46,6 +51,8 @@ let generateApiUrl = (apiCallType: apiCall, ~params: apiParams) => { let paymentMethodIdVal = paymentMethodId->Option.getOr("") let pollIdVal = pollId->Option.getOr("") let payoutIdVal = payoutId->Option.getOr("") + let pmSessionIdVal = pmSessionId->Option.getOr("") + let baseUrl = customBackendBaseUrl->Option.getOr( @@ -118,6 +125,7 @@ let generateApiUrl = (apiCallType: apiCall, ~params: apiParams) => { | V2(inner) => switch inner { | FetchSessionsV2 => `v2/payments/${paymentIntentID}/create-external-sdk-tokens` + | DeletePaymentMethodV2 => `v2/payment-method-sessions/${pmSessionIdVal}` } } diff --git a/src/Utilities/PaymentHelpers.res b/src/Utilities/PaymentHelpers.res index 22ca3d4f1..c22751272 100644 --- a/src/Utilities/PaymentHelpers.res +++ b/src/Utilities/PaymentHelpers.res @@ -37,6 +37,7 @@ let retrievePaymentIntent = async ( forceSync: isForceSync ? Some("true") : None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -73,6 +74,7 @@ let threeDsAuth = async (~clientSecret, ~logger, ~threeDsMethodComp, ~headers) = forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) let broswerInfo = BrowserSpec.broswerInfo @@ -175,6 +177,7 @@ let retrieveStatus = async (~publishableKey, ~customPodUri, pollID, logger) => { forceSync: None, pollId: Some(pollID), payoutId: None, + pmSessionId : None, }, ) @@ -1372,6 +1375,7 @@ let fetchSessions = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1413,6 +1417,7 @@ let confirmPayout = async ( forceSync: None, pollId: None, payoutId: Some(payoutId), + pmSessionId : None, }, ) @@ -1456,6 +1461,7 @@ let createPaymentMethod = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1498,6 +1504,7 @@ let fetchPaymentMethodList = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1535,6 +1542,7 @@ let fetchCustomerPaymentMethodList = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1642,6 +1650,7 @@ let callAuthLink = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1706,6 +1715,7 @@ let callAuthExchange = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1779,6 +1789,7 @@ let fetchSavedPaymentMethodList = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1810,6 +1821,7 @@ let deletePaymentMethod = async (~ephemeralKey, ~paymentMethodId, ~logger, ~cust forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) @@ -1848,6 +1860,7 @@ let calculateTax = async ( forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) let onSuccess = data => data diff --git a/src/Utilities/PaymentHelpersV2.res b/src/Utilities/PaymentHelpersV2.res index 2a6b96e1f..aaf070fdd 100644 --- a/src/Utilities/PaymentHelpersV2.res +++ b/src/Utilities/PaymentHelpersV2.res @@ -309,12 +309,26 @@ let deletePaymentMethodV2 = ( ~customPodUri, ) => { open Promise - let endpoint = ApiEndpoint.getApiEndPoint() + let headers = [ ("x-profile-id", `${profileId}`), ("Authorization", `publishable-key=${publishableKey},client-secret=${pmClientSecret}`), ] - let uri = `${endpoint}/v2/payment-method-sessions/${pmSessionId}` + + let uri = APIUtils.generateApiUrl( + V2(DeletePaymentMethodV2), + ~params={ + customBackendBaseUrl: None, + clientSecret: None, + publishableKey: Some(publishableKey), + paymentMethodId: None, + forceSync: None, + pollId: None, + payoutId: None, + pmSessionId: Some(pmSessionId), + }, + ) + fetchApi( uri, ~method=#DELETE, diff --git a/src/hyper-loader/Hyper.res b/src/hyper-loader/Hyper.res index 5a5a45800..4ce1271d3 100644 --- a/src/hyper-loader/Hyper.res +++ b/src/hyper-loader/Hyper.res @@ -341,6 +341,7 @@ let make = (keys, options: option, analyticsInfo: option) => { forceSync: None, pollId: None, payoutId: None, + pmSessionId : None, }, ) From a601aa603fa82cfd91023c201875e78e86d09a9d Mon Sep 17 00:00:00 2001 From: Krriishhhhhh Date: Fri, 24 Oct 2025 22:53:43 +0530 Subject: [PATCH 2/2] refactor: use fetchApiWithLogging for deletePaymentMethodV2 --- src/Utilities/APIHelpers/APIUtils.res | 6 ++-- src/Utilities/PaymentHelpers.res | 26 +++++++-------- src/Utilities/PaymentHelpersV2.res | 46 ++++++++++++--------------- src/hyper-loader/Hyper.res | 2 +- 4 files changed, 36 insertions(+), 44 deletions(-) diff --git a/src/Utilities/APIHelpers/APIUtils.res b/src/Utilities/APIHelpers/APIUtils.res index 7f7ca7cba..71066eabd 100644 --- a/src/Utilities/APIHelpers/APIUtils.res +++ b/src/Utilities/APIHelpers/APIUtils.res @@ -13,11 +13,10 @@ type apiCallV1 = | RetrieveStatus | ConfirmPayout -type apiCallV2 = +type apiCallV2 = | FetchSessionsV2 | DeletePaymentMethodV2 - type apiCall = | V1(apiCallV1) | V2(apiCallV2) @@ -30,7 +29,7 @@ type apiParams = { forceSync: option, pollId: option, payoutId: option, - pmSessionId : option, + pmSessionId: option, } let generateApiUrl = (apiCallType: apiCall, ~params: apiParams) => { @@ -53,7 +52,6 @@ let generateApiUrl = (apiCallType: apiCall, ~params: apiParams) => { let payoutIdVal = payoutId->Option.getOr("") let pmSessionIdVal = pmSessionId->Option.getOr("") - let baseUrl = customBackendBaseUrl->Option.getOr( ApiEndpoint.getApiEndPoint(~publishableKey=publishableKeyVal), diff --git a/src/Utilities/PaymentHelpers.res b/src/Utilities/PaymentHelpers.res index c22751272..e211ae924 100644 --- a/src/Utilities/PaymentHelpers.res +++ b/src/Utilities/PaymentHelpers.res @@ -37,7 +37,7 @@ let retrievePaymentIntent = async ( forceSync: isForceSync ? Some("true") : None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -74,7 +74,7 @@ let threeDsAuth = async (~clientSecret, ~logger, ~threeDsMethodComp, ~headers) = forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) let broswerInfo = BrowserSpec.broswerInfo @@ -177,7 +177,7 @@ let retrieveStatus = async (~publishableKey, ~customPodUri, pollID, logger) => { forceSync: None, pollId: Some(pollID), payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1375,7 +1375,7 @@ let fetchSessions = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1417,7 +1417,7 @@ let confirmPayout = async ( forceSync: None, pollId: None, payoutId: Some(payoutId), - pmSessionId : None, + pmSessionId: None, }, ) @@ -1461,7 +1461,7 @@ let createPaymentMethod = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1504,7 +1504,7 @@ let fetchPaymentMethodList = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1542,7 +1542,7 @@ let fetchCustomerPaymentMethodList = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1650,7 +1650,7 @@ let callAuthLink = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1715,7 +1715,7 @@ let callAuthExchange = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1789,7 +1789,7 @@ let fetchSavedPaymentMethodList = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1821,7 +1821,7 @@ let deletePaymentMethod = async (~ephemeralKey, ~paymentMethodId, ~logger, ~cust forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) @@ -1860,7 +1860,7 @@ let calculateTax = async ( forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, ) let onSuccess = data => data diff --git a/src/Utilities/PaymentHelpersV2.res b/src/Utilities/PaymentHelpersV2.res index aaf070fdd..3443df9f1 100644 --- a/src/Utilities/PaymentHelpersV2.res +++ b/src/Utilities/PaymentHelpersV2.res @@ -299,22 +299,20 @@ let fetchPaymentManagementList = ( }) } -let deletePaymentMethodV2 = ( +let deletePaymentMethodV2 = async( ~pmClientSecret, ~publishableKey, ~profileId, ~paymentMethodId, ~pmSessionId, - ~logger as _, + ~logger, ~customPodUri, ) => { - open Promise - let headers = [ ("x-profile-id", `${profileId}`), ("Authorization", `publishable-key=${publishableKey},client-secret=${pmClientSecret}`), ] - + let uri = APIUtils.generateApiUrl( V2(DeletePaymentMethodV2), ~params={ @@ -325,34 +323,30 @@ let deletePaymentMethodV2 = ( forceSync: None, pollId: None, payoutId: None, - pmSessionId: Some(pmSessionId), + pmSessionId: Some(pmSessionId), }, ) - fetchApi( + let bodyStr = [("payment_method_id", paymentMethodId->JSON.Encode.string)] + ->getJsonFromArrayOfJson + ->JSON.stringify + + let onSuccess = data => data + + let onFailure = _ => JSON.Encode.null + + await fetchApiWithLogging( uri, + ~eventName=DELETE_PAYMENT_METHODS_CALL, + ~logger, ~method=#DELETE, + ~bodyStr, ~headers=headers->ApiEndpoint.addCustomPodHeader(~customPodUri), - ~bodyStr=[("payment_method_id", paymentMethodId->JSON.Encode.string)] - ->getJsonFromArrayOfJson - ->JSON.stringify, + ~customPodUri=Some(customPodUri), + ~publishableKey=Some(publishableKey), + ~onSuccess, + ~onFailure, ) - ->then(resp => { - if !(resp->Fetch.Response.ok) { - resp - ->Fetch.Response.json - ->then(_ => { - JSON.Encode.null->resolve - }) - } else { - Fetch.Response.json(resp) - } - }) - ->catch(err => { - let exceptionMessage = err->formatException - Console.error2("Error ", exceptionMessage) - JSON.Encode.null->resolve - }) } let updatePaymentMethod = ( diff --git a/src/hyper-loader/Hyper.res b/src/hyper-loader/Hyper.res index 4ce1271d3..4d2c7113e 100644 --- a/src/hyper-loader/Hyper.res +++ b/src/hyper-loader/Hyper.res @@ -341,7 +341,7 @@ let make = (keys, options: option, analyticsInfo: option) => { forceSync: None, pollId: None, payoutId: None, - pmSessionId : None, + pmSessionId: None, }, )