// phone.js // Copyright (C) 2022 DTP Technologies, LLC // License: Apache-2.0 'use strict'; const { libphonenumber, striptags, SiteService, SiteError, } = require('../../lib/site-lib'); class PhoneService extends SiteService { constructor (dtp) { super(dtp, module.exports); } async processPhoneNumberInput (phoneNumberInput, country = 'US') { const { parsePhoneNumber } = libphonenumber; const phoneCheck = await parsePhoneNumber(striptags(phoneNumberInput.trim()), country); if (!phoneCheck.isValid()) { throw new SiteError(400, 'The phone number entered is not valid'); } // store everything this library provides about the new phone number const phoneNumber = { type: phoneCheck.getType(), number: phoneCheck.number, countryCallingCode: phoneCheck.countryCallingCode, nationalNumber: phoneCheck.nationalNumber, country: phoneCheck.country, ext: phoneCheck.ext, carrierCode: phoneCheck.carrierCode, }; if (phoneCheck.carrierCode) { phoneNumber.carrierCode = phoneCheck.carrierCode; } if (phoneCheck.ext) { phoneNumber.ext = phoneCheck.ext; } phoneNumber.display = { national: phoneCheck.formatNational(), international: phoneCheck.formatInternational(), uri: phoneCheck.getURI(), }; return phoneNumber; } } module.exports = { slug: 'phone', name: 'phone', create: (dtp) => { return new PhoneService(dtp); }, };