@nethesis/phone-island 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/App.d.ts +6 -0
  2. package/dist/App.js +2 -0
  3. package/dist/App.js.map +1 -0
  4. package/dist/_virtual/_rollupPluginBabelHelpers.js +2 -0
  5. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  6. package/dist/_virtual/sdp.js +2 -0
  7. package/dist/_virtual/sdp.js.map +1 -0
  8. package/dist/index.css +1 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.js +2 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/lib/janus.js +2 -0
  13. package/dist/lib/janus.js.map +1 -0
  14. package/dist/node_modules/@socket.io/component-emitter/index.mjs.js +2 -0
  15. package/dist/node_modules/@socket.io/component-emitter/index.mjs.js.map +1 -0
  16. package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js +2 -0
  17. package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js.map +1 -0
  18. package/dist/node_modules/engine.io-client/build/esm/contrib/parseqs.js +2 -0
  19. package/dist/node_modules/engine.io-client/build/esm/contrib/parseqs.js.map +1 -0
  20. package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js +2 -0
  21. package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js.map +1 -0
  22. package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js +2 -0
  23. package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js.map +1 -0
  24. package/dist/node_modules/engine.io-client/build/esm/globalThis.browser.js +2 -0
  25. package/dist/node_modules/engine.io-client/build/esm/globalThis.browser.js.map +1 -0
  26. package/dist/node_modules/engine.io-client/build/esm/index.js +2 -0
  27. package/dist/node_modules/engine.io-client/build/esm/index.js.map +1 -0
  28. package/dist/node_modules/engine.io-client/build/esm/socket.js +2 -0
  29. package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -0
  30. package/dist/node_modules/engine.io-client/build/esm/transport.js +2 -0
  31. package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -0
  32. package/dist/node_modules/engine.io-client/build/esm/transports/index.js +2 -0
  33. package/dist/node_modules/engine.io-client/build/esm/transports/index.js.map +1 -0
  34. package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +2 -0
  35. package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -0
  36. package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js +2 -0
  37. package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js.map +1 -0
  38. package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js +2 -0
  39. package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js.map +1 -0
  40. package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js +2 -0
  41. package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js.map +1 -0
  42. package/dist/node_modules/engine.io-client/build/esm/util.js +2 -0
  43. package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -0
  44. package/dist/node_modules/engine.io-parser/build/esm/commons.js +2 -0
  45. package/dist/node_modules/engine.io-parser/build/esm/commons.js.map +1 -0
  46. package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +2 -0
  47. package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js.map +1 -0
  48. package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +2 -0
  49. package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js.map +1 -0
  50. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +2 -0
  51. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -0
  52. package/dist/node_modules/engine.io-parser/build/esm/index.js +2 -0
  53. package/dist/node_modules/engine.io-parser/build/esm/index.js.map +1 -0
  54. package/dist/node_modules/sdp/sdp.js +2 -0
  55. package/dist/node_modules/sdp/sdp.js.map +1 -0
  56. package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js +2 -0
  57. package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js.map +1 -0
  58. package/dist/node_modules/socket.io-client/build/esm/index.js +2 -0
  59. package/dist/node_modules/socket.io-client/build/esm/index.js.map +1 -0
  60. package/dist/node_modules/socket.io-client/build/esm/manager.js +2 -0
  61. package/dist/node_modules/socket.io-client/build/esm/manager.js.map +1 -0
  62. package/dist/node_modules/socket.io-client/build/esm/on.js +2 -0
  63. package/dist/node_modules/socket.io-client/build/esm/on.js.map +1 -0
  64. package/dist/node_modules/socket.io-client/build/esm/socket.js +2 -0
  65. package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -0
  66. package/dist/node_modules/socket.io-client/build/esm/url.js +2 -0
  67. package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -0
  68. package/dist/node_modules/socket.io-parser/build/esm/binary.js +2 -0
  69. package/dist/node_modules/socket.io-parser/build/esm/binary.js.map +1 -0
  70. package/dist/node_modules/socket.io-parser/build/esm/index.js +2 -0
  71. package/dist/node_modules/socket.io-parser/build/esm/index.js.map +1 -0
  72. package/dist/node_modules/socket.io-parser/build/esm/is-binary.js +2 -0
  73. package/dist/node_modules/socket.io-parser/build/esm/is-binary.js.map +1 -0
  74. package/dist/node_modules/tslib/tslib.es6.js +2 -0
  75. package/dist/node_modules/tslib/tslib.es6.js.map +1 -0
  76. package/dist/node_modules/webrtc-adapter/src/js/adapter_core.js +2 -0
  77. package/dist/node_modules/webrtc-adapter/src/js/adapter_core.js.map +1 -0
  78. package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js +2 -0
  79. package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js.map +1 -0
  80. package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js +2 -0
  81. package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js.map +1 -0
  82. package/dist/node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js +2 -0
  83. package/dist/node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js.map +1 -0
  84. package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js +2 -0
  85. package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js.map +1 -0
  86. package/dist/node_modules/webrtc-adapter/src/js/common_shim.js +2 -0
  87. package/dist/node_modules/webrtc-adapter/src/js/common_shim.js.map +1 -0
  88. package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js +2 -0
  89. package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js.map +1 -0
  90. package/dist/node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js +2 -0
  91. package/dist/node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js.map +1 -0
  92. package/dist/node_modules/webrtc-adapter/src/js/firefox/getusermedia.js +2 -0
  93. package/dist/node_modules/webrtc-adapter/src/js/firefox/getusermedia.js.map +1 -0
  94. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js +2 -0
  95. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -0
  96. package/dist/node_modules/webrtc-adapter/src/js/utils.js +2 -0
  97. package/dist/node_modules/webrtc-adapter/src/js/utils.js.map +1 -0
  98. package/dist/package.json +10 -0
  99. package/package.json +8 -3
  100. package/.eslintrc.json +0 -41
  101. package/.prettierrc +0 -9
  102. package/.storybook/main.js +0 -20
  103. package/.storybook/preview.js +0 -11
  104. package/decs.d.ts +0 -1
  105. package/postcss.config.js +0 -5
  106. package/public/favicon.ico +0 -0
  107. package/public/index.html +0 -18
  108. package/rollup.config.ts +0 -59
  109. package/scripts/buildUtils.js +0 -28
  110. package/src/App.tsx +0 -467
  111. package/src/index.css +0 -9
  112. package/src/index.ts +0 -2
  113. package/src/index.widget.tsx +0 -22
  114. package/src/lib/janus.js +0 -3661
  115. package/src/stories/App.stories.tsx +0 -36
  116. package/tailwind.config.js +0 -14
  117. package/tsconfig.json +0 -21
  118. package/widget-example/index.html +0 -20
package/dist/App.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { FC } from 'react';
2
+ interface PhoneIslandType {
3
+ dataConfig: string;
4
+ }
5
+ export declare const PhoneIsland: FC<PhoneIslandType>;
6
+ export {};
package/dist/App.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./node_modules/webrtc-adapter/src/js/adapter_core.js"),a=require("./lib/janus.js"),o=require("./node_modules/socket.io-client/build/esm/index.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=r(n),u=function(r){var u=r.dataConfig,c=n.useState(!1),l=c[0],i=c[1],d=n.useState(null),f=d[0],g=d[1],m=n.useState(null),p=m[0],b=m[1],v=n.useState(!1),h=v[0],y=v[1],k=n.useState({}),w=k[0],j=k[1],x=n.useRef(null),N=atob(u).split(":"),S=N[0],_=N[1],E=N[2],q=N[3],T=N[4],C=!1,P=function(e){return e&&"<unknown>"!==e.counterpartName&&"string"==typeof e.counterpartName&&e.counterpartName.length>0?e.counterpartName:e&&e.counterpartNum&&"string"==typeof e.counterpartNum&&e.counterpartNum.length>0?e.counterpartNum:"Anonymous"};return n.useEffect((function(){var n;(n=o.io(S,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3})).on("connect",(function(){console.log("Socket on: "+S+" is connected !"),n.emit("login",{accessKeyId:_,token:E,uaType:"desktop"})})),n.on("authe_ok",(function(){console.log("AUTH OK")})),n.on("extenUpdate",(function(n){n.username===_&&function(n){var t=n.conversations[Object.keys(n.conversations)[0]]||{};if(Object.keys(t).length>0){var a=n.status;a&&"ringing"===a&&j((function(n){return e.__assign(e.__assign({},n),{displayName:P(t)})}))}}(n)})),navigator.mediaDevices.getUserMedia({video:!0,audio:!0});var r={registration_failed:[],registered:[],calling:[],incomingcall:[],accepted:[],hangup:[],gateway_down:[],error:[],progress:[],destroyed:[]};return a.default.init({debug:"all",dependencies:a.default.useDefaultDependencies({adapter:t.default}),callback:function(){var e=new a.default({server:"https://nv-seb/janus",success:function(){console.log("success"),e.attach({plugin:"janus.plugin.sip",opaqueId:"sebastian_"+(new Date).getTime(),success:function(e){g(e),function(e){e.send({message:{request:"register",username:"sip:"+q+"@127.0.0.1",display_name:"Foo 1",secret:T,proxy:"sip:127.0.0.1:5060",sips:!1,refresh:!1}})}(e),e&&console.log("SIP plugin attached! ("+e.getPlugin()+", id = )")},error:function(e){console.error(" -- Error attaching plugin..."),console.error(e)},consentDialog:function(e){console.log("janus consentDialog (on: ".concat(e,")"))},webrtcState:function(e){console.log("Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},iceState:function(e){f&&console.log('ICE state of PeerConnection of handle has changed to "'.concat(e,'"'))},mediaState:function(e,n){console.log("Janus "+(n?"started":"stopped")+" receiving our "+e)},slowLink:function(e,n){e?console.warn("SLOW link: several missing packets from janus (".concat(n,")")):console.warn("SLOW link: janus is not receiving all your packets (".concat(n,")"))},onmessage:function(e,n){a.default.debug(" ::: Got a message :::"),a.default.debug(JSON.stringify(e));var t=e.error;if(null==t||null==t){var o=e.result;if(null!=o&&void 0!==o.event&&null!==o.event){var s=o.event;for(var u in r[s])r[s][u](e,n);switch(s){case"registration_failed":return void a.default.error("Registration failed: "+o.code+" "+o.reason);case"unregistered":a.default.log("Successfully un-registered as "+o.username+"!");break;case"registered":a.default.log("Successfully registered as "+o.username+"!"),C||(C=!0);break;case"registering":a.default.log("janus registering");break;case"calling":a.default.log("Waiting for the peer to answer...");break;case"incomingcall":b(n),i(!0),a.default.log("Incoming call from "+o.username+"!");break;case"progress":a.default.log("There's early media from "+o.username+", wairing for the call!");break;case"accepted":y(!0),a.default.log(o.username+" accepted the call!");break;case"hangup":i(!1),y(!1),486===o.code&&"hangup"===o.event&&"Busy Here"===o.reason&&busyToneSound.play(),a.default.log("Call hung up ("+o.code+" "+o.reason+")!"),null!=incoming&&(incoming=null),f.hangup()}}}else for(var u in C?f.hangup():a.default.log("User is not registered"),r.error)r.error[u](e,n)},onlocalstream:function(e){a.default.debug(" ::: Got a local stream :::"),a.default.debug(e),a.default.attachMediaStream(x.current,e),e.getVideoTracks()},onremotestream:function(e){a.default.debug(" ::: Got a remote stream :::"),a.default.debug(e),e.getAudioTracks(),e.getVideoTracks()},oncleanup:function(){console.log(" ::: janus Got a cleanup notification :::")},detached:function(){console.warn("SIP plugin handle detached from the plugin itself")}})},error:function(e){console.log("error",e)}})}}),function(){f&&f.send({message:{request:"unregister"}})}}),[]),s.default.createElement(s.default.Fragment,null,l&&s.default.createElement(s.default.Fragment,null,s.default.createElement("div",{className:"bg-black px-10 py-8 rounded-3xl flex flex-col gap-5 text-white w-fit absolute bottom-6 left-20 font-sans"},s.default.createElement("div",{className:"flex items-center"},s.default.createElement("span",null,w.displayName?w.displayName:"-"),h&&s.default.createElement("span",{className:"ml-5 w-3 h-3 bg-red-600 rounded-full"})),s.default.createElement("div",{className:"flex gap-3"},s.default.createElement("button",{onClick:function(){f.createAnswer({jsep:p,media:{audio:!0,videoSend:!1,videoRecv:!1},success:function(e){f.send({message:{request:"accept"},jsep:e})},error:function(e){a.default.error("WebRTC error:",e),f.send({message:{request:"decline",code:480}})}})},className:"flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-green-600 text-white border border-transparent hover:bg-green-700 focus:ring-green-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4"},"Answer"),s.default.createElement("button",{onClick:h?function(){f.send({message:{request:"hangup"}})}:function(){f.send({message:{request:"decline"}})},className:"flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-red-600 text-white border border-transparent hover:bg-red-700 focus:ring-red-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4"},"Decline")))),s.default.createElement("video",{className:"hidden",ref:x,muted:!0,autoPlay:!0}))};u.displayName="PhoneIsland",exports.PhoneIsland=u;
2
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, FC } from 'react'\nimport adapter from 'webrtc-adapter'\nimport Janus from './lib/janus.js'\nimport { io } from 'socket.io-client'\n\ninterface PhoneIslandType {\n dataConfig: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandType> = ({ dataConfig }) => {\n const [calling, setCalling] = useState<boolean>(false)\n const [sipcall, setSipCall] = useState<any>(null)\n const [jsepGlobal, setJsepGlobal] = useState<object | null>(null)\n const [accepted, setAccepted] = useState<boolean>(false)\n const [currentCall, setCurrentCall] = useState<{ [index: string]: string | number }>({})\n const localStream = useRef(null)\n\n const CONFIG: string[] = atob(dataConfig).split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n\n let registered = false\n\n const decline = () => {\n sipcall.send({\n message: {\n request: 'decline',\n },\n })\n }\n\n const hangup = () => {\n sipcall.send({\n message: {\n request: 'hangup',\n },\n })\n }\n\n const answer = () => {\n sipcall.createAnswer({\n jsep: jsepGlobal,\n media: {\n audio: true,\n videoSend: false,\n videoRecv: false,\n },\n success: (jsep) => {\n sipcall.send({\n message: {\n request: 'accept',\n },\n jsep: jsep,\n })\n },\n error: (error) => {\n // @ts-ignore\n Janus.error('WebRTC error:', error)\n sipcall.send({\n message: {\n request: 'decline',\n code: 480,\n },\n })\n },\n })\n }\n\n const register = (sipcall) => {\n // Register after Janus initialization\n sipcall.send({\n message: {\n request: 'register',\n username: 'sip:' + SIP_EXTEN + '@' + '127.0.0.1',\n display_name: 'Foo 1',\n secret: SIP_SECRET,\n proxy: 'sip:' + '127.0.0.1' + ':5060',\n sips: false,\n refresh: false,\n },\n })\n }\n\n interface ConvType {\n [index: string]: string | number\n }\n\n const getDisplayName = (conv: ConvType): string => {\n let dispName = ''\n if (\n conv &&\n conv.counterpartName !== '<unknown>' &&\n typeof conv.counterpartName === 'string' &&\n conv.counterpartName.length > 0\n ) {\n dispName = conv.counterpartName\n } else if (\n conv &&\n conv.counterpartNum &&\n typeof conv.counterpartNum === 'string' &&\n conv.counterpartNum.length > 0\n ) {\n dispName = conv.counterpartNum\n } else {\n dispName = 'Anonymous'\n }\n return dispName\n }\n\n useEffect(() => {\n const handleCalls = (res: any) => {\n // Initialize conversation\n const conv: ConvType = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n const status: string = res.status\n if (status) {\n switch (status) {\n case 'ringing':\n setCurrentCall((state) => ({\n ...state,\n displayName: getDisplayName(conv),\n }))\n break\n default:\n break\n }\n }\n }\n }\n\n const initWsConnection = () => {\n const socket = io(HOST_NAME, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n socket.on('connect', () => {\n console.log('Socket on: ' + HOST_NAME + ' is connected !')\n\n socket.emit('login', {\n accessKeyId: USERNAME,\n token: AUTH_TOKEN,\n uaType: 'desktop',\n })\n })\n\n socket.on('authe_ok', () => {\n console.log('AUTH OK')\n })\n\n socket.on('extenUpdate', (res) => {\n if (res.username === USERNAME) {\n handleCalls(res)\n }\n })\n }\n\n initWsConnection()\n\n navigator.mediaDevices.getUserMedia({\n video: true,\n audio: true,\n })\n\n const setupDeps = () =>\n // @ts-ignore\n Janus.useDefaultDependencies({\n adapter,\n })\n\n var evtObservers = {\n registration_failed: [],\n registered: [],\n calling: [],\n incomingcall: [],\n accepted: [],\n hangup: [],\n gateway_down: [],\n error: [],\n progress: [],\n destroyed: [],\n }\n\n const initWebRTC = () => {\n // @ts-ignore\n Janus.init({\n debug: 'all',\n dependencies: setupDeps(),\n callback: function () {\n // @ts-ignore\n const janus = new Janus({\n server: 'https://nv-seb/janus',\n success: () => {\n console.log('success')\n // @ts-ignore\n janus.attach({\n plugin: 'janus.plugin.sip',\n opaqueId: 'sebastian' + '_' + new Date().getTime(),\n success: function (pluginHandle) {\n setSipCall(pluginHandle)\n register(pluginHandle)\n if (pluginHandle) {\n console.log(\n 'SIP plugin attached! (' + pluginHandle.getPlugin() + ', id = ' + ')',\n )\n }\n // getSupportedDevices(function () {\n // resolve()\n // })\n },\n error: function (error) {\n console.error(' -- Error attaching plugin...')\n console.error(error)\n // reject()\n },\n consentDialog: function (on) {\n console.log(`janus consentDialog (on: ${on})`)\n },\n webrtcState: function (on) {\n console.log(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n iceState: function (newState) {\n if (sipcall) {\n console.log(\n `ICE state of PeerConnection of handle has changed to \"${newState}\"`,\n )\n }\n },\n mediaState: function (medium, on) {\n console.log('Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium)\n },\n slowLink: function (uplink, count) {\n if (uplink) {\n console.warn(`SLOW link: several missing packets from janus (${count})`)\n } else {\n console.warn(`SLOW link: janus is not receiving all your packets (${count})`)\n }\n },\n onmessage: function (msg, jsep) {\n // @ts-ignore\n Janus.debug(' ::: Got a message :::')\n // @ts-ignore\n Janus.debug(JSON.stringify(msg))\n // Any error?\n var error = msg['error']\n if (error != null && error != undefined) {\n if (!registered) {\n // @ts-ignore\n Janus.log('User is not registered')\n } else {\n // Reset status\n sipcall.hangup()\n }\n for (var evt in evtObservers['error']) {\n // @ts-ignore\n evtObservers['error'][evt](msg, jsep)\n }\n return\n }\n var result = msg['result']\n if (\n result !== null &&\n result !== undefined &&\n result['event'] !== undefined &&\n result['event'] !== null\n ) {\n // get event\n var event = result['event']\n\n // call all evt registered\n for (var evt in evtObservers[event]) {\n evtObservers[event][evt](msg, jsep)\n }\n\n //switch event\n switch (event) {\n case 'registration_failed':\n // @ts-ignore\n Janus.error(\n 'Registration failed: ' + result['code'] + ' ' + result['reason'],\n )\n return\n break\n\n case 'unregistered':\n // @ts-ignore\n Janus.log('Successfully un-registered as ' + result['username'] + '!')\n // registered = false\n break\n\n case 'registered':\n // @ts-ignore\n Janus.log('Successfully registered as ' + result['username'] + '!')\n if (!registered) {\n registered = true\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'registering':\n // @ts-ignore\n Janus.log('janus registering')\n break\n\n case 'calling':\n // @ts-ignore\n Janus.log('Waiting for the peer to answer...')\n // lastActivity = new Date().getTime()\n break\n\n case 'incomingcall':\n setJsepGlobal(jsep)\n setCalling(true)\n\n // @ts-ignore\n Janus.log('Incoming call from ' + result['username'] + '!')\n // lastActivity = new Date().getTime()\n break\n\n case 'progress':\n // @ts-ignore\n Janus.log(\n \"There's early media from \" +\n result['username'] +\n ', wairing for the call!',\n )\n // if (jsep !== null && jsep !== undefined) {\n // handleRemote(jsep)\n // }\n // lastActivity = new Date().getTime()\n break\n\n case 'accepted':\n setAccepted(true)\n\n // @ts-ignore\n Janus.log(result['username'] + ' accepted the call!')\n // if (jsep !== null && jsep !== undefined) {\n // handleRemote(jsep)\n // }\n // lastActivity = new Date().getTime()\n break\n\n case 'hangup':\n setCalling(false)\n setAccepted(false)\n\n if (\n result['code'] === 486 &&\n result['event'] === 'hangup' &&\n result['reason'] === 'Busy Here'\n ) {\n // @ts-ignore\n busyToneSound.play()\n }\n // @ts-ignore\n Janus.log('Call hung up (' + result['code'] + ' ' + result['reason'] + ')!')\n // @ts-ignore\n if (incoming != null) {\n // @ts-ignore\n incoming = null\n }\n sipcall.hangup()\n\n // lastActivity = new Date().getTime()\n // stopScreenSharingI()\n break\n\n default:\n break\n }\n }\n },\n onlocalstream: function (stream) {\n // @ts-ignore\n Janus.debug(' ::: Got a local stream :::')\n // @ts-ignore\n Janus.debug(stream)\n // @ts-ignore\n Janus.attachMediaStream(localStream.current, stream)\n /* IS VIDEO ENABLED ? */\n var videoTracks = stream.getVideoTracks()\n /* */\n },\n onremotestream: function (stream) {\n // @ts-ignore\n Janus.debug(' ::: Got a remote stream :::')\n // @ts-ignore\n Janus.debug(stream)\n // retrieve stream track\n var audioTracks = stream.getAudioTracks()\n var videoTracks = stream.getVideoTracks()\n // @ts-ignore\n // Janus.attachMediaStream(remoteStreamAudio, new MediaStream(audioTracks))\n // @ts-ignore\n // Janus.attachMediaStream(remoteStreamVideo, new MediaStream(videoTracks))\n },\n oncleanup: function () {\n console.log(' ::: janus Got a cleanup notification :::')\n },\n detached: function () {\n console.warn('SIP plugin handle detached from the plugin itself')\n },\n })\n },\n error: (err) => {\n console.log('error', err)\n },\n })\n },\n })\n }\n\n initWebRTC()\n\n return () => {\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'unregister',\n },\n })\n }\n }\n }, [])\n\n return (\n <>\n {calling && (\n <>\n <div className='bg-black px-10 py-8 rounded-3xl flex flex-col gap-5 text-white w-fit absolute bottom-6 left-20 font-sans'>\n <div className='flex items-center'>\n <span>{currentCall.displayName ? currentCall.displayName : '-'}</span>\n {accepted && <span className='ml-5 w-3 h-3 bg-red-600 rounded-full'></span>}\n </div>\n <div className='flex gap-3'>\n <button\n onClick={answer}\n className='flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-green-600 text-white border border-transparent hover:bg-green-700 focus:ring-green-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4'\n >\n Answer\n </button>\n <button\n onClick={accepted ? hangup : decline}\n className='flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-red-600 text-white border border-transparent hover:bg-red-700 focus:ring-red-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4'\n >\n Decline\n </button>\n </div>\n </div>\n </>\n )}\n <video className='hidden' ref={localStream} muted autoPlay></video>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","useState","calling","setCalling","_c","sipcall","setSipCall","_d","jsepGlobal","setJsepGlobal","_e","accepted","setAccepted","_f","currentCall","setCurrentCall","localStream","useRef","CONFIG","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","registered","getDisplayName","conv","counterpartName","length","counterpartNum","useEffect","socket","io","upgrade","transports","reconnection","reconnectionDelay","on","console","log","emit","accessKeyId","token","uaType","res","username","conversations","Object","keys","status_1","status","state","__assign","displayName","handleCalls","navigator","mediaDevices","getUserMedia","video","audio","evtObservers","registration_failed","incomingcall","hangup","gateway_down","error","progress","destroyed","Janus","init","debug","dependencies","useDefaultDependencies","adapter","callback","janus","server","success","attach","plugin","opaqueId","Date","getTime","pluginHandle","send","message","request","display_name","secret","proxy","sips","refresh","register","getPlugin","consentDialog","webrtcState","iceState","newState","mediaState","medium","slowLink","uplink","count","warn","onmessage","msg","jsep","JSON","stringify","undefined","result","event","evt","busyToneSound","play","incoming","onlocalstream","stream","attachMediaStream","current","getVideoTracks","onremotestream","getAudioTracks","oncleanup","detached","err","React","createElement","Fragment","className","onClick","createAnswer","media","videoSend","videoRecv","code","ref","muted","autoPlay"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function r(t){return r=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},r(t)}function n(t,e){return n=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},n(t,e)}function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function i(t,e,r){return i=o()?Reflect.construct.bind():function(t,e,r){var o=[null];o.push.apply(o,e);var i=new(Function.bind.apply(t,o));return r&&n(i,r.prototype),i},i.apply(null,arguments)}function u(t){return-1!==Function.toString.call(t).indexOf("[native code]")}function c(t){var e="function"==typeof Map?new Map:void 0;return c=function(t){if(null===t||!u(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,o)}function o(){return i(t,arguments,r(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),n(o,t)},c(t)}function a(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function f(t,e){if(e&&("object"==typeof e||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return a(t)}function l(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=r(t)););return t}function p(){return p="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=l(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},p.apply(this,arguments)}function s(t){if(Array.isArray(t))return d(t)}function y(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function b(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function h(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(exports,"__esModule",{value:!0}),exports.arrayLikeToArray=d,exports.arrayWithoutHoles=s,exports.assertThisInitialized=a,exports.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},exports.construct=i,exports.createClass=function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t},exports.createForOfIteratorHelper=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=b(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==r.return||r.return()}finally{if(c)throw i}}}},exports.createSuper=function(t){var e=o();return function(){var n,o=r(t);if(e){var i=r(this).constructor;n=Reflect.construct(o,arguments,i)}else n=o.apply(this,arguments);return f(this,n)}},exports.defineProperty=function(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t},exports.get=p,exports.getPrototypeOf=r,exports.inherits=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&n(t,e)},exports.isNativeFunction=u,exports.isNativeReflectConstruct=o,exports.iterableToArray=y,exports.nonIterableSpread=h,exports.possibleConstructorReturn=f,exports.setPrototypeOf=n,exports.superPropBase=l,exports.toConsumableArray=function(t){return s(t)||y(t)||b(t)||h()},exports.typeof=t,exports.unsupportedIterableToArray=b,exports.wrapNativeSuper=c;
2
+ //# sourceMappingURL=_rollupPluginBabelHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.sdp={exports:{}};
2
+ //# sourceMappingURL=sdp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdp.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/index.css ADDED
@@ -0,0 +1 @@
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.bottom-6{bottom:1.5rem}.left-20{left:5rem}.ml-5{margin-left:1.25rem}.flex{display:flex}.hidden{display:none}.h-3{height:.75rem}.w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.w-3{width:.75rem}.transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-col{flex-direction:column}.content-center{align-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.gap-5{gap:1.25rem}.gap-3{gap:.75rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.border{border-width:1px}.border-transparent{border-color:transparent}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-sm{font-size:.875rem;line-height:1.25rem}.font-medium{font-weight:500}.leading-4{line-height:1rem}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.focus\:z-20:focus{z-index:20}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-offset-black:focus{--tw-ring-offset-color:#000}.disabled\:opacity-75:disabled{opacity:.75}
@@ -0,0 +1 @@
1
+ export * from './App';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./App.js");exports.PhoneIsland=e.PhoneIsland;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../_virtual/_rollupPluginBabelHelpers.js");n.sessions={},n.isExtensionEnabled=function(){if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)return!0;if(window.navigator.userAgent.match("Chrome")){var e=parseInt(window.navigator.userAgent.match(/Chrome\/(.*) /)[1],10),r=33;return window.navigator.userAgent.match("Linux")&&(r=35),e>=26&&e<=r||n.extension.isInstalled()}return!0};var r={extensionId:"hapfgfdkleiggjjpfpenajgdnfckjpaj",isInstalled:function(){return null!==document.querySelector("#janus-extension-installed")},getScreen:function(e){var r=window.setTimeout((function(){var r=new Error("NavigatorUserMediaError");return r.name='The required Chrome extension is not installed: click <a href="#">here</a> to install it. (NOTE: this will need you to refresh the page)',e(r)}),1e3);this.cache[r]=e,window.postMessage({type:"janusGetScreen",id:r},"*")},init:function(){var e={};this.cache=e,window.addEventListener("message",(function(r){if(r.origin==window.location.origin)if("janusGotScreen"==r.data.type&&e[r.data.id]){var n=e[r.data.id];if(delete e[r.data.id],""===r.data.sourceId){var t=new Error("NavigatorUserMediaError");t.name="You cancelled the request for permission, giving up...",n(t)}else n(null,r.data.sourceId)}else"janusGetScreenPending"==r.data.type&&(console.log("clearing ",r.data.id),window.clearTimeout(r.data.id))}))}};function n(r){if((r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:n.noop,r.destroyed="function"==typeof r.destroyed?r.destroyed:n.noop,!n.initDone)return r.error("Library not initialized"),{};if(!n.isWebrtcSupported())return r.error("WebRTC not supported by this browser"),{};if(n.log("Library initialized: "+n.initDone),!r.server)return r.error("Invalid server url"),{};var t=!1,o=null,a={},i=null,s=null,d=0,c=r.server;n.isArray(c)?(n.log("Multiple servers provided ("+c.length+"), will use the first that works"),c=null,s=r.server,n.debug(s)):0===c.indexOf("ws")?(t=!0,n.log("Using WebSockets to contact Janus: "+c)):(t=!1,n.log("Using REST API to contact Janus: "+c));var l=r.iceServers||[{urls:"stun:stun.l.google.com:19302"}],u=r.iceTransportPolicy,f=r.bundlePolicy,v=!0===r.ipv6,p=!1;void 0!==r.withCredentials&&null!==r.withCredentials&&(p=!0===r.withCredentials);var g=10;void 0!==r.max_poll_events&&null!==r.max_poll_events&&(g=r.max_poll_events),g<1&&(g=1);var m=null;void 0!==r.token&&null!==r.token&&(m=r.token);var b=null;void 0!==r.apisecret&&null!==r.apisecret&&(b=r.apisecret),this.destroyOnUnload=!0,void 0!==r.destroyOnUnload&&null!==r.destroyOnUnload&&(this.destroyOnUnload=!0===r.destroyOnUnload);var h=25e3;void 0!==r.keepAlivePeriod&&null!==r.keepAlivePeriod&&(h=r.keepAlivePeriod),isNaN(h)&&(h=25e3);var S=6e4;function w(e){var r={high:9e5,medium:3e5,low:1e5};return null!=e&&(e.high&&(r.high=e.high),e.medium&&(r.medium=e.medium),e.low&&(r.low=e.low)),r}void 0!==r.longPollTimeout&&null!==r.longPollTimeout&&(S=r.longPollTimeout),isNaN(S)&&(S=6e4);var y=!1,k=null,T={},C=this,A=0,D={};function R(){if(null!=k)if(n.debug("Long poll..."),y){var e=c+"/"+k+"?rid="+(new Date).getTime();g&&(e=e+"&maxev="+g),m&&(e=e+"&token="+encodeURIComponent(m)),b&&(e=e+"&apisecret="+encodeURIComponent(b)),n.httpAPICall(e,{verb:"GET",withCredentials:p,success:I,timeout:S,error:function(e,t){if(n.error(e+":",t),++A>3)return y=!1,void r.error("Lost connection to the server (is it down?)");R()}})}else n.warn("Is the server down? (connected=false)")}function I(e,r){if(A=0,t||null==k||!0===r||R(),t||!n.isArray(e))if("keepalive"!==e.janus)if("server_info"!==e.janus)if("ack"!==e.janus)if("success"!==e.janus)if("trickle"===e.janus){var a=e.sender;if(!a)return void n.warn("Missing sender...");var i=T[a];if(!i)return void n.debug("This handle is not attached to this session");var s=e.candidate;n.debug("Got a trickled candidate on session "+k),n.debug(s);var d=i.webrtcStuff;d.pc&&d.remoteSdp?(n.debug("Adding remote candidate:",s),s&&!0!==s.completed?d.pc.addIceCandidate(s):d.pc.addIceCandidate(n.endOfCandidates)):(n.debug("We didn't do setRemoteDescription (trickle got here before the offer?), caching candidate"),d.candidates||(d.candidates=[]),d.candidates.push(s),n.debug(d.candidates))}else{if("webrtcup"===e.janus){n.debug("Got a webrtcup event on session "+k),n.debug(e);var c=e.sender;if(!c)return void n.warn("Missing sender...");var l=T[c];return l?void l.webrtcState(!0):void n.debug("This handle is not attached to this session")}if("hangup"===e.janus){n.debug("Got a hangup event on session "+k),n.debug(e);var u=e.sender;if(!u)return void n.warn("Missing sender...");var f=T[u];if(!f)return void n.debug("This handle is not attached to this session");f.webrtcState(!1,e.reason),f.hangup()}else if("detached"===e.janus){n.debug("Got a detached event on session "+k),n.debug(e);var v=e.sender;if(!v)return void n.warn("Missing sender...");var p=T[v];if(!p)return;p.ondetached(),p.detach()}else if("media"===e.janus){n.debug("Got a media event on session "+k),n.debug(e);var g=e.sender;if(!g)return void n.warn("Missing sender...");var m=T[g];if(!m)return void n.debug("This handle is not attached to this session");m.mediaState(e.type,e.receiving)}else if("slowlink"===e.janus){n.debug("Got a slowlink event on session "+k),n.debug(e);var b=e.sender;if(!b)return void n.warn("Missing sender...");var h=T[b];if(!h)return void n.debug("This handle is not attached to this session");h.slowLink(e.uplink,e.lost)}else{if("error"===e.janus){n.error("Ooops: "+e.error.code+" "+e.error.reason),n.debug(e);var S=e.transaction;if(S){var w=D[S];w&&w(e),delete D[S]}return}if("event"===e.janus){n.debug("Got a plugin event on session "+k),n.debug(e);var y=e.sender;if(!y)return void n.warn("Missing sender...");var C=e.plugindata;if(!C)return void n.warn("Missing plugindata...");n.debug(" -- Event is coming from "+y+" ("+C.plugin+")");var P=C.data;n.debug(P);var V=T[y];if(!V)return void n.warn("This handle is not attached to this session");var O=e.jsep;O&&(n.debug("Handling SDP as well..."),n.debug(O));var M=V.onmessage;M?(n.debug("Notifying application..."),M(P,O)):n.debug("No provided notification callback")}else{if("timeout"===e.janus)return n.error("Timeout on session "+k),n.debug(e),void(t&&o.close(3504,"Gateway timeout"));n.warn("Unknown message/event '"+e.janus+"' on session "+k),n.debug(e)}}}else{n.debug("Got a success on session "+k),n.debug(e);var x=e.transaction;if(x){var E=D[x];E&&E(e),delete D[x]}}else{n.debug("Got an ack on session "+k),n.debug(e);var j=e.transaction;if(j){var F=D[j];F&&F(e),delete D[j]}}else{n.debug("Got info on the Janus instance"),n.debug(e);var L=e.transaction;if(L){var N=D[L];N&&N(e),delete D[L]}}else n.vdebug("Got a keepalive on session "+k);else for(var _=0;_<e.length;_++)I(e[_],!0)}function P(){if(c&&t&&y){i=setTimeout(P,h);var e={janus:"keepalive",session_id:k,transaction:n.randomString(12)};m&&(e.token=m),b&&(e.apisecret=b),o.send(JSON.stringify(e))}}function V(e){var l=n.randomString(12),u={janus:"create",transaction:l};if(e.reconnect&&(y=!1,u.janus="claim",u.session_id=k,o&&(o.onopen=null,o.onerror=null,o.onclose=null,i&&(clearTimeout(i),i=null))),m&&(u.token=m),b&&(u.apisecret=b),!c&&n.isArray(s)&&(0===(c=s[d]).indexOf("ws")?(t=!0,n.log("Server #"+(d+1)+": trying WebSockets to contact Janus ("+c+")")):(t=!1,n.log("Server #"+(d+1)+": trying REST API to contact Janus ("+c+")"))),t)for(var f in o=n.newWebSocket(c,"janus-protocol"),a={error:function(){if(n.error("Error connecting to the Janus WebSockets server... "+c),n.isArray(s)&&!e.reconnect)return++d===s.length?void e.error("Error connecting to any of the provided Janus servers: Is the server down?"):(c=null,void setTimeout((function(){V(e)}),200));e.error("Error connecting to the Janus WebSockets server: Is the server down?")},open:function(){D[l]=function(r){if(n.debug(r),"success"!==r.janus)return n.error("Ooops: "+r.error.code+" "+r.error.reason),void e.error(r.error.reason);i=setTimeout(P,h),y=!0,k=r.session_id?r.session_id:r.data.id,e.reconnect?n.log("Claimed session: "+k):n.log("Created session: "+k),n.sessions[k]=C,e.success()},o.send(JSON.stringify(u))},message:function(e){I(JSON.parse(e.data))},close:function(){c&&y&&(y=!1,r.error("Lost connection to the server (is it down?)"))}})o.addEventListener(f,a[f]);else n.httpAPICall(c,{verb:"POST",withCredentials:p,body:u,success:function(r){if(n.debug(r),"success"!==r.janus)return n.error("Ooops: "+r.error.code+" "+r.error.reason),void e.error(r.error.reason);y=!0,k=r.session_id?r.session_id:r.data.id,e.reconnect?n.log("Claimed session: "+k):n.log("Created session: "+k),n.sessions[k]=C,R(),e.success()},error:function(r,t){if(n.error(r+":",t),n.isArray(s)&&!e.reconnect)return++d===s.length?void e.error("Error connecting to any of the provided Janus servers: Is the server down?"):(c=null,void setTimeout((function(){V(e)}),200));""===t?e.error(r+": Is the server down?"):t&&t.error?e.error(r+": "+t.error.message):e.error(r+": "+t)}})}function O(e,r){if((r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:n.noop,!y)return n.warn("Is the server down? (connected=false)"),void r.error("Is the server down? (connected=false)");var a=T[e];if(!a||!a.webrtcStuff)return n.warn("Invalid handle"),void r.error("Invalid handle");var i=r.message,s=r.jsep,d=n.randomString(12),l={janus:"message",body:i,transaction:d};if(a.token&&(l.token=a.token),b&&(l.apisecret=b),s&&(l.jsep={type:s.type,sdp:s.sdp},s.e2ee&&(l.jsep.e2ee=!0),"hml"!==s.rid_order&&"lmh"!==s.rid_order||(l.jsep.rid_order=s.rid_order),s.force_relay&&(l.jsep.force_relay=!0)),n.debug("Sending message to plugin (handle="+e+"):"),n.debug(l),t)return l.session_id=k,l.handle_id=e,D[d]=function(e){if(n.debug("Message sent!"),n.debug(e),"success"===e.janus){var t=e.plugindata;if(!t)return n.warn("Request succeeded, but missing plugindata..."),void r.success();n.log("Synchronous transaction successful ("+t.plugin+")");var o=t.data;return n.debug(o),void r.success(o)}"ack"===e.janus?r.success():e.error?(n.error("Ooops: "+e.error.code+" "+e.error.reason),r.error(e.error.code+" "+e.error.reason)):(n.error("Unknown error"),r.error("Unknown error"))},void o.send(JSON.stringify(l));n.httpAPICall(c+"/"+k+"/"+e,{verb:"POST",withCredentials:p,body:l,success:function(e){if(n.debug("Message sent!"),n.debug(e),"success"===e.janus){var t=e.plugindata;if(!t)return n.warn("Request succeeded, but missing plugindata..."),void r.success();n.log("Synchronous transaction successful ("+t.plugin+")");var o=t.data;return n.debug(o),void r.success(o)}"ack"===e.janus?r.success():e.error?(n.error("Ooops: "+e.error.code+" "+e.error.reason),r.error(e.error.code+" "+e.error.reason)):(n.error("Unknown error"),r.error("Unknown error"))},error:function(e,t){n.error(e+":",t),r.error(e+": "+t)}})}function M(e,r){if(y){var a=T[e];if(a&&a.webrtcStuff){var i={janus:"trickle",candidate:r,transaction:n.randomString(12)};if(a.token&&(i.token=a.token),b&&(i.apisecret=b),n.vdebug("Sending trickle candidate (handle="+e+"):"),n.vdebug(i),t)return i.session_id=k,i.handle_id=e,void o.send(JSON.stringify(i));n.httpAPICall(c+"/"+k+"/"+e,{verb:"POST",withCredentials:p,body:i,success:function(e){n.vdebug("Candidate sent!"),n.vdebug(e),"ack"===e.janus||n.error("Ooops: "+e.error.code+" "+e.error.reason)},error:function(e,r){n.error(e+":",r)}})}else n.warn("Invalid handle")}else n.warn("Is the server down? (connected=false)")}function x(r,t,o,a,i){var s=T[r];if(s&&s.webrtcStuff){var d=s.webrtcStuff;if(d.pc){var c=function(r){n.log("Received state change on data channel:",r);var t=r.target.label,o=r.target.protocol,a=d.dataChannel[t]?d.dataChannel[t].readyState:"null";if(n.log("State change on <"+t+"> data channel: "+a),"open"===a){if(d.dataChannel[t].pending&&d.dataChannel[t].pending.length>0){n.log("Sending pending messages on <"+t+">:",d.dataChannel[t].pending.length);var i,c=e.createForOfIteratorHelper(d.dataChannel[t].pending);try{for(c.s();!(i=c.n()).done;){var l=i.value;n.log("Sending data on data channel <"+t+">"),n.debug(l),d.dataChannel[t].send(l)}}catch(e){c.e(e)}finally{c.f()}d.dataChannel[t].pending=[]}s.ondataopen(t,o)}};if(a)d.dataChannel[t]=a;else{var l=d.dataChannelOptions;o&&(l.protocol=o),d.dataChannel[t]=d.pc.createDataChannel(t,l)}d.dataChannel[t].onmessage=function(e){n.log("Received message on data channel:",e);var r=e.target.label;s.ondata(e.data,r)},d.dataChannel[t].onopen=c,d.dataChannel[t].onclose=c,d.dataChannel[t].onerror=function(e){n.error("Got error on data channel:",e)},d.dataChannel[t].pending=[],i&&d.dataChannel[t].pending.push(i)}else n.warn("Invalid PeerConnection")}else n.warn("Invalid handle")}function E(e,r){(r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:n.noop;var t=T[e];if(!t||!t.webrtcStuff)return n.warn("Invalid handle"),void r.error("Invalid handle");var o=t.webrtcStuff,a=r.text||r.data;if(!a)return n.warn("Invalid data"),void r.error("Invalid data");var i=r.label?r.label:n.dataChanDefaultLabel;return o.dataChannel[i]?"open"!==o.dataChannel[i].readyState?(o.dataChannel[i].pending.push(a),void r.success()):(n.log("Sending data on data channel <"+i+">"),n.debug(a),o.dataChannel[i].send(a),void r.success()):(x(e,i,r.protocol,!1,a,r.protocol),void r.success())}function j(e,r){(r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:n.noop;var t=T[e];if(!t||!t.webrtcStuff)return n.warn("Invalid handle"),void r.error("Invalid handle");var o=t.webrtcStuff;if(!o.dtmfSender){if(o.pc){var a=o.pc.getSenders().find((function(e){return e.track&&"audio"===e.track.kind}));if(!a)return n.warn("Invalid DTMF configuration (no audio track)"),void r.error("Invalid DTMF configuration (no audio track)");o.dtmfSender=a.dtmf,o.dtmfSender&&(n.log("Created DTMF Sender"),o.dtmfSender.ontonechange=function(e){n.debug("Sent DTMF tone: "+e.tone)})}if(!o.dtmfSender)return n.warn("Invalid DTMF configuration"),void r.error("Invalid DTMF configuration")}var i=r.dtmf;if(!i)return n.warn("Invalid DTMF parameters"),void r.error("Invalid DTMF parameters");var s=i.tones;if(!s)return n.warn("Invalid DTMF string"),void r.error("Invalid DTMF string");var d="number"==typeof i.duration?i.duration:500,c="number"==typeof i.gap?i.gap:50;n.debug("Sending DTMF string "+s+" (duration "+d+"ms, gap "+c+"ms)"),o.dtmfSender.insertDTMF(s,d,c),r.success()}function F(e,r){(r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:n.noop;var a=!0===r.noRequest;n.log("Destroying handle "+e+" (only-locally="+a+")"),z(e);var i=T[e];if(!i||i.detached)return delete T[e],void r.success();if(i.detached=!0,a)return delete T[e],void r.success();if(!y)return n.warn("Is the server down? (connected=false)"),void r.error("Is the server down? (connected=false)");var s={janus:"detach",transaction:n.randomString(12)};if(i.token&&(s.token=i.token),b&&(s.apisecret=b),t)return s.session_id=k,s.handle_id=e,o.send(JSON.stringify(s)),delete T[e],void r.success();n.httpAPICall(c+"/"+k+"/"+e,{verb:"POST",withCredentials:p,body:s,success:function(t){n.log("Destroyed handle:"),n.debug(t),"success"!==t.janus&&n.error("Ooops: "+t.error.code+" "+t.error.reason),delete T[e],r.success()},error:function(t,o){n.error(t+":",o),delete T[e],r.success()}})}function L(r,t,o,a,i){var s=T[r];if(!s||!s.webrtcStuff)return n.warn("Invalid handle"),a.stream||n.stopAllTracks(i),void a.error("Invalid handle");var d=s.webrtcStuff;n.debug("streamsDone:",i),i&&(n.debug(" -- Audio tracks:",i.getAudioTracks()),n.debug(" -- Video tracks:",i.getVideoTracks()));var c=!1;if(d.myStream&&o.update&&(!d.streamExternal||o.replaceAudio||o.replaceVideo)){if((!o.update&&q(o)||o.update&&(o.addAudio||o.replaceAudio))&&i.getAudioTracks()&&i.getAudioTracks().length)if(d.myStream.addTrack(i.getAudioTracks()[0]),n.unifiedPlan){n.log((o.replaceAudio?"Replacing":"Adding")+" audio track:",i.getAudioTracks()[0]);var p=null,g=d.pc.getTransceivers();if(g&&g.length>0){var m,b=e.createForOfIteratorHelper(g);try{for(b.s();!(m=b.n()).done;){var h=m.value;if(h.sender&&h.sender.track&&"audio"===h.sender.track.kind||h.receiver&&h.receiver.track&&"audio"===h.receiver.track.kind){p=h;break}}}catch(e){b.e(e)}finally{b.f()}}p&&p.sender?p.sender.replaceTrack(i.getAudioTracks()[0]):d.pc.addTrack(i.getAudioTracks()[0],i)}else n.log((o.replaceAudio?"Replacing":"Adding")+" audio track:",i.getAudioTracks()[0]),d.pc.addTrack(i.getAudioTracks()[0],i);if((!o.update&&Q(o)||o.update&&(o.addVideo||o.replaceVideo))&&i.getVideoTracks()&&i.getVideoTracks().length)if(d.myStream.addTrack(i.getVideoTracks()[0]),n.unifiedPlan){n.log((o.replaceVideo?"Replacing":"Adding")+" video track:",i.getVideoTracks()[0]);var S=null,y=d.pc.getTransceivers();if(y&&y.length>0){var k,C=e.createForOfIteratorHelper(y);try{for(C.s();!(k=C.n()).done;){var A=k.value;if(A.sender&&A.sender.track&&"video"===A.sender.track.kind||A.receiver&&A.receiver.track&&"video"===A.receiver.track.kind){S=A;break}}}catch(e){C.e(e)}finally{C.f()}}S&&S.sender?S.sender.replaceTrack(i.getVideoTracks()[0]):d.pc.addTrack(i.getVideoTracks()[0],i)}else n.log((o.replaceVideo?"Replacing":"Adding")+" video track:",i.getVideoTracks()[0]),d.pc.addTrack(i.getVideoTracks()[0],i)}else d.myStream=i,c=!0;if(!d.pc){var D={iceServers:l,iceTransportPolicy:u,bundlePolicy:f};"chrome"===n.webRTCAdapter.browserDetails.browser&&(D.sdpSemantics=n.webRTCAdapter.browserDetails.version<72?"plan-b":"unified-plan");var R={optional:[{DtlsSrtpKeyAgreement:!0}]};if(v&&R.optional.push({googIPv6:!0}),a.rtcConstraints&&"object"===e.typeof(a.rtcConstraints))for(var I in n.debug("Adding custom PeerConnection constraints:",a.rtcConstraints),a.rtcConstraints)R.optional.push(a.rtcConstraints[I]);"edge"===n.webRTCAdapter.browserDetails.browser&&(D.bundlePolicy="max-bundle"),RTCRtpSender&&(RTCRtpSender.prototype.createEncodedStreams||RTCRtpSender.prototype.createEncodedAudioStreams&&RTCRtpSender.prototype.createEncodedVideoStreams)&&(a.senderTransforms||a.receiverTransforms)&&(d.senderTransforms=a.senderTransforms,d.receiverTransforms=a.receiverTransforms,D.forceEncodedAudioInsertableStreams=!0,D.forceEncodedVideoInsertableStreams=!0,D.encodedInsertableStreams=!0),n.log("Creating PeerConnection"),n.debug(R),d.pc=new RTCPeerConnection(D,R),n.debug(d.pc),d.pc.getStats&&(d.volume={},d.bitrate.value="0 kbits/sec"),n.log("Preparing local SDP and gathering candidates (trickle="+d.trickle+")"),d.pc.oniceconnectionstatechange=function(){d.pc&&s.iceState(d.pc.iceConnectionState)},d.pc.onicecandidate=function(e){if(!e.candidate||"edge"===n.webRTCAdapter.browserDetails.browser&&e.candidate.candidate.indexOf("endOfCandidates")>0)n.log("End of candidates."),d.iceDone=!0,!0===d.trickle?M(r,{completed:!0}):function(e,r){(r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:n.noop;var t=T[e];if(!t||!t.webrtcStuff)return void n.warn("Invalid handle, not sending anything");var o=t.webrtcStuff;if(n.log("Sending offer/answer SDP..."),!o.mySdp)return void n.warn("Local SDP instance is invalid, not sending anything...");o.mySdp={type:o.pc.localDescription.type,sdp:o.pc.localDescription.sdp},!1===o.trickle&&(o.mySdp.trickle=!1);n.debug(r),o.sdpSent=!0,r.success(o.mySdp)}(r,a);else{var t={candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid,sdpMLineIndex:e.candidate.sdpMLineIndex};!0===d.trickle&&M(r,t)}},d.pc.ontrack=function(e){if(n.log("Handling Remote Track"),n.debug(e),e.streams&&(d.remoteStream=e.streams[0],s.onremotestream(d.remoteStream),!e.track.onended)){if(d.receiverTransforms){var r=null;RTCRtpSender.prototype.createEncodedStreams?r=e.receiver.createEncodedStreams():(RTCRtpSender.prototype.createAudioEncodedStreams||RTCRtpSender.prototype.createEncodedVideoStreams)&&("audio"===e.track.kind&&d.receiverTransforms.audio?r=e.receiver.createEncodedAudioStreams():"video"===e.track.kind&&d.receiverTransforms.video&&(r=e.receiver.createEncodedVideoStreams())),r&&(console.log(r),r.readableStream&&r.writableStream?r.readableStream.pipeThrough(d.receiverTransforms[e.track.kind]).pipeTo(r.writableStream):r.readable&&r.writable&&r.readable.pipeThrough(d.receiverTransforms[e.track.kind]).pipeTo(r.writable))}var t=null;n.log("Adding onended callback to track:",e.track),e.track.onended=function(e){n.log("Remote track removed:",e),d.remoteStream&&(clearTimeout(t),d.remoteStream.removeTrack(e.target),s.onremotestream(d.remoteStream))},e.track.onmute=function(e){n.log("Remote track muted:",e),d.remoteStream&&null==t&&(t=setTimeout((function(){n.log("Removing remote track"),d.remoteStream&&(d.remoteStream.removeTrack(e.target),s.onremotestream(d.remoteStream)),t=null}),2520))},e.track.onunmute=function(e){if(n.log("Remote track flowing again:",e),null!=t)clearTimeout(t),t=null;else try{d.remoteStream.addTrack(e.target),s.onremotestream(d.remoteStream)}catch(e){n.error(e)}}}}}if(c&&i){n.log("Adding local stream");var P=(!0===a.simulcast||!0===a.simulcast2)&&n.unifiedPlan,V=a.svc;i.getTracks().forEach((function(e){n.log("Adding local track:",e);var r=null;if(!P&&!V||"audio"===e.kind)r=d.pc.addTrack(e,i);else if(P){n.log("Enabling rid-based simulcasting:",e);var t=w(a.simulcastMaxBitrates),o=d.pc.addTransceiver(e,{direction:"sendrecv",streams:[i],sendEncodings:a.sendEncodings||[{rid:"h",active:!0,maxBitrate:t.high},{rid:"m",active:!0,maxBitrate:t.medium,scaleResolutionDownBy:2},{rid:"l",active:!0,maxBitrate:t.low,scaleResolutionDownBy:4}]});o&&(r=o.sender)}else{n.log("Enabling SVC ("+V+"):",e);var s=d.pc.addTransceiver(e,{direction:"sendrecv",streams:[i],sendEncodings:[{scalabilityMode:V}]});s&&(r=s.sender)}if(r&&d.senderTransforms){var c=null;RTCRtpSender.prototype.createEncodedStreams?c=r.createEncodedStreams():(RTCRtpSender.prototype.createAudioEncodedStreams||RTCRtpSender.prototype.createEncodedVideoStreams)&&("audio"===r.track.kind&&d.senderTransforms.audio?c=r.createEncodedAudioStreams():"video"===r.track.kind&&d.senderTransforms.video&&(c=r.createEncodedVideoStreams())),c&&(console.log(c),c.readableStream&&c.writableStream?c.readableStream.pipeThrough(d.senderTransforms[r.track.kind]).pipeTo(c.writableStream):c.readable&&c.writable&&c.readable.pipeThrough(d.senderTransforms[r.track.kind]).pipeTo(c.writable))}}))}(function(e){if(n.debug("isDataEnabled:",e),"edge"===n.webRTCAdapter.browserDetails.browser)return n.warn("Edge doesn't support data channels yet"),!1;return null!=e&&!0===e.data})(o)&&!d.dataChannel[n.dataChanDefaultLabel]&&(n.log("Creating default data channel"),x(r,n.dataChanDefaultLabel,null,!1),d.pc.ondatachannel=function(e){n.log("Data channel created by Janus:",e),x(r,e.channel.label,e.channel.protocol,e.channel)}),d.myStream&&s.onlocalstream(d.myStream),t?d.pc.setRemoteDescription(t).then((function(){if(n.log("Remote description accepted!"),d.remoteSdp=t.sdp,d.candidates&&d.candidates.length>0){for(var i=0;i<d.candidates.length;i++){var s=d.candidates[i];n.debug("Adding remote candidate:",s),s&&!0!==s.completed?d.pc.addIceCandidate(s):d.pc.addIceCandidate(n.endOfCandidates)}d.candidates=[]}!function(r,t,o){(o=o||{}).success="function"==typeof o.success?o.success:n.noop,o.error="function"==typeof o.error?o.error:n.noop,o.customizeSdp="function"==typeof o.customizeSdp?o.customizeSdp:n.noop;var a=T[r];if(!a||!a.webrtcStuff)return n.warn("Invalid handle"),void o.error("Invalid handle");var i=a.webrtcStuff,s=!0===o.simulcast||!0===o.simulcast2;s?n.log("Creating answer (iceDone="+i.iceDone+", simulcast="+s+")"):n.log("Creating answer (iceDone="+i.iceDone+")");var d=null;if(n.unifiedPlan){d={};var c=null,l=null,u=i.pc.getTransceivers();if(u&&u.length>0){var f,v=e.createForOfIteratorHelper(u);try{for(v.s();!(f=v.n()).done;){var p=f.value;p.sender&&p.sender.track&&"audio"===p.sender.track.kind||p.receiver&&p.receiver.track&&"audio"===p.receiver.track.kind?c||(c=p):(p.sender&&p.sender.track&&"video"===p.sender.track.kind||p.receiver&&p.receiver.track&&"video"===p.receiver.track.kind)&&(l||(l=p))}}catch(e){v.e(e)}finally{v.f()}}var g=q(t),m=H(t);if(g||m){if(g&&m){if(c)try{c.setDirection?c.setDirection("sendrecv"):c.direction="sendrecv",n.log("Setting audio transceiver to sendrecv:",c)}catch(e){n.error(e)}}else if(g&&!m)try{c&&(c.setDirection?c.setDirection("sendonly"):c.direction="sendonly",n.log("Setting audio transceiver to sendonly:",c))}catch(e){n.error(e)}else if(!g&&m)if(c)try{c.setDirection?c.setDirection("recvonly"):c.direction="recvonly",n.log("Setting audio transceiver to recvonly:",c)}catch(e){n.error(e)}else c=i.pc.addTransceiver("audio",{direction:"recvonly"}),n.log("Adding recvonly audio transceiver:",c)}else if(t.removeAudio&&c)try{c.setDirection?c.setDirection("inactive"):c.direction="inactive",n.log("Setting audio transceiver to inactive:",c)}catch(e){n.error(e)}var b=Q(t),h=Y(t);if(b||h){if(b&&h){if(l)try{l.setDirection?l.setDirection("sendrecv"):l.direction="sendrecv",n.log("Setting video transceiver to sendrecv:",l)}catch(e){n.error(e)}}else if(b&&!h){if(l)try{l.setDirection?l.setDirection("sendonly"):l.direction="sendonly",n.log("Setting video transceiver to sendonly:",l)}catch(e){n.error(e)}}else if(!b&&h)if(l)try{l.setDirection?l.setDirection("recvonly"):l.direction="recvonly",n.log("Setting video transceiver to recvonly:",l)}catch(e){n.error(e)}else l=i.pc.addTransceiver("video",{direction:"recvonly"}),n.log("Adding recvonly video transceiver:",l)}else if(t.removeVideo&&l)try{l.setDirection?l.setDirection("inactive"):l.direction="inactive",n.log("Setting video transceiver to inactive:",l)}catch(e){n.error(e)}}else d="firefox"===n.webRTCAdapter.browserDetails.browser||"edge"===n.webRTCAdapter.browserDetails.browser?{offerToReceiveAudio:H(t),offerToReceiveVideo:Y(t)}:{mandatory:{OfferToReceiveAudio:H(t),OfferToReceiveVideo:Y(t)}};n.debug(d);var S=Q(t);if(S&&s&&"firefox"===n.webRTCAdapter.browserDetails.browser){n.log("Enabling Simulcasting for Firefox (RID)");var y=i.pc.getSenders()[1];n.log(y);var k=y.getParameters();n.log(k);var C=w(o.simulcastMaxBitrates);y.setParameters({encodings:o.sendEncodings||[{rid:"h",active:!0,maxBitrate:C.high},{rid:"m",active:!0,maxBitrate:C.medium,scaleResolutionDownBy:2},{rid:"l",active:!0,maxBitrate:C.low,scaleResolutionDownBy:4}]})}i.pc.createAnswer(d).then((function(e){n.debug(e);var r={type:e.type,sdp:e.sdp};o.customizeSdp(r),e.sdp=r.sdp,n.log("Setting local description"),S&&s&&!n.unifiedPlan&&"chrome"===n.webRTCAdapter.browserDetails.browser&&n.warn("simulcast=true, but this is an answer, and video breaks in Chrome if we enable it"),i.mySdp={type:"answer",sdp:e.sdp},i.pc.setLocalDescription(e).catch(o.error),i.mediaConstraints=d,i.iceDone||i.trickle?((i.senderTransforms||i.receiverTransforms)&&(e.e2ee=!0),o.success(e)):n.log("Waiting for all candidates...")}),o.error)}(r,o,a)}),a.error):function(r,t,o){(o=o||{}).success="function"==typeof o.success?o.success:n.noop,o.error="function"==typeof o.error?o.error:n.noop,o.customizeSdp="function"==typeof o.customizeSdp?o.customizeSdp:n.noop;var a=T[r];if(!a||!a.webrtcStuff)return n.warn("Invalid handle"),void o.error("Invalid handle");var i=a.webrtcStuff,s=!0===o.simulcast;s?n.log("Creating offer (iceDone="+i.iceDone+", simulcast="+s+")"):n.log("Creating offer (iceDone="+i.iceDone+")");var d={};if(n.unifiedPlan){var c=null,l=null,u=i.pc.getTransceivers();if(u&&u.length>0){var f,v=e.createForOfIteratorHelper(u);try{for(v.s();!(f=v.n()).done;){var p=f.value;p.sender&&p.sender.track&&"audio"===p.sender.track.kind||p.receiver&&p.receiver.track&&"audio"===p.receiver.track.kind?c||(c=p):(p.sender&&p.sender.track&&"video"===p.sender.track.kind||p.receiver&&p.receiver.track&&"video"===p.receiver.track.kind)&&(l||(l=p))}}catch(e){v.e(e)}finally{v.f()}}var g=q(t),m=H(t);g||m?g&&m?c&&(c.setDirection?c.setDirection("sendrecv"):c.direction="sendrecv",n.log("Setting audio transceiver to sendrecv:",c)):g&&!m?c&&(c.setDirection?c.setDirection("sendonly"):c.direction="sendonly",n.log("Setting audio transceiver to sendonly:",c)):!g&&m&&(c?(c.setDirection?c.setDirection("recvonly"):c.direction="recvonly",n.log("Setting audio transceiver to recvonly:",c)):(c=i.pc.addTransceiver("audio",{direction:"recvonly"}),n.log("Adding recvonly audio transceiver:",c))):t.removeAudio&&c&&(c.setDirection?c.setDirection("inactive"):c.direction="inactive",n.log("Setting audio transceiver to inactive:",c));var b=Q(t),h=Y(t);b||h?b&&h?l&&(l.setDirection?l.setDirection("sendrecv"):l.direction="sendrecv",n.log("Setting video transceiver to sendrecv:",l)):b&&!h?l&&(l.setDirection?l.setDirection("sendonly"):l.direction="sendonly",n.log("Setting video transceiver to sendonly:",l)):!b&&h&&(l?(l.setDirection?l.setDirection("recvonly"):l.direction="recvonly",n.log("Setting video transceiver to recvonly:",l)):(l=i.pc.addTransceiver("video",{direction:"recvonly"}),n.log("Adding recvonly video transceiver:",l))):t.removeVideo&&l&&(l.setDirection?l.setDirection("inactive"):l.direction="inactive",n.log("Setting video transceiver to inactive:",l))}else d.offerToReceiveAudio=H(t),d.offerToReceiveVideo=Y(t);!0===o.iceRestart&&(d.iceRestart=!0);n.debug(d);var S=Q(t);if(S&&s&&"firefox"===n.webRTCAdapter.browserDetails.browser){n.log("Enabling Simulcasting for Firefox (RID)");var y=i.pc.getSenders().find((function(e){return e.track&&"video"===e.track.kind}));if(y){var k=y.getParameters();k||(k={});var C=w(o.simulcastMaxBitrates);k.encodings=o.sendEncodings||[{rid:"h",active:!0,maxBitrate:C.high},{rid:"m",active:!0,maxBitrate:C.medium,scaleResolutionDownBy:2},{rid:"l",active:!0,maxBitrate:C.low,scaleResolutionDownBy:4}],y.setParameters(k)}}i.pc.createOffer(d).then((function(e){n.debug(e);var r={type:e.type,sdp:e.sdp};o.customizeSdp(r),e.sdp=r.sdp,n.log("Setting local description"),S&&s&&!n.unifiedPlan&&("chrome"!==n.webRTCAdapter.browserDetails.browser&&"safari"!==n.webRTCAdapter.browserDetails.browser||(n.log("Enabling Simulcasting for Chrome (SDP munging)"),e.sdp=function(e){for(var r=e.split("\r\n"),t=!1,o=[-1],a=[-1],i=null,s=null,d=null,c=null,l=-1,u=0;u<r.length;u++){var f=r[u].match(/m=(\w+) */);if(f){if("video"===f[1]){if(!(o[0]<0)){l=u;break}t=!0}else if(o[0]>-1){l=u;break}}else if(t){if(r[u].match(/a=ssrc-group:SIM (\d+) (\d+) (\d+)/))return n.warn("The SDP already contains a SIM attribute, munging will be skipped"),e;var v=r[u].match(/a=ssrc-group:FID (\d+) (\d+)/);if(v)o[0]=v[1],a[0]=v[2],r.splice(u,1),u--;else{if(o[0]){var p=r[u].match("a=ssrc:"+o[0]+" cname:(.+)");if(p&&(i=p[1]),(p=r[u].match("a=ssrc:"+o[0]+" msid:(.+)"))&&(s=p[1]),(p=r[u].match("a=ssrc:"+o[0]+" mslabel:(.+)"))&&(d=p[1]),(p=r[u].match("a=ssrc:"+o[0]+" label:(.+)"))&&(c=p[1]),0===r[u].indexOf("a=ssrc:"+a[0])){r.splice(u,1),u--;continue}if(0===r[u].indexOf("a=ssrc:"+o[0])){r.splice(u,1),u--;continue}}0!=r[u].length||(r.splice(u,1),u--)}}}if(o[0]<0){l=-1,t=!1;for(var g=0;g<r.length;g++){var m=r[g].match(/m=(\w+) */);if(m){if("video"===m[1]){if(!(o[0]<0)){l=g;break}t=!0}else if(o[0]>-1){l=g;break}}else if(t){if(o[0]<0){var b=r[g].match(/a=ssrc:(\d+)/);if(b){o[0]=b[1],r.splice(g,1),g--;continue}}else{var h=r[g].match("a=ssrc:"+o[0]+" cname:(.+)");if(h&&(i=h[1]),(h=r[g].match("a=ssrc:"+o[0]+" msid:(.+)"))&&(s=h[1]),(h=r[g].match("a=ssrc:"+o[0]+" mslabel:(.+)"))&&(d=h[1]),(h=r[g].match("a=ssrc:"+o[0]+" label:(.+)"))&&(c=h[1]),0===r[g].indexOf("a=ssrc:"+a[0])){r.splice(g,1),g--;continue}if(0===r[g].indexOf("a=ssrc:"+o[0])){r.splice(g,1),g--;continue}}0!==r[g].length||(r.splice(g,1),g--)}}}if(o[0]<0)return n.warn("Couldn't find the video SSRC, simulcasting NOT enabled"),e;l<0&&(l=r.length);o[1]=Math.floor(4294967295*Math.random()),o[2]=Math.floor(4294967295*Math.random()),a[1]=Math.floor(4294967295*Math.random()),a[2]=Math.floor(4294967295*Math.random());for(var S=0;S<o.length;S++)i&&(r.splice(l,0,"a=ssrc:"+o[S]+" cname:"+i),l++),s&&(r.splice(l,0,"a=ssrc:"+o[S]+" msid:"+s),l++),d&&(r.splice(l,0,"a=ssrc:"+o[S]+" mslabel:"+d),l++),c&&(r.splice(l,0,"a=ssrc:"+o[S]+" label:"+c),l++),i&&(r.splice(l,0,"a=ssrc:"+a[S]+" cname:"+i),l++),s&&(r.splice(l,0,"a=ssrc:"+a[S]+" msid:"+s),l++),d&&(r.splice(l,0,"a=ssrc:"+a[S]+" mslabel:"+d),l++),c&&(r.splice(l,0,"a=ssrc:"+a[S]+" label:"+c),l++);r.splice(l,0,"a=ssrc-group:FID "+o[2]+" "+a[2]),r.splice(l,0,"a=ssrc-group:FID "+o[1]+" "+a[1]),r.splice(l,0,"a=ssrc-group:FID "+o[0]+" "+a[0]),r.splice(l,0,"a=ssrc-group:SIM "+o[0]+" "+o[1]+" "+o[2]),(e=r.join("\r\n")).endsWith("\r\n")||(e+="\r\n");return e}(e.sdp))),i.mySdp={type:"offer",sdp:e.sdp},i.pc.setLocalDescription(e).catch(o.error),i.mediaConstraints=d,i.iceDone||i.trickle?((i.senderTransforms||i.receiverTransforms)&&(e.e2ee=!0),o.success(e)):n.log("Waiting for all candidates...")}),o.error)}(r,o,a)}function N(r,t,o){(o=o||{}).success="function"==typeof o.success?o.success:n.noop,o.error="function"==typeof o.error?o.error:G;var a=o.jsep;if(t&&a)return n.error("Provided a JSEP to a createOffer"),void o.error("Provided a JSEP to a createOffer");if(!(t||a&&a.type&&a.sdp))return n.error("A valid JSEP is required for createAnswer"),void o.error("A valid JSEP is required for createAnswer");o.media="object"===e.typeof(o.media)&&o.media?o.media:{audio:!0,video:!0};var i=o.media,s=T[r];if(!s||!s.webrtcStuff)return n.warn("Invalid handle"),void o.error("Invalid handle");var d,c=s.webrtcStuff;if(c.trickle=(d=o.trickle,n.debug("isTrickleEnabled:",d),!1!==d),c.pc){if(n.log("Updating existing media session"),i.update=!0,o.stream)o.stream!==c.myStream&&n.log("Renegotiation involves a new external stream");else{if(i.addAudio){if(i.keepAudio=!1,i.replaceAudio=!1,i.removeAudio=!1,i.audioSend=!0,c.myStream&&c.myStream.getAudioTracks()&&c.myStream.getAudioTracks().length)return n.error("Can't add audio stream, there already is one"),void o.error("Can't add audio stream, there already is one")}else i.removeAudio?(i.keepAudio=!1,i.replaceAudio=!1,i.addAudio=!1,i.audioSend=!1):i.replaceAudio&&(i.keepAudio=!1,i.addAudio=!1,i.removeAudio=!1,i.audioSend=!0);if(c.myStream&&c.myStream.getAudioTracks()&&0!==c.myStream.getAudioTracks().length?!q(i)||i.removeAudio||i.replaceAudio||(i.keepAudio=!0):(i.replaceAudio&&(i.keepAudio=!1,i.replaceAudio=!1,i.addAudio=!0,i.audioSend=!0),q(i)&&(i.keepAudio=!1,i.addAudio=!0)),i.addVideo){if(i.keepVideo=!1,i.replaceVideo=!1,i.removeVideo=!1,i.videoSend=!0,c.myStream&&c.myStream.getVideoTracks()&&c.myStream.getVideoTracks().length)return n.error("Can't add video stream, there already is one"),void o.error("Can't add video stream, there already is one")}else i.removeVideo?(i.keepVideo=!1,i.replaceVideo=!1,i.addVideo=!1,i.videoSend=!1):i.replaceVideo&&(i.keepVideo=!1,i.addVideo=!1,i.removeVideo=!1,i.videoSend=!0);c.myStream&&c.myStream.getVideoTracks()&&0!==c.myStream.getVideoTracks().length?!Q(i)||i.removeVideo||i.replaceVideo||(i.keepVideo=!0):(i.replaceVideo&&(i.keepVideo=!1,i.replaceVideo=!1,i.addVideo=!0,i.videoSend=!0),Q(i)&&(i.keepVideo=!1,i.addVideo=!0)),i.addData&&(i.data=!0)}if(q(i)&&i.keepAudio&&Q(i)&&i.keepVideo)return s.consentDialog(!1),void L(r,a,i,o,c.myStream)}else i.update=!1,i.keepAudio=!1,i.keepVideo=!1;if(i.update&&(!c.streamExternal||c.streamExternal&&(i.replaceAudio||i.replaceVideo))){if(i.removeAudio||i.replaceAudio){if(c.myStream&&c.myStream.getAudioTracks()&&c.myStream.getAudioTracks().length){var l=c.myStream.getAudioTracks()[0];n.log("Removing audio track:",l),c.myStream.removeTrack(l);try{l.stop()}catch(e){}}if(c.pc.getSenders()&&c.pc.getSenders().length){var u=!0;if(i.replaceAudio&&n.unifiedPlan&&(u=!1),u){var f,v=e.createForOfIteratorHelper(c.pc.getSenders());try{for(v.s();!(f=v.n()).done;){var p=f.value;p&&p.track&&"audio"===p.track.kind&&(n.log("Removing audio sender:",p),c.pc.removeTrack(p))}}catch(e){v.e(e)}finally{v.f()}}}}if(i.removeVideo||i.replaceVideo){if(c.myStream&&c.myStream.getVideoTracks()&&c.myStream.getVideoTracks().length){var g=c.myStream.getVideoTracks()[0];n.log("Removing video track:",g),c.myStream.removeTrack(g);try{g.stop()}catch(e){}}if(c.pc.getSenders()&&c.pc.getSenders().length){var m=!0;if(i.replaceVideo&&n.unifiedPlan&&(m=!1),m){var b,h=e.createForOfIteratorHelper(c.pc.getSenders());try{for(h.s();!(b=h.n()).done;){var S=b.value;S&&S.track&&"video"===S.track.kind&&(n.log("Removing video sender:",S),c.pc.removeTrack(S))}}catch(e){h.e(e)}finally{h.f()}}}}}if(o.stream){var w=o.stream;return n.log("MediaStream provided by the application"),n.debug(w),!i.update||!c.myStream||c.myStream===o.stream||c.streamExternal||i.replaceAudio||i.replaceVideo||(n.stopAllTracks(c.myStream),c.myStream=null),c.streamExternal=!0,s.consentDialog(!1),void L(r,a,i,o,w)}if(q(i)||Q(i)){if(!n.isGetUserMediaAvailable())return void o.error("getUserMedia not available");var y={mandatory:{},optional:[]};s.consentDialog(!0);var k=q(i);k&&i&&"object"===e.typeof(i.audio)&&(k=i.audio);var C=Q(i);if(C&&i){var A=!0===o.simulcast||!0===o.simulcast2,D=o.svc;if(!A&&!D||a||i.video||(i.video="hires"),i.video&&"screen"!=i.video&&"window"!=i.video)if("object"===e.typeof(i.video))C=i.video;else{var R=0,I=0;"lowres"===i.video?(I=240,R=320):"lowres-16:9"===i.video?(I=180,R=320):"hires"===i.video||"hires-16:9"===i.video||"hdres"===i.video?(I=720,R=1280):"fhdres"===i.video?(I=1080,R=1920):"4kres"===i.video?(I=2160,R=3840):"stdres"===i.video?(I=480,R=640):"stdres-16:9"===i.video?(I=360,R=640):(n.log("Default video setting is stdres 4:3"),I=480,R=640),n.log("Adding media constraint:",i.video),C={height:{ideal:I},width:{ideal:R}},n.log("Adding video constraint:",C)}else if("screen"===i.video||"window"===i.video){if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)return y.video={},i.screenshareFrameRate&&(y.video.frameRate=i.screenshareFrameRate),i.screenshareHeight&&(y.video.height=i.screenshareHeight),i.screenshareWidth&&(y.video.width=i.screenshareWidth),y.audio=i.captureDesktopAudio,void navigator.mediaDevices.getDisplayMedia(y).then((function(e){s.consentDialog(!1),q(i)&&!i.keepAudio?navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then((function(n){e.addTrack(n.getAudioTracks()[0]),L(r,a,i,o,e)})):L(r,a,i,o,e)}),(function(e){s.consentDialog(!1),o.error(e)}));var P=function(e,n){s.consentDialog(!1),e?o.error(e):L(r,a,i,o,n)},V=function(e,r,t){n.log("Adding media constraint (screen capture)"),n.debug(e),navigator.mediaDevices.getUserMedia(e).then((function(e){t?navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then((function(n){e.addTrack(n.getAudioTracks()[0]),r(null,e)})):r(null,e)})).catch((function(e){s.consentDialog(!1),r(e)}))};if("chrome"===n.webRTCAdapter.browserDetails.browser){var O=n.webRTCAdapter.browserDetails.version,M=33;window.navigator.userAgent.match("Linux")&&(M=35),O>=26&&O<=M?(y={video:{mandatory:{googLeakyBucket:!0,maxWidth:window.screen.width,maxHeight:window.screen.height,minFrameRate:i.screenshareFrameRate,maxFrameRate:i.screenshareFrameRate,chromeMediaSource:"screen"}},audio:q(i)&&!i.keepAudio},V(y,P)):n.extension.getScreen((function(e,r){if(e)return s.consentDialog(!1),o.error(e);(y={audio:!1,video:{mandatory:{chromeMediaSource:"desktop",maxWidth:window.screen.width,maxHeight:window.screen.height,minFrameRate:i.screenshareFrameRate,maxFrameRate:i.screenshareFrameRate},optional:[{googLeakyBucket:!0},{googTemporalLayeredScreencast:!0}]}}).video.mandatory.chromeMediaSourceId=r,V(y,P,q(i)&&!i.keepAudio)}))}else if("firefox"===n.webRTCAdapter.browserDetails.browser){if(!(n.webRTCAdapter.browserDetails.version>=33)){var x=new Error("NavigatorUserMediaError");return x.name="Your version of Firefox does not support screen sharing, please install Firefox 33 (or more recent versions)",s.consentDialog(!1),void o.error(x)}y={video:{mozMediaSource:i.video,mediaSource:i.video},audio:q(i)&&!i.keepAudio},V(y,(function(e,r){if(P(e,r),!e)var n=r.currentTime,t=window.setInterval((function(){r||window.clearInterval(t),r.currentTime==n&&(window.clearInterval(t),r.onended&&r.onended()),n=r.currentTime}),500)}))}return}}i&&"screen"===i.video||navigator.mediaDevices.enumerateDevices().then((function(t){var d=t.some((function(e){return"audioinput"===e.kind})),c=function(r){if(n.debug("isScreenSendEnabled:",r),!r)return!1;if("object"!==e.typeof(r.video)||"object"!==e.typeof(r.video.mandatory))return!1;var t=r.video.mandatory;if(t.chromeMediaSource)return"desktop"===t.chromeMediaSource||"screen"===t.chromeMediaSource;if(t.mozMediaSource)return"window"===t.mozMediaSource||"screen"===t.mozMediaSource;if(t.mediaSource)return"window"===t.mediaSource||"screen"===t.mediaSource;return!1}(i)||t.some((function(e){return"videoinput"===e.kind})),l=q(i),u=Q(i),f=function(e){return n.debug("isAudioSendRequired:",e),!!e&&(!1!==e.audio&&!1!==e.audioSend&&(void 0!==e.failIfNoAudio&&null!==e.failIfNoAudio&&!0===e.failIfNoAudio))}(i),v=function(e){return n.debug("isVideoSendRequired:",e),!!e&&(!1!==e.video&&!1!==e.videoSend&&(void 0!==e.failIfNoVideo&&null!==e.failIfNoVideo&&!0===e.failIfNoVideo))}(i);if(l||u||f||v){var p=!!l&&d,g=!!u&&c;if(!p&&!g)return s.consentDialog(!1),o.error("No capture device found"),!1;if(!p&&f)return s.consentDialog(!1),o.error("Audio capture is required, but no capture device found"),!1;if(!g&&v)return s.consentDialog(!1),o.error("Video capture is required, but no capture device found"),!1}var m={audio:!(!d||i.keepAudio)&&k,video:!(!c||i.keepVideo)&&C};n.debug("getUserMedia constraints",m),m.audio||m.video?navigator.mediaDevices.getUserMedia(m).then((function(e){s.consentDialog(!1),L(r,a,i,o,e)})).catch((function(e){s.consentDialog(!1),o.error({code:e.code,name:e.name,message:e.message})})):(s.consentDialog(!1),L(r,a,i,o,w))})).catch((function(e){s.consentDialog(!1),o.error(e)}))}else L(r,a,i,o)}function _(e,r){(r=r||{}).success="function"==typeof r.success?r.success:n.noop,r.error="function"==typeof r.error?r.error:G,r.customizeSdp="function"==typeof r.customizeSdp?r.customizeSdp:n.noop;var t=r.jsep,o=T[e];if(!o||!o.webrtcStuff)return n.warn("Invalid handle"),void r.error("Invalid handle");var a=o.webrtcStuff;if(t){if(!a.pc)return n.warn("Wait, no PeerConnection?? if this is an answer, use createAnswer and not handleRemoteJsep"),void r.error("No PeerConnection: if this is an answer, use createAnswer and not handleRemoteJsep");r.customizeSdp(t),a.pc.setRemoteDescription(t).then((function(){if(n.log("Remote description accepted!"),a.remoteSdp=t.sdp,a.candidates&&a.candidates.length>0){for(var e=0;e<a.candidates.length;e++){var o=a.candidates[e];n.debug("Adding remote candidate:",o),o&&!0!==o.completed?a.pc.addIceCandidate(o):a.pc.addIceCandidate(n.endOfCandidates)}a.candidates=[]}r.success()}),r.error)}else r.error("Invalid JSEP")}function J(e,r){var t=T[e];if(!t||!t.webrtcStuff)return n.warn("Invalid handle"),0;var o=r?"remote":"local",a=t.webrtcStuff;return a.volume[o]||(a.volume[o]={value:0}),!a.pc.getStats||"chrome"!==n.webRTCAdapter.browserDetails.browser&&"safari"!==n.webRTCAdapter.browserDetails.browser?(n.warn("Getting the "+o+" volume unsupported by browser"),0):r&&!a.remoteStream?(n.warn("Remote stream unavailable"),0):r||a.myStream?a.volume[o].timer?a.volume[o].value:(n.log("Starting "+o+" volume monitor"),a.volume[o].timer=setInterval((function(){a.pc.getStats().then((function(e){e.forEach((function(e){e&&"audio"===e.kind&&(r&&!e.remoteSource||!r&&"media-source"!==e.type||(a.volume[o].value=e.audioLevel?e.audioLevel:0))}))}))}),200),0):(n.warn("Local stream unavailable"),0)}function U(e,r){var t=T[e];if(!t||!t.webrtcStuff)return n.warn("Invalid handle"),!0;var o=t.webrtcStuff;return o.pc?o.myStream?r?o.myStream.getVideoTracks()&&0!==o.myStream.getVideoTracks().length?!o.myStream.getVideoTracks()[0].enabled:(n.warn("No video track"),!0):o.myStream.getAudioTracks()&&0!==o.myStream.getAudioTracks().length?!o.myStream.getAudioTracks()[0].enabled:(n.warn("No audio track"),!0):(n.warn("Invalid local MediaStream"),!0):(n.warn("Invalid PeerConnection"),!0)}function W(e,r,t){var o=T[e];if(!o||!o.webrtcStuff)return n.warn("Invalid handle"),!1;var a=o.webrtcStuff;return a.pc?a.myStream?r?a.myStream.getVideoTracks()&&0!==a.myStream.getVideoTracks().length?(a.myStream.getVideoTracks()[0].enabled=!t,!0):(n.warn("No video track"),!1):a.myStream.getAudioTracks()&&0!==a.myStream.getAudioTracks().length?(a.myStream.getAudioTracks()[0].enabled=!t,!0):(n.warn("No audio track"),!1):(n.warn("Invalid local MediaStream"),!1):(n.warn("Invalid PeerConnection"),!1)}function B(e){var r=T[e];if(!r||!r.webrtcStuff)return n.warn("Invalid handle"),"Invalid handle";var t=r.webrtcStuff;return t.pc?t.pc.getStats?t.bitrate.timer?t.bitrate.value:(n.log("Starting bitrate timer (via getStats)"),t.bitrate.timer=setInterval((function(){t.pc.getStats().then((function(e){e.forEach((function(e){if(e){var r=!1;if(("video"===e.mediaType||e.id.toLowerCase().indexOf("video")>-1)&&"inbound-rtp"===e.type&&e.id.indexOf("rtcp")<0?r=!0:"ssrc"!=e.type||!e.bytesReceived||"VP8"!==e.googCodecName&&""!==e.googCodecName||(r=!0),r)if(t.bitrate.bsnow=e.bytesReceived,t.bitrate.tsnow=e.timestamp,null===t.bitrate.bsbefore||null===t.bitrate.tsbefore)t.bitrate.bsbefore=t.bitrate.bsnow,t.bitrate.tsbefore=t.bitrate.tsnow;else{var o=t.bitrate.tsnow-t.bitrate.tsbefore;"safari"===n.webRTCAdapter.browserDetails.browser&&(o/=1e3);var a=Math.round(8*(t.bitrate.bsnow-t.bitrate.bsbefore)/o);"safari"===n.webRTCAdapter.browserDetails.browser&&(a=parseInt(a/1e3)),t.bitrate.value=a+" kbits/sec",t.bitrate.bsbefore=t.bitrate.bsnow,t.bitrate.tsbefore=t.bitrate.tsnow}}}))}))}),1e3),"0 kbits/sec"):(n.warn("Getting the video bitrate unsupported by browser"),"Feature unsupported by browser"):"Invalid PeerConnection"}function G(e){n.error("WebRTC error:",e)}function z(e,r){n.log("Cleaning WebRTC stuff");var a=T[e];if(a){var i=a.webrtcStuff;if(i){if(!0===r){var s={janus:"hangup",transaction:n.randomString(12)};a.token&&(s.token=a.token),b&&(s.apisecret=b),n.debug("Sending hangup request (handle="+e+"):"),n.debug(s),t?(s.session_id=k,s.handle_id=e,o.send(JSON.stringify(s))):n.httpAPICall(c+"/"+k+"/"+e,{verb:"POST",withCredentials:p,body:s})}i.remoteStream=null,i.volume&&(i.volume.local&&i.volume.local.timer&&clearInterval(i.volume.local.timer),i.volume.remote&&i.volume.remote.timer&&clearInterval(i.volume.remote.timer)),i.volume={},i.bitrate.timer&&clearInterval(i.bitrate.timer),i.bitrate.timer=null,i.bitrate.bsnow=null,i.bitrate.bsbefore=null,i.bitrate.tsnow=null,i.bitrate.tsbefore=null,i.bitrate.value=null,!i.streamExternal&&i.myStream&&(n.log("Stopping local stream tracks"),n.stopAllTracks(i.myStream)),i.streamExternal=!1,i.myStream=null;try{i.pc.close()}catch(e){}i.pc=null,i.candidates=null,i.mySdp=null,i.remoteSdp=null,i.iceDone=!1,i.dataChannel={},i.dtmfSender=null,i.senderTransforms=null,i.receiverTransforms=null}a.oncleanup()}}function q(e){return n.debug("isAudioSendEnabled:",e),!e||!1!==e.audio&&(void 0===e.audioSend||null===e.audioSend||!0===e.audioSend)}function H(e){return n.debug("isAudioRecvEnabled:",e),!e||!1!==e.audio&&(void 0===e.audioRecv||null===e.audioRecv||!0===e.audioRecv)}function Q(e){return n.debug("isVideoSendEnabled:",e),!e||!1!==e.video&&(void 0===e.videoSend||null===e.videoSend||!0===e.videoSend)}function Y(e){return n.debug("isVideoRecvEnabled:",e),!e||!1!==e.video&&(void 0===e.videoRecv||null===e.videoRecv||!0===e.videoRecv)}V(r),this.getServer=function(){return c},this.isConnected=function(){return y},this.reconnect=function(e){(e=e||{}).success="function"==typeof e.success?e.success:n.noop,e.error="function"==typeof e.error?e.error:n.noop,e.reconnect=!0,V(e)},this.getSessionId=function(){return k},this.getInfo=function(e){!function(e){if((e=e||{}).success="function"==typeof e.success?e.success:n.noop,e.error="function"==typeof e.error?e.error:n.noop,n.log("Getting info on Janus instance"),!y)return n.warn("Is the server down? (connected=false)"),void e.error("Is the server down? (connected=false)");var r=n.randomString(12),a={janus:"info",transaction:r};m&&(a.token=m);b&&(a.apisecret=b);if(t)return D[r]=function(r){n.log("Server info:"),n.debug(r),"server_info"!==r.janus&&n.error("Ooops: "+r.error.code+" "+r.error.reason),e.success(r)},void o.send(JSON.stringify(a));n.httpAPICall(c,{verb:"POST",withCredentials:p,body:a,success:function(r){n.log("Server info:"),n.debug(r),"server_info"!==r.janus&&n.error("Ooops: "+r.error.code+" "+r.error.reason),e.success(r)},error:function(r,t){n.error(r+":",t),""===t?e.error(r+": Is the server down?"):e.error(r+": "+t)}})}(e)},this.destroy=function(e){!function(e){(e=e||{}).success="function"==typeof e.success?e.success:n.noop,e.error="function"==typeof e.error?e.error:n.noop;var s=!0===e.unload,d=!0;void 0!==e.notifyDestroyed&&null!==e.notifyDestroyed&&(d=!0===e.notifyDestroyed);var l=!0===e.cleanupHandles;if(n.log("Destroying session "+k+" (unload="+s+")"),!k)return n.warn("No session to destroy"),e.success(),void(d&&r.destroyed());if(l)for(var u in T)F(u,{noRequest:!0});if(!y)return n.warn("Is the server down? (connected=false)"),k=null,void e.success();var f={janus:"destroy",transaction:n.randomString(12)};m&&(f.token=m);b&&(f.apisecret=b);if(s)return t?(o.onclose=null,o.close(),o=null):navigator.sendBeacon(c+"/"+k,JSON.stringify(f)),n.log("Destroyed session:"),k=null,y=!1,e.success(),void(d&&r.destroyed());if(t){f.session_id=k;var v=function(){for(var e in a)o.removeEventListener(e,a[e]);o.removeEventListener("message",g),o.removeEventListener("error",h),i&&clearTimeout(i),o.close()},g=function(n){var t=JSON.parse(n.data);t.session_id==f.session_id&&t.transaction==f.transaction&&(v(),e.success(),d&&r.destroyed())},h=function(){v(),e.error("Failed to destroy the server: Is the server down?"),d&&r.destroyed()};return o.addEventListener("message",g),o.addEventListener("error",h),void(1===o.readyState?o.send(JSON.stringify(f)):h())}n.httpAPICall(c+"/"+k,{verb:"POST",withCredentials:p,body:f,success:function(t){n.log("Destroyed session:"),n.debug(t),k=null,y=!1,"success"!==t.janus&&n.error("Ooops: "+t.error.code+" "+t.error.reason),e.success(),d&&r.destroyed()},error:function(t,o){n.error(t+":",o),k=null,y=!1,e.success(),d&&r.destroyed()}})}(e)},this.attach=function(e){!function(e){if((e=e||{}).success="function"==typeof e.success?e.success:n.noop,e.error="function"==typeof e.error?e.error:n.noop,e.dataChannelOptions=e.dataChannelOptions||{ordered:!0},e.consentDialog="function"==typeof e.consentDialog?e.consentDialog:n.noop,e.iceState="function"==typeof e.iceState?e.iceState:n.noop,e.mediaState="function"==typeof e.mediaState?e.mediaState:n.noop,e.webrtcState="function"==typeof e.webrtcState?e.webrtcState:n.noop,e.slowLink="function"==typeof e.slowLink?e.slowLink:n.noop,e.onmessage="function"==typeof e.onmessage?e.onmessage:n.noop,e.onlocalstream="function"==typeof e.onlocalstream?e.onlocalstream:n.noop,e.onremotestream="function"==typeof e.onremotestream?e.onremotestream:n.noop,e.ondata="function"==typeof e.ondata?e.ondata:n.noop,e.ondataopen="function"==typeof e.ondataopen?e.ondataopen:n.noop,e.oncleanup="function"==typeof e.oncleanup?e.oncleanup:n.noop,e.ondetached="function"==typeof e.ondetached?e.ondetached:n.noop,!y)return n.warn("Is the server down? (connected=false)"),void e.error("Is the server down? (connected=false)");var r=e.plugin;if(!r)return n.error("Invalid plugin"),void e.error("Invalid plugin");var a=e.opaqueId,i=e.loopIndex,s=e.token?e.token:m,d=n.randomString(12),l={janus:"attach",plugin:r,opaque_id:a,loop_index:i,transaction:d};s&&(l.token=s);b&&(l.apisecret=b);if(t)return D[d]=function(t){if(n.debug(t),"success"!==t.janus)return n.error("Ooops: "+t.error.code+" "+t.error.reason),void e.error("Ooops: "+t.error.code+" "+t.error.reason);var o=t.data.id;n.log("Created handle: "+o);var a={session:C,plugin:r,id:o,token:s,detached:!1,webrtcStuff:{started:!1,myStream:null,streamExternal:!1,remoteStream:null,mySdp:null,mediaConstraints:null,pc:null,dataChannelOptions:e.dataChannelOptions,dataChannel:{},dtmfSender:null,trickle:!0,iceDone:!1,volume:{value:null,timer:null},bitrate:{value:null,bsnow:null,bsbefore:null,tsnow:null,tsbefore:null,timer:null}},getId:function(){return o},getPlugin:function(){return r},getVolume:function(){return J(o,!0)},getRemoteVolume:function(){return J(o,!0)},getLocalVolume:function(){return J(o,!1)},isAudioMuted:function(){return U(o,!1)},muteAudio:function(){return W(o,!1,!0)},unmuteAudio:function(){return W(o,!1,!1)},isVideoMuted:function(){return U(o,!0)},muteVideo:function(){return W(o,!0,!0)},unmuteVideo:function(){return W(o,!0,!1)},getBitrate:function(){return B(o)},send:function(e){O(o,e)},data:function(e){E(o,e)},dtmf:function(e){j(o,e)},consentDialog:e.consentDialog,iceState:e.iceState,mediaState:e.mediaState,webrtcState:e.webrtcState,slowLink:e.slowLink,onmessage:e.onmessage,createOffer:function(e){N(o,!0,e)},createAnswer:function(e){N(o,!1,e)},handleRemoteJsep:function(e){_(o,e)},onlocalstream:e.onlocalstream,onremotestream:e.onremotestream,ondata:e.ondata,ondataopen:e.ondataopen,oncleanup:e.oncleanup,ondetached:e.ondetached,hangup:function(e){z(o,!0===e)},detach:function(e){F(o,e)}};T[o]=a,e.success(a)},l.session_id=k,void o.send(JSON.stringify(l));n.httpAPICall(c+"/"+k,{verb:"POST",withCredentials:p,body:l,success:function(t){if(n.debug(t),"success"!==t.janus)return n.error("Ooops: "+t.error.code+" "+t.error.reason),void e.error("Ooops: "+t.error.code+" "+t.error.reason);var o=t.data.id;n.log("Created handle: "+o);var a={session:C,plugin:r,id:o,token:s,detached:!1,webrtcStuff:{started:!1,myStream:null,streamExternal:!1,remoteStream:null,mySdp:null,mediaConstraints:null,pc:null,dataChannelOptions:e.dataChannelOptions,dataChannel:{},dtmfSender:null,trickle:!0,iceDone:!1,volume:{value:null,timer:null},bitrate:{value:null,bsnow:null,bsbefore:null,tsnow:null,tsbefore:null,timer:null}},getId:function(){return o},getPlugin:function(){return r},getVolume:function(){return J(o,!0)},getRemoteVolume:function(){return J(o,!0)},getLocalVolume:function(){return J(o,!1)},isAudioMuted:function(){return U(o,!1)},muteAudio:function(){return W(o,!1,!0)},unmuteAudio:function(){return W(o,!1,!1)},isVideoMuted:function(){return U(o,!0)},muteVideo:function(){return W(o,!0,!0)},unmuteVideo:function(){return W(o,!0,!1)},getBitrate:function(){return B(o)},send:function(e){O(o,e)},data:function(e){E(o,e)},dtmf:function(e){j(o,e)},consentDialog:e.consentDialog,iceState:e.iceState,mediaState:e.mediaState,webrtcState:e.webrtcState,slowLink:e.slowLink,onmessage:e.onmessage,createOffer:function(e){N(o,!0,e)},createAnswer:function(e){N(o,!1,e)},handleRemoteJsep:function(e){_(o,e)},onlocalstream:e.onlocalstream,onremotestream:e.onremotestream,ondata:e.ondata,ondataopen:e.ondataopen,oncleanup:e.oncleanup,ondetached:e.ondetached,hangup:function(e){z(o,!0===e)},detach:function(e){F(o,e)}};T[o]=a,e.success(a)},error:function(r,t){n.error(r+":",t),""===t?e.error(r+": Is the server down?"):e.error(r+": "+t)}})}(e)}}n.useDefaultDependencies=function(t){var o=t&&t.fetch||fetch,a=t&&t.Promise||Promise,i=t&&t.WebSocket||WebSocket;return{newWebSocket:function(e,r){return new i(e,r)},extension:t&&t.extension||r,isArray:function(e){return Array.isArray(e)},webRTCAdapter:t&&t.adapter||adapter,httpAPICall:function(r,t){var i={method:t.verb,headers:{Accept:"application/json, text/plain, */*"},cache:"no-cache"};"POST"===t.verb&&(i.headers["Content-Type"]="application/json"),void 0!==t.withCredentials&&(i.credentials=!0===t.withCredentials?"include":t.withCredentials?t.withCredentials:"omit"),t.body&&(i.body=JSON.stringify(t.body));var s=o(r,i).catch((function(e){return a.reject({message:"Probably a network error, is the server down?",error:e})}));if(t.timeout){var d=new a((function(e,r){var n=setTimeout((function(){return clearTimeout(n),r({message:"Request timed out",timeout:t.timeout})}),t.timeout)}));s=a.race([s,d])}return s.then((function(r){return r.ok?e.typeof(t.success)===e.typeof(n.noop)?r.json().then((function(e){try{t.success(e)}catch(e){n.error("Unhandled httpAPICall success callback error",e)}}),(function(e){return a.reject({message:"Failed to parse response body",error:e,response:r})})):void 0:a.reject({message:"API call failed",response:r})})).catch((function(r){e.typeof(t.error)===e.typeof(n.noop)&&t.error(r.message||"<< internal error >>",r)})),s}}},n.useOldDependencies=function(t){var o=t&&t.jQuery||jQuery,a=t&&t.WebSocket||WebSocket;return{newWebSocket:function(e,r){return new a(e,r)},isArray:function(e){return o.isArray(e)},extension:t&&t.extension||r,webRTCAdapter:t&&t.adapter||adapter,httpAPICall:function(r,t){var a=void 0!==t.body?{contentType:"application/json",data:JSON.stringify(t.body)}:{},i=void 0!==t.withCredentials?{xhrFields:{withCredentials:t.withCredentials}}:{};return o.ajax(o.extend(a,i,{url:r,type:t.verb,cache:!1,dataType:"json",async:t.async,timeout:t.timeout,success:function(r){e.typeof(t.success)===e.typeof(n.noop)&&t.success(r)},error:function(r,o,a){e.typeof(t.error)===e.typeof(n.noop)&&t.error(o,a)}}))}}},n.noop=function(){},n.dataChanDefaultLabel="JanusDataChannel",n.endOfCandidates=null,n.stopAllTracks=function(r){try{var t,o=r.getTracks(),a=e.createForOfIteratorHelper(o);try{for(a.s();!(t=a.n()).done;){var i=t.value;n.log(i),i&&i.stop()}}catch(e){a.e(e)}finally{a.f()}}catch(e){}},n.init=function(r){if((r=r||{}).callback="function"==typeof r.callback?r.callback:n.noop,n.initDone)r.callback();else{if(void 0===console.log&&(console.log=function(){}),n.trace=n.noop,n.debug=n.noop,n.vdebug=n.noop,n.log=n.noop,n.warn=n.noop,n.error=n.noop,!0===r.debug||"all"===r.debug)n.trace=console.trace.bind(console),n.debug=console.debug.bind(console),n.vdebug=console.debug.bind(console),n.log=console.log.bind(console),n.warn=console.warn.bind(console),n.error=console.error.bind(console);else if(Array.isArray(r.debug)){var t,o=e.createForOfIteratorHelper(r.debug);try{for(o.s();!(t=o.n()).done;){var a=t.value;switch(a){case"trace":n.trace=console.trace.bind(console);break;case"debug":n.debug=console.debug.bind(console);break;case"vdebug":n.vdebug=console.debug.bind(console);break;case"log":n.log=console.log.bind(console);break;case"warn":n.warn=console.warn.bind(console);break;case"error":n.error=console.error.bind(console);break;default:console.error("Unknown debugging option '"+a+"' (supported: 'trace', 'debug', 'vdebug', 'log', warn', 'error')")}}}catch(e){o.e(e)}finally{o.f()}}n.log("Initializing library");var i=r.dependencies||n.useDefaultDependencies();n.isArray=i.isArray,n.webRTCAdapter=i.webRTCAdapter,n.httpAPICall=i.httpAPICall,n.newWebSocket=i.newWebSocket,n.extension=i.extension,n.extension.init(),n.listDevices=function(e,r){e="function"==typeof e?e:n.noop,null==r&&(r={audio:!0,video:!0}),n.isGetUserMediaAvailable()?navigator.mediaDevices.getUserMedia(r).then((function(r){navigator.mediaDevices.enumerateDevices().then((function(t){n.debug(t),e(t),n.stopAllTracks(r)}))})).catch((function(r){n.error(r),e([])})):(n.warn("navigator.mediaDevices unavailable"),e([]))},n.attachMediaStream=function(e,r){try{e.srcObject=r}catch(t){try{e.src=URL.createObjectURL(r)}catch(e){n.error("Error attaching stream to element")}}},n.reattachMediaStream=function(e,r){try{e.srcObject=r.srcObject}catch(t){try{e.src=r.src}catch(e){n.error("Error reattaching stream to element")}}};var s=["iPad","iPhone","iPod"].indexOf(navigator.platform)>=0?"pagehide":"beforeunload",d=window["on"+s];if(window.addEventListener(s,(function(){for(var e in n.log("Closing window"),n.sessions)n.sessions[e]&&n.sessions[e].destroyOnUnload&&(n.log("Destroying session "+e),n.sessions[e].destroy({unload:!0,notifyDestroyed:!1}));d&&"function"==typeof d&&d()})),n.safariVp8=!1,"safari"===n.webRTCAdapter.browserDetails.browser&&n.webRTCAdapter.browserDetails.version>=605)if(RTCRtpSender&&RTCRtpSender.getCapabilities&&RTCRtpSender.getCapabilities("video")&&RTCRtpSender.getCapabilities("video").codecs&&RTCRtpSender.getCapabilities("video").codecs.length){var c,l=e.createForOfIteratorHelper(RTCRtpSender.getCapabilities("video").codecs);try{for(l.s();!(c=l.n()).done;){var u=c.value;if(u&&u.mimeType&&"video/vp8"===u.mimeType.toLowerCase()){n.safariVp8=!0;break}}}catch(e){l.e(e)}finally{l.f()}n.safariVp8?n.log("This version of Safari supports VP8"):n.warn("This version of Safari does NOT support VP8: if you're using a Technology Preview, try enabling the 'WebRTC VP8 codec' setting in the 'Experimental Features' Develop menu")}else{var f=new RTCPeerConnection({});f.createOffer({offerToReceiveVideo:!0}).then((function(e){n.safariVp8=-1!==e.sdp.indexOf("VP8"),n.safariVp8?n.log("This version of Safari supports VP8"):n.warn("This version of Safari does NOT support VP8: if you're using a Technology Preview, try enabling the 'WebRTC VP8 codec' setting in the 'Experimental Features' Develop menu"),f.close(),f=null}))}if(n.unifiedPlan=!1,"firefox"===n.webRTCAdapter.browserDetails.browser&&n.webRTCAdapter.browserDetails.version>=59)n.unifiedPlan=!0;else if("chrome"===n.webRTCAdapter.browserDetails.browser&&n.webRTCAdapter.browserDetails.version>=72)n.unifiedPlan=!0;else if(window.RTCRtpTransceiver&&"currentDirection"in RTCRtpTransceiver.prototype){var v=new RTCPeerConnection;try{v.addTransceiver("audio"),n.unifiedPlan=!0}catch(e){}v.close()}else n.unifiedPlan=!1;n.initDone=!0,r.callback()}},n.isWebrtcSupported=function(){return!!window.RTCPeerConnection},n.isGetUserMediaAvailable=function(){return navigator.mediaDevices&&navigator.mediaDevices.getUserMedia},n.randomString=function(e){for(var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n="",t=0;t<e;t++){var o=Math.floor(Math.random()*r.length);n+=r.substring(o,o+1)}return n},exports.default=n;
2
+ //# sourceMappingURL=janus.js.map