Array.length > 0 &&
+ !isBancontact}>
,
multi_use: option,
}
+type payment_type = NORMAL | NEW_MANDATE | SETUP_MANDATE | NONE
type list = {
redirect_url: string,
currency: string,
payment_methods: array,
mandate_payment: option,
- payment_type: string,
+ payment_type: payment_type,
}
open Utils
@@ -731,7 +732,7 @@ let defaultList = {
currency: "",
payment_methods: [],
mandate_payment: None,
- payment_type: "",
+ payment_type: NONE,
}
let getMethod = str => {
switch str {
@@ -925,13 +926,31 @@ let getMandate = (dict, str) => {
})
}
+let paymentTypeMapper = payment_type => {
+ switch payment_type {
+ | "normal" => NORMAL
+ | "new_mandate" => NEW_MANDATE
+ | "setup_mandate" => SETUP_MANDATE
+ | _ => NONE
+ }
+}
+
+let paymentTypeToStringMapper = payment_type => {
+ switch payment_type {
+ | NORMAL => "normal"
+ | NEW_MANDATE => "new_mandate"
+ | SETUP_MANDATE => "setup_mandate"
+ | NONE => ""
+ }
+}
+
let itemToObjMapper = dict => {
{
redirect_url: getString(dict, "redirect_url", ""),
currency: getString(dict, "currency", ""),
payment_methods: getMethodsArr(dict, "payment_methods"),
mandate_payment: getMandate(dict, "mandate_payment"),
- payment_type: getString(dict, "payment_type", ""),
+ payment_type: getString(dict, "payment_type", "")->paymentTypeMapper,
}
}
diff --git a/src/SoftTheme.res b/src/SoftTheme.res
index 95d4b028d..8e5ffd925 100644
--- a/src/SoftTheme.res
+++ b/src/SoftTheme.res
@@ -41,7 +41,7 @@ let soft = {
spacingGridRow: "20px",
buttonBackgroundColor: "#3c3d3e",
buttonHeight: "48px",
- buttonWidth: "thin",
+ buttonWidth: "100%",
buttonBorderRadius: "6px",
buttonBorderColor: "#7d8fff",
buttonTextColor: "#7d8fff",
diff --git a/src/Types/PaymentType.res b/src/Types/PaymentType.res
index 81cd88c5b..8be3f9969 100644
--- a/src/Types/PaymentType.res
+++ b/src/Types/PaymentType.res
@@ -114,6 +114,7 @@ type customerCard = {
expiryYear: string,
cardToken: string,
cardHolderName: option,
+ nickname: string,
}
type customerMethods = {
paymentToken: string,
@@ -123,6 +124,7 @@ type customerMethods = {
card: customerCard,
paymentMethodType: option,
defaultPaymentMethodSet: bool,
+ requiresCvv: bool,
}
type savedCardsLoadState =
LoadingSavedCards | LoadedSavedCards(array, bool) | NoResult(bool)
@@ -134,6 +136,7 @@ type billingAddress = {
type sdkHandleConfirmPayment = {
handleConfirm: bool,
+ buttonText?: string,
confirmParams: ConfirmType.confirmParams,
}
@@ -163,6 +166,7 @@ let defaultCardDetails = {
expiryYear: "",
cardToken: "",
cardHolderName: None,
+ nickname: "",
}
let defaultCustomerMethods = {
paymentToken: "",
@@ -172,6 +176,7 @@ let defaultCustomerMethods = {
card: defaultCardDetails,
paymentMethodType: None,
defaultPaymentMethodSet: false,
+ requiresCvv: true,
}
let defaultLayout = {
defaultCollapsed: false,
@@ -779,6 +784,7 @@ let getCardDetails = (dict, str) => {
expiryYear: getString(json, "expiry_year", ""),
cardToken: getString(json, "card_token", ""),
cardHolderName: Some(getString(json, "card_holder_name", "")),
+ nickname: getString(json, "nick_name", ""),
}
})
->Option.getOr(defaultCardDetails)
@@ -819,6 +825,7 @@ let createCustomerObjArr = dict => {
card: getCardDetails(dict, "card"),
paymentMethodType: getPaymentMethodType(dict),
defaultPaymentMethodSet: getBool(dict, "default_payment_method_set", false),
+ requiresCvv: getBool(dict, "requires_cvv", true),
}
})
LoadedSavedCards(customerPaymentMethods, isGuestCustomer)
@@ -840,6 +847,7 @@ let getCustomerMethods = (dict, str) => {
card: getCardDetails(json, "card"),
paymentMethodType: getPaymentMethodType(dict),
defaultPaymentMethodSet: getBool(dict, "default_payment_method_set", false),
+ requiresCvv: getBool(dict, "requires_cvv", true),
}
})
LoadedSavedCards(customerPaymentMethods, false)
@@ -895,6 +903,7 @@ let getConfirmParams = dict => {
let getSdkHandleConfirmPaymentProps = dict => {
handleConfirm: dict->getBool("handleConfirm", false),
+ buttonText: ?dict->getOptionString("buttonText"),
confirmParams: dict->getDictfromDict("confirmParams")->getConfirmParams,
}
diff --git a/src/Utilities/DynamicFieldsUtils.res b/src/Utilities/DynamicFieldsUtils.res
index ea40c55bd..ec2ee4594 100644
--- a/src/Utilities/DynamicFieldsUtils.res
+++ b/src/Utilities/DynamicFieldsUtils.res
@@ -693,3 +693,24 @@ let useSubmitCallback = () => {
}
}, (line1, line2, state, city, postalCode))
}
+
+let usePaymentMethodTypeFromList = (~list, ~paymentMethod, ~paymentMethodType) => {
+ React.useMemo3(() => {
+ PaymentMethodsRecord.getPaymentMethodTypeFromList(
+ ~list,
+ ~paymentMethod,
+ ~paymentMethodType=PaymentUtils.getPaymentMethodName(
+ ~paymentMethodType=paymentMethod,
+ ~paymentMethodName=paymentMethodType,
+ ),
+ )->Belt.Option.getWithDefault(PaymentMethodsRecord.defaultPaymentMethodType)
+ }, (list, paymentMethod, paymentMethodType))
+}
+
+let useAreAllRequiredFieldsPrefilled = (~list, ~paymentMethod, ~paymentMethodType) => {
+ let paymentMethodTypes = usePaymentMethodTypeFromList(~list, ~paymentMethod, ~paymentMethodType)
+
+ paymentMethodTypes.required_fields->Js.Array2.reduce((acc, requiredField) => {
+ acc && requiredField.value != ""
+ }, true)
+}
diff --git a/src/Utilities/PaymentBody.res b/src/Utilities/PaymentBody.res
index 5468c8970..44c429a09 100644
--- a/src/Utilities/PaymentBody.res
+++ b/src/Utilities/PaymentBody.res
@@ -1,29 +1,38 @@
@val @scope("window")
external btoa: string => string = "btoa"
-let cardPaymentBody = (~cardNumber, ~month, ~year, ~cardHolderName, ~cvcNumber, ~cardBrand) => [
- ("payment_method", "card"->JSON.Encode.string),
- (
- "payment_method_data",
- [
- (
- "card",
- [
- ("card_number", cardNumber->CardUtils.clearSpaces->JSON.Encode.string),
- ("card_exp_month", month->JSON.Encode.string),
- ("card_exp_year", year->JSON.Encode.string),
- ("card_holder_name", cardHolderName->JSON.Encode.string),
- ("card_cvc", cvcNumber->JSON.Encode.string),
- ("card_issuer", ""->JSON.Encode.string),
- ]
- ->Array.concat(cardBrand)
- ->Dict.fromArray
- ->JSON.Encode.object,
- ),
- ]
- ->Dict.fromArray
- ->JSON.Encode.object,
- ),
-]
+let cardPaymentBody = (
+ ~cardNumber,
+ ~month,
+ ~year,
+ ~cardHolderName,
+ ~cvcNumber,
+ ~cardBrand,
+ ~nickname="",
+ (),
+) => {
+ let cardBody = [
+ ("card_number", cardNumber->CardUtils.clearSpaces->JSON.Encode.string),
+ ("card_exp_month", month->JSON.Encode.string),
+ ("card_exp_year", year->JSON.Encode.string),
+ ("card_holder_name", cardHolderName->JSON.Encode.string),
+ ("card_cvc", cvcNumber->JSON.Encode.string),
+ ("card_issuer", ""->JSON.Encode.string),
+ ]
+
+ if nickname != "" {
+ cardBody->Array.push(("nick_name", nickname->JSON.Encode.string))->ignore
+ }
+
+ [
+ ("payment_method", "card"->JSON.Encode.string),
+ (
+ "payment_method_data",
+ [("card", cardBody->Array.concat(cardBrand)->Dict.fromArray->JSON.Encode.object)]
+ ->Dict.fromArray
+ ->JSON.Encode.object,
+ ),
+ ]
+}
let bancontactBody = () => [
("payment_method", "bank_redirect"->JSON.Encode.string),
@@ -55,12 +64,19 @@ let boletoBody = (~socialSecurityNumber) => [
),
]
-let savedCardBody = (~paymentToken, ~customerId, ~cvcNumber) => [
- ("payment_method", "card"->JSON.Encode.string),
- ("payment_token", paymentToken->JSON.Encode.string),
- ("customer_id", customerId->JSON.Encode.string),
- ("card_cvc", cvcNumber->JSON.Encode.string),
-]
+let savedCardBody = (~paymentToken, ~customerId, ~cvcNumber, ~requiresCvv) => {
+ let savedCardBody = [
+ ("payment_method", "card"->JSON.Encode.string),
+ ("payment_token", paymentToken->JSON.Encode.string),
+ ("customer_id", customerId->JSON.Encode.string),
+ ]
+
+ if requiresCvv {
+ savedCardBody->Array.push(("card_cvc", cvcNumber->JSON.Encode.string))->ignore
+ }
+
+ savedCardBody
+}
let customerAcceptanceBody =
[
@@ -171,7 +187,7 @@ let achBankDebitBody = (
->Dict.fromArray
->JSON.Encode.object,
),
- ]->Array.concat(mandateBody(paymentType))
+ ]->Array.concat(mandateBody(paymentType->PaymentMethodsRecord.paymentTypeToStringMapper))
let sepaBankDebitBody = (
~fullName,
diff --git a/src/Utilities/PaymentHelpers.res b/src/Utilities/PaymentHelpers.res
index 939ad46af..4a6b8cadf 100644
--- a/src/Utilities/PaymentHelpers.res
+++ b/src/Utilities/PaymentHelpers.res
@@ -29,7 +29,7 @@ let retrievePaymentIntent = (clientSecret, headers, ~optLogger, ~switchToCustomP
)
fetchApi(
uri,
- ~method_=Fetch.Get,
+ ~method=#GET,
~headers=headers->ApiEndpoint.addCustomPodHeader(~switchToCustomPod, ()),
(),
)
@@ -98,9 +98,9 @@ let rec intentCall = (
string,
~bodyStr: string=?,
~headers: Dict.t=?,
- ~method_: Fetch.requestMethod,
+ ~method: Fetch.method,
unit,
- ) => OrcaPaymentPage.Promise.t,
+ ) => OrcaPaymentPage.Promise.t,
~uri,
~headers,
~bodyStr,
@@ -135,14 +135,14 @@ let rec intentCall = (
)
let handleOpenUrl = url => {
if isPaymentSession {
- Window.location.replace(. url)
+ Window.Location.replace(. url)
} else {
openUrl(url)
}
}
fetchApi(
uri,
- ~method_=fetchMethod,
+ ~method=fetchMethod,
~headers=headers->ApiEndpoint.addCustomPodHeader(~switchToCustomPod, ()),
~bodyStr,
(),
@@ -257,7 +257,7 @@ let rec intentCall = (
~handleUserError,
~paymentType,
~iframeId,
- ~fetchMethod=Get,
+ ~fetchMethod=#GET,
~setIsManualRetryEnabled,
~switchToCustomPod,
~sdkHandleOneClickConfirmPayment,
@@ -532,7 +532,7 @@ let rec intentCall = (
~handleUserError,
~paymentType,
~iframeId,
- ~fetchMethod=Get,
+ ~fetchMethod=#GET,
~setIsManualRetryEnabled,
~switchToCustomPod,
~sdkHandleOneClickConfirmPayment,
@@ -577,7 +577,7 @@ let usePaymentSync = (optLogger: option, paymentType: pay
~handleUserError,
~paymentType,
~iframeId,
- ~fetchMethod=Get,
+ ~fetchMethod=#GET,
~setIsManualRetryEnabled,
~switchToCustomPod,
~sdkHandleOneClickConfirmPayment=keys.sdkHandleOneClickConfirmPayment,
@@ -598,36 +598,26 @@ let usePaymentSync = (optLogger: option, paymentType: pay
}
}
-let rec maskPayload = payloadDict => {
- let keys = payloadDict->Dict.keysToArray
- let maskedPayload = Dict.make()
- keys
- ->Array.map(key => {
- let value = payloadDict->Dict.get(key)->Option.getOr(JSON.Encode.null)
- if value->JSON.Decode.array->Option.isSome {
- let arr = value->JSON.Decode.array->Option.getOr([])
- arr->Array.forEachWithIndex((element, index) => {
- maskedPayload->Dict.set(
- key ++ "[" ++ index->Belt.Int.toString ++ "]",
- element->Utils.getDictFromJson->maskPayload->JSON.Encode.string,
- )
- })
- } else if value->JSON.Decode.object->Option.isSome {
- let valueDict = value->Utils.getDictFromJson
- maskedPayload->Dict.set(key, valueDict->maskPayload->JSON.Encode.string)
- } else {
- maskedPayload->Dict.set(
- key,
- value
- ->JSON.Decode.string
- ->Option.getOr("")
- ->String.replaceRegExp(%re(`/\S/g`), "x")
- ->JSON.Encode.string,
- )
- }
- })
- ->ignore
- maskedPayload->JSON.Encode.object->JSON.stringify
+let maskStr = str => str->Js.String2.replaceByRe(%re(`/\S/g`), "x")
+
+let rec maskPayload = payloadJson => {
+ switch payloadJson->JSON.Classify.classify {
+ | Object(valueDict) =>
+ valueDict
+ ->Dict.toArray
+ ->Array.map(entry => {
+ let (key, value) = entry
+ (key, maskPayload(value))
+ })
+ ->Dict.fromArray
+ ->JSON.Encode.object
+
+ | Array(arr) => arr->Array.map(maskPayload)->JSON.Encode.array
+ | String(valueStr) => valueStr->maskStr->JSON.Encode.string
+ | Number(float) => Float.toString(float)->maskStr->JSON.Encode.string
+ | Bool(bool) => (bool ? "true" : "false")->JSON.Encode.string
+ | Null => JSON.Encode.string("null")
+ }
}
let usePaymentIntent = (optLogger: option, paymentType: payment) => {
@@ -664,15 +654,10 @@ let usePaymentIntent = (optLogger: option, paymentType: p
(),
)
let uri = `${endpoint}/payments/${paymentIntentID}/confirm`
- let fetchMethod = Fetch.Post
let callIntent = body => {
let maskedPayload =
- body
- ->OrcaUtils.safeParseOpt
- ->Option.getOr(JSON.Encode.null)
- ->Utils.getDictFromJson
- ->maskPayload
+ body->OrcaUtils.safeParseOpt->Option.getOr(JSON.Encode.null)->maskPayload->JSON.stringify
let loggerPayload =
[
("payload", maskedPayload->JSON.Encode.string),
@@ -729,7 +714,7 @@ let usePaymentIntent = (optLogger: option, paymentType: p
~handleUserError,
~paymentType,
~iframeId,
- ~fetchMethod,
+ ~fetchMethod=#POST,
~setIsManualRetryEnabled,
~switchToCustomPod,
~sdkHandleOneClickConfirmPayment=keys.sdkHandleOneClickConfirmPayment,
@@ -753,7 +738,12 @@ let usePaymentIntent = (optLogger: option, paymentType: p
let bodyStr =
body
->Array.concat(
- bodyArr->Array.concatMany([PaymentBody.mandateBody(mandatePaymentType), broswerInfo()]),
+ bodyArr->Array.concatMany([
+ PaymentBody.mandateBody(
+ mandatePaymentType->PaymentMethodsRecord.paymentTypeToStringMapper,
+ ),
+ broswerInfo(),
+ ]),
)
->Dict.fromArray
->JSON.Encode.object
@@ -824,7 +814,7 @@ let useSessions = (
)
fetchApi(
uri,
- ~method_=Fetch.Post,
+ ~method=#POST,
~bodyStr=body->JSON.stringify,
~headers=headers->ApiEndpoint.addCustomPodHeader(~switchToCustomPod, ()),
(),
@@ -899,7 +889,7 @@ let usePaymentMethodList = (
)
fetchApi(
uri,
- ~method_=Fetch.Get,
+ ~method=#GET,
~headers=headers->ApiEndpoint.addCustomPodHeader(~switchToCustomPod, ()),
(),
)
@@ -973,7 +963,7 @@ let useCustomerDetails = (
)
fetchApi(
uri,
- ~method_=Fetch.Get,
+ ~method=#GET,
~headers=headers->ApiEndpoint.addCustomPodHeader(~switchToCustomPod, ()),
(),
)
diff --git a/src/Utilities/PaymentUtils.res b/src/Utilities/PaymentUtils.res
index 2d0fe5d2e..c99bd8398 100644
--- a/src/Utilities/PaymentUtils.res
+++ b/src/Utilities/PaymentUtils.res
@@ -3,6 +3,8 @@ let paymentListLookupNew = (
~order,
~showApplePay,
~showGooglePay,
+ ~areAllGooglePayRequiredFieldsPrefilled,
+ ~areAllApplePayRequiredFieldsPrefilled,
) => {
let pmList = list->PaymentMethodsRecord.buildFromPaymentList
let walletsList = []
@@ -26,14 +28,14 @@ let paymentListLookupNew = (
let applePayFields = pmList->Array.find(item => item.paymentMethodName === "apple_pay")
switch googlePayFields {
| Some(val) =>
- if val.fields->Array.length > 0 && showGooglePay {
+ if val.fields->Array.length > 0 && showGooglePay && !areAllGooglePayRequiredFieldsPrefilled {
walletToBeDisplayedInTabs->Array.push("google_pay")->ignore
}
| None => ()
}
switch applePayFields {
| Some(val) =>
- if val.fields->Array.length > 0 && showApplePay {
+ if val.fields->Array.length > 0 && showApplePay && !areAllApplePayRequiredFieldsPrefilled {
walletToBeDisplayedInTabs->Array.push("apple_pay")->ignore
}
| None => ()
@@ -223,8 +225,11 @@ let getPaymentMethodName = (~paymentMethodType, ~paymentMethodName) => {
}
}
-let isAppendingCustomerAcceptance = (~isGuestCustomer, ~paymentType) => {
- !isGuestCustomer && (paymentType === "new_mandate" || paymentType === "setup_mandate")
+let isAppendingCustomerAcceptance = (
+ ~isGuestCustomer,
+ ~paymentType: PaymentMethodsRecord.payment_type,
+) => {
+ !isGuestCustomer && (paymentType === NEW_MANDATE || paymentType === SETUP_MANDATE)
}
let appendedCustomerAcceptance = (~isGuestCustomer, ~paymentType, ~body) => {
diff --git a/src/Utilities/Utils.res b/src/Utilities/Utils.res
index 7db1cc6f7..256d83216 100644
--- a/src/Utilities/Utils.res
+++ b/src/Utilities/Utils.res
@@ -810,25 +810,23 @@ let getHeaders = (~uri=?, ~token=?, ~headers=Dict.make(), ()) => {
let (x, val) = entries
Dict.set(headerObj, x, val)
})
- Fetch.HeadersInit.make(headerObj->dictToObj)
-}
-let fetchApi = (
- uri,
- ~bodyStr: string="",
- ~headers=Dict.make(),
- ~method_: Fetch.requestMethod,
- (),
-) => {
+ Fetch.Headers.fromObject(headerObj->dictToObj)
+}
+let fetchApi = (uri, ~bodyStr: string="", ~headers=Js.Dict.empty(), ~method: Fetch.method, ()) => {
open Promise
- let body = switch method_ {
- | Get => resolve(None)
- | _ => resolve(Some(Fetch.BodyInit.make(bodyStr)))
+ let body = switch method {
+ | #GET => resolve(None)
+ | _ => resolve(Some(Fetch.Body.string(bodyStr)))
}
body->then(body => {
- Fetch.fetchWithInit(
+ Fetch.fetch(
uri,
- Fetch.RequestInit.make(~method_, ~body?, ~headers=getHeaders(~headers, ~uri, ()), ()),
+ {
+ method,
+ ?body,
+ headers: getHeaders(~headers, ~uri, ()),
+ },
)
->catch(err => {
reject(err)
diff --git a/src/Window.res b/src/Window.res
index e7454b182..8568c1364 100644
--- a/src/Window.res
+++ b/src/Window.res
@@ -126,5 +126,10 @@ let isInteg = hostname === "dev.hyperswitch.io"
let isProd = hostname === "checkout.hyperswitch.io"
-type location = {replace: (. string) => unit}
-@val @scope("window") external location: location = "location"
+module Location = {
+ @val @scope(("window", "location")) external replace: (. string) => unit = "replace"
+}
+
+module Element = {
+ @get external clientWidth: Dom.element => int = "clientWidth"
+}
diff --git a/src/orca-loader/Elements.res b/src/orca-loader/Elements.res
index d1fe7d44e..de0df844c 100644
--- a/src/orca-loader/Elements.res
+++ b/src/orca-loader/Elements.res
@@ -119,7 +119,7 @@ let make = (
// setTimeout(() => {
let msg = [("paymentMethodList", json)]->Dict.fromArray
mountedIframeRef->Window.iframePostMessage(msg)
- let maskedPayload = json->getDictFromJson->PaymentHelpers.maskPayload
+ let maskedPayload = json->PaymentHelpers.maskPayload->JSON.stringify
logger.setLogInfo(~value=maskedPayload, ~eventName=PAYMENT_METHODS_RESPONSE, ())
// }, 5000)->ignore
json->resolve
@@ -217,7 +217,6 @@ let make = (
mountedIframeRef,
selectorString,
sdkHandleOneClickConfirmPayment,
- displaySavedPaymentMethods,
) => {
open Promise
@@ -707,9 +706,7 @@ let make = (
})
->ignore
fetchPaymentsList(mountedIframeRef)
- if displaySavedPaymentMethods {
- fetchCustomerDetails(mountedIframeRef)
- }
+ fetchCustomerDetails(mountedIframeRef)
mountedIframeRef->Window.iframePostMessage(message)
}
diff --git a/src/orca-loader/Hyper.res b/src/orca-loader/Hyper.res
index a75ffdc9b..8b93ab9b2 100644
--- a/src/orca-loader/Hyper.res
+++ b/src/orca-loader/Hyper.res
@@ -196,9 +196,12 @@ let make = (publishableKey, options: option, analyticsInfo: optionthen(resp => {
let statusCode = resp->Fetch.Response.status->Int.toString
diff --git a/src/orca-loader/LoaderPaymentElement.res b/src/orca-loader/LoaderPaymentElement.res
index 18f9350bd..bb50aa838 100644
--- a/src/orca-loader/LoaderPaymentElement.res
+++ b/src/orca-loader/LoaderPaymentElement.res
@@ -22,12 +22,6 @@ let make = (componentType, options, setIframeRef, iframeRef, mountPostMessage) =
true,
)
- let displaySavedPaymentMethods =
- options->getDecodedBoolFromJson(
- callbackFuncForExtractingValFromDict("displaySavedPaymentMethods"),
- true,
- )
-
let on = (eventType, eventHandler) => {
switch eventType->eventTypeMapper {
| Escape =>
@@ -184,7 +178,7 @@ let make = (componentType, options, setIframeRef, iframeRef, mountPostMessage) =
switch eventDataObject->getOptionalJsonFromJson("openurl") {
| Some(val) => {
let url = val->getStringfromjson("")
- Window.location.replace(. url)
+ Window.Location.replace(. url)
}
| None => ()
}
@@ -295,7 +289,6 @@ let make = (componentType, options, setIframeRef, iframeRef, mountPostMessage) =
Window.querySelector(`#orca-payment-element-iframeRef-${localSelectorString}`),
localSelectorString,
sdkHandleOneClickConfirmPayment,
- displaySavedPaymentMethods,
)
}
}
diff --git a/src/orca-loader/PaymentSessionMethods.res b/src/orca-loader/PaymentSessionMethods.res
index a7b228c64..eaa3b0296 100644
--- a/src/orca-loader/PaymentSessionMethods.res
+++ b/src/orca-loader/PaymentSessionMethods.res
@@ -120,7 +120,7 @@ let getCustomerSavedPaymentMethods = (
~handleUserError=false,
~paymentType,
~iframeId="",
- ~fetchMethod=Fetch.Post,
+ ~fetchMethod=#POST,
~setIsManualRetryEnabled={(. _) => ()},
~switchToCustomPod=false,
~sdkHandleOneClickConfirmPayment=false,