UNPKG

simujs

Version:

A simple JavaScript utility for identifying Tanzanian mobile network operators based on phone numbers, using prefix data regulated by TCRA.

111 lines (97 loc) 2.73 kB
import { PhoneNumberUtil } from "google-libphonenumber"; import { Operator } from "./types"; export enum Operators { Vodacom = "Vodacom Tanzania", Yas = "Yas Tanzania", Airtel = "Airtel Tanzania", Halotel = "Halotel", TTCL = "TTCL", Smile = "Smile", Zantel = "Zantel", Mkulima = "Mkulima", Wiafrica = "Wiafrica", MO = "MO Mobile", } const operators: Operator[] = [ { name: Operators.Vodacom, codes: ["74", "75", "76"], company: "Vodacom Tanzania PLC", financialService: "M-Pesa", }, { name: Operators.Yas, codes: ["71", "65", "67"], company: "Honora Tanzania PLC", financialService: "Mixx by Yas" }, { name: Operators.Airtel, codes: ["78", "68", "68"], company: "Airtel Tanzania PLC", financialService: "Airtel Money" }, { name: Operators.Halotel, codes: ["61", "62"], company: "Viettel Tanzania PLC", financialService: "HaloPesa" }, { name: Operators.TTCL, codes: ["73"], company: "Tanzania Telecommunications Corporation Limited", financialService: "T-Pesa" }, { name: Operators.Smile, codes: ["66"], company: "Smile Tanzania PLC", financialService: null }, { name: Operators.Zantel, codes: ["77"], company: "Zantel Tanzania PLC", financialService: null }, { name: Operators.Mkulima, codes: ["63"], company: "Mkulima Tanzania PLC", financialService: null }, { name: Operators.Wiafrica, codes: ["64"], company: "Wiafrica Tanzania PLC", financialService: null }, { name: Operators.MO, codes: ["72"], company: "MO Mobile Tanzania PLC", financialService: null } ] export const format = (phone: string): number | undefined => { const phoneUtil = PhoneNumberUtil.getInstance(); const DEFAULT_REGION = 'TZ'; const COUNTRY_CODE_TZ = 255; try { const parsed = phoneUtil.parseAndKeepRawInput(phone, DEFAULT_REGION); if (!phoneUtil.isValidNumber(parsed)) return undefined; if (parsed.getCountryCode() !== COUNTRY_CODE_TZ) return undefined; return parsed.getNationalNumber(); } catch { return undefined; } }; export default function simu(phone: string): Operator | undefined { const nationalNumber = format(phone); if (!nationalNumber) return undefined; const numberStr = nationalNumber.toString(); return operators.find(operator => operator.codes.some(code => numberStr.startsWith(code)) ); }