@toolmain/jssip
Version:
- jssip 库的封装,加入中文错误提示和ice candidate策略
2 lines (1 loc) • 19.6 kB
JavaScript
import{ulid as s}from"ulid";import*as e from"jssip";import{EventEmitter as i}from"events";var t=(s=>(s.LOCAL="local",s.REMOTE="remote",s.SYSTEM="system",s))(t||{}),o=(s=>(s.ON_TIME_OUT="Request Timeout",s.ON_EVENT="event",s.ON_REGISTERED="registered",s.ON_UNREGISTERED="unregistered",s.ON_REGISTRATIONFAILED="registrationFailed",s.ON_REGISTRATIONEXPIRING="registrationExpiring",s.ON_CONNECTING="connecting",s.ON_CONNECTED="connected",s.ON_DISCONNECTED="disconnected",s.ON_NEWOPTIONS="newOptions",s.ON_SIPEVENT="sipEvent",s.ON_NEWRTCSESSION="newRTCSession",s.ON_RTCSESSION_STATE="new_RTCSession_state",s.ON_NEWMESSAGE="newMessage",s.ON_SESSION_PROGRESS="session_progress",s.ON_SESSTION_CONNECTING="session_connecting",s.ON_SESSTION_ACCEPTED="session_accepted",s.ON_SESSTION_CONFIRMED="session_confirmed",s.ON_SESSTION_ENDED="session_ended",s.ON_SESSTION_FAILED="session_failed",s.ON_SESSION_ANSWER_FAILED="session_answer_failed",s.ON_RESUME="onResume",s.ON_HOLD="onHold",s.ON_MUTE="onMute",s.ON_UNMUTE="onUnmute",s.ON_SESSION_RECALL="session_recall",s.ON_RE_REGISTERED="re_register",s.ON_RE_LOGIN="re_login",s.ON_SESSION_TIMEOUT="session_req_timeout",s.ON_LISTEN_EVENT="call_event",s))(o||{});const n={"Request Timeout":"连接超时",event:"新事件",registered:"已签入",unregistered:"未签入",registrationFailed:"签入失败",registrationExpiring:"签入即将过期",connecting:"登录中",connected:"已连接",disconnected:"连接断开",newOptions:"newOptions",sipEvent:"sipEvent",newRTCSession:"新通话",new_RTCSession_state:"通话状态",newMessage:"新消息",session_progress:"响铃中",session_connecting:"拨号中",session_accepted:"通话接受",session_confirmed:"通话中",session_ended:"通话结束:1",session_failed:"通话结束:2",session_answer_failed:"通话结束:3",onResume:"继续",onHold:"保持",onMute:"静音",onUnmute:"取消静音",session_recall:"重拨中",re_register:"进行重连",re_login:"进行重连",session_req_timeout:"拨号超时",call_event:"呼叫事件"},r=s=>["newRTCSession","session_progress","session_answer_failed","session_recall","session_req_timeout","onResume","onHold","onMute","onUnmute"].includes(s),a=s=>n[s]||"未定义的事件",c={0:["",""],100:["Trying","拨打中"],180:["Ringing","响铃中"],181:["Call Is Being Forwarded",""],182:["Queued",""],183:["Session Progress","响铃中"],200:["OK",""],300:["Multiple Choices","重定向"],301:["Moved Permanently","重定向"],302:["Moved Temporarily","重定向"],305:["Use Proxy","重定向"],380:["Alternative Service","重定向"],400:["Bad Request",""],401:["Unauthorized","用户/密码错误"],402:["Payment Required",""],403:["Forbidden","服务器拒绝连接"],404:["Not Found","用户未找到"],405:["Method Not Allowed",""],406:["Not Acceptable",""],407:["Proxy Authentication Required",""],408:["Request Timeout","拨号超时"],410:["Gone","未找到"],413:["Request Entity Too Large",""],414:["Request-URI Too Long",""],415:["Unsupported Media Type",""],416:["Unsupported URI Scheme",""],420:["Bad Extension",""],421:["Extension Required",""],423:["Interval Too Brief",""],430:["Unavailable",""],480:["Temporarily Unavailable","未接听/无法接通"],481:["Call/Transaction Does Not Exist",""],482:["Loop Detected",""],483:["Too Many Hops",""],484:["Address Incomplete","找不到用户,请检查sip uri"],485:["Ambiguous",""],486:["Busy Here","用户忙"],487:["Request Terminated","用户拒接"],488:["Not Acceptable Here",""],491:["Request Pending",""],493:["Undecipherable",""],500:["Server Internal Error",""],501:["Not Implemented",""],502:["Bad Gateway",""],503:["Service Unavailable","无法接通"],504:["Server Time-out",""],505:["Version Not Supported",""],513:["Message Too Large",""],600:["Busy Everywhere","用户忙"],603:["Decline","未接听/拒接/无法接通"],604:["Does Not Exist Anywhere","用户未找到"],606:["Not Acceptable",""]},u={1e3:["Normal Closure","websocket已关闭"],1001:["Going Away","websocket服务器故障/页面即将关闭"],1002:["Protocol error","websocket协议错误"],1003:["Unsupported Data","websocket无法处理的数据类型"],1004:["Reserved","websocket_Reserved1004"],1005:["No Status Rcvd","websocket_Reserved1005"],1006:["Abnormal Closure","websocket连接异常关闭"],1007:["Invalid frame payload data","webocket数据异常"],1008:["Policy Violation","websocket消息不符合策略"],1009:["Message Too Big","websocket消息过长"],1010:["Mandatory Ext.","websocket握手失败"],1011:["Internal Error","websocket未知错误"],1012:["Service Restart","websocket服务器重启中"],1013:["Try Again Later","websocket服务器超载,请稍后重试"],1014:["Bad Gateway","websocket_502 Bad Gateway"],1015:["TLS handshake","websocket_TLS 证书错误"]},d=s=>{if(!s)return"";const e=u[String(s)];return e?e[1]:"未知sip状态码:"+s},E=s=>!!s&&(s>=1e3&&s<=1015);var p=Object.freeze({__proto__:null,isSocketCode:E,socketCode:u,toCN:d});const l={[e.C.causes.CONNECTION_ERROR]:"websocket连接出错",[e.C.causes.REQUEST_TIMEOUT]:"请求超时",[e.C.causes.SIP_FAILURE_CODE]:"SIP代码",[e.C.causes.INTERNAL_ERROR]:"发生内部错误",[e.C.causes.BUSY]:"用户忙",[e.C.causes.REJECTED]:"拒绝连接",[e.C.causes.REDIRECTED]:"重定向",[e.C.causes.UNAVAILABLE]:"号码无效/空号",[e.C.causes.NOT_FOUND]:"号码未找到",[e.C.causes.ADDRESS_INCOMPLETE]:"账号有误",[e.C.causes.INCOMPATIBLE_SDP]:"媒体协商错误,请重试:1",[e.C.causes.MISSING_SDP]:"媒体协商错误,请重试:2",[e.C.causes.AUTHENTICATION_ERROR]:"账号或密码错误",[e.C.causes.BYE]:"已挂断",[e.C.causes.WEBRTC_ERROR]:"WebRTC错误",[e.C.causes.CANCELED]:"通话已取消",[e.C.causes.NO_ANSWER]:"未接听",[e.C.causes.EXPIRES]:"Expires",[e.C.causes.NO_ACK]:"No ACK",[e.C.causes.DIALOG_ERROR]:"408/481错误",[e.C.causes.USER_DENIED_MEDIA_ACCESS]:"麦克风权限获取失败",[e.C.causes.BAD_MEDIA_DESCRIPTION]:"错误的SDP信息",[e.C.causes.RTP_TIMEOUT]:"RTP 丢失,会话结束"},N=[e.C.causes.BYE,e.C.causes.CANCELED,e.C.causes.NO_ANSWER,e.C.causes.EXPIRES,e.C.causes.NO_ACK,e.C.causes.DIALOG_ERROR,e.C.causes.USER_DENIED_MEDIA_ACCESS,e.C.causes.BAD_MEDIA_DESCRIPTION,e.C.causes.RTP_TIMEOUT],h=[e.C.causes.CONNECTION_ERROR,e.C.causes.REQUEST_TIMEOUT,e.C.causes.SIP_FAILURE_CODE,e.C.causes.INTERNAL_ERROR],O=[e.C.causes.BUSY,e.C.causes.REJECTED,e.C.causes.REDIRECTED,e.C.causes.UNAVAILABLE,e.C.causes.NOT_FOUND,e.C.causes.ADDRESS_INCOMPLETE,e.C.causes.INCOMPATIBLE_SDP,e.C.causes.MISSING_SDP,e.C.causes.AUTHENTICATION_ERROR,e.C.causes.BYE],S=s=>O.includes(s),_=s=>{switch(s){case t.LOCAL:return"本地:";case t.REMOTE:return"远端:";case t.SYSTEM:return"系统:";default:return""}},T=(s,i)=>s?S(s)||e.C.causes.SIP_FAILURE_CODE===s?g(s,i):E(i)?d(i):Boolean(n[s])?a(s):l[s]||s:"",I=(s,e=!0)=>{const i={...s};return i.causeCN=`${_(i.originator)}${T(i.cause,i.statusCode)}`,i.msgCN=`${a(i.msg)}`,e&&console.log(`${r(i.msg)?"RTCSession:":""}[${i.msg}]`,i),i},g=(s,e)=>e?l[s]+e+(s=>{if(s){const e=c[String(s)];return e?e[1]:""}return""})(e):l[s]||"";var R=Object.freeze({__proto__:null,common:h,isCommonCause:s=>h.includes(s),isSessionCause:s=>N.includes(s),isSipErrorCause:S,record:l,resolve:I,session:N,sipCodeCN:g,sipError:O,toCN:T,transOriginator:_});const C=()=>{const e={value:""},i={value:""};let t;function o(s){if("string"==typeof s){const e=document.getElementById(s);e&&document.body.removeChild(e)}else document.body.removeChild(s)}function n(s,e){const i=document.createElement("audio");return i.id=s,i.controls=!1,i.autoplay=!0,function(s,e){s.addEventListener("abort",s=>{console.log(">>>abort",s),o(e)}),s.addEventListener("stalled",s=>{console.log(">>>stalled",s),o(e)}),s.addEventListener("suspend",s=>{console.log(">>>suspend",s),o(e)}),s.addEventListener("ended",s=>{console.log(">>>ended",s),o(e)}),s.addEventListener("error",s=>{console.log(">>>error",s),o(e)})}(i,s),document.body.appendChild(i),i.srcObject=e,i}return{setAudio:function(s){t=s},playRemote:function(e){e.forEach(e=>{!function(s,e){if(t){const s="string"==typeof t?document.getElementById(t):t;if(s)return s.srcObject=e,s}n(s,e)}(s(),e)})},playUrl:function(t){i.value||(i.value=s()+"_global_audio");const o=document.getElementById(i.value)??function(s){const e=document.createElement("audio");return e.id=s,e.controls=!1,e.autoplay=!0,e.loop=!0,document.body.appendChild(e),e}(i.value);if(t){const s=o;t!==e.value?s.src=t:(e.value=t,s.currentTime=0),s.play()}},stopPlayUrl:function(){const s=document.getElementById(i.value);s&&s.pause()}}};var m=Object.defineProperty,v=(s,e,i)=>((s,e,i)=>e in s?m(s,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[e]=i)(s,"symbol"!=typeof e?e+"":e,i);class D extends i{constructor(s){return super(),v(this,"c"),v(this,"media"),v(this,"ua"),v(this,"sessions"),this.c=this.__initConfig(s),this.media=C(),this.sessions={},this.ua=null,this}dispatch(s,e){this.emit(s,e),this.emit(o.ON_EVENT,e)}dispatchSession(s,e=!1){e?this.emit(o.ON_NEWRTCSESSION,s):this.emit(o.ON_RTCSESSION_STATE,s)}__listenEvent(){this.ua&&(this.ua.on("connecting",s=>{const e=I({msg:o.ON_CONNECTING,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,code:200,extra:{suffix:`(${s.attempts}次)`},data:{attempts:s.attempts}});this.dispatch(o.ON_CONNECTING,e)}),this.ua.on("connected",s=>{const e=I({msg:o.ON_CONNECTED,code:200,id:this.c.sip.sipWorkerid,uri:this.c.sip.uri});this.dispatch(o.ON_CONNECTED,e)}),this.ua.on("disconnected",s=>{const e=I({msg:o.ON_DISCONNECTED,code:500,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,reason:s.reason,statusCode:s.code});this.dispatch(o.ON_DISCONNECTED,e)}),this.ua.on("registered",s=>{const e=I({msg:o.ON_REGISTERED,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,code:200,statusCode:s.response?.status_code,reason:s.response?.reason_phrase});this.dispatch(o.ON_REGISTERED,e)}),this.ua.on("unregistered",s=>{const e=I({msg:o.ON_UNREGISTERED,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,code:500,statusCode:s.response?.status_code,cause:s.cause??s.response?.reason_phrase});this.dispatch(o.ON_UNREGISTERED,e)}),this.ua.on("registrationFailed",s=>{const e={msg:o.ON_REGISTRATIONFAILED,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,code:500,statusCode:s.response?.status_code,cause:s.cause??s.response?.reason_phrase};s.response||(e.msg=o.ON_TIME_OUT);const i=I(e);this.dispatch(o.ON_REGISTRATIONFAILED,i)}),this.ua.on("registrationExpiring",s=>{I({msg:o.ON_REGISTRATIONEXPIRING,id:this.c.sip.sipWorkerid,uri:this.c.sip.uri,code:200}),this.ua&&this.ua.register()}),this.ua.on("newOptions",s=>{I({msg:o.ON_NEWOPTIONS,code:200,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,originator:s.originator})}),this.ua.on("sipEvent",s=>{I({msg:o.ON_SIPEVENT,code:200,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,data:{ruri:s.request.ruri}})}),this.ua.on("newRTCSession",e=>{const i=s(),n=e.session.direction;this.sessions[i]={uri:"",originator:e.originator,id:i,sessionOrigin:n,session:e.session};const r=I({id:this.c.sip.sipWorkerid,uri:this.c.sip.uri,msg:o.ON_NEWRTCSESSION,originator:e.originator,code:200,sessionOrigin:n,sessionId:i});this.dispatchSession(r),e.originator===t.LOCAL&&e.session.connection.addEventListener("track",s=>{this.media.playRemote(s.streams)}),e.session.on("peerconnection",s=>{s.peerconnection.addEventListener("track",s=>{this.media.playRemote(s.streams)})}),e.session.on("connecting",s=>{const e=I({msg:o.ON_SESSTION_CONNECTING,id:this.c.sip.sipWorkerid,uri:this.c.sip.uri,code:200,sessionOrigin:n,sessionId:i});this.dispatchSession(e)}),e.session.on("progress",s=>{this.c.call.isRrequestTimeout=!1;const e=I({msg:o.ON_SESSION_PROGRESS,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,sessionId:i,sessionOrigin:n,code:200,originator:s.originator,statusCode:s.originator===t.REMOTE?s.response.status_code:0,reason:s.originator===t.REMOTE?s.response.reason_phrase:""});this.dispatchSession(e)}),e.session.on("accepted",s=>{try{const e=I({msg:o.ON_SESSTION_ACCEPTED,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,sessionId:i,sessionOrigin:n,code:200,originator:s.originator,statusCode:s.originator===t.REMOTE?s.response.status_code:0,reason:s.originator===t.REMOTE?s.response.reason_phrase:""});this.dispatchSession(e)}catch(s){const e=I({msg:o.ON_SESSION_ANSWER_FAILED,cause:o.ON_SESSION_ANSWER_FAILED,code:500,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,sessionOrigin:n,sessionId:i});this.dispatchSession(e)}}),e.session.on("confirmed",s=>{const e=I({msg:o.ON_SESSTION_CONFIRMED,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,sessionId:i,sessionOrigin:n,code:200,originator:s.originator});this.dispatchSession(e)}),e.session.on("ended",s=>{const e=I({msg:o.ON_SESSTION_ENDED,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,sessionId:i,sessionOrigin:n,code:500,originator:s.originator,cause:s.cause});this.dispatchSession(e)}),e.session.on("icecandidate",s=>{clearTimeout(this.c.call.icecandidateTimeout),this.c.call.icecandidateTimeout=window.setTimeout(()=>{clearTimeout(this.c.call.icecandidateTimeout),s.ready()},2e3)}),e.session.on("sdp",s=>{}),e.session.on("peerconnection:createofferfailed",s=>{console.log("[peerconnection:createofferfailed]",s)}),e.session.on("peerconnection:createanswerfailed",s=>{console.log("[peerconnection:createanswerfailed]",s)}),e.session.on("peerconnection:setlocaldescriptionfailed",s=>{console.log("[peerconnection:setlocaldescriptionfailed]",s)}),e.session.on("peerconnection:setremotedescriptionfailed",s=>{console.log("[peerconnection:setremotedescriptionfailed]",s)}),e.session.on("failed",s=>{console.log(s);const e={msg:o.ON_SESSTION_FAILED,id:this.c.sip.sipWorkerid,uri:this.c.sip.uri,originator:s.originator,code:500,sessionOrigin:n,sessionId:i,cause:s.cause,reason:s.originator===t.REMOTE?(s?.message).reason_phrase:void 0,statusCode:s.originator===t.REMOTE?(s?.message).status_code:void 0};this.c.call.isRrequestTimeout?(e.msg=o.ON_SESSION_TIMEOUT,this.dispatchSession(I(e)),this.c.call.isRrequestTimeout=!1):(this.dispatchSession(I(e)),this.c.call.isRrequestTimeout=!1)}),e.session.on("hold",s=>{const e=I({msg:o.ON_HOLD,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,originator:s.originator,sessionOrigin:n,sessionId:i,code:200});this.dispatchSession(e)}),e.session.on("unhold",s=>{const e=I({msg:o.ON_RESUME,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,originator:s.originator,sessionOrigin:n,sessionId:i,code:200});this.dispatchSession(e)}),e.session.on("muted",s=>{const e=I({msg:o.ON_MUTE,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,code:200,sessionOrigin:n,sessionId:i,data:s});this.dispatchSession(e)}),e.session.on("unmuted",s=>{const e=I({msg:o.ON_UNMUTE,uri:this.c.sip.uri,id:this.c.sip.sipWorkerid,code:200,sessionOrigin:n,sessionId:i,data:s});this.dispatchSession(e)})}))}__initConfig(s){const e={call:{calling:!1,icecandidateTimeout:0,isRrequestTimeout:!1,tryTimeOut:0,transferNumber:"",phoneNumber:""},sip:{viaTransport:"wss",sipWorkerid:"",sipServer:[],sipIce:[],sockets:[],uri:"",register_expires:300,register:!0}};return s&&Object.assign(e.sip,s),e}sessionById(s){if(s)return this.sessions[s]}isConnected(){return Boolean(this.ua?.isConnected())}isRegistered(){return Boolean(this.ua?.isRegistered())}sipConfig(){return{...this.c.sip}}sipInit(s){return Object.assign(this.c.sip,s),this.c.sip.audio&&this.media.setAudio(this.c.sip.audio),this}sipAnswer(s){const e=this.sessions[s.sessionId];e?.session&&e.session.isInProgress()&&e.session.answer()}sipCall(s){if(this.ua&&this.ua.isRegistered()){const e={mediaConstraints:{audio:!0,video:!1},sessionTimersExpires:300,pcConfig:{iceServers:this.c.sip.sipIce}},i=s.options?Object.assign({},s.options,e):e;return void this.ua.call(s.target,i)}console.warn("[jssip call] ua is not registered")}sipStop(){this.ua?.terminateSessions(),this.ua?.unregister({all:!0}),this.ua?.stop(),this.ua=null}sipLogin(){try{if(this.isConnected())this.isRegistered()?console.warn("[jssip login] ua is already logined"):this.ua?.register();else{const s=this.c.sip.sipServer.map(s=>{const i=new e.WebSocketInterface(s);return i.via_transport=this.c.sip.viaTransport,i});this.c.sip.sockets=s,this.ua?.removeAllListeners(),this.ua=new e.UA(this.c.sip),this.__listenEvent(),this.ua.start()}}catch(s){console.error("[jssip login]",s)}}sipRegister(){if(this.ua){if(!this.ua.isRegistered())return void this.ua.register();console.warn("[jssip register] ua is already registerd")}console.warn("[jssip register] ua is not initialized")}sipUnregister(){this.ua?.unregister()}sipSessionDel(s){this.sipHangUp({...s,isTimeout:!1}),this.sessions[s.sessionId]&&delete this.sessions[s.sessionId]}isSessionEstab(s){const e=this.sessions[s];if(!e)return!1;const i=e.session;return!!i&&i.isEstablished()}sipHangUp(s){if(this.sessions[s.sessionId]){this.c.call.isRrequestTimeout=s.isTimeout;const e=this.sessions[s.sessionId].session;if(!e)return;(e.isInProgress()||e.isEstablished())&&this.sessions[s.sessionId].session?.terminate()}}sipDTMF(s){this.isSessionEstab(s.sessionId)&&this.sessions[s.sessionId].session?.sendDTMF(s.tone)}sipHold(s){this.isSessionEstab(s.sessionId)&&this.sessions[s.sessionId].session?.hold()}sipResume(s){this.isSessionEstab(s.sessionId)&&this.sessions[s.sessionId].session?.unhold()}sipMute(s){this.isSessionEstab(s.sessionId)&&this.sessions[s.sessionId].session?.mute({audio:!0,video:!1})}sipUnmute(s){this.isSessionEstab(s.sessionId)&&this.sessions[s.sessionId].session?.unmute({audio:!0,video:!1})}}var A=(s=>(s.LOGIN="LOGIN",s.INIT="INIT",s.CALL="CALL",s.ANSWER="ANSWER",s.LOGOUT="LOGOUT",s.HANGUP="HANGUP",s.HOLD="HOLD",s.UNHOLD="ONHOLD",s.MUTE="MUTE",s.UNMUTE="UNMUTE",s.REGISTER="REGISTER",s.SESSTION_DEL="SESSTION_DEL",s.UNREGISTER="UNREGISTER",s.NOTIFY="NOTIFY",s.EMPTY="EMPTY",s.DTMF="DTMF",s))(A||{});const f=()=>{const s={value:new Map},e=3,i={value:0},t={value:new Map},o={value:-1};function n(){return{maxRetry:e,currentRetry:0,init:!0}}function r(e){const i=s.value.get(e);if(!i){const i=n();return s.value.set(e,i),{...i}}return{...i}}function a(e,i){const t=r(e);s.value.set(e,{...t,...i})}function c(s,e=500){const i=t.value.get(s);return i||(function(s,e){t.value.set(s,e)}(s,e),e)}function u(s){const e=r(s);return e.maxRetry<e.currentRetry}function d(s){if(u(s))return!1;const e=r(s);return e.currentRetry++,!(e.maxRetry<e.currentRetry)&&(a(s,e),!0)}return{updateMaxRetry:function(s,e){a(s,{maxRetry:e})},getRetryTime:function(s){return r(s).currentRetry},isMax:u,retry:d,reset:function(s){const e=n();i.value=0,a(s,e),o.value=0,t.value.delete(s)},delayRetry:function(s,e,t=500){return u(s)?0:o.value?(clearTimeout(o.value),o.value=0,o.value=window.setTimeout(()=>{e(),o.value=0},i.value),i.value):d(s)?(i.value+=c(s,t),o.value=window.setTimeout(()=>{e(),o.value=0},i.value),i.value):0}}};class U extends D{postMessage(s,e){try{switch(s){case A.INIT:{const s={...e,sockets:[]};this.sipInit(s);break}case A.CALL:{const s=e;this.sipCall(s);break}case A.ANSWER:{const s=e;this.sipAnswer(s);break}case A.LOGIN:this.sipLogin();break;case A.LOGOUT:this.sipStop();break;case A.REGISTER:this.sipRegister();break;case A.UNREGISTER:this.sipUnregister();break;case A.HANGUP:{const s=e;this.sipHangUp(s);break}case A.SESSTION_DEL:{const s=e;this.sipSessionDel(s);break}case A.HOLD:{const s=e;this.sipHold(s);break}case A.UNHOLD:{const s=e;this.sipResume(s);break}case A.MUTE:{const s=e;this.sipMute(s);break}case A.UNMUTE:{const s=e;this.sipUnmute(s);break}case A.DTMF:{const s=e;this.sipDTMF(s);break}case A.EMPTY:case A.NOTIFY:}}catch(s){console.log(s)}}}export{D as JSSipWraper,t as Originator,U as SipWorker,R as cause,A as cmd,r as isSession,o as on,a as onToCN,c as sipCode,p as socket,C as useMedia,f as useRetry};