diff --git a/src/api/constants.ts b/src/api/constants.ts index 8c2fdb5..349a1be 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -11,7 +11,6 @@ import type { RimelabsOptions, SelectorOptions, SipGateway, - SmppGateway, WebHook, WebhookOption, } from "./types"; @@ -133,7 +132,7 @@ export const DEFAULT_WEBHOOK: WebHook = { password: "", }; -/** Default SIP/SMPP Gateways */ +/** Default SIP Gateways */ export const DEFAULT_SIP_INBOUND_GATEWAY: SipGateway = { voip_carrier_sid: "", ipv4: "", @@ -144,16 +143,6 @@ export const DEFAULT_SIP_INBOUND_GATEWAY: SipGateway = { outbound: 0, }; -export const DEFAULT_SMPP_GATEWAY: SmppGateway = { - voip_carrier_sid: "", - ipv4: "", - port: 2775, - is_primary: false, - use_tls: false, - netmask: 32, - inbound: 1, - outbound: 1, -}; /** Netmask Bits */ export const NETMASK_BITS = Array(32) .fill(0) @@ -468,7 +457,6 @@ export const API_PHONE_NUMBERS = `${API_BASE_URL}/PhoneNumbers`; export const API_MS_TEAMS_TENANTS = `${API_BASE_URL}/MicrosoftTeamsTenants`; export const API_SERVICE_PROVIDERS = `${API_BASE_URL}/ServiceProviders`; export const API_CARRIERS = `${API_BASE_URL}/VoipCarriers`; -export const API_SMPP_GATEWAY = `${API_BASE_URL}/SmppGateways`; export const API_SIP_GATEWAY = `${API_BASE_URL}/SipGateways`; export const API_PASSWORD_SETTINGS = `${API_BASE_URL}/PasswordSettings`; export const API_FORGOT_PASSWORD = `${API_BASE_URL}/forgot-password`; diff --git a/src/api/index.ts b/src/api/index.ts index c553f10..868a831 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -14,7 +14,6 @@ import { API_MS_TEAMS_TENANTS, API_PHONE_NUMBERS, API_CARRIERS, - API_SMPP_GATEWAY, API_SIP_GATEWAY, API_PASSWORD_SETTINGS, API_FORGOT_PASSWORD, @@ -67,7 +66,6 @@ import type { MSTeamsTenant, PhoneNumber, Carrier, - SmppGateway, SipGateway, TotalResponse, CallQuery, @@ -394,13 +392,6 @@ export const postSipGateway = (payload: Partial) => { return postFetch>(API_SIP_GATEWAY, payload); }; -export const postSmppGateway = (payload: Partial) => { - return postFetch>( - API_SMPP_GATEWAY, - payload, - ); -}; - export const postServiceProviderLimit = ( sid: string, payload: Partial, @@ -601,13 +592,6 @@ export const putSipGateway = (sid: string, payload: Partial) => { ); }; -export const putSmppGateway = (sid: string, payload: Partial) => { - return putFetch>( - `${API_SMPP_GATEWAY}/${sid}`, - payload, - ); -}; - export const putLcr = (sid: string, payload: Partial) => { return putFetch>(`${API_LCRS}/${sid}`, payload); }; @@ -713,10 +697,6 @@ export const deleteSipGateway = (sid: string) => { return deleteFetch(`${API_SIP_GATEWAY}/${sid}`); }; -export const deleteSmppGateway = (sid: string) => { - return deleteFetch(`${API_SMPP_GATEWAY}/${sid}`); -}; - export const deleteServiceProviderLimit = ( sid: string, cat: LimitCategories, diff --git a/src/api/types.ts b/src/api/types.ts index 47e9295..b250936 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -52,7 +52,7 @@ export enum StatusCodes { NOT_FOUND = 404, UNPROCESSABLE_ENTITY = 422, INTERNAL_SERVER_ERROR = 500, - /** SMPP temporarily unavailable */ + /** temporarily unavailable */ TEMPORARILY_UNAVAILABLE = 480, } @@ -246,15 +246,6 @@ export interface Sbc { service_provider_sid: null | string; } -export interface Smpp { - ipv4: string; - port: number | string; - use_tls: boolean; - is_primary: boolean; - smpp_address_sid: string; - service_provider_sid: null | string; -} - export interface Account { name: string; sip_realm: null | string; @@ -492,11 +483,6 @@ export interface Carrier { diversion: null | string; inbound_auth_username: string; inbound_auth_password: string; - smpp_system_id: null | string; - smpp_password: null | string; - smpp_inbound_system_id: null | string; - smpp_inbound_password: null | string; - smpp_enquire_link_interval: number; register_status: CarrierRegisterStatus; dtmf_type: DtmfType; outbound_sip_proxy: string | null; @@ -528,13 +514,6 @@ export interface SipGateway extends Gateway { dtls_off?: boolean; } -export interface SmppGateway extends Gateway { - smpp_gateway_sid?: null | string; - is_primary: boolean; - use_tls: boolean; - port: number; -} - export interface Lcr { lcr_sid?: null | string; is_active: boolean; diff --git a/src/containers/internal/views/carriers/edit.tsx b/src/containers/internal/views/carriers/edit.tsx index 4ab116e..12f2558 100644 --- a/src/containers/internal/views/carriers/edit.tsx +++ b/src/containers/internal/views/carriers/edit.tsx @@ -6,7 +6,7 @@ import { useApiData } from "src/api"; import { useSelectState } from "src/store"; import { CarrierForm } from "./form"; -import { Carrier, SipGateway, SmppGateway } from "src/api/types"; +import { Carrier, SipGateway } from "src/api/types"; import { useScopedRedirect } from "src/utils/use-scoped-redirect"; import { ROUTE_INTERNAL_CARRIERS } from "src/router/routes"; import { Scope } from "src/store/types"; @@ -22,9 +22,6 @@ export const EditCarrier = () => { const [sipGateways, sipGatewaysRefetch] = useApiData( `SipGateways?voip_carrier_sid=${params.voip_carrier_sid}`, ); - const [smppGateways, smppGatewaysRefetch] = useApiData( - `SmppGateways?voip_carrier_sid=${params.voip_carrier_sid}`, - ); useScopedRedirect( Scope.account, @@ -49,10 +46,6 @@ export const EditCarrier = () => { data: sipGateways, refetch: sipGatewaysRefetch, }} - carrierSmppGateways={{ - data: smppGateways, - refetch: smppGatewaysRefetch, - }} /> ); diff --git a/src/containers/internal/views/carriers/form.tsx b/src/containers/internal/views/carriers/form.tsx index 909caf6..3ebd51c 100644 --- a/src/containers/internal/views/carriers/form.tsx +++ b/src/containers/internal/views/carriers/form.tsx @@ -6,10 +6,8 @@ import { deleteSipGateway, postCarrier, postSipGateway, - postSmppGateway, putCarrier, putSipGateway, - putSmppGateway, useApiData, useServiceProviderData, postPredefinedCarrierTemplate, @@ -17,10 +15,8 @@ import { } from "src/api"; import { DEFAULT_SIP_INBOUND_GATEWAY, - DEFAULT_SMPP_GATEWAY, DTMF_TYPE_SELECTION, FQDN, - FQDN_TOP_LEVEL, INVALID, IP, NETMASK_OPTIONS, @@ -58,7 +54,6 @@ import { type UseApiDataMap, type Carrier, type SipGateway, - type SmppGateway, type PredefinedCarrier, type Sbc, type Application, @@ -72,13 +67,11 @@ import { useToast } from "src/components/toast/toast-provider"; type CarrierFormProps = { carrier?: UseApiDataMap; carrierSipGateways?: UseApiDataMap; - carrierSmppGateways?: UseApiDataMap; }; export const CarrierForm = ({ carrier, carrierSipGateways, - carrierSmppGateways, }: CarrierFormProps) => { const { toastSuccess, toastError } = useToast(); const navigate = useNavigate(); @@ -88,7 +81,6 @@ export const CarrierForm = ({ const refSipInboundIp = useRef([]); const refSipOutboundIp = useRef([]); const refSipPort = useRef([]); - const refSmppIp = useRef([]); const refInboundAuthUsername = useRef(null); const [sbcs] = useApiData("Sbcs"); const [applications] = useServiceProviderData("Applications"); @@ -128,11 +120,6 @@ export const CarrierForm = ({ const [initialRegister, setInitialRegister] = useState(false); const [initialSipRegister, setInitialSipRegister] = useState(false); - const [smppSystemId, setSmppSystemId] = useState(""); - const [smppPass, setSmppPass] = useState(""); - const [smppInboundSystemId, setSmppInboundSystemId] = useState(""); - const [smppInboundPass, setSmppInboundPass] = useState(""); - const [sipInboundGateways, setSipInboundGateways] = useState( [], ); @@ -145,16 +132,6 @@ export const CarrierForm = ({ const [tmpOutboundGateways, setTmpOutboundGateways] = useState( [], ); - const [smppGateways, setSmppGateways] = useState([ - { - ...DEFAULT_SMPP_GATEWAY, - inbound: 0, - }, - { - ...DEFAULT_SMPP_GATEWAY, - outbound: 0, - }, - ]); const [sipInboundMessage, setSipInboundMessage] = useState(""); const [sipOutboundMessage, setSipOutboundMessage] = useState(""); @@ -305,18 +282,6 @@ export const CarrierForm = ({ setInitialSipRegister(false); } - if (obj.smpp_system_id) { - setSmppSystemId(obj.smpp_system_id); - } - if (obj.smpp_password) { - setSmppPass(obj.smpp_password); - } - if (obj.smpp_inbound_system_id) { - setSmppInboundSystemId(obj.smpp_inbound_system_id); - } - if (obj.smpp_inbound_password) { - setSmppInboundPass(obj.smpp_inbound_password); - } if (obj.dtmf_type) { setDtmfType(obj.dtmf_type); } @@ -346,16 +311,6 @@ export const CarrierForm = ({ ]); }; - const addSmppGateway = (obj: Partial) => { - setSmppGateways((curr) => [ - ...curr, - { - ...DEFAULT_SMPP_GATEWAY /** { inbound: 1, outbound: 1 } */, - ...obj /** pass the values: e.g. { outbound: 1, inbound: 0 } */, - }, - ]); - }; - const updateSipInboundGateways = ( index: number, key: string, @@ -427,23 +382,6 @@ export const CarrierForm = ({ }); }; - const handleSmppGatewayPutPost = (voip_carrier_sid: string) => { - Promise.all( - smppGateways - /** Ensure the empty UI fields don't actually save in the background... */ - .filter((g) => g.ipv4.trim() !== "" && isValidPort(g.port)) - .map(({ smpp_gateway_sid, ...g }: SmppGateway) => { - smpp_gateway_sid - ? putSmppGateway(smpp_gateway_sid, g) - : postSmppGateway({ ...g, voip_carrier_sid }); - }), - ).then(() => { - if (carrierSmppGateways) { - carrierSmppGateways.refetch(); - } - }); - }; - const handleSipGatewayDelete = (g?: SipGateway) => { if (g && g.sip_gateway_sid) { deleteSipGateway(g.sip_gateway_sid).then(() => @@ -452,16 +390,6 @@ export const CarrierForm = ({ } }; - const hasEmptySmppGateways = (type: keyof SmppGateway) => { - const filtered = smppGateways.filter((g) => g[type]); - return ( - hasLength(filtered) && - filtered.reduce((acc, g) => { - return acc + g.ipv4.trim(); - }, "") === "" - ); - }; - const getSipValidation = () => { if ( trunkType === "static_ip" && @@ -573,63 +501,6 @@ export const CarrierForm = ({ } }; - const getSmppValidation = () => { - for (let i = 0; i < smppGateways.length; i++) { - const gateway = smppGateways[i]; - const gatewayType = gateway.inbound ? "inbound" : "outbound"; - const type = getIpValidationType(gateway.ipv4); - - if (type === FQDN_TOP_LEVEL) { - refSmppIp.current[i].focus(); - return { - msg: "When using an FQDN, you must use a subdomain (e.g. sip.example.com).", - type: gatewayType, - }; - } else if (type === FQDN && (!gateway.outbound || gateway.inbound)) { - refSmppIp.current[i].focus(); - return { - msg: "A fully qualified domain name may only be used for outbound calls.", - type: gatewayType, - }; - } else if (type === INVALID && gateway.ipv4.trim() !== "") { - refSmppIp.current[i].focus(); - return { - msg: `Please provide a valid ${gatewayType} IP address or fully qualified domain name.`, - type: gatewayType, - }; - } - - /** Duplicates validation */ - const dupeSmppGateway = smppGateways.find((g) => { - return ( - g !== gateway && - gateway.ipv4 && - g[gatewayType] === gateway[gatewayType] && - g.ipv4 === gateway.ipv4 && - g.port === gateway.port - ); - }); - - if (dupeSmppGateway) { - refSmppIp.current[i].focus(); - return { - msg: `Each ${gatewayType} SMPP gateway must have a unique IP address.`, - type: gatewayType, - }; - } - } - }; - - const shouldValidateSmpp = () => { - return ( - smppSystemId || - smppPass || - smppInboundPass || - !hasEmptySmppGateways("outbound") || - !hasEmptySmppGateways("inbound") - ); - }; - const handleActiveTab = () => { const gatewaysToCheck = trunkType === "auth" @@ -658,25 +529,6 @@ export const CarrierForm = ({ setActiveTab("sip"); return; /** Important so browser contstraints work properly */ } - - /** When to switch to the `smpp` tab */ - - const invalidSmppPort = smppGateways - .filter((g) => g.outbound) - .find((g) => !isValidPort(g.port)); - const smppGatewayValidation = shouldValidateSmpp() && getSmppValidation(); - - /** Outbound user/pass filled out but no gateways */ - /** Inbound gateways but no inbound pass */ - /** Invalid SMPP port number */ - if ( - invalidSmppPort || - smppGatewayValidation || - (smppSystemId && smppPass && hasEmptySmppGateways("outbound")) || - (!smppInboundPass && !hasEmptySmppGateways("inbound")) - ) { - setActiveTab("smpp"); - } }; const handleSubmit = (e: React.FormEvent) => { @@ -743,10 +595,6 @@ export const CarrierForm = ({ tech_prefix: prefix.trim() || null, diversion: diversion.trim() || null, is_active: isActive, - smpp_system_id: smppSystemId.trim() || null, - smpp_password: smppPass.trim() || null, - smpp_inbound_system_id: smppInboundSystemId.trim() || null, - smpp_inbound_password: smppInboundPass.trim() || null, dtmf_type: dtmfType, trunk_type: trunkType, inbound_auth_username: inboundAuthUsername.trim() || undefined, @@ -763,7 +611,6 @@ export const CarrierForm = ({ .then(() => { if (carrier.data?.voip_carrier_sid) { handleSipGatewayPutPost(carrier.data.voip_carrier_sid); - handleSmppGatewayPutPost(carrier.data.voip_carrier_sid); } toastSuccess("Carrier updated successfully"); @@ -782,7 +629,6 @@ export const CarrierForm = ({ }) .then(({ json }) => { handleSipGatewayPutPost(json.sid); - handleSmppGatewayPutPost(json.sid); toastSuccess("Carrier created successfully"); navigate(ROUTE_INTERNAL_CARRIERS); @@ -834,7 +680,6 @@ export const CarrierForm = ({ /** This fixes a re-rendering glitch when we used useEffect that was annoying but not breaking */ /** https://beta.reactjs.org/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes */ const [prevSipGateways, setPrevSipGateways] = useState(); - const [prevSmppGateways, setPrevSmppGateways] = useState(); if ( carrierSipGateways && @@ -858,26 +703,6 @@ export const CarrierForm = ({ } } - if ( - carrierSmppGateways && - hasLength(carrierSmppGateways.data) && - carrierSmppGateways.data !== prevSmppGateways - ) { - const inbound = carrierSmppGateways.data.filter((g) => g.inbound); - const outbound = carrierSmppGateways.data.filter((g) => g.outbound); - - setPrevSmppGateways(carrierSmppGateways.data); /** Deadly important */ - setSmppGateways(carrierSmppGateways.data); - - if (inbound.length <= 0) { - addSmppGateway({ inbound: 1, outbound: 0 }); - } - - if (outbound.length <= 0) { - addSmppGateway({ outbound: 1, inbound: 0 }); - } - } - const handleInvalidField = (e: React.InvalidEvent) => { const invalidField = e.target as unknown as HTMLInputElement; const fieldName = invalidField.name || invalidField.id; @@ -889,8 +714,6 @@ export const CarrierForm = ({ targetTab = "inbound"; } else if (fieldName?.includes("sip_") || fieldName?.includes("from_")) { targetTab = "outbound"; - } else if (fieldName?.includes("smpp_")) { - targetTab = "smpp"; } // If we're not on the right tab, switch to it diff --git a/src/containers/internal/views/carriers/index.tsx b/src/containers/internal/views/carriers/index.tsx index 7ac03d1..1d3204d 100644 --- a/src/containers/internal/views/carriers/index.tsx +++ b/src/containers/internal/views/carriers/index.tsx @@ -4,7 +4,6 @@ import { Button, ButtonGroup, H1, Icon, M, MS } from "@jambonz/ui-kit"; import { deleteCarrier, deleteSipGateway, - deleteSmppGateway, getFetch, getSPVoipCarriers, useApiData, @@ -26,7 +25,6 @@ import { Gateways } from "./gateways"; import { isUserAccountScope, hasLength, hasValue } from "src/utils"; import { API_SIP_GATEWAY, - API_SMPP_GATEWAY, CARRIER_REG_OK, ENABLE_HOSTED_SYSTEM, PER_PAGE_SELECTION, @@ -42,7 +40,6 @@ import type { Carrier, CurrentUserData, SipGateway, - SmppGateway, } from "src/api/types"; import { Scope } from "src/store/types"; import { getAccountFilter, setLocation } from "src/store/localStore"; @@ -112,14 +109,9 @@ export const Carriers = () => { deleteCarrier(carrier.voip_carrier_sid) .then(() => { - Promise.all([ - getFetch( - `${API_SIP_GATEWAY}?voip_carrier_sid=${carrier.voip_carrier_sid}`, - ), - getFetch( - `${API_SMPP_GATEWAY}?voip_carrier_sid=${carrier.voip_carrier_sid}`, - ), - ]).then(([sipGatewaysRes, smppGatewaysRes]) => { + getFetch( + `${API_SIP_GATEWAY}?voip_carrier_sid=${carrier.voip_carrier_sid}`, + ).then((sipGatewaysRes) => { hasLength(sipGatewaysRes.json) && sipGatewaysRes.json.forEach( (g) => @@ -129,15 +121,6 @@ export const Carriers = () => { toastError(error.msg), ), ); - hasLength(smppGatewaysRes.json) && - smppGatewaysRes.json.forEach( - (g) => - g && - g.smpp_gateway_sid && - deleteSmppGateway(g.smpp_gateway_sid).catch((error) => - toastError(error.msg), - ), - ); }); setCarrier(null); fetchCarriers(false);