Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@testrtc/watchrtc-sdk

Package Overview
Dependencies
Maintainers
2
Versions
127
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@testrtc/watchrtc-sdk - npm Package Compare versions

Comparing version 1.29.0 to 1.29.1

2

lib/index.js

@@ -1,2 +0,2 @@

!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.watchRTC=n():e.watchRTC=n()}(self,(function(){return(e={607:(e,n,t)=>{"use strict";n.xt=n.Zt=n.zl=n.v6=n.S1=void 0,t(699);var o=t(231);n.S1=function(e){o.initSDK(e,["","webkit","moz"])},n.v6=function(e){o.setConfig(e)},n.zl=function(e){o.addTags(e)},n.Zt=function(){o.disableDataCollection()},n.xt=function(){o.enableDataCollection()},n.default={init:n.S1,addTags:n.zl,setConfig:n.v6,disableDataCollection:n.Zt,enableDataCollection:n.xt}},231:function(e,n,t){"use strict";var o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)},i=this&&this.__spreadArrays||function(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var o=Array(e),i=0;for(n=0;n<t;n++)for(var r=arguments[n],a=0,c=r.length;a<c;a++,i++)o[i]=r[a];return o};Object.defineProperty(n,"__esModule",{value:!0}),n.enableDataCollection=n.disableDataCollection=n.addTags=n.setConfig=n.initSDK=void 0;var r,a,c=t(85),s=t(593),l=t(412),d=!!window.mozRTCPeerConnection,u=!!window.RTCIceGatherer,f=(!d&&window.RTCPeerConnection&&window.navigator.webkitGetUserMedia,{}),p=null,g=null,v=0,h=!1,m=function(){var e=s.countOfValidConnections(f);if(e>0&&!h){h=!0;var n=s.validateConfig(p),t=Object.keys(f)[e-1];if(n){p.rtcTags&&(Array.isArray(p.rtcTags)?p.rtcTags.some((function(e){return e.includes(",")}))&&console.info.apply(console,i(s.logPrefix("info"),["To apply multiple tags please use an array and not comma separated values."])):(console.info.apply(console,i(s.logPrefix("info"),["config.rtcTags must be an array."])),p.rtcTags=void 0));var c=!!p.rtcToken,d=s.getWSConnectionData(c?p.rtcToken:p.rtcApiKey,p.proxyUrl||p.wsUrl);v=Date.now(),null==g||g.connect(d.url+"?"+(c?"token":"apiKey")+"="+d.key+"&timestamp="+Date.now(),(function(e){console.info.apply(console,i(s.logPrefix("info"),["Connection established. watchRTCConnectionId: "+e.connectionId+" sdkVersion:"+l.default])),r("watchrtc",t,o(o(o({},p),e),{sdkVersion:l.default})),u||(window.clearInterval(a),a=window.setInterval((function(){0===s.countOfValidConnections(f)?v&&v+2e4<Date.now()&&(h=!1,window.clearInterval(a),null==g||g.close(),console.info.apply(console,i(s.logPrefix("info"),["Last connection closed. watchRTCConnectionId: "+e.connectionId+" sdkVersion: "+l.default]))):(v=Date.now(),Object.values(f).forEach((function(e){"closed"!==e.pc.signalingState&&y(e)})))}),e.interval))}),(function(){h=!1,v=0}))}else h=!1}},y=function(e){if(e){var n=e.id,t=e.pc,o=e.prev;t.getStats(null).then((function(t){var i=s.map2obj(t),a=JSON.parse(JSON.stringify(i)),c=s.deltaCompression(o,i);null!==(null==c?void 0:c.timestamp)&&(null==c?void 0:c.timestamp)!==-1/0&&r("getstats",n,s.deltaCompression(e.prev,i)),e.prev=a}))}};n.initSDK=function(e,n){if(!window.watchRTCInitialized){window.watchRTCInitialized=!0;var t=0;if(g=new c.default({debug:null==e?void 0:e.debug}),r=g.trace,n.forEach((function(n){if(window[n+"RTCPeerConnection"]&&("webkit"!==n||!u)){var a=window[n+"RTCPeerConnection"],c=function(n,c){(null==(p=o(o({},e),null==n?void 0:n.watchrtc))?void 0:p.debug)&&console.info.apply(console,i(s.logPrefix("info"),["new RTCPeerConnection called.",{config:n,constraints:c}]));var l=new a(n,c),g="PC_"+t++;return l.__rtcStatsId=g,f[g]={id:g,pc:l,validConnection:!1},n||(n={nullConfig:!0}),((n=JSON.parse(JSON.stringify(n)))&&n.iceServers||[]).forEach((function(e){delete e.credential})),(null==n?void 0:n.watchrtc)&&delete n.watchrtc,n.browserType=d?"moz":u?"edge":"webkit",r("create",g,n),c&&r("constraints",g,c),l.addEventListener("icecandidate",(function(e){r("onicecandidate",g,e.candidate)})),l.addEventListener("addstream",(function(e){r("onaddstream",g,e.stream.id+" "+e.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),l.addEventListener("track",(function(e){r("ontrack",g,e.track.kind+":"+e.track.id+" "+e.streams.map((function(e){return"stream:"+e.id})))})),l.addEventListener("removestream",(function(e){r("onremovestream",g,e.stream.id+" "+e.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),l.addEventListener("signalingstatechange",(function(){f[g]&&!f[g].validConnection&&(f[g].validConnection=!0,setTimeout(m,5e3)),r("onsignalingstatechange",g,l.signalingState)})),l.addEventListener("iceconnectionstatechange",(function(){r("oniceconnectionstatechange",g,l.iceConnectionState)})),l.addEventListener("icegatheringstatechange",(function(){r("onicegatheringstatechange",g,l.iceGatheringState)})),l.addEventListener("connectionstatechange",(function(){r("onconnectionstatechange",g,l.connectionState)})),l.addEventListener("negotiationneeded",(function(){r("onnegotiationneeded",g,void 0)})),l.addEventListener("datachannel",(function(e){r("ondatachannel",g,[e.channel.id,e.channel.label])})),u||l.addEventListener("iceconnectionstatechange",(function(){"connected"===l.iceConnectionState&&y(f[g])})),l};["createDataChannel"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){return r(e,this.__rtcStatsId,arguments),n.apply(this,arguments)})})),["close"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){return r(e,this.__rtcStatsId,arguments),delete f[this.__rtcStatsId],n.apply(this,arguments)})})),["addStream","removeStream"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){var t=arguments[0],o=t.getTracks().map((function(e){return e.kind+":"+e.id})).join(",");return r(e,this.__rtcStatsId,t.id+" "+o),n.apply(this,arguments)})})),["addTrack"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){var t=arguments[0],o=[].slice.call(arguments,1);return r(e,this.__rtcStatsId,t.kind+":"+t.id+" "+(o.map((function(e){return"stream:"+e.id})).join(";")||"-")),n.apply(this,arguments)})})),["removeTrack"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){var t=arguments[0].track;return r(e,this.__rtcStatsId,t?t.kind+":"+t.id:"null"),n.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){var t,o=this.__rtcStatsId,i=arguments;return 1===arguments.length&&"object"==typeof arguments[0]?t=arguments[0]:3===arguments.length&&"object"==typeof arguments[2]&&(t=arguments[2]),r(e,this.__rtcStatsId,t),n.apply(this,t?[t]:void 0).then((function(n){if(r(e+"OnSuccess",o,n),!(i.length>0&&"function"==typeof i[0]))return n;i[0].apply(null,[n])}),(function(n){if(r(e+"OnFailure",o,n.toString()),!(i.length>1&&"function"==typeof i[1]))throw n;i[1].apply(null,[n])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(e){var n=a.prototype[e];n&&(a.prototype[e]=function(){var t=this.__rtcStatsId,o=arguments;return r(e,this.__rtcStatsId,o[0]),n.apply(this,[o[0]]).then((function(){r(e+"OnSuccess",t,void 0),o.length>=2&&"function"==typeof o[1]&&o[1].apply(null,[])}),(function(n){if(r(e+"OnFailure",t,n.toString()),!(o.length>=3&&"function"==typeof o[2]))throw n;o[2].apply(null,[n])}))})})),a.generateCertificate&&Object.defineProperty(c,"generateCertificate",{get:function(){return arguments.length?a.generateCertificate.apply(null,arguments):a.generateCertificate}}),window[n+"RTCPeerConnection"]=c,window[n+"RTCPeerConnection"].prototype=a.prototype}})),n.forEach((function(e){var n=e+(e.length?"GetUserMedia":"getUserMedia");if(navigator[n]){var t=navigator[n].bind(navigator);navigator[n]=function(){r("getUserMedia",null,arguments[0]);var e=arguments[1],n=arguments[2];t(arguments[0],(function(n){r("getUserMediaOnSuccess",null,s.dumpStream(n)),e&&e(n)}),(function(e){r("getUserMediaOnFailure",null,e.name),n&&n(e)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var a=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return r("navigator.mediaDevices.getUserMedia",null,arguments[0]),a.apply(navigator.mediaDevices,arguments).then((function(e){return r("navigator.mediaDevices.getUserMediaOnSuccess",null,s.dumpStream(e)),e}),(function(e){return r("navigator.mediaDevices.getUserMediaOnFailure",null,e.name),Promise.reject(e)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var l=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return r("navigator.mediaDevices.getDisplayMedia",null,arguments[0]),l.apply(navigator.mediaDevices,arguments).then((function(e){return r("navigator.mediaDevices.getDisplayMediaOnSuccess",null,s.dumpStream(e)),e}),(function(e){return r("navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name),Promise.reject(e)}))}.bind(navigator.mediaDevices)}}},n.setConfig=function(e){window.watchRTCInitialized?(null==p?void 0:p.rtcRoomId)&&(null==p?void 0:p.rtcPeerId)?(null==p?void 0:p.debug)&&console.info.apply(console,i(s.logPrefix("info"),["Websocket started to send data. 'setConfig' function ignored"])):e.rtcRoomId&&e.rtcPeerId?(p=o(o({},p),e),m()):console.info.apply(console,i(s.logPrefix("error"),["rtcRoomId and rtcPeerId are required"])):console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))},n.addTags=function(e){window.watchRTCInitialized?e&&Array.isArray(e)?r("addRtcTags",null,{rtcTags:e}):console.info.apply(console,i(s.logPrefix("error"),["addTags excepts only array of strings"])):console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))},n.disableDataCollection=function(){window.watchRTCInitialized?null==g||g.disableDataCollection():console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))},n.enableDataCollection=function(){window.watchRTCInitialized?null==g||g.enableDataCollection():console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))}},699:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0})},593:function(e,n){"use strict";var t=this&&this.__spreadArrays||function(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var o=Array(e),i=0;for(n=0;n<t;n++)for(var r=arguments[n],a=0,c=r.length;a<c;a++,i++)o[i]=r[a];return o};Object.defineProperty(n,"__esModule",{value:!0}),n.countOfValidConnections=n.validateConfig=n.getWSConnectionData=n.dumpStream=n.map2obj=n.mangleChromeStats=n.deltaCompression=n.logPrefix=void 0,n.logPrefix=function(e){return void 0===e&&(e="info"),"error"===e?["%cwatchRTC %cERROR","background: gold; color: black; padding: 2px 0.5em; border-radius: 0.5em;","background: red; color: white; padding: 2px 0.5em; border-radius: 0.5em;"]:["%cwatchRTC","background: gold; color: black; padding: 2px 0.5em; border-radius: 0.5em;"]},n.deltaCompression=function(e,n){e=e||{},n=n||{},n=JSON.parse(JSON.stringify(n)),Object.keys(n).forEach((function(t){var o=n[t];delete o.id,e[t]&&Object.keys(o).forEach((function(i){o[i]===e[t][i]&&delete n[t][i],(0===Object.keys(o).length||1===Object.keys(o).length&&o.timestamp)&&delete n[t]}))}));var t=-1/0;return Object.keys(n).forEach((function(e){var o=n[e];o.timestamp>t&&(t=o.timestamp)})),Object.keys(n).forEach((function(e){var o=n[e];o.timestamp===t&&(o.timestamp=0)})),n.timestamp=t,n},n.mangleChromeStats=function(e,n){var t={};return n.result().forEach((function(e){var n={id:e.id,timestamp:e.timestamp.getTime(),type:e.type};e.names().forEach((function(t){n[t]=e.stat(t)})),t[n.id]=n})),t},n.map2obj=function(e){if(!e.entries)return e;var n={};return e.forEach((function(e,t){n[t]=e})),n},n.dumpStream=function(e){return{id:e.id,tracks:e.getTracks().map((function(e){return{id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState}}))}},n.getWSConnectionData=function(e,n){var t="wss://watchrtc.testrtc.com",o=e.split(":");return-1!==e.indexOf("local")?{url:n||"ws://localhost:9101",key:o[1]}:-1!==e.indexOf("staging")?{url:n||"wss://watchrtc-staging2.testrtc.com",key:o[1]}:-1!==e.indexOf("production")?{url:n||t,key:o[1]}:{url:n||t,key:o[0]}},n.validateConfig=function(e){return!(null==e?void 0:e.rtcApiKey)&&(null==e?void 0:e.debug)?(console.info.apply(console,t(n.logPrefix("error"),["config.rtcApiKey or config.rtcToken need to be provided."])),!1):!(!(null==e?void 0:e.rtcRoomId)||!(null==e?void 0:e.rtcPeerId))||((null==e?void 0:e.debug)&&console.info.apply(console,t(n.logPrefix("error"),["rtcRoomId and rtcPeerId need to be provided."])),!1)},n.countOfValidConnections=function(e){return Object.keys(e).filter((function(n){return e[n].validConnection})).length}},412:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default="1.29.0"},85:function(e,n,t){"use strict";var o=this&&this.__spreadArrays||function(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var o=Array(e),i=0;for(n=0;n<t;n++)for(var r=arguments[n],a=0,c=r.length;a<c;a++,i++)o[i]=r[a];return o};Object.defineProperty(n,"__esModule",{value:!0});var i=t(593),r=t(354),a=function(){function e(n){this.connection=null,this.buffer=[],this.sendInterval=1,this.onClose=function(){},this.debug=!1,this.dataCollection=!0,e._instance?console.info.apply(console,o(i.logPrefix("info"),["WatchRTCSocket instance already created"])):(e._instance=this,this.debug=!!n.debug)}return e.prototype.connect=function(n,t,r){e._instance.connection&&e._instance.connection.close();var a=e._instance;e._instance.connection=new WebSocket(n,"2.0"),e._instance.connection.onopen=function(e){},e._instance.connection.onclose=function(e){},e._instance.connection.onmessage=function(n){var c;try{var s=JSON.parse(n.data);s.error?(null===(c=null==a?void 0:a.connection)||void 0===c||c.close(),a.connection=null,console.info.apply(console,o(i.logPrefix("error"),["\n"+s.error])),r(s.error)):(s.sendInterval&&(e._instance.sendInterval=s.sendInterval),t(s))}catch(e){console.info.apply(console,o(i.logPrefix("error"),[{err:e.stack}])),r(e.message)}},e._instance.connection.onerror=function(e){console.info.apply(console,o(i.logPrefix("error"),["\n",e])),r(e)}},e.prototype.trace=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var a=Array.prototype.slice.call(n);if(a.push(Date.now()),a[1]instanceof RTCPeerConnection&&(a[1]=a[1].__rtcStatsId),e._instance.dataCollection)if(e._instance.connection){if(e._instance.connection.readyState===WebSocket.OPEN&&(e._instance.buffer.push(a),e._instance.buffer.length>=e._instance.sendInterval)){var c=JSON.stringify(e._instance.buffer),s=r.compressToEncodedURIComponent(c);e._instance.debug&&(console.log.apply(console,o(i.logPrefix("info"),["lines: "+c.length])),console.log.apply(console,o(i.logPrefix("info"),["compressedMessage: "+s.length]))),e._instance.buffer=[],e._instance.connection.send(s)}}else{if(e._instance.buffer.length>1e3)return;e._instance.buffer.push(a)}},e.prototype.close=function(){e._instance.buffer=[],e._instance.connection&&(e._instance.connection.close(),e._instance.onClose(),e._instance.connection=null)},e.prototype.disableDataCollection=function(){e._instance.debug&&console.log.apply(console,o(i.logPrefix("info"),["Data collection disabled."])),e._instance.dataCollection=!1},e.prototype.enableDataCollection=function(){e._instance.debug&&console.log.apply(console,o(i.logPrefix("info"),["Data collection enabled."])),e._instance.dataCollection=!0},e}();n.default=a},354:(e,n,t)=>{var o,i=function(){function e(e,n){if(!i[e]){i[e]={};for(var t=0;t<e.length;t++)i[e][e.charAt(t)]=t}return i[e][n]}var n=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",i={},r={compressToBase64:function(e){if(null==e)return"";var n=r._compress(e,6,(function(e){return t.charAt(e)}));switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case 3:return n+"="}},decompressFromBase64:function(n){return null==n?"":""==n?null:r._decompress(n.length,32,(function(o){return e(t,n.charAt(o))}))},compressToUTF16:function(e){return null==e?"":r._compress(e,15,(function(e){return n(e+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:r._decompress(e.length,16384,(function(n){return e.charCodeAt(n)-32}))},compressToUint8Array:function(e){for(var n=r.compress(e),t=new Uint8Array(2*n.length),o=0,i=n.length;i>o;o++){var a=n.charCodeAt(o);t[2*o]=a>>>8,t[2*o+1]=a%256}return t},decompressFromUint8Array:function(e){if(null==e)return r.decompress(e);for(var t=new Array(e.length/2),o=0,i=t.length;i>o;o++)t[o]=256*e[2*o]+e[2*o+1];var a=[];return t.forEach((function(e){a.push(n(e))})),r.decompress(a.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":r._compress(e,6,(function(e){return o.charAt(e)}))},decompressFromEncodedURIComponent:function(n){return null==n?"":""==n?null:(n=n.replace(/ /g,"+"),r._decompress(n.length,32,(function(t){return e(o,n.charAt(t))})))},compress:function(e){return r._compress(e,16,(function(e){return n(e)}))},_compress:function(e,n,t){if(null==e)return"";var o,i,r,a={},c={},s="",l="",d="",u=2,f=3,p=2,g=[],v=0,h=0;for(r=0;r<e.length;r+=1)if(s=e.charAt(r),Object.prototype.hasOwnProperty.call(a,s)||(a[s]=f++,c[s]=!0),l=d+s,Object.prototype.hasOwnProperty.call(a,l))d=l;else{if(Object.prototype.hasOwnProperty.call(c,d)){if(d.charCodeAt(0)<256){for(o=0;p>o;o++)v<<=1,h==n-1?(h=0,g.push(t(v)),v=0):h++;for(i=d.charCodeAt(0),o=0;8>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}else{for(i=1,o=0;p>o;o++)v=v<<1|i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i=0;for(i=d.charCodeAt(0),o=0;16>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}0==--u&&(u=Math.pow(2,p),p++),delete c[d]}else for(i=a[d],o=0;p>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1;0==--u&&(u=Math.pow(2,p),p++),a[l]=f++,d=String(s)}if(""!==d){if(Object.prototype.hasOwnProperty.call(c,d)){if(d.charCodeAt(0)<256){for(o=0;p>o;o++)v<<=1,h==n-1?(h=0,g.push(t(v)),v=0):h++;for(i=d.charCodeAt(0),o=0;8>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}else{for(i=1,o=0;p>o;o++)v=v<<1|i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i=0;for(i=d.charCodeAt(0),o=0;16>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}0==--u&&(u=Math.pow(2,p),p++),delete c[d]}else for(i=a[d],o=0;p>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1;0==--u&&(u=Math.pow(2,p),p++)}for(i=2,o=0;p>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1;for(;;){if(v<<=1,h==n-1){g.push(t(v));break}h++}return g.join("")},decompress:function(e){return null==e?"":""==e?null:r._decompress(e.length,32768,(function(n){return e.charCodeAt(n)}))},_decompress:function(e,t,o){var i,r,a,c,s,l,d,u=[],f=4,p=4,g=3,v="",h=[],m={val:o(0),position:t,index:1};for(i=0;3>i;i+=1)u[i]=i;for(a=0,s=Math.pow(2,2),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;switch(a){case 0:for(a=0,s=Math.pow(2,8),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;d=n(a);break;case 1:for(a=0,s=Math.pow(2,16),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;d=n(a);break;case 2:return""}for(u[3]=d,r=d,h.push(d);;){if(m.index>e)return"";for(a=0,s=Math.pow(2,g),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;switch(d=a){case 0:for(a=0,s=Math.pow(2,8),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;u[p++]=n(a),d=p-1,f--;break;case 1:for(a=0,s=Math.pow(2,16),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;u[p++]=n(a),d=p-1,f--;break;case 2:return h.join("")}if(0==f&&(f=Math.pow(2,g),g++),u[d])v=u[d];else{if(d!==p)return null;v=r+r.charAt(0)}h.push(v),u[p++]=r+v.charAt(0),r=v,0==--f&&(f=Math.pow(2,g),g++)}}};return r}();void 0===(o=function(){return i}.call(n,t,n,e))||(e.exports=o)}},n={},function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{}};return e[o].call(i.exports,i,i.exports,t),i.exports}(607)).default;var e,n}));
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.watchRTC=n():e.watchRTC=n()}(self,(function(){return(e={607:(e,n,t)=>{"use strict";n.xt=n.Zt=n.zl=n.v6=n.S1=void 0,t(699);var o=t(231);n.S1=function(e){o.initSDK(e,["","webkit","moz"])},n.v6=function(e){o.setConfig(e)},n.zl=function(e){o.addTags(e)},n.Zt=function(){o.disableDataCollection()},n.xt=function(){o.enableDataCollection()},n.default={init:n.S1,addTags:n.zl,setConfig:n.v6,disableDataCollection:n.Zt,enableDataCollection:n.xt}},231:function(e,n,t){"use strict";var o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)},i=this&&this.__spreadArrays||function(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var o=Array(e),i=0;for(n=0;n<t;n++)for(var r=arguments[n],a=0,c=r.length;a<c;a++,i++)o[i]=r[a];return o};Object.defineProperty(n,"__esModule",{value:!0}),n.enableDataCollection=n.disableDataCollection=n.addTags=n.setConfig=n.initSDK=void 0;var r,a,c=t(85),s=t(593),l=t(412),d=!!window.mozRTCPeerConnection,u=!!window.RTCIceGatherer,f=(!d&&window.RTCPeerConnection&&window.navigator.webkitGetUserMedia,{}),p={rtcRoomId:void 0,rtcPeerId:void 0},g=null,v=null,h=0,m=!1,y=function(e){var n;if(void 0===e&&(e=!1),(null===(n=null==v?void 0:v.connection)||void 0===n?void 0:n.readyState)===WebSocket.OPEN){if(!s.isRoomIdOrPeerIdChanged(p,g)||!e)return void((null==g?void 0:g.debug)&&console.log.apply(console,i(s.logPrefix("info"),["maybeOpenWebsocketConnection. WS connection already opened"])));(null==g?void 0:g.debug)&&console.log.apply(console,i(s.logPrefix("info"),["maybeOpenWebsocketConnection. Closing WS connection"])),null==v||v.close()}var t=s.countOfValidConnections(f);if(t>0&&!m){var c=s.validateConfig(g),d=Object.keys(f)[t-1];if(c){g.rtcTags&&(Array.isArray(g.rtcTags)?g.rtcTags.some((function(e){return e.includes(",")}))&&console.info.apply(console,i(s.logPrefix("info"),["To apply multiple tags please use an array and not comma separated values."])):(console.info.apply(console,i(s.logPrefix("info"),["config.rtcTags must be an array."])),g.rtcTags=void 0));var y=!!g.rtcToken,C=s.getWSConnectionData(y?g.rtcToken:g.rtcApiKey,g.proxyUrl||g.wsUrl);m=!0,h=Date.now(),null==v||v.connect(C.url+"?"+(y?"token":"apiKey")+"="+C.key+"&timestamp="+Date.now(),(function(e){p.rtcRoomId=g.rtcRoomId,p.rtcPeerId=g.rtcPeerId,m=!1,console.info.apply(console,i(s.logPrefix("info"),["Connection established. watchRTCConnectionId: "+e.connectionId+" sdkVersion:"+l.default])),r("watchrtc",d,o(o(o({},g),e),{sdkVersion:l.default})),u||(window.clearInterval(a),a=window.setInterval((function(){0===s.countOfValidConnections(f)?h&&h+2e4<Date.now()&&(window.clearInterval(a),null==v||v.close(),console.info.apply(console,i(s.logPrefix("info"),["Last connection closed. watchRTCConnectionId: "+e.connectionId+" sdkVersion: "+l.default]))):(h=Date.now(),Object.values(f).forEach((function(e){"closed"!==e.pc.signalingState&&b(e)})))}),e.interval))}),(function(){m=!1,h=0}))}else m=!1}},b=function(e){if(e){var n=e.id,t=e.pc,o=e.prev;t.getStats(null).then((function(t){var i=s.map2obj(t),a=JSON.parse(JSON.stringify(i)),c=s.deltaCompression(o,i);null!==(null==c?void 0:c.timestamp)&&(null==c?void 0:c.timestamp)!==-1/0&&r("getstats",n,s.deltaCompression(e.prev,i)),e.prev=a}))}};n.initSDK=function(e,n){if(!window.watchRTCInitialized){window.watchRTCInitialized=!0;var t=0;if(v=new c.default({debug:null==e?void 0:e.debug}),window.wrtcSocket=v,g=e,r=v.trace,n.forEach((function(e){if(window[e+"RTCPeerConnection"]&&("webkit"!==e||!u)){var n=window[e+"RTCPeerConnection"],a=function(e,a){(null==e?void 0:e.watchrtc)&&(g=o(o({},g),e.watchrtc)),(null==g?void 0:g.debug)&&console.info.apply(console,i(s.logPrefix("info"),["new RTCPeerConnection called.",{config:e,constraints:a}]));var c=new n(e,a),l="PC_"+t++;return c.__rtcStatsId=l,f[l]={id:l,pc:c,validConnection:!1},e||(e={nullConfig:!0}),((e=JSON.parse(JSON.stringify(e)))&&e.iceServers||[]).forEach((function(e){delete e.credential})),(null==e?void 0:e.watchrtc)&&delete e.watchrtc,e.browserType=d?"moz":u?"edge":"webkit",r("create",l,e),a&&r("constraints",l,a),c.addEventListener("icecandidate",(function(e){r("onicecandidate",l,e.candidate)})),c.addEventListener("addstream",(function(e){r("onaddstream",l,e.stream.id+" "+e.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),c.addEventListener("track",(function(e){r("ontrack",l,e.track.kind+":"+e.track.id+" "+e.streams.map((function(e){return"stream:"+e.id})))})),c.addEventListener("removestream",(function(e){r("onremovestream",l,e.stream.id+" "+e.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),c.addEventListener("signalingstatechange",(function(){f[l]&&!f[l].validConnection&&(f[l].validConnection=!0,setTimeout((function(){y(!0)}),5e3)),r("onsignalingstatechange",l,c.signalingState)})),c.addEventListener("iceconnectionstatechange",(function(){r("oniceconnectionstatechange",l,c.iceConnectionState)})),c.addEventListener("icegatheringstatechange",(function(){r("onicegatheringstatechange",l,c.iceGatheringState)})),c.addEventListener("connectionstatechange",(function(){r("onconnectionstatechange",l,c.connectionState)})),c.addEventListener("negotiationneeded",(function(){r("onnegotiationneeded",l,void 0)})),c.addEventListener("datachannel",(function(e){r("ondatachannel",l,[e.channel.id,e.channel.label])})),u||c.addEventListener("iceconnectionstatechange",(function(){"connected"===c.iceConnectionState&&b(f[l])})),c};["createDataChannel"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){return r(e,this.__rtcStatsId,arguments),t.apply(this,arguments)})})),["close"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){return r(e,this.__rtcStatsId,arguments),delete f[this.__rtcStatsId],t.apply(this,arguments)})})),["addStream","removeStream"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n=arguments[0],o=n.getTracks().map((function(e){return e.kind+":"+e.id})).join(",");return r(e,this.__rtcStatsId,n.id+" "+o),t.apply(this,arguments)})})),["addTrack"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n=arguments[0],o=[].slice.call(arguments,1);return r(e,this.__rtcStatsId,n.kind+":"+n.id+" "+(o.map((function(e){return"stream:"+e.id})).join(";")||"-")),t.apply(this,arguments)})})),["removeTrack"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n=arguments[0].track;return r(e,this.__rtcStatsId,n?n.kind+":"+n.id:"null"),t.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n,o=this.__rtcStatsId,i=arguments;return 1===arguments.length&&"object"==typeof arguments[0]?n=arguments[0]:3===arguments.length&&"object"==typeof arguments[2]&&(n=arguments[2]),r(e,this.__rtcStatsId,n),t.apply(this,n?[n]:void 0).then((function(n){if(r(e+"OnSuccess",o,n),!(i.length>0&&"function"==typeof i[0]))return n;i[0].apply(null,[n])}),(function(n){if(r(e+"OnFailure",o,n.toString()),!(i.length>1&&"function"==typeof i[1]))throw n;i[1].apply(null,[n])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(e){var t=n.prototype[e];t&&(n.prototype[e]=function(){var n=this.__rtcStatsId,o=arguments;return r(e,this.__rtcStatsId,o[0]),t.apply(this,[o[0]]).then((function(){r(e+"OnSuccess",n,void 0),o.length>=2&&"function"==typeof o[1]&&o[1].apply(null,[])}),(function(t){if(r(e+"OnFailure",n,t.toString()),!(o.length>=3&&"function"==typeof o[2]))throw t;o[2].apply(null,[t])}))})})),n.generateCertificate&&Object.defineProperty(a,"generateCertificate",{get:function(){return arguments.length?n.generateCertificate.apply(null,arguments):n.generateCertificate}}),window[e+"RTCPeerConnection"]=a,window[e+"RTCPeerConnection"].prototype=n.prototype}})),n.forEach((function(e){var n=e+(e.length?"GetUserMedia":"getUserMedia");if(navigator[n]){var t=navigator[n].bind(navigator);navigator[n]=function(){r("getUserMedia",null,arguments[0]);var e=arguments[1],n=arguments[2];t(arguments[0],(function(n){r("getUserMediaOnSuccess",null,s.dumpStream(n)),e&&e(n)}),(function(e){r("getUserMediaOnFailure",null,e.name),n&&n(e)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var a=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return r("navigator.mediaDevices.getUserMedia",null,arguments[0]),a.apply(navigator.mediaDevices,arguments).then((function(e){return r("navigator.mediaDevices.getUserMediaOnSuccess",null,s.dumpStream(e)),e}),(function(e){return r("navigator.mediaDevices.getUserMediaOnFailure",null,e.name),Promise.reject(e)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var l=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return r("navigator.mediaDevices.getDisplayMedia",null,arguments[0]),l.apply(navigator.mediaDevices,arguments).then((function(e){return r("navigator.mediaDevices.getDisplayMediaOnSuccess",null,s.dumpStream(e)),e}),(function(e){return r("navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name),Promise.reject(e)}))}.bind(navigator.mediaDevices)}}},n.setConfig=function(e){window.watchRTCInitialized?(void 0!==e.debug&&e.debug!==g.debug&&(null==v||v.toggleDebug(e.debug)),g=o(o({},g),e),y()):console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))},n.addTags=function(e){window.watchRTCInitialized?e&&Array.isArray(e)?r("addRtcTags",null,{rtcTags:e}):console.info.apply(console,i(s.logPrefix("error"),["addTags excepts only array of strings"])):console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))},n.disableDataCollection=function(){window.watchRTCInitialized?null==v||v.disableDataCollection():console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))},n.enableDataCollection=function(){window.watchRTCInitialized?null==v||v.enableDataCollection():console.info.apply(console,i(s.logPrefix("error"),["SDK is not initialized. Use 'init' function fisrt."]))}},699:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0})},593:function(e,n){"use strict";var t=this&&this.__spreadArrays||function(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var o=Array(e),i=0;for(n=0;n<t;n++)for(var r=arguments[n],a=0,c=r.length;a<c;a++,i++)o[i]=r[a];return o};Object.defineProperty(n,"__esModule",{value:!0}),n.isRoomIdOrPeerIdChanged=n.countOfValidConnections=n.validateConfig=n.getWSConnectionData=n.dumpStream=n.map2obj=n.mangleChromeStats=n.deltaCompression=n.logPrefix=void 0,n.logPrefix=function(e){return void 0===e&&(e="info"),"error"===e?["%cwatchRTC %cERROR","background: gold; color: black; padding: 2px 0.5em; border-radius: 0.5em;","background: red; color: white; padding: 2px 0.5em; border-radius: 0.5em;"]:["%cwatchRTC","background: gold; color: black; padding: 2px 0.5em; border-radius: 0.5em;"]},n.deltaCompression=function(e,n){e=e||{},n=n||{},n=JSON.parse(JSON.stringify(n)),Object.keys(n).forEach((function(t){var o=n[t];delete o.id,e[t]&&Object.keys(o).forEach((function(i){o[i]===e[t][i]&&delete n[t][i],(0===Object.keys(o).length||1===Object.keys(o).length&&o.timestamp)&&delete n[t]}))}));var t=-1/0;return Object.keys(n).forEach((function(e){var o=n[e];o.timestamp>t&&(t=o.timestamp)})),Object.keys(n).forEach((function(e){var o=n[e];o.timestamp===t&&(o.timestamp=0)})),n.timestamp=t,n},n.mangleChromeStats=function(e,n){var t={};return n.result().forEach((function(e){var n={id:e.id,timestamp:e.timestamp.getTime(),type:e.type};e.names().forEach((function(t){n[t]=e.stat(t)})),t[n.id]=n})),t},n.map2obj=function(e){if(!e.entries)return e;var n={};return e.forEach((function(e,t){n[t]=e})),n},n.dumpStream=function(e){return{id:e.id,tracks:e.getTracks().map((function(e){return{id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState}}))}},n.getWSConnectionData=function(e,n){var t="wss://watchrtc.testrtc.com",o=e.split(":");return-1!==e.indexOf("local")?{url:n||"ws://localhost:9101",key:o[1]}:-1!==e.indexOf("staging")?{url:n||"wss://watchrtc-staging2.testrtc.com",key:o[1]}:-1!==e.indexOf("production")?{url:n||t,key:o[1]}:{url:n||t,key:o[0]}},n.validateConfig=function(e){return!(null==e?void 0:e.rtcApiKey)&&(null==e?void 0:e.debug)?(console.info.apply(console,t(n.logPrefix("error"),["config.rtcApiKey or config.rtcToken need to be provided."])),!1):!(!(null==e?void 0:e.rtcRoomId)||!(null==e?void 0:e.rtcPeerId))||((null==e?void 0:e.debug)&&console.info.apply(console,t(n.logPrefix("info"),["rtcRoomId or rtcPeerId is empty."])),!1)},n.countOfValidConnections=function(e){return Object.keys(e).filter((function(n){return e[n].validConnection})).length},n.isRoomIdOrPeerIdChanged=function(e,o){var i=!1;return o.rtcRoomId&&e.rtcRoomId&&e.rtcRoomId!==o.rtcRoomId&&(i=!0),o.rtcPeerId&&e.rtcPeerId&&e.rtcPeerId!==o.rtcPeerId&&(i=!0),i&&o.debug&&console.log.apply(console,t(n.logPrefix("info"),["maybeOpenWebsocketConnection. rtcRoomId or rtcPeerId has been changed",{old:{rtcRoomId:e.rtcRoomId,rtcPeerId:e.rtcPeerId},new:{rtcRoomId:o.rtcRoomId,rtcPeerId:o.rtcPeerId}}])),i}},412:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default="1.29.1"},85:function(e,n,t){"use strict";var o=this&&this.__spreadArrays||function(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var o=Array(e),i=0;for(n=0;n<t;n++)for(var r=arguments[n],a=0,c=r.length;a<c;a++,i++)o[i]=r[a];return o};Object.defineProperty(n,"__esModule",{value:!0});var i=t(593),r=t(354),a=function(){function e(n){this.connection=null,this.buffer=[],this.sendInterval=1,this.onClose=function(){},this.debug=!1,this.dataCollection=!0,e._instance?console.info.apply(console,o(i.logPrefix("info"),["WatchRTCSocket instance already created"])):(e._instance=this,this.debug=!!n.debug)}return e.prototype.connect=function(n,t,r){e._instance.connection&&e._instance.connection.close();var a=e._instance;e._instance.connection=new WebSocket(n,"2.0"),e._instance.connection.onopen=function(e){},e._instance.connection.onclose=function(e){},e._instance.connection.onmessage=function(n){var c;try{var s=JSON.parse(n.data);s.error?(null===(c=null==a?void 0:a.connection)||void 0===c||c.close(),a.connection=null,console.info.apply(console,o(i.logPrefix("error"),["\n"+s.error])),r(s.error)):(s.sendInterval&&(e._instance.sendInterval=s.sendInterval),t(s))}catch(e){console.info.apply(console,o(i.logPrefix("error"),[{err:e.stack}])),r(e.message)}},e._instance.connection.onerror=function(e){console.info.apply(console,o(i.logPrefix("error"),["\n",e])),r(e)}},e.prototype.trace=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var a=Array.prototype.slice.call(n);if(a.push(Date.now()),a[1]instanceof RTCPeerConnection&&(a[1]=a[1].__rtcStatsId),e._instance.dataCollection)if(e._instance.connection){if(e._instance.connection.readyState===WebSocket.OPEN&&(e._instance.buffer.push(a),e._instance.buffer.length>=e._instance.sendInterval)){var c=JSON.stringify(e._instance.buffer),s=r.compressToEncodedURIComponent(c);e._instance.debug&&(console.log.apply(console,o(i.logPrefix("info"),["lines: "+c.length])),console.log.apply(console,o(i.logPrefix("info"),["compressedMessage: "+s.length]))),e._instance.buffer=[],e._instance.connection.send(s)}}else{if(e._instance.buffer.length>1e3)return;e._instance.buffer.push(a)}},e.prototype.close=function(){e._instance.buffer=[],e._instance.connection&&(e._instance.connection.close(),e._instance.onClose(),e._instance.connection=null)},e.prototype.disableDataCollection=function(){e._instance.debug&&console.log.apply(console,o(i.logPrefix("info"),["Data collection disabled."])),e._instance.dataCollection=!1},e.prototype.enableDataCollection=function(){e._instance.debug&&console.log.apply(console,o(i.logPrefix("info"),["Data collection enabled."])),e._instance.dataCollection=!0},e.prototype.toggleDebug=function(n){e._instance.debug=n},e}();n.default=a},354:(e,n,t)=>{var o,i=function(){function e(e,n){if(!i[e]){i[e]={};for(var t=0;t<e.length;t++)i[e][e.charAt(t)]=t}return i[e][n]}var n=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",i={},r={compressToBase64:function(e){if(null==e)return"";var n=r._compress(e,6,(function(e){return t.charAt(e)}));switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case 3:return n+"="}},decompressFromBase64:function(n){return null==n?"":""==n?null:r._decompress(n.length,32,(function(o){return e(t,n.charAt(o))}))},compressToUTF16:function(e){return null==e?"":r._compress(e,15,(function(e){return n(e+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:r._decompress(e.length,16384,(function(n){return e.charCodeAt(n)-32}))},compressToUint8Array:function(e){for(var n=r.compress(e),t=new Uint8Array(2*n.length),o=0,i=n.length;i>o;o++){var a=n.charCodeAt(o);t[2*o]=a>>>8,t[2*o+1]=a%256}return t},decompressFromUint8Array:function(e){if(null==e)return r.decompress(e);for(var t=new Array(e.length/2),o=0,i=t.length;i>o;o++)t[o]=256*e[2*o]+e[2*o+1];var a=[];return t.forEach((function(e){a.push(n(e))})),r.decompress(a.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":r._compress(e,6,(function(e){return o.charAt(e)}))},decompressFromEncodedURIComponent:function(n){return null==n?"":""==n?null:(n=n.replace(/ /g,"+"),r._decompress(n.length,32,(function(t){return e(o,n.charAt(t))})))},compress:function(e){return r._compress(e,16,(function(e){return n(e)}))},_compress:function(e,n,t){if(null==e)return"";var o,i,r,a={},c={},s="",l="",d="",u=2,f=3,p=2,g=[],v=0,h=0;for(r=0;r<e.length;r+=1)if(s=e.charAt(r),Object.prototype.hasOwnProperty.call(a,s)||(a[s]=f++,c[s]=!0),l=d+s,Object.prototype.hasOwnProperty.call(a,l))d=l;else{if(Object.prototype.hasOwnProperty.call(c,d)){if(d.charCodeAt(0)<256){for(o=0;p>o;o++)v<<=1,h==n-1?(h=0,g.push(t(v)),v=0):h++;for(i=d.charCodeAt(0),o=0;8>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}else{for(i=1,o=0;p>o;o++)v=v<<1|i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i=0;for(i=d.charCodeAt(0),o=0;16>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}0==--u&&(u=Math.pow(2,p),p++),delete c[d]}else for(i=a[d],o=0;p>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1;0==--u&&(u=Math.pow(2,p),p++),a[l]=f++,d=String(s)}if(""!==d){if(Object.prototype.hasOwnProperty.call(c,d)){if(d.charCodeAt(0)<256){for(o=0;p>o;o++)v<<=1,h==n-1?(h=0,g.push(t(v)),v=0):h++;for(i=d.charCodeAt(0),o=0;8>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}else{for(i=1,o=0;p>o;o++)v=v<<1|i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i=0;for(i=d.charCodeAt(0),o=0;16>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1}0==--u&&(u=Math.pow(2,p),p++),delete c[d]}else for(i=a[d],o=0;p>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1;0==--u&&(u=Math.pow(2,p),p++)}for(i=2,o=0;p>o;o++)v=v<<1|1&i,h==n-1?(h=0,g.push(t(v)),v=0):h++,i>>=1;for(;;){if(v<<=1,h==n-1){g.push(t(v));break}h++}return g.join("")},decompress:function(e){return null==e?"":""==e?null:r._decompress(e.length,32768,(function(n){return e.charCodeAt(n)}))},_decompress:function(e,t,o){var i,r,a,c,s,l,d,u=[],f=4,p=4,g=3,v="",h=[],m={val:o(0),position:t,index:1};for(i=0;3>i;i+=1)u[i]=i;for(a=0,s=Math.pow(2,2),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;switch(a){case 0:for(a=0,s=Math.pow(2,8),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;d=n(a);break;case 1:for(a=0,s=Math.pow(2,16),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;d=n(a);break;case 2:return""}for(u[3]=d,r=d,h.push(d);;){if(m.index>e)return"";for(a=0,s=Math.pow(2,g),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;switch(d=a){case 0:for(a=0,s=Math.pow(2,8),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;u[p++]=n(a),d=p-1,f--;break;case 1:for(a=0,s=Math.pow(2,16),l=1;l!=s;)c=m.val&m.position,m.position>>=1,0==m.position&&(m.position=t,m.val=o(m.index++)),a|=(c>0?1:0)*l,l<<=1;u[p++]=n(a),d=p-1,f--;break;case 2:return h.join("")}if(0==f&&(f=Math.pow(2,g),g++),u[d])v=u[d];else{if(d!==p)return null;v=r+r.charAt(0)}h.push(v),u[p++]=r+v.charAt(0),r=v,0==--f&&(f=Math.pow(2,g),g++)}}};return r}();void 0===(o=function(){return i}.call(n,t,n,e))||(e.exports=o)}},n={},function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{}};return e[o].call(i.exports,i,i.exports,t),i.exports}(607)).default;var e,n}));
//# sourceMappingURL=index.js.map

@@ -7,2 +7,6 @@ export interface RTCPeerConnectionInformation {

}
export interface IWatchrtcIdentifiers {
rtcRoomId: string | undefined;
rtcPeerId: string | undefined;
}
export interface IWatchRTCConfiguration {

@@ -9,0 +13,0 @@ /** Watchrtc api key */

@@ -8,3 +8,3 @@ import { IWatchRTCConfiguration } from "./interfaces";

export declare const initSDK: (watchrtc: IWatchRTCConfiguration, prefixesToWrap: string[]) => void;
export declare const setConfig: (watchrtc: IWatchRTCConfiguration) => void;
export declare const setConfig: (newWatchrtcConfig: IWatchRTCConfiguration) => void;
/**

@@ -11,0 +11,0 @@ * Add tags for peer session

@@ -21,102 +21,141 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.enableDataCollection = exports.disableDataCollection = exports.addTags = exports.setConfig = exports.initSDK = void 0;
exports.setUserRating = exports.initSDK = void 0;
var watchrtcsocket_1 = require("./watchrtcsocket");
var version_1 = require("./version");
var utils_1 = require("./utils");
var version_1 = require("./version");
var standardGetstats = true;
var isFirefox = !!window.mozRTCPeerConnection;
var isEdge = !!window.RTCIceGatherer;
var isSafari = !isFirefox && window.RTCPeerConnection && !window.navigator.webkitGetUserMedia;
// Data structure for RTCPeerConnection related stuff we need
var openChannels = {};
var watchrtcConfig = null;
var socket = null;
var trace;
var lastConnectionOpen = 0; // so we know when was the last active connection seen
var getStatsInterval;
var tryingToConnectSocket = false;
var maybeOpenWebsocketConnection = function () {
var connectionCount = utils_1.countOfValidConnections(openChannels);
if (connectionCount > 0 && !tryingToConnectSocket) {
tryingToConnectSocket = true;
var canConnect = utils_1.validateConfig(watchrtcConfig);
// not very critical, but for consistency with trace
var id_1 = Object.keys(openChannels)[connectionCount - 1];
if (canConnect) {
if (watchrtcConfig.rtcTags) {
if (!Array.isArray(watchrtcConfig.rtcTags)) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["config.rtcTags must be an array."]));
watchrtcConfig.rtcTags = undefined;
}
else if (watchrtcConfig.rtcTags.some(function (x) { return x.includes(","); })) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["To apply multiple tags please use an array and not comma separated values."]));
}
// transforms a maplike to an object. Mostly for getStats +
// JSON.parse(JSON.stringify())
var map2obj = function (m) {
if (!m.entries) {
return m;
}
var o = {};
m.forEach(function (v, k) {
o[k] = v;
});
return o;
};
// apply a delta compression to the stats report. Reduces size by ~90%.
// To reduce further, report keys could be compressed.
var deltaCompression = function (oldStats, newStats) {
oldStats = oldStats || {};
newStats = newStats || {};
newStats = JSON.parse(JSON.stringify(newStats));
Object.keys(newStats).forEach(function (id) {
var report = newStats[id];
delete report.id;
if (!oldStats[id]) {
return;
}
Object.keys(report).forEach(function (name) {
if (report[name] === oldStats[id][name]) {
delete newStats[id][name];
}
var useToken = !!watchrtcConfig.rtcToken;
var wsConnectionData = utils_1.getWSConnectionData(useToken ? watchrtcConfig.rtcToken : watchrtcConfig.rtcApiKey, watchrtcConfig.proxyUrl || watchrtcConfig.wsUrl);
lastConnectionOpen = Date.now();
socket === null || socket === void 0 ? void 0 : socket.connect(wsConnectionData.url + "?" + (useToken ? "token" : "apiKey") + "=" + wsConnectionData.key + "&timestamp=" + Date.now(), function (data) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Connection established. watchRTCConnectionId: " + data.connectionId + " sdkVersion:" + version_1.default]));
trace("watchrtc", id_1, __assign(__assign(__assign({}, watchrtcConfig), data), { sdkVersion: version_1.default }));
if (!isEdge) {
window.clearInterval(getStatsInterval);
getStatsInterval = window.setInterval(function () {
if (utils_1.countOfValidConnections(openChannels) === 0) {
// if we don't have any connection for 20 sec we can close the socket
if (lastConnectionOpen && lastConnectionOpen + 20000 < Date.now()) {
tryingToConnectSocket = false;
window.clearInterval(getStatsInterval);
socket === null || socket === void 0 ? void 0 : socket.close();
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Last connection closed. watchRTCConnectionId: " + data.connectionId + " sdkVersion: " + version_1.default]));
}
}
else {
lastConnectionOpen = Date.now();
Object.values(openChannels).forEach(function (pcInfo) {
if (pcInfo.pc.signalingState !== "closed") {
getStats(pcInfo);
}
});
}
}, data.interval);
}
}, function () {
tryingToConnectSocket = false;
lastConnectionOpen = 0;
});
if (Object.keys(report).length === 0) {
delete newStats[id];
}
else if (Object.keys(report).length === 1 && report.timestamp) {
delete newStats[id];
}
});
});
var timestamp = -Infinity;
Object.keys(newStats).forEach(function (id) {
var report = newStats[id];
if (report.timestamp > timestamp) {
timestamp = report.timestamp;
}
else {
tryingToConnectSocket = false;
});
Object.keys(newStats).forEach(function (id) {
var report = newStats[id];
if (report.timestamp === timestamp) {
report.timestamp = 0;
}
});
newStats.timestamp = timestamp;
return newStats;
};
var mangleChromeStats = function (pc, response) {
var standardReport = {};
var reports = response.result();
reports.forEach(function (report) {
var standardStats = {
id: report.id,
timestamp: report.timestamp.getTime(),
type: report.type,
};
report.names().forEach(function (name) {
standardStats[name] = report.stat(name);
});
standardReport[standardStats.id] = standardStats;
});
return standardReport;
};
var dumpStream = function (stream) {
return {
id: stream.id,
tracks: stream.getTracks().map(function (track) {
return {
id: track.id,
kind: track.kind,
label: track.label,
enabled: track.enabled,
muted: track.muted,
readyState: track.readyState,
};
}),
};
};
var getWSConnectionData = function (rtcApiKey, overriddenWsUrl) {
var localUrl = "ws://localhost:9101";
var stagingUrl = "wss://watchrtc-staging2.testrtc.com";
var productionUrl = "wss://watchrtc.testrtc.com";
var splitted = rtcApiKey.split(":");
if (rtcApiKey.indexOf("local") !== -1) {
return {
url: overriddenWsUrl || localUrl,
apiKey: splitted[1],
};
}
else if (rtcApiKey.indexOf("staging") !== -1) {
return {
url: overriddenWsUrl || stagingUrl,
apiKey: splitted[1],
};
}
else if (rtcApiKey.indexOf("production") !== -1) {
return {
url: overriddenWsUrl || productionUrl,
apiKey: splitted[1],
};
}
else {
return {
url: overriddenWsUrl || productionUrl,
apiKey: splitted[0],
};
}
};
var getStats = function (pcInfo) {
if (pcInfo) {
var id_2 = pcInfo.id, pc_1 = pcInfo.pc, prev_1 = pcInfo.prev;
if (standardGetstats || isFirefox || isSafari) {
pc_1.getStats(null).then(function (res) {
var now = utils_1.map2obj(res);
var base = JSON.parse(JSON.stringify(now)); // our new prev
var data = utils_1.deltaCompression(prev_1, now);
if ((data === null || data === void 0 ? void 0 : data.timestamp) !== null && (data === null || data === void 0 ? void 0 : data.timestamp) !== -Infinity) {
trace("getstats", id_2, utils_1.deltaCompression(pcInfo.prev, now));
}
pcInfo.prev = base;
});
}
else {
pc_1.getStats(function (res) {
var now = utils_1.mangleChromeStats(pc_1, res);
var base = JSON.parse(JSON.stringify(now)); // our new prev
var data = utils_1.deltaCompression(prev_1, now);
if ((data === null || data === void 0 ? void 0 : data.timestamp) !== null && (data === null || data === void 0 ? void 0 : data.timestamp) !== -Infinity) {
trace("getstats", id_2, utils_1.deltaCompression(prev_1, now));
}
pcInfo.prev = base;
});
}
var validateConfig = function (config) {
if (!config) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["config is required."]));
return false;
}
else if (!config.rtcApiKey) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["config.rtcApiKey is required."]));
return false;
}
else if (!config.rtcRoomId) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["config.rtcRoomId is required."]));
return false;
}
else if (!config.rtcPeerId) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["config.rtcPeerId is required."]));
return false;
}
return true;
};
/**
* Initialize SDK.
* Initialize SDK. Can be called multiple times but it will be initialized only at the first time.
* @param watchrtc

@@ -134,4 +173,89 @@ * @param prefixesToWrap

var peerconnectioncounter = 0;
socket = new watchrtcsocket_1.default({ debug: watchrtc === null || watchrtc === void 0 ? void 0 : watchrtc.debug });
trace = socket.trace;
var watchrtcConfig = null;
var lastConnectionOpen = 0; // so we know when was the last active connection seen
var getStatsInterval;
var tryingToConnectSocket = false;
var socket = new watchrtcsocket_1.default();
var trace = socket.trace;
// Data structure for RTCPeerConnection related stuff we need
var openChannels = {};
var isFirefox = !!window.mozRTCPeerConnection;
var isEdge = !!window.RTCIceGatherer;
var isSafari = !isFirefox && window.RTCPeerConnection && !window.navigator.webkitGetUserMedia;
var countOfValidConnections = function () {
return Object.keys(openChannels).filter(function (id) { return openChannels[id].validConnection; }).length;
};
var maybeOpenWebsocketConnection = function () {
var connectionCount = countOfValidConnections();
if (connectionCount > 0 && !tryingToConnectSocket) {
tryingToConnectSocket = true;
var canConnect = validateConfig(watchrtcConfig);
// not very critical, but for consistency with trace
var id_1 = Object.keys(openChannels)[connectionCount - 1];
if (canConnect) {
if (watchrtcConfig.rtcTags && !Array.isArray(watchrtcConfig.rtcTags)) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["config.rtcTags must be an array."]));
watchrtcConfig.rtcTags = undefined;
}
var wsConnectionData = getWSConnectionData(watchrtcConfig.rtcApiKey, watchrtcConfig.proxyUrl || watchrtcConfig.wsUrl);
lastConnectionOpen = Date.now();
socket.connect(wsConnectionData.url + "?apiKey=" + wsConnectionData.apiKey + "&timestamp=" + Date.now(), function (data) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Connection established. watchRTCConnectionId: " + data.connectionId + " sdkVersion:" + version_1.default]));
trace("watchrtc", id_1, __assign(__assign(__assign({}, watchrtcConfig), data), { sdkVersion: version_1.default }));
if (!isEdge) {
window.clearInterval(getStatsInterval);
getStatsInterval = window.setInterval(function () {
if (countOfValidConnections() === 0) {
// if we don't have any connection for 20 sec we can close the socket
if (lastConnectionOpen && lastConnectionOpen + 20000 < Date.now()) {
tryingToConnectSocket = false;
window.clearInterval(getStatsInterval);
socket.close();
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Last connection closed. watchRTCConnectionId: " + data.connectionId + " sdkVersion: " + version_1.default]));
}
}
else {
lastConnectionOpen = Date.now();
Object.values(openChannels).forEach(function (pcInfo) {
if (pcInfo.pc.signalingState !== "closed") {
getStats(pcInfo);
}
});
}
}, data.interval);
}
}, function () {
tryingToConnectSocket = false;
lastConnectionOpen = 0;
});
}
}
};
var getStats = function (pcInfo) {
if (pcInfo) {
var id_2 = pcInfo.id, pc_1 = pcInfo.pc, prev_1 = pcInfo.prev;
if (standardGetstats || isFirefox || isSafari) {
pc_1.getStats(null).then(function (res) {
var now = map2obj(res);
var base = JSON.parse(JSON.stringify(now)); // our new prev
var data = deltaCompression(prev_1, now);
if ((data === null || data === void 0 ? void 0 : data.timestamp) !== null && (data === null || data === void 0 ? void 0 : data.timestamp) !== -Infinity) {
trace("getstats", id_2, deltaCompression(pcInfo.prev, now));
}
pcInfo.prev = base;
});
}
else {
pc_1.getStats(function (res) {
var now = mangleChromeStats(pc_1, res);
var base = JSON.parse(JSON.stringify(now)); // our new prev
var data = deltaCompression(prev_1, now);
if ((data === null || data === void 0 ? void 0 : data.timestamp) !== null && (data === null || data === void 0 ? void 0 : data.timestamp) !== -Infinity) {
trace("getstats", id_2, deltaCompression(prev_1, now));
}
pcInfo.prev = base;
});
}
}
};
prefixesToWrap.forEach(function (prefix) {

@@ -147,9 +271,2 @@ if (!window[prefix + "RTCPeerConnection"]) {

var peerconnection = function (config, constraints) {
watchrtcConfig = __assign(__assign({}, watchrtc), config === null || config === void 0 ? void 0 : config.watchrtc);
if (watchrtcConfig === null || watchrtcConfig === void 0 ? void 0 : watchrtcConfig.debug) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["new RTCPeerConnection called.", {
config: config,
constraints: constraints,
}]));
}
var pc = new origPeerConnection(config, constraints);

@@ -163,2 +280,3 @@ var id = "PC_" + peerconnectioncounter++;

};
watchrtcConfig = watchrtc || (config === null || config === void 0 ? void 0 : config.watchrtc);
if (!config) {

@@ -247,3 +365,3 @@ config = { nullConfig: true };

};
["createDataChannel"].forEach(function (method) {
["createDataChannel", "close"].forEach(function (method) {
var nativeMethod = origPeerConnection.prototype[method];

@@ -253,11 +371,2 @@ if (nativeMethod) {

trace(method, this.__rtcStatsId, arguments);
return nativeMethod.apply(this, arguments);
};
}
});
["close"].forEach(function (method) {
var nativeMethod = origPeerConnection.prototype[method];
if (nativeMethod) {
origPeerConnection.prototype[method] = function () {
trace(method, this.__rtcStatsId, arguments);
delete openChannels[this.__rtcStatsId];

@@ -397,3 +506,3 @@ return nativeMethod.apply(this, arguments);

// to acquire the cam (in chrome)
trace("getUserMediaOnSuccess", null, utils_1.dumpStream(stream));
trace("getUserMediaOnSuccess", null, dumpStream(stream));
if (cb) {

@@ -416,3 +525,3 @@ cb(stream);

return origGetUserMedia_1.apply(navigator.mediaDevices, arguments).then(function (stream) {
trace("navigator.mediaDevices.getUserMediaOnSuccess", null, utils_1.dumpStream(stream));
trace("navigator.mediaDevices.getUserMediaOnSuccess", null, dumpStream(stream));
return stream;

@@ -432,3 +541,3 @@ }, function (err) {

return origGetDisplayMedia_1.apply(navigator.mediaDevices, arguments).then(function (stream) {
trace("navigator.mediaDevices.getDisplayMediaOnSuccess", null, utils_1.dumpStream(stream));
trace("navigator.mediaDevices.getDisplayMediaOnSuccess", null, dumpStream(stream));
return stream;

@@ -443,54 +552,13 @@ }, function (err) {

};
exports.setConfig = function (watchrtc) {
var initialized = window.watchRTCInitialized;
if (!initialized) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["SDK is not initialized. Use 'init' function fisrt."]));
return;
}
if ((watchrtcConfig === null || watchrtcConfig === void 0 ? void 0 : watchrtcConfig.rtcRoomId) && (watchrtcConfig === null || watchrtcConfig === void 0 ? void 0 : watchrtcConfig.rtcPeerId)) {
if (watchrtcConfig === null || watchrtcConfig === void 0 ? void 0 : watchrtcConfig.debug) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Websocket started to send data. 'setConfig' function ignored"]));
exports.setUserRating = function (rate, rateReason) {
var _a;
if (rate) {
if (watchrtcsocket_1.default._instance &&
((_a = watchrtcsocket_1.default._instance.connection) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
watchrtcsocket_1.default._instance.trace("userRating", "", { rate: rate, rateReason: rateReason });
}
return;
else {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["Please set user rating before websocket connection is closed."]));
}
}
if (!watchrtc.rtcRoomId || !watchrtc.rtcPeerId) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["rtcRoomId and rtcPeerId are required"]));
return;
}
watchrtcConfig = __assign(__assign({}, watchrtcConfig), watchrtc);
maybeOpenWebsocketConnection();
};
/**
* Add tags for peer session
* @param rtcTags[]
*/
exports.addTags = function (
/** ["tag1", "tag2", "tag3"] */
rtcTags) {
var initialized = window.watchRTCInitialized;
if (!initialized) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["SDK is not initialized. Use 'init' function fisrt."]));
return;
}
if (!rtcTags || !Array.isArray(rtcTags)) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["addTags excepts only array of strings"]));
return;
}
trace("addRtcTags", null, { rtcTags: rtcTags });
};
exports.disableDataCollection = function () {
var initialized = window.watchRTCInitialized;
if (!initialized) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["SDK is not initialized. Use 'init' function fisrt."]));
return;
}
socket === null || socket === void 0 ? void 0 : socket.disableDataCollection();
};
exports.enableDataCollection = function () {
var initialized = window.watchRTCInitialized;
if (!initialized) {
console.info.apply(console, __spreadArrays(utils_1.logPrefix("error"), ["SDK is not initialized. Use 'init' function fisrt."]));
return;
}
socket === null || socket === void 0 ? void 0 : socket.enableDataCollection();
};

@@ -1,2 +0,2 @@

import { IWatchRTCConfiguration, RTCPeerConnectionInformation } from "./interfaces";
import { IWatchRTCConfiguration, IWatchrtcIdentifiers, RTCPeerConnectionInformation } from "./interfaces";
export declare const logPrefix: (type?: "error" | "info") => string[];

@@ -18,1 +18,2 @@ export declare const deltaCompression: (oldStats: any, newStats: any) => any;

}) => number;
export declare const isRoomIdOrPeerIdChanged: (watchrtcIdentifiers: IWatchrtcIdentifiers, watchrtcConfig: IWatchRTCConfiguration) => boolean;
"use strict";
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.countOfValidConnections = exports.validateConfig = exports.getWSConnectionData = exports.dumpStream = exports.map2obj = exports.mangleChromeStats = exports.deltaCompression = exports.logPrefix = void 0;
exports.logPrefix = void 0;
exports.logPrefix = function (type) {

@@ -24,130 +17,1 @@ if (type === void 0) { type = "info"; }

};
// apply a delta compression to the stats report. Reduces size by ~90%.
// To reduce further, report keys could be compressed.
exports.deltaCompression = function (oldStats, newStats) {
oldStats = oldStats || {};
newStats = newStats || {};
newStats = JSON.parse(JSON.stringify(newStats));
Object.keys(newStats).forEach(function (id) {
var report = newStats[id];
delete report.id;
if (!oldStats[id]) {
return;
}
Object.keys(report).forEach(function (name) {
if (report[name] === oldStats[id][name]) {
delete newStats[id][name];
}
if (Object.keys(report).length === 0) {
delete newStats[id];
}
else if (Object.keys(report).length === 1 && report.timestamp) {
delete newStats[id];
}
});
});
var timestamp = -Infinity;
Object.keys(newStats).forEach(function (id) {
var report = newStats[id];
if (report.timestamp > timestamp) {
timestamp = report.timestamp;
}
});
Object.keys(newStats).forEach(function (id) {
var report = newStats[id];
if (report.timestamp === timestamp) {
report.timestamp = 0;
}
});
newStats.timestamp = timestamp;
return newStats;
};
exports.mangleChromeStats = function (pc, response) {
var standardReport = {};
var reports = response.result();
reports.forEach(function (report) {
var standardStats = {
id: report.id,
timestamp: report.timestamp.getTime(),
type: report.type,
};
report.names().forEach(function (name) {
standardStats[name] = report.stat(name);
});
standardReport[standardStats.id] = standardStats;
});
return standardReport;
};
// transforms a maplike to an object. Mostly for getStats +
// JSON.parse(JSON.stringify())
exports.map2obj = function (m) {
if (!m.entries) {
return m;
}
var o = {};
m.forEach(function (v, k) {
o[k] = v;
});
return o;
};
exports.dumpStream = function (stream) {
return {
id: stream.id,
tracks: stream.getTracks().map(function (track) {
return {
id: track.id,
kind: track.kind,
label: track.label,
enabled: track.enabled,
muted: track.muted,
readyState: track.readyState,
};
}),
};
};
exports.getWSConnectionData = function (key, overriddenWsUrl) {
var localUrl = "ws://localhost:9101";
var stagingUrl = "wss://watchrtc-staging2.testrtc.com";
var productionUrl = "wss://watchrtc.testrtc.com";
var splitted = key.split(":");
if (key.indexOf("local") !== -1) {
return {
url: overriddenWsUrl || localUrl,
key: splitted[1],
};
}
else if (key.indexOf("staging") !== -1) {
return {
url: overriddenWsUrl || stagingUrl,
key: splitted[1],
};
}
else if (key.indexOf("production") !== -1) {
return {
url: overriddenWsUrl || productionUrl,
key: splitted[1],
};
}
else {
return {
url: overriddenWsUrl || productionUrl,
key: splitted[0],
};
}
};
exports.validateConfig = function (config) {
if (!(config === null || config === void 0 ? void 0 : config.rtcApiKey)) {
if (config === null || config === void 0 ? void 0 : config.debug) {
console.info.apply(console, __spreadArrays(exports.logPrefix("error"), ["config.rtcApiKey or config.rtcToken need to be provided."]));
return false;
}
}
if (!(config === null || config === void 0 ? void 0 : config.rtcRoomId) || !(config === null || config === void 0 ? void 0 : config.rtcPeerId)) {
if (config === null || config === void 0 ? void 0 : config.debug) {
console.info.apply(console, __spreadArrays(exports.logPrefix("error"), ["rtcRoomId and rtcPeerId need to be provided."]));
}
return false;
}
return true;
};
exports.countOfValidConnections = function (openChannels) { return Object.keys(openChannels).filter(function (id) { return openChannels[id].validConnection; }).length; };

@@ -1,2 +0,2 @@

declare const _default: "1.29.0";
declare const _default: "1.29.1";
export default _default;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = "1.29.0";
exports.default = "1.28.3";

@@ -18,3 +18,4 @@ interface IWatchRTCSocketOptions {

enableDataCollection(): void;
toggleDebug(debug: boolean): void;
}
export {};

@@ -11,6 +11,5 @@ "use strict";

var utils_1 = require("./utils");
var LZString = require("./lz-string");
var PROTOCOL_VERSION = "2.0";
var WatchRTCSocket = /** @class */ (function () {
function WatchRTCSocket(options) {
function WatchRTCSocket() {
this.connection = null;

@@ -20,4 +19,2 @@ this.buffer = [];

this.onClose = function () { };
this.debug = false;
this.dataCollection = true;
if (WatchRTCSocket._instance) {

@@ -28,3 +25,2 @@ console.info.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["WatchRTCSocket instance already created"]));

WatchRTCSocket._instance = this;
this.debug = !!options.debug;
}

@@ -36,6 +32,6 @@ }

}
var _this = WatchRTCSocket._instance;
WatchRTCSocket._instance.connection = new WebSocket(url, PROTOCOL_VERSION);
WatchRTCSocket._instance.connection.onopen = function (_e) { };
WatchRTCSocket._instance.connection.onclose = function (_e) { };
var _this = WatchRTCSocket._instance;
WatchRTCSocket._instance.connection.onmessage = function (e) {

@@ -78,5 +74,2 @@ var _a;

}
if (!WatchRTCSocket._instance.dataCollection) {
return;
}
if (!WatchRTCSocket._instance.connection) {

@@ -93,9 +86,4 @@ if (WatchRTCSocket._instance.buffer.length > 1000) {

var lines = JSON.stringify(WatchRTCSocket._instance.buffer);
var compressedMessage = LZString.compressToEncodedURIComponent(lines);
if (WatchRTCSocket._instance.debug) {
console.log.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["lines: " + lines.length]));
console.log.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["compressedMessage: " + compressedMessage.length]));
}
WatchRTCSocket._instance.buffer = [];
WatchRTCSocket._instance.connection.send(compressedMessage);
WatchRTCSocket._instance.connection.send(lines);
}

@@ -112,16 +100,4 @@ }

};
WatchRTCSocket.prototype.disableDataCollection = function () {
if (WatchRTCSocket._instance.debug) {
console.log.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Data collection disabled."]));
}
WatchRTCSocket._instance.dataCollection = false;
};
WatchRTCSocket.prototype.enableDataCollection = function () {
if (WatchRTCSocket._instance.debug) {
console.log.apply(console, __spreadArrays(utils_1.logPrefix("info"), ["Data collection enabled."]));
}
WatchRTCSocket._instance.dataCollection = true;
};
return WatchRTCSocket;
}());
exports.default = WatchRTCSocket;
{
"name": "@testrtc/watchrtc-sdk",
"version": "1.29.0",
"version": "1.29.1",
"description": "gather WebRTC API traces and statistics",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc