All checks were successful
/ build (map[dockerfile:./services/hasura/Dockerfile name:hasura]) (push) Successful in 47s
/ build (map[dockerfile:./services/web/Dockerfile name:web]) (push) Successful in 1m47s
/ build (map[dockerfile:./services/watchers/Dockerfile name:watchers]) (push) Successful in 2m37s
/ build (map[dockerfile:./services/files/Dockerfile name:files]) (push) Successful in 2m52s
/ build (map[dockerfile:./services/api/Dockerfile name:api]) (push) Successful in 3m2s
/ build (map[dockerfile:./services/app/Dockerfile name:app]) (push) Successful in 31s
/ build (map[dockerfile:./services/tasks/Dockerfile name:tasks]) (push) Successful in 2m44s
/ deploy (push) Successful in 48s
95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
const { PhoneNumberUtil } = require("google-libphonenumber")
|
|
const countryCodesList = require("country-codes-list")
|
|
|
|
const phoneUtil = PhoneNumberUtil.getInstance()
|
|
|
|
const tryMethodPhone = (method, phoneNumber, args = [], defaultValue = "") => {
|
|
try {
|
|
const num = phoneUtil.parse(phoneNumber)
|
|
return num[method](...args)
|
|
} catch (_err) {
|
|
console.debug("phone number parse err", _err, { method, args })
|
|
return defaultValue
|
|
}
|
|
}
|
|
|
|
const getRegionCodeForNumber = (phoneNumber, defaultValue) => {
|
|
return tryMethodPhone("getRegionCodeForNumber", phoneNumber, [], defaultValue)
|
|
}
|
|
const getCountryCode = (phoneNumber, defaultValue) => {
|
|
return tryMethodPhone("getCountryCode", phoneNumber, [], defaultValue)
|
|
}
|
|
const getNationalNumber = (phoneNumber, defaultValue) => {
|
|
return tryMethodPhone("getNationalNumber", phoneNumber, [], defaultValue)
|
|
}
|
|
|
|
const isValidNumber = (phoneNumber, countryCode) => {
|
|
try {
|
|
const parsedNumber = phoneUtil.parse(phoneNumber, countryCode)
|
|
return phoneUtil.isValidNumber(parsedNumber)
|
|
} catch (_err) {
|
|
// console.log({ phoneNumber, countryCode }, _err);
|
|
return false
|
|
}
|
|
}
|
|
|
|
const parseInternationalNumber = (n) => {
|
|
let num
|
|
try {
|
|
num = phoneUtil.parse(n)
|
|
} catch (err) {
|
|
return
|
|
}
|
|
if (!num.hasNationalNumber()) {
|
|
return
|
|
}
|
|
const nationalNumber = num.getNationalNumberOrDefault().toString()
|
|
const code = num.getCountryCodeOrDefault()
|
|
const countryCode = phoneUtil.getRegionCodeForCountryCode(code)
|
|
return {
|
|
countryCode,
|
|
code: code.toString(),
|
|
nationalNumber,
|
|
}
|
|
}
|
|
|
|
const removeLeadingZero = (number) => {
|
|
return number?.replace(/^0+/, "")
|
|
}
|
|
|
|
const normalizeNumber = (
|
|
number,
|
|
country,
|
|
{ defaultCountryCallingCode = false } = {}
|
|
) => {
|
|
let code
|
|
if (country) {
|
|
code = countryCodesList.findOne("countryCode", country)?.countryCallingCode
|
|
number = removeLeadingZero(number)
|
|
number = `${code}${number}`
|
|
} else {
|
|
let num
|
|
try {
|
|
num = phoneUtil.parse(number)
|
|
} catch (err) {
|
|
// do nothing
|
|
}
|
|
number = removeLeadingZero(number)
|
|
if (!num?.hasNationalNumber() && defaultCountryCallingCode) {
|
|
number = `${defaultCountryCallingCode}${number}`
|
|
}
|
|
}
|
|
|
|
return number.replace(/\D/g, "")
|
|
}
|
|
|
|
module.exports = {
|
|
tryMethodPhone,
|
|
getRegionCodeForNumber,
|
|
getCountryCode,
|
|
getNationalNumber,
|
|
isValidNumber,
|
|
parseInternationalNumber,
|
|
removeLeadingZero,
|
|
normalizeNumber,
|
|
}
|