@proca/widget
Version:
Proca is an open-source campaign toolkit designed to empower activists and organisations in their digital advocacy efforts. It provides a flexible and customisable platform for creating and managing online petitions, email campaigns, and other forms of di
74 lines (65 loc) • 2.04 kB
JavaScript
const formatNumber = (prefix, number) => "+" + prefix + " " + number;
const cleanNumber = (prefix, number) => {
number = number.replace("+" + prefix, "").replace("00" + prefix, "");
if (number.startsWith("+") || number.startsWith("00")) {
throw new Error("not a phone number in the country " + prefix);
}
return number.replace(/\D/g, "");
};
const check = {
DE: number => {
const prefix = "49";
const result = { is_error: true, number: number };
number = cleanNumber(prefix, number); // throw an error if not a german number
if (number.startsWith("0")) number = number.slice(1);
const length = number.length;
result.number = formatNumber(prefix, number);
if (length < 8) {
result.error = "TOO_SHORT";
return result;
}
if (length > 11) {
result.error = "TOO_LONG";
return result;
}
result.is_error = false;
result.country = "DE";
return result;
},
};
const checkPhone = async (country, number) => {
const result = { is_error: false, number: number };
if (!number) return result;
if (check[country]) {
try {
return check[country](number);
} catch {
console.log("not a", country, "number");
}
}
let url = "https://check-phone.proca.app";
try {
url = process.env.REACT_APP_CHECK_PHONE_API_URL;
} catch (e) {
console.error(e.message);
}
try {
let lastTwoDigits = undefined; // for privacy reasons, we hide the last two digits
if (/\d{2}$/.test(number)) {
lastTwoDigits = number.slice(-2);
number = number.slice(0, -2) + "00";
console.log(number); // Output the modified string
}
const response = await fetch(url + "/" + country + "/" + number);
const r = await response.json();
if (r.number && lastTwoDigits) {
r.number = r.number.slice(0, -2) + lastTwoDigits;
}
return r;
} catch (e) {
console.log(e);
return result; // don't block submission if the service isn't reachable
}
};
export default checkPhone;
export { checkPhone };