Signal-Desktop/ts/util/libphonenumberUtil.ts

52 lines
1.3 KiB
TypeScript

// Copyright 2014-2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import {
instance as libphonenumber,
PhoneNumberFormat,
} from './libphonenumberInstance';
const FALLBACK_REGION_CODE = 'ZZ';
export function getRegionCodeForNumber(number: string): string {
try {
const parsedNumber = libphonenumber.parse(number);
return (
libphonenumber.getRegionCodeForNumber(parsedNumber) ||
FALLBACK_REGION_CODE
);
} catch (e) {
return FALLBACK_REGION_CODE;
}
}
export function parseNumber(
number: string,
defaultRegionCode?: string
):
| { isValidNumber: false; error: unknown }
| {
isValidNumber: true;
regionCode: undefined | string;
countryCode: undefined | string;
e164: string;
} {
try {
const parsedNumber = libphonenumber.parse(number, defaultRegionCode);
const isValidNumber = libphonenumber.isValidNumber(parsedNumber);
if (!isValidNumber) {
return { error: new Error('Invalid phone number'), isValidNumber: false };
}
return {
isValidNumber: true,
regionCode: libphonenumber.getRegionCodeForNumber(parsedNumber),
countryCode: parsedNumber.getCountryCode()?.toString(),
e164: libphonenumber.format(parsedNumber, PhoneNumberFormat.E164),
};
} catch (error) {
return { error, isValidNumber: false };
}
}