Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions scripts/update-submodules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,25 @@ echo ""
echo "🚀 Starting submodule update script..."
echo "--------------------------------------"

# Initialize and fetch recursively
# Step 1: Initialize and fetch submodules recursively
echo "🔍 Initializing submodules..."
git submodule update --init --recursive

echo ""
echo "🔄 Updating submodules to latest commits..."

# For each submodule, do:
# Step 2: Loop through each submodule and update
git submodule foreach --recursive '
echo ""
echo "👉 Processing submodule: $name"
# Check if we are inside a git repo
if [ ! -d ".git" ]; then
echo "⚠️ Skipping: .git not found in $name"

# Check if inside a valid Git working tree
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
echo "⚠️ Skipping: not a Git working tree in $name"
exit 0
fi

# Try to checkout main or master
# Try to find the appropriate remote branch
if git rev-parse --verify origin/main > /dev/null 2>&1; then
BRANCH="main"
elif git rev-parse --verify origin/master > /dev/null 2>&1; then
Expand Down
4 changes: 2 additions & 2 deletions src/CardSchemeComponent.res
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ let make = (
let enabledCardSchemes =
paymentMethodListValue->PaymentUtils.getSupportedCardBrands->Option.getOr([])

let matchedCardSchemes = cardNumber->CardUtils.clearSpaces->CardUtils.getAllMatchedCardSchemes
let matchedCardSchemes = cardNumber->CardValidations.clearSpaces->CardValidations.getAllMatchedCardSchemes

let eligibleCardSchemes = CardUtils.getEligibleCoBadgedCardSchemes(
~matchedCardSchemes,
Expand All @@ -53,7 +53,7 @@ let make = (

let loggerState = Recoil.useRecoilValueFromAtom(RecoilAtoms.loggerAtom)
let shouldShowCoBadgeCardSchemeDropDown =
isCardCoBadged && cardNumber->CardUtils.clearSpaces->String.length >= 16
isCardCoBadged && cardNumber->CardValidations.clearSpaces->String.length >= 16

React.useEffect1(() => {
if shouldShowCoBadgeCardSchemeDropDown && !isCoBadgedCardDetectedOnce.current {
Expand Down
67 changes: 2 additions & 65 deletions src/CardUtils.res
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
open CardValidations

type cardIssuer =
| VISA
| MASTERCARD
Expand Down Expand Up @@ -145,7 +147,6 @@ type options = {timeZone: string}
type dateTimeFormat = {resolvedOptions: unit => options}
@val @scope("Intl") external dateTimeFormat: unit => dateTimeFormat = "DateTimeFormat"

let toInt = val => val->Int.fromString->Option.getOr(0)
let toString = val => val->Int.toString

let getQueryParamsDictforKey = (searchParams, keyName) => {
Expand Down Expand Up @@ -204,33 +205,6 @@ let getCardStringFromType = val => {
}
}

let getobjFromCardPattern = cardBrand => {
let patternsDict = CardPattern.cardPatterns
patternsDict
->Array.filter(item => {
cardBrand === item.issuer
})
->Array.get(0)
->Option.getOr(CardPattern.defaultCardPattern)
}

let clearSpaces = value => {
value->String.replaceRegExp(%re("/\D+/g"), "")
}

let slice = (val, start: int, end: int) => {
val->String.slice(~start, ~end)
}

let getStrFromIndex = (arr: array<string>, index) => {
arr->Array.get(index)->Option.getOr("")
}

let formatCVCNumber = (val, cardType) => {
let clearValue = val->clearSpaces
let obj = getobjFromCardPattern(cardType)
clearValue->slice(0, obj.maxCVCLength)
}

let getCurrentMonthAndYear = (dateTimeIsoString: string) => {
let tempTimeDateString = dateTimeIsoString->String.replace("Z", "")
Expand Down Expand Up @@ -269,13 +243,6 @@ let formatCardNumber = (val, cardType) => {

formatedCard->String.trim
}
let splitExpiryDates = val => {
let split = val->String.split("/")
let value = split->Array.map(item => item->String.trim)
let month = value->Array.get(0)->Option.getOr("")
let year = value->Array.get(1)->Option.getOr("")
(month, year)
}
let getExpiryDates = val => {
let date = Date.make()->Date.toISOString
let (month, year) = splitExpiryDates(val)
Expand All @@ -296,24 +263,6 @@ let isExpiryComplete = val => {
month->String.length == 2 && year->String.length == 2
}

let formatCardExpiryNumber = val => {
let clearValue = val->clearSpaces
let expiryVal = clearValue->toInt
let formatted = if expiryVal >= 2 && expiryVal <= 9 && clearValue->String.length == 1 {
`0${clearValue} / `
} else if clearValue->String.length == 2 && expiryVal > 12 {
let val = clearValue->String.split("")
`0${val->getStrFromIndex(0)} / ${val->getStrFromIndex(1)}`
} else {
clearValue
}

if clearValue->String.length >= 3 {
`${formatted->slice(0, 2)} / ${formatted->slice(2, 4)}`
} else {
formatted
}
}

let getCardBrand = cardNumber => {
try {
Expand Down Expand Up @@ -750,18 +699,6 @@ let getPaymentMethodBrand = (customerMethod: PaymentType.customerMethods) => {
}
}

let getAllMatchedCardSchemes = cardNumber => {
CardPattern.cardPatterns->Array.reduce([], (acc, item) => {
if String.match(cardNumber, item.pattern)->Option.isSome {
acc->Array.push(item.issuer)
}
acc
})
}

let isCardSchemeEnabled = (~cardScheme, ~enabledCardSchemes) => {
enabledCardSchemes->Array.includes(cardScheme)
}

let getFirstValidCardSchemeFromPML = (~cardNumber, ~enabledCardSchemes) => {
let allMatchedCards = getAllMatchedCardSchemes(cardNumber->clearSpaces)
Expand Down
4 changes: 2 additions & 2 deletions src/CollectWidget.res
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ let make = (
// Empty string is valid (no error)
| (_, _, "") => (true, "")
| (PayoutMethodData(CardExpDate(_)), "number" | "tel", _) => {
let formattedExpiry = formatCardExpiryNumber(value)
let formattedExpiry = CardValidations.formatCardExpiryNumber(value)
if isExipryValid(formattedExpiry) {
handleInputFocus(~currentRef=cardExpRef, ~destinationRef=cardHolderRef)
}
Expand All @@ -103,7 +103,7 @@ let make = (
->Option.getOr(""),
)
let formattedCardNumber = formatCardNumber(value, cardType)
if cardValid(clearSpaces(formattedCardNumber), getCardStringFromType(cardType)) {
if cardValid(CardValidations.clearSpaces(formattedCardNumber), getCardStringFromType(cardType)) {
handleInputFocus(~currentRef=cardNumberRef, ~destinationRef=cardExpRef)
}
(true, formattedCardNumber)
Expand Down
2 changes: 1 addition & 1 deletion src/Components/AddBankAccount.res
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ let make = (~modalData, ~setModalData) => {
| Some(data: ACHTypes.data) =>
let last4digts =
data.iban !== ""
? data.iban->CardUtils.clearSpaces->String.sliceToEnd(~start=-4)
? data.iban->CardValidations.clearSpaces->String.sliceToEnd(~start=-4)
: data.accountNumber->String.sliceToEnd(~start=-4)

<div className="flex flex-row justify-between w-full relative animate-slowShow">
Expand Down
4 changes: 2 additions & 2 deletions src/Components/BlikCodePaymentInput.res
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ let make = () => {
let blikCodeRef = React.useRef(Nullable.null)
let formatBSB = bsb => {
let formatted = bsb->String.replaceRegExp(%re("/\D+/g"), "")
let firstPart = formatted->CardUtils.slice(0, 3)
let secondPart = formatted->CardUtils.slice(3, 6)
let firstPart = formatted->CardValidations.slice(0, 3)
let secondPart = formatted->CardValidations.slice(3, 6)

if formatted->String.length <= 3 {
firstPart
Expand Down
2 changes: 1 addition & 1 deletion src/Components/SavedCardItem.res
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ let make = (

// * Sending card expiry to handle cases where the card expires before the use date.
`${expiryMonth}${String.substring(~start=2, ~end=4, expiryYear)}`
->formatCardExpiryNumber
->CardValidations.formatCardExpiryNumber
->emitExpiryDate

PaymentUtils.emitPaymentMethodInfo(
Expand Down
8 changes: 4 additions & 4 deletions src/Hooks/CommonCardProps.res
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ let useCardForm = (~logger, ~paymentType) => {
}, [cardBrand])

React.useEffect(() => {
let obj = getobjFromCardPattern(cardBrand)
let obj = CardValidations.getobjFromCardPattern(cardBrand)
let cvcLength = obj.maxCVCLength
if (
cvcNumberInRange(cvcNumber, cardBrand)->Array.includes(true) &&
Expand Down Expand Up @@ -109,7 +109,7 @@ let useCardForm = (~logger, ~paymentType) => {
let val = ReactEvent.Form.target(ev)["value"]
logInputChangeInfo("cardNumber", logger)
let card = val->formatCardNumber(cardType)
let clearValue = card->clearSpaces
let clearValue = card->CardValidations.clearSpaces
setCardValid(clearValue, cardBrand, setIsCardValid)
if (
focusCardValid(clearValue, cardBrand) &&
Expand Down Expand Up @@ -137,7 +137,7 @@ let useCardForm = (~logger, ~paymentType) => {
let changeCardExpiry = ev => {
let val = ReactEvent.Form.target(ev)["value"]
logInputChangeInfo("cardExpiry", logger)
let formattedExpiry = val->formatCardExpiryNumber
let formattedExpiry = val->CardValidations.formatCardExpiryNumber
if isExipryValid(formattedExpiry) {
handleInputFocus(~currentRef=expiryRef, ~destinationRef=cvcRef)
emitExpiryDate(formattedExpiry)
Expand All @@ -149,7 +149,7 @@ let useCardForm = (~logger, ~paymentType) => {
let changeCVCNumber = ev => {
let val = ReactEvent.Form.target(ev)["value"]
logInputChangeInfo("cardCVC", logger)
let cvc = val->formatCVCNumber(cardBrand)
let cvc = val->CardValidations.formatCVCNumber(cardBrand)
setCvcNumber(_ => cvc)
if cvc->String.length > 0 && cvcNumberInRange(cvc, cardBrand)->Array.includes(true) {
zipRef.current->Nullable.toOption->Option.forEach(input => input->focus)->ignore
Expand Down
6 changes: 3 additions & 3 deletions src/Payments/BacsBankDebit.res
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ open Utils

let formatSortCode = sortcode => {
let formatted = sortcode->String.replaceRegExp(%re("/\D+/g"), "")
let firstPart = formatted->CardUtils.slice(0, 2)
let secondPart = formatted->CardUtils.slice(2, 4)
let thirdpart = formatted->CardUtils.slice(4, 6)
let firstPart = formatted->CardValidations.slice(0, 2)
let secondPart = formatted->CardValidations.slice(2, 4)
let thirdpart = formatted->CardValidations.slice(4, 6)

if formatted->String.length <= 2 {
firstPart
Expand Down
8 changes: 4 additions & 4 deletions src/Payments/Boleto.res
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ let cleanSocialSecurityNumber = socialSecurityNumber =>

let formatSocialSecurityNumber = socialSecurityNumber => {
let formatted = socialSecurityNumber->cleanSocialSecurityNumber
let firstPart = formatted->CardUtils.slice(0, 3)
let secondPart = formatted->CardUtils.slice(3, 6)
let thirdPart = formatted->CardUtils.slice(6, 9)
let fourthPart = formatted->CardUtils.slice(9, 11)
let firstPart = formatted->CardValidations.slice(0, 3)
let secondPart = formatted->CardValidations.slice(3, 6)
let thirdPart = formatted->CardValidations.slice(6, 9)
let fourthPart = formatted->CardValidations.slice(9, 11)

if formatted->String.length <= 3 {
firstPart
Expand Down
2 changes: 1 addition & 1 deletion src/Payments/CardPayment.res
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ let make = (
(
async () => {
let res = await ClickToPayHelpers.encryptCardForClickToPay(
~cardNumber=cardNumber->CardUtils.clearSpaces,
~cardNumber=cardNumber->CardValidations.clearSpaces,
~expiryMonth=month,
~expiryYear=year->CardUtils.formatExpiryToTwoDigit,
~cvcNumber,
Expand Down
2 changes: 1 addition & 1 deletion src/Utilities/DynamicFieldsUtils.res
Original file line number Diff line number Diff line change
Expand Up @@ -612,7 +612,7 @@ let useRequiredFieldsBody = (
countryCode.isoAlpha2
}
| BillingName => billingName.value
| CardNumber => cardNumber->CardUtils.clearSpaces
| CardNumber => cardNumber->CardValidations.clearSpaces
| CardExpiryMonth =>
let (month, _) = CardUtils.getExpiryDates(cardExpiry)
month
Expand Down
2 changes: 1 addition & 1 deletion src/Utilities/PaymentBody.res
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ let cardPaymentBody = (
~nickname="",
) => {
let cardBody = [
("card_number", cardNumber->CardUtils.clearSpaces->JSON.Encode.string),
("card_number", cardNumber->CardValidations.clearSpaces->JSON.Encode.string),
("card_exp_month", month->JSON.Encode.string),
("card_exp_year", year->JSON.Encode.string),
("card_cvc", cvcNumber->JSON.Encode.string),
Expand Down
2 changes: 1 addition & 1 deletion src/Utilities/PaymentManagementBody.res
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ let saveCardBody = (
~nickname="",
) => {
let cardBody = [
("card_number", cardNumber->CardUtils.clearSpaces->JSON.Encode.string),
("card_number", cardNumber->CardValidations.clearSpaces->JSON.Encode.string),
("card_exp_month", month->JSON.Encode.string),
("card_exp_year", year->JSON.Encode.string),
("card_cvc", cvcNumber->JSON.Encode.string),
Expand Down
2 changes: 1 addition & 1 deletion src/Utilities/PaymentUtils.res
Original file line number Diff line number Diff line change
Expand Up @@ -560,7 +560,7 @@ let getSupportedCardBrands = (paymentMethodListValue: PaymentMethodsRecord.payme
}

let checkIsCardSupported = (cardNumber, cardBrand, supportedCardBrands) => {
let clearValue = cardNumber->CardUtils.clearSpaces
let clearValue = cardNumber->CardValidations.clearSpaces
if cardBrand == "" {
Some(CardUtils.cardValid(clearValue, cardBrand))
} else if CardUtils.cardValid(clearValue, cardBrand) {
Expand Down