@testrtc/watchrtc-sdk
Version:
Monitor your WebRTC application by collecting WebRTC statistics from end users
1 lines • 312 kB
JavaScript
!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.watchRTC=a():e.watchRTC=a()}(this,(function(){return(()=>{var e={288:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var n=1e3,r=function(){function e(){this.backoff_delay=n,this.exponentialRetries=0,this.numRetries=0,this.timerId=null,this.waiting=!1}return Object.defineProperty(e.prototype,"delayMs",{get:function(){return this.backoff_delay},enumerable:!1,configurable:!0}),e.prototype.reset=function(){this.backoff_delay=n,this.exponentialRetries=0,this.numRetries=0,this.unWait(!0)},e.prototype.next=function(){var e;return this.exponentialRetries=this.exponentialRetries?2*this.exponentialRetries:1,this.backoff_delay=Math.min(128e3,(e=this.exponentialRetries,n*e+Math.floor(3e3*Math.random()))),this.numRetries++,this.backoff_delay},Object.defineProperty(e.prototype,"attempts",{get:function(){return this.numRetries},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"MAX_RETRIES_FOR_FIRST_CONNECTION",{get:function(){return 15},enumerable:!1,configurable:!0}),e.prototype.wait=function(e){this.waiting=!0,this.timerId=e},e.prototype.unWait=function(e){this.waiting=!1,this.timerId&&e&&clearTimeout(this.timerId),this.timerId=null},Object.defineProperty(e.prototype,"isWaiting",{get:function(){return this.waiting},enumerable:!1,configurable:!0}),e}();a.default=r},710:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.userAgent=a.userAgentData=void 0,a.userAgentData="undefined"!=typeof window&&window.navigator&&"userAgentData"in window.navigator?window.navigator.userAgentData:null,a.userAgent="undefined"!=typeof window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:null},304:function(e,a){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var a,n=1,r=arguments.length;n<r;n++)for(var o in a=arguments[n])Object.prototype.hasOwnProperty.call(a,o)&&(e[o]=a[o]);return e},n.apply(this,arguments)},r=this&&this.__rest||function(e,a){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&a.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)a.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};Object.defineProperty(a,"__esModule",{value:!0}),a.extractSuccessCandidatePairsIPs=a.getSuccessCandidatePairIPs=void 0;var o=function(e,a,n){var r=a[n+"CandidateId"];if(r){var o=e[r];if(!o)for(var i=0,d=Object.entries(e);i<d.length;i++){var t=d[i],c=t[0],g=t[1];c.includes(r)&&(o=g)}return o}},i=function(e){var a,n,r,o,i,d,t=(null===(a=null==e?void 0:e.localCandidate)||void 0===a?void 0:a.ip)||(null===(n=null==e?void 0:e.localCandidate)||void 0===n?void 0:n.address)||(null===(r=null==e?void 0:e.localCandidate)||void 0===r?void 0:r.ipAddress),c=(null===(o=null==e?void 0:e.remoteCandidate)||void 0===o?void 0:o.ip)||(null===(i=null==e?void 0:e.remoteCandidate)||void 0===i?void 0:i.address)||(null===(d=null==e?void 0:e.remoteCandidate)||void 0===d?void 0:d.ipAddress);return t&&c?{local:t,remote:c}:null};a.getSuccessCandidatePairIPs=function(e){var a=e.selectedCandidatePairId,n=r(e,["selectedCandidatePairId"]);if(a){var o=n[a];if(c=i(o))return c}else for(var d=0,t=Object.values(n);d<t.length;d++){var c;if(("succeeded"===(o=t[d]).state||(null==o?void 0:o.selected))&&(c=i(o))&&(o.selected||o.activeCandidatePair))return c}return null},a.extractSuccessCandidatePairsIPs=function(e){if(!e)return null;var r=function(e){for(var a=[],n=0,r=Object.entries(e);n<r.length;n++){var o=r[n],i=o[0],d=o[1];"candidate-pair"===(null==d?void 0:d.type)&&a.push(i)}return a}(e);if(!r.length)return null;for(var i={},d=0,t=r;d<t.length;d++){var c=t[d],g=e[c];if(g){var m=o(e,g,"local"),s=o(e,g,"remote");i[c]||(i[c]={}),i[c]=n(n({},g),{localCandidate:m,remoteCandidate:s})}}var l=function(e){for(var a=0,n=Object.values(e);a<n.length;a++){var r=n[a].selectedCandidatePairId;if(r)return r}return null}(e);return l&&(i.selectedCandidatePairId=l),(0,a.getSuccessCandidatePairIPs)(i)}},408:function(e,a,n){"use strict";var r=this&&this.__awaiter||function(e,a,n,r){return new(n||(n=Promise))((function(o,i){function d(e){try{c(r.next(e))}catch(e){i(e)}}function t(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var a;e.done?o(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(d,t)}c((r=r.apply(e,a||[])).next())}))},o=this&&this.__generator||function(e,a){var n,r,o,i,d={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:t(0),throw:t(1),return:t(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function t(t){return function(c){return function(t){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,t[0]&&(d=0)),d;)try{if(n=1,r&&(o=2&t[0]?r.return:t[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,t[1])).done)return o;switch(r=0,o&&(t=[2&t[0],o.value]),t[0]){case 0:case 1:o=t;break;case 4:return d.label++,{value:t[1],done:!1};case 5:d.label++,r=t[1],t=[0];continue;case 7:t=d.ops.pop(),d.trys.pop();continue;default:if(!((o=(o=d.trys).length>0&&o[o.length-1])||6!==t[0]&&2!==t[0])){d=0;continue}if(3===t[0]&&(!o||t[1]>o[0]&&t[1]<o[3])){d.label=t[1];break}if(6===t[0]&&d.label<o[1]){d.label=o[1],o=t;break}if(o&&d.label<o[2]){d.label=o[2],d.ops.push(t);break}o[2]&&d.ops.pop(),d.trys.pop();continue}t=a.call(e,d)}catch(e){t=[6,e],r=0}finally{n=o=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([t,c])}}};Object.defineProperty(a,"__esModule",{value:!0}),a.detectAdvancedPlatform=void 0;var i=n(710),d=/^mozilla\/\d\.\d\W/,t=/(\w+)\/(\d+\.\d+(?:\.\d+)?(?:\.\d+)?)/g,c=/^(cri|gec|edg)/,g=Array.isArray,m=i.userAgentData,s=i.userAgent,l={iOS:/iphone/,iPadOS:/ipad|macintosh/,Android:/android/},u={Windows:/win/,macOS:/macintosh/,Linux:/linux/};a.detectAdvancedPlatform=function(e,a){return r(void 0,void 0,void 0,(function(){var n,r,i,p,v,f,h,x,b,y,k,w,S,C,T,q,I,_,R,P,L,z;return o(this,(function(o){switch(o.label){case 0:return s="string"==typeof e?e:s,(m="string"==typeof a?a:m)?[4,m.getHighEntropyValues(["architecture","bitness","brands","mobile","model","platform","platformVersion","uaFullVersion","fullVersionList","wow64"])]:[3,2];case 1:return n=o.sent(),r=n.fullVersionList.find((function(e){var a;return"object"==typeof e&&e.brand&&"Chromium"!==e.brand&&(null===(a=e.brand)||void 0===a||a.includes("Brand"),!0)})),i=r&&r.brand?r.brand.replace("Google ","").replace("Microsoft ",""):n.fullVersionList&&Array.isArray(n.fullVersionList)&&n.fullVersionList.length>0&&n.fullVersionList[0].brand||"unknown",p=n.uaFullVersion,v=n.platform,P=n.platformVersion,f=n.bitness,"Windows"===v&&(h=parseInt(P.split(".")[0]),P=h>=13?11:h>0?10:8),"x86"===n.architecture?"64"===n.bitness?f="x86_64":"32"===n.bitness&&(f="x86"):"arm"===n.architecture?"64"===n.bitness?f="ARM64":"32"===n.bitness&&(f="ARM32"):f=n.architecture+" "+n.bitness,[2,{name:i,version:p,majorVersion:p.split(".")[0],nameMajorVersion:"".concat(i,"/").concat(p.split(".")[0]),os:v,osVersion:P,nameVersion:"".concat(i,"/").concat(p),nameOs:"".concat(i,"/").concat(v),nameVersionOs:"".concat(i,"/").concat(p,"/").concat(v),architecture:f,mobile:n.mobile,model:n.model}];case 2:if(s)return x=s.toLowerCase().replace(d,""),b=Object.keys(l).find((function(e){return l[e].test(x)&&window.navigator.maxTouchPoints>=1})),y=Object.keys(u).find((function(e){return u[e].test(x)})),k=b||y,w=x.match(t),S=/version\/(\d+(\.\d+)*)/,C=x.match(S),T=g(C)?C[1]:null,q=w&&(w.length>2&&c.test(w[1])?1:0),I=w&&w[w.length-1-(q||0)].split("/"),_=I&&I[0],R=T||I&&I[1],P=R,L=x.match(/os (\d+_\d+(_\d+)?)/),"crios"===_&&(_="Chrome",P=L?L[1].replace(/_/g,"."):P),x.includes("edg/")&&(z=x.match(/edg\/(\d+\.\d+)/),_="Edge",R=z&&z[1]),[2,{name:_=(O=_||"").charAt(0).toUpperCase()+O.slice(1),version:R,majorVersion:null==R?void 0:R.split(".")[0],nameMajorVersion:"".concat(_,"/").concat(null==R?void 0:R.split(".")[0]),os:k,osVersion:P,nameVersion:"".concat(_,"/").concat(R),nameOs:"".concat(_,"/").concat(k),nameVersionOs:"".concat(_,"/").concat(R,"/").concat(k)}];o.label=3;case 3:return[2]}var O}))}))}},819:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var n=function(){function e(){this.devices=[]}return e.prototype.setDevices=function(e){if(0!==this.devices.length){var a=function(e,a){function n(e){return e.reduce((function(e,a){return e[a.deviceId]=a,e}),{})}var r=n(a),o=n(e);return{addedDevices:e.filter((function(e){return!r[e.deviceId]})),removedDevices:a.filter((function(e){return!o[e.deviceId]}))}}(e,this.devices);return this.devices=e,a}this.devices=e},e}();a.default=n},607:(e,a,n)=>{"use strict";a.ap=a.Tk=a.Vk=a.b1=a.zP=a.$j=a.dL=a.aM=a.vP=a.xt=a.Zt=a.UN=a.IO=a.zl=a.v6=a.S1=void 0,n(699);var r=n(231),o=n(593),i={rtcRoomId:{maxLength:128},rtcPeerId:{maxLength:128},keys:{maxLength:32},keysValue:{maxLength:512},comment:{maxLength:2e3},event:{maxLength:128},name:{maxLength:128},displayName:{maxLength:128},roomId:{maxLength:128},peerId:{maxLength:128}},d=function(e,a,n){var d=i[a],t=d.propertyName||a;try{return(0,o.sanitize)(e,{propertyName:t,maxLength:d.maxLength}),!0}catch(a){var c=n?" in ".concat(n):"";return(0,r.sdkLog)("error","rtcRoomId"===t||"rtcPeerId"===t?"connection ignored - invalid ".concat(t," in watchRTCconfig ").concat(e):"Input validation error: ".concat(t).concat(c," value: ").concat(a.message),{propertyName:t,value:e,error:a.message,context:n}),!1}},t=function(e){for(var a={},n=!1,r=0,o=Object.entries(e);r<o.length;r++){var i=o[r],t=i[0],c=i[1],g=d(t,"keys"),m="string"!=typeof c||d(c,"keysValue");g&&m?a[t]=c:n=!0}return{isValid:!n,validKeys:a}},c=function(e){if(e.rtcRoomId&&!d(e.rtcRoomId,"rtcRoomId"))return!1;if(e.rtcPeerId&&!d(e.rtcPeerId,"rtcPeerId"))return!1;if(e.keys){var a=t(e.keys);a.isValid||((0,r.sdkLog)("info","Invalid keys detected - filtering out invalid keys but continuing connection"),e.keys=a.validKeys)}return!0};a.S1=function(e,a){e?c(e)&&(0,r.initSDK)(e,[""],a):(0,r.initSDK)({},[""],a)},a.v6=function(e){c(e)&&(0,r.setConfig)(e)},a.zl=function(e){},a.IO=function(e,a){a&&!d(a,"comment")&&((0,r.sdkLog)("info","Invalid comment detected - ignoring comment but sending rating"),a=void 0),(0,r.setUserRating)(e,a)},a.UN=function(e){var a=t(e);a.isValid||((0,r.sdkLog)("info","Invalid keys detected - filtering out invalid keys but continuing operation"),e=a.validKeys),(0,r.addKeys)(e)},a.Zt=function(){(0,r.disableDataCollection)()},a.xt=function(){(0,r.enableDataCollection)()},a.vP=function(e){if(!e.name||d(e.name,"event","addEvent")){if(e.parameters&&"object"==typeof e.parameters){for(var a={},n=!1,o=0,i=Object.entries(e.parameters);o<i.length;o++){var t=i[o],c=t[0],g=t[1],m=d(c,"keys"),s="string"!=typeof g||d(g,"event");m&&s?a[c]=g:n=!0}n&&((0,r.sdkLog)("info","Invalid event parameters detected - filtering out invalid parameters but continuing operation"),e.parameters=a)}(0,r.addEvent)(e)}},a.aM=function(e,a){d(e,"name","mapStream")&&d(a,"name","mapStream")&&(0,r.mapStream)(e,a)},a.dL=function(e,a){d(e,"name","mapTrack")&&d(a,"name","mapTrack")&&(0,r.mapTrack)(e,a)},a.$j=function(){(0,r.connect)()},a.zP=function(){(0,r.disconnect)()},a.b1=function(e){(0,r.registerOnStatsListener)(e)},a.Vk=function(e){(0,r.persistentEnd)(e)},a.Tk=function(e,a){d(e,"roomId","persistentStart")&&d(a,"peerId","persistentStart")&&(0,r.persistentStart)(e,a)},a.ap=function(e){(0,r.registerStateListener)(e)},a.default={init:a.S1,addTags:a.zl,setUserRating:a.IO,addKeys:a.UN,setConfig:a.v6,disableDataCollection:a.Zt,enableDataCollection:a.xt,addEvent:a.vP,mapStream:a.aM,mapTrack:a.dL,connect:a.$j,disconnect:a.zP,addStatsListener:a.b1,persistentEnd:a.Vk,persistentStart:a.Tk,addStateListener:a.ap,qualityrtc:{run:r.qrtcRun,stop:r.qrtcStop},subscribe:r.subscribe,unsubscribe:r.unsubscribe}},231:function(e,a,n){"use strict";var r,o=this&&this.__extends||(r=function(e,a){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])},r(e,a)},function(e,a){if("function"!=typeof a&&null!==a)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");function n(){this.constructor=e}r(e,a),e.prototype=null===a?Object.create(a):(n.prototype=a.prototype,new n)}),i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var a,n=1,r=arguments.length;n<r;n++)for(var o in a=arguments[n])Object.prototype.hasOwnProperty.call(a,o)&&(e[o]=a[o]);return e},i.apply(this,arguments)},d=this&&this.__awaiter||function(e,a,n,r){return new(n||(n=Promise))((function(o,i){function d(e){try{c(r.next(e))}catch(e){i(e)}}function t(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var a;e.done?o(e.value):(a=e.value,a instanceof n?a:new n((function(e){e(a)}))).then(d,t)}c((r=r.apply(e,a||[])).next())}))},t=this&&this.__generator||function(e,a){var n,r,o,i,d={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:t(0),throw:t(1),return:t(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function t(t){return function(c){return function(t){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,t[0]&&(d=0)),d;)try{if(n=1,r&&(o=2&t[0]?r.return:t[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,t[1])).done)return o;switch(r=0,o&&(t=[2&t[0],o.value]),t[0]){case 0:case 1:o=t;break;case 4:return d.label++,{value:t[1],done:!1};case 5:d.label++,r=t[1],t=[0];continue;case 7:t=d.ops.pop(),d.trys.pop();continue;default:if(!((o=(o=d.trys).length>0&&o[o.length-1])||6!==t[0]&&2!==t[0])){d=0;continue}if(3===t[0]&&(!o||t[1]>o[0]&&t[1]<o[3])){d.label=t[1];break}if(6===t[0]&&d.label<o[1]){d.label=o[1],o=t;break}if(o&&d.label<o[2]){d.label=o[2],d.ops.push(t);break}o[2]&&d.ops.pop(),d.trys.pop();continue}t=a.call(e,d)}catch(e){t=[6,e],r=0}finally{n=o=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([t,c])}}},c=this&&this.__spreadArray||function(e,a,n){if(n||2===arguments.length)for(var r,o=0,i=a.length;o<i;o++)!r&&o in a||(r||(r=Array.prototype.slice.call(a,0,o)),r[o]=a[o]);return e.concat(r||Array.prototype.slice.call(a))},g=this;Object.defineProperty(a,"__esModule",{value:!0}),a.qrtcStop=a.qrtcRun=a.persistentStart=a.persistentEnd=a.unsubscribe=a.subscribe=a.WatchRTCError=a.registerStateListener=a.registerOnStatsListener=a.disconnect=a.connect=a.mapPC=a.mapTrack=a.mapStream=a.addEvent=a.enableDataCollection=a.disableDataCollection=a.addKeys=a.setUserRating=a.setConfig=a.initSDK=a.sdkLogWithoutTrace=a.sdkLog=void 0;var m,s,l,u,p=n(85),v=n(911),f=n(593),h=n(288),x=n(912),b=n(412),y=n(304),k=n(710),w=n(408),S=n(819),C="undefined"!=typeof window,T=C?window:n.g,q=!!C&&!!T.mozRTCPeerConnection,I=(!!C&&!q&&T.RTCPeerConnection&&T.navigator.webkitGetUserMedia,{}),_=0,R=0,P={},L={rtcRoomId:void 0,rtcPeerId:void 0,projectId:void 0},z=null,O=null,j=null,D=0,E=!1,M=!1,A=0,N=!1,U=!1,W=null,F=null,J=!0,K=new h.default,V=new x.default,B=!1,H=new S.default,G="",$=!1;a.sdkLog=(0,f.getSdkLogger)((function(){return null==z?void 0:z.logLevel})),a.sdkLogWithoutTrace=(0,f.getSdkLogWithoutTrace)((function(){return null==z?void 0:z.logLevel}));var X=function(e){return e?"".concat(e.kind,":").concat(e.id," state:").concat(e.readyState," muted:").concat(e.muted," label:").concat(e.label):"no track"},Z={},Y=function(e){var n,r,o=e.forceRecreate,c=void 0!==o&&o,g=e.reconnecting,s=void 0!==g&&g,u=e.pcId,p=void 0===u?"PC_unknown":u,v=e.nailUp,h=void 0!==v&&v;if(null==j?void 0:j.isDisabledDataCollection())(0,a.sdkLog)("debug","connection ignored - disabledDataCollection [".concat(p,"]"));else if((0,a.sdkLog)("debug","connection requested by [".concat(p,"]"),{forceRecreate:c,reconnecting:s,isManualDisconnect:U,isManualConnect:N,tryingToConnectSocket:E,watchrtcConfig:JSON.stringify(z),disabled:null==j?void 0:j.isDisabledDataCollection(),openChannels:JSON.stringify(I)}),K.isWaiting)(0,a.sdkLog)("debug","connection ignored - already waiting for a new attempt");else{var x=(null===(r=null==j?void 0:j.connection)||void 0===r?void 0:r.readyState)===T.WebSocket.OPEN;if(N||!U||x){if(U=!1,x){if(!(0,f.isRoomIdOrPeerIdChanged)(L,z)||!c)return void(0,a.sdkLog)("debug","connection ignored - already opened [".concat(p,"]"));(0,a.sdkLog)("debug","connection ignored - already connected but RoomId or PeerId changed. Closing WS connection. [".concat(p,"]")),null==j||j.close()}var y=(0,f.countOfValidConnections)(I);if(!N&&y<1&&!E)(0,a.sdkLog)("debug","connection ignored - previous connect call not finished or missing peer connection [".concat(p,"]"),{openChannels:JSON.stringify(I),connectionCount:y,tryingToConnectSocket:E,isManualConnect:N});else{if(!(0,f.validateConfig)(z)){E=!1;var S="connection ignored - invalid config [".concat(p,"]");return(0,a.sdkLog)("error",S,{watchrtcConfig:z}),re("onSocketError",new ae(S,101,s?"reconecting":"connecting")),F&&F({connectionStatus:"disconnected",reason:G="clientRejectedNoRetry"}),void re("onSocketDisconnect",101,G)}z.keys&&Object.keys(z.keys||{}).forEach((function(e){"string"==typeof z.keys[e]&&(z.keys[e]=[z.keys[e]])}));var C=!!z.rtcToken,q=(0,f.getConnectionData)("ws",C?z.rtcToken:z.rtcApiKey,z.proxyUrl);j||((0,a.sdkLog)("debug","connection ignored - socket wasn't initialized [".concat(p,"]")),re("onSocketError",new ae("connection ignored - socket wasn't initialized",500,"connecting","unauthenticated"))),E=!0,(0,a.sdkLog)("info","connecting... [".concat(p,"]")),Q(h);var _=Date.now(),R=((n={})[C?"token":"apiKey"]=q.key,n.timestamp=Date.now().toString(),n.apiVersion="v1",n.sessionId=T.watchRTCSessionId,n.newConnection=J?"true":"false",n),O=Object.entries(R).map((function(e){var a=e[0],n=e[1];return"".concat(a,"=").concat(n)})).join("&");null==j||j.connect({url:"".concat(q.url,"?").concat(O),options:{cleanOldTraces:J},onData:function(e){return d(void 0,void 0,void 0,(function(){var n,r,o,d,c,g,u,v;return t(this,(function(t){switch(t.label){case 0:for(n=0,r=Object.entries(e);n<r.length;n++)o=r[n],d=o[0],c=o[1],P[d]=c;return L.projectId=e.projectId,E=!1,z.allowBrowserLogCollection=Boolean(e.collectConsoleLogEnabled),z.allowBrowserLogCollection?!(null===(v=null==z?void 0:z.console)||void 0===v?void 0:v.override)&&e.collectConsoleLogLevel&&(0,f.setConsoleLevel)(e.collectConsoleLogLevel,m):((0,f.restoreOriginalConsoleMethods)(),(null==j?void 0:j.buffer)&&(j.buffer=j.buffer.filter((function(e){return"log"!==e[0]})))),(0,a.sdkLog)("info","connection established - watchRTCConnectionId: ".concat(e.connectionId," sdkVersion:").concat(b.default," [").concat(p,"]")),e.interval!==z.collectionInterval&&(g=z.collectionInterval,z.collectionInterval=e.interval,de(),Q(),(0,a.sdkLog)("error","Collection interval mismatch - connection state reset"),m({data:["collectionIntervalChange",null,{oldInterval:g}]})),m({data:["watchrtc",p,i(i(i({},z),e),{agentId:T.watchRTCAgentId,sdkVersion:b.default})]}),s&&((0,a.sdkLogWithoutTrace)("debug","reconnect"),m({data:["reconnect",null,null]}),(0,a.addEvent)({name:"reconnect",type:"local"})),l&&m({data:["hardware",null,l]}),[4,(0,w.detectAdvancedPlatform)(k.userAgent,k.userAgentData)];case 1:return u=t.sent(),(0,a.sdkLogWithoutTrace)("debug","advanced userAgent",u),m({data:["userAgentData",null,u]}),[2]}}))}))},onError:function(e,n){(0,a.sdkLogWithoutTrace)("debug","connection - onError ".concat(n));var r=400;"auth"===n?(M=!0,E=!1,G="serverRejectedNoRetry",r=401):"connection"===n?(G="cantConnectToServer",r=503):"timeout"===n&&(G="connectedNotResponding",r=504),re("onSocketError",new ae(G,r,void 0,"auth"===n?M?"unauthenticated":"authenticated":void 0))},onOpen:function(){if(J=!1,G="",F&&F({connectionStatus:"connected"}),s){var e=Date.now()-A;m({data:["reconnectDuration",null,e]})}M=!1;var n=Date.now()-_;(0,a.sdkLog)("info","connection opened. Opening time - ".concat(n," ms [").concat(p,"]").concat(K.attempts>0?" - retried ".concat(K.attempts," times}"):"")),K.reset(),re("onSocketConnect")},onClose:function(e){G=G||"disconnectedPrematurely",F&&F({connectionStatus:"disconnected",reason:G}),(0,a.sdkLog)(["applicationDisconnected"].includes(G)?"info":"error","connection closed - reason: ".concat(G," | watchRTCConnectionId: ").concat((null==P?void 0:P.connectionId)||"null"," [").concat(p,"]"));var n=e.code,r=e.reason,o=e.wasClean;(0,a.sdkLogWithoutTrace)("debug","close event. authFailed: ".concat(M," code: ").concat(n," reason: ").concat(r," wasClean: ").concat(o," connectionStateReason: ").concat(G),{authFailed:M,code:n,reason:r,wasClean:o});var i=500;if(M)(0,a.sdkLogWithoutTrace)("debug","websocket authFailed"),i=401;else if(U||["applicationDisconnected"].includes(G))i=200;else{var d=K.next();(0,a.sdkLogWithoutTrace)("debug","reconnecting - wait ".concat(d,"ms before new attempt ").concat(K.attempts)),A=Date.now();var t=setTimeout((function(){K.unWait(!1),Y({reconnecting:!0,pcId:p})}),d);K.wait(t)}re("onSocketDisconnect",i,G)},onNewReference:function(e){(0,a.sdkLogWithoutTrace)("debug","update new stats ref");for(var n=0,r=Object.values(I);n<r.length;n++)r[n].statsRef=e}})}}else(0,a.sdkLog)("debug","connection ignored - already closed and should not be reopened. [".concat(p,"]"))}},Q=function(e){return void 0===e&&(e=!1),d(void 0,void 0,void 0,(function(){var n,r,o,c,g;return t(this,(function(l){switch(l.label){case 0:return n=function(){return d(void 0,void 0,void 0,(function(){var e,n,r,o,d,c,g,l,u;return t(this,(function(t){switch(t.label){case 0:return 0!==(0,f.countOfValidConnections)(I)?[3,1]:((null==z?void 0:z.logGetStats)&&(0,a.sdkLog)("debug","getStatsInterval. No valid connections at this time"),D&&D+2e4<Date.now()&&(J=!0,E=!1,T.clearInterval(s),G="applicationDisconnected",null==j||j.close(),(0,a.sdkLog)("info","Last connection closed. watchRTCConnectionId: ".concat(null==P?void 0:P.connectionId," sdkVersion: ").concat(b.default))),[3,8]);case 1:return D=Date.now(),e={connections:{},streams:{}},$&&z.collectionInterval>f.TESTRTC_COMPANION_STATS_TIMEOUT?[4,(0,f.getTestRTCCompanionStats)()]:[3,3];case 2:(n=t.sent())&&(r=(0,f.companionStatsToReport)(n),(0,a.sdkLogWithoutTrace)("debug","getStatsInterval. hardware",r),m({data:["hardwareStats",null,r]})),t.label=3;case 3:o=0,d=Object.values(I),t.label=4;case 4:return o<d.length?(c=d[o],(null==z?void 0:z.logGetStats)&&(0,a.sdkLogWithoutTrace)("debug","getStatsInterval. ".concat(c.id," signalingState: ").concat(c.pc.signalingState)),"closed"===c.pc.signalingState?[3,6]:[4,ee(c)]):[3,7];case 5:g=t.sent(),l=g.peer,u=g.streams,e.connections=i(i({},e.connections),l),e.streams=i(i({},e.streams),u),t.label=6;case 6:return o++,[3,4];case 7:W&&W(e),t.label=8;case 8:return[2]}}))}))},s?[3,2]:[4,n()];case 1:return l.sent(),[3,3];case 2:T.clearInterval(s),l.label=3;case 3:if(e)for((0,a.sdkLogWithoutTrace)("debug","startStatsCollection - nail up"),r=function(e){"closed"!==e.pc.signalingState&&e.pc.getStats(null).then((function(a){var n={};q?a.forEach((function(e){n["".concat(e.type,"_").concat(e.id)]=e})):n=(0,f.map2obj)(a),e.statsRef=JSON.parse(JSON.stringify(n))}))},o=0,c=Object.values(I);o<c.length;o++)g=c[o],r(g);return s=T.setInterval((function(){return d(this,void 0,void 0,(function(){return t(this,(function(e){switch(e.label){case 0:return[4,n()];case 1:return e.sent(),[2]}}))}))}),z.collectionInterval),[2]}}))}))},ee=function(e){return new Promise((function(n,r){if(e){var o=e.id,i=e.pc,d=e.prev,t=e.statsRef;i.getStats(null).then((function(r){(null==z?void 0:z.logGetStats)&&(0,a.sdkLogWithoutTrace)("debug","getStats res",{res:r});var i={};q?r.forEach((function(e){i["".concat(e.type,"_").concat(e.id)]=e})):i=(0,f.map2obj)(r);var c=JSON.parse(JSON.stringify(i));if(i=(0,f.applyPatchForRTT)(d,i),c.getStatsId=++R,V.stash(c),t&&(i=(0,f.subtractNailUpReferenceStats)(t,i)),!B){var g=(0,y.extractSuccessCandidatePairsIPs)(i);g&&(B=!0,m({data:["candidatePairIPs",o,g]}))}var s=(0,f.deltaCompression)(d,i);s.getStatsId=c.getStatsId,(null==z?void 0:z.logGetStats)&&(0,a.sdkLogWithoutTrace)("debug","getStats(null) [".concat(o,"]"),{data:s}),null!==(null==s?void 0:s.timestamp)&&(null==s?void 0:s.timestamp)!==-1/0?m({data:["getstats",o,s]}):m({data:["nostats",null,null]}),e.prev=c,n((0,f.exposeApplicationStatsForPC)(o,d,i,Z))}))}}))};a.initSDK=function(e,n,r){var o,c;if(T.watchRTCInitialized)(0,a.sdkLogWithoutTrace)("info","init. watchRTC SDK already has been initialized");else if(T.RTCPeerConnection){if(!(-1!==T.RTCPeerConnection.toString().indexOf("[native code]"))&&C&&(0,a.sdkLog)("info","init. RTCPeerConnection object has been already overridden"),T.watchRTCInitialized=!0,T.watchRTCSessionId=(0,f.generateID)(),T.watchRTCAgentId=(0,f.generateID)(),setTimeout((function(){return d(void 0,void 0,void 0,(function(){var e,n,r,o,i,d;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,5,,6]),e=Date.now(),[4,(0,f.getHardwareInfo)()];case 1:return n=t.sent(),(r=Date.now()-e)<=5e4?(l=n,(0,a.sdkLog)("debug","getHardware",{hardwareInfo:l})):(0,a.sdkLog)("debug","getHardware failure: getHardwareTime: ".concat(r),{hardwareInfo:l}),[4,(0,f.getTestRTCCompanionInfo)()];case 2:return o=t.sent(),($=Boolean(o))?[4,(0,f.getTestRTCCompanionStats)()]:[3,4];case 3:i=t.sent(),l.testrtcCompanion={info:o,stats:i},t.label=4;case 4:return[3,6];case 5:return d=t.sent(),(0,a.sdkLog)("error","Error. Get hardware info: ".concat(d.message)),[3,6];case 6:return[2]}}))}))}),0),C){var s=new URLSearchParams(location.search);s.has("watchrtc")&&"debug"===s.get("watchrtc")&&(e.logLevel="debug")}if(j=(null==r?void 0:r.socketService)||new p.default,O=(null==r?void 0:r.httpService)||new v.default,e.collectionInterval=null!==(o=e.collectionInterval)&&void 0!==o?o:8e3,e.logLevel=e.logLevel||"info",z=e,L.rtcRoomId=z.rtcRoomId,L.rtcPeerId=z.rtcPeerId,m=j.trace,j.setStatsStorage(V),z.wsUrl&&(0,a.sdkLog)("info",'"wsUrl" config property is deprecated. Use "proxyUrl" instead of it'),z.proxyUrl&&(0,a.sdkLog)("info",'"proxyUrl" is used'),(null==z?void 0:z.debug)&&(0,a.sdkLog)("info",'"debug" config property is deprecated. Use "logLevel" instead of it'),n.forEach((function(e){if(T[e+"RTCPeerConnection"]){var n=T[e+"RTCPeerConnection"],r=function(e,r){(null==e?void 0:e.watchrtc)&&(z=i(i({},z),e.watchrtc),L.rtcRoomId=z.rtcRoomId,L.rtcPeerId=z.rtcPeerId);var o=new n(e,r),d="PC_"+_++;return o.__rtcStatsId=d,o.__localTracks=[],I[d]={id:d,pc:o,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=q?"moz":"webkit",(0,a.sdkLog)("debug","new RTCPeerConnection called.",{config:JSON.stringify(e),constraints:r}),m({data:["create",d,e]}),r&&m({data:["constraints",d,r]}),o.addEventListener("icecandidate",(function(e){(0,a.sdkLogWithoutTrace)("debug","onicecandidate id:[".concat(d,"], candidate:[").concat(e.candidate,"]")),m({data:["onicecandidate",d,e.candidate]})})),o.addEventListener("icecandidateerror",(function(e){(0,a.sdkLogWithoutTrace)("debug","onicecandidateerror id:[".concat(d,"], error:[").concat(e.errorCode,":").concat(e.errorText,"]")),m({data:["onicecandidateerror",d,"".concat(e.errorCode,":").concat(e.errorText)]})})),o.addEventListener("addstream",(function(e){m({data:["onaddstream",d,e.stream.id+" "+e.stream.getTracks().map((function(e){return e.kind+":"+e.id}))]})})),o.addEventListener("track",(function(e){m({data:["ontrack",d,X(e.track)+" "+e.streams.map((function(e){return"stream:"+e.id}))]}),o.__localTracks||(o.__localTracks=[]),o.__localTracks.push(e.track),e.track.addEventListener("ended",o.__trackPC.call(g,e.streams))})),o.addEventListener("removestream",(function(e){m({data:["onremovestream",d,e.stream.id+" "+e.stream.getTracks().map((function(e){return e.kind+":"+e.id}))]})})),o.addEventListener("signalingstatechange",(function(){I[d]&&!I[d].validConnection?setTimeout((function(){"closed"!==o.connectionState&&"closed"!==o.iceConnectionState?(0,f.existingOtherValidConnection)(I,d)?(0,a.sdkLogWithoutTrace)("debug","signalingstatechange id:[".concat(d,"]. WS connection opening not triggered - multiple valid connections"),{openChannels:JSON.stringify(I)}):I[d].validConnection?(0,a.sdkLogWithoutTrace)("debug","signalingstatechange id:[".concat(d,"]. WS connection opening not triggered - connection already opened"),{openChannels:JSON.stringify(I)}):(I[d].validConnection=!0,(0,a.sdkLogWithoutTrace)("debug","signalingstatechange id:[".concat(d,"]. forceRecreate websocket connection"),{openChannels:JSON.stringify(I)}),Y({forceRecreate:!0,pcId:d})):(0,a.sdkLogWithoutTrace)("debug","signalingstatechange id:[".concat(d,"] peer connection closed - don't try to open a connection"),{openChannels:JSON.stringify(I)})}),3e3):(0,a.sdkLog)("debug","signalingstatechange id:[".concat(d,"]. WS connection opening not triggered - peer connection not in channels or was already opened"),{openChannels:JSON.stringify(I)}),m({data:["onsignalingstatechange",d,o.signalingState]})})),o.addEventListener("iceconnectionstatechange",(function(){(0,a.sdkLogWithoutTrace)("debug","oniceconnectionstatechange id:[".concat(d,"], state:[").concat(o.iceConnectionState,"]")),m({data:["oniceconnectionstatechange",d,o.iceConnectionState]})})),o.addEventListener("icegatheringstatechange",(function(){(0,a.sdkLogWithoutTrace)("debug","onicegatheringstatechange id:[".concat(d,"], state:[").concat(o.iceGatheringState,"]")),m({data:["onicegatheringstatechange",d,o.iceGatheringState]})})),o.addEventListener("connectionstatechange",(function(){(0,a.sdkLogWithoutTrace)("debug","onconnectionstatechange id:[".concat(d,"], state:[").concat(o.connectionState,"]")),m({data:["onconnectionstatechange",d,o.connectionState]})})),o.addEventListener("negotiationneeded",(function(){(0,a.sdkLogWithoutTrace)("debug","onnegotiationneeded id:[".concat(d,"]")),m({data:["onnegotiationneeded",d,void 0]})})),o.addEventListener("datachannel",(function(e){(0,a.sdkLogWithoutTrace)("debug","ondatachannel id:[".concat(d,"], data:[").concat(e.channel.id," ").concat(e.channel.label,"]")),m({data:["ondatachannel",d,[e.channel.id,e.channel.label]]})})),o.__trackPC=function(e,a){a&&!Array.isArray(a)?m({data:["onlocaltrack",this.__rtcStatsId,"".concat(X(e)).concat(a?" "+a.id:"")]}):a&&Array.isArray(a)?m({data:["onlocaltrack",this.__rtcStatsId,"".concat(X(e)).concat(a?" "+a.map((function(e){return"stream:"+e.id})):"")]}):m({data:["onlocaltrack",this.__rtcStatsId,X(e)]})},(0,a.sdkLogWithoutTrace)("debug","RTCPeerConnection override complete [".concat(d,"].")),o};if("HTMLMediaElement"in T&&"setSinkId"in HTMLMediaElement.prototype){var o=HTMLMediaElement.prototype.setSinkId;HTMLMediaElement.prototype.setSinkId=function(){var e=arguments[0];return navigator.mediaDevices.enumerateDevices().then((function(a){var n=a.find((function(a){return a.deviceId===e}));n&&n.deviceId!==u&&m({data:["audioOutputChange",null,n.label]}),u=e})).catch((function(e){(0,a.sdkLog)("debug",e.message,{error:e})})),o.apply(this,arguments)}}if("RTCRtpTransceiver"in T&&"setCodecPreferences"in T.RTCRtpTransceiver.prototype){var d=T.RTCRtpTransceiver,t=d.prototype.setCodecPreferences;d.prototype.setCodecPreferences=function(){return m({data:["setCodecPreferences",this.__pcId,arguments]}),t.apply(this,arguments)}}if("RTCRtpSender"in T&&"setParameters"in T.RTCRtpSender.prototype){var c=(s=T.RTCRtpSender).prototype.setParameters;s.prototype.setParameters=function(){return m({data:["setParameters",this.__pcId,arguments]}),c.apply(this,arguments)}}if("RTCRtpSender"in T&&"replaceTrack"in T.RTCRtpSender.prototype){var s,l=(s=T.RTCRtpSender).prototype.replaceTrack;s.prototype.replaceTrack=function(){var e=arguments[0];if(e){m({data:["replaceTrack",this.__pcId,X(e)]});var a=this.track;a&&a.label!==e.label&&m({data:["".concat(e.kind,"InputChange"),this.__pcId,e.label]})}else m({data:["replaceTrack",this.__pcId,null]});return l.apply(this,arguments)}}["addTransceiver"].forEach((function(e){var a=n.prototype[e];a&&(n.prototype[e]=function(){var n="";arguments[1]&&arguments[1].streams&&(n=arguments[1].streams.map((function(e){return"stream:"+e.id})).join(";"));var r="string"==typeof arguments[0]?arguments[0]:arguments[0].kind+":"+arguments[0].id+" "+arguments[0].label,o=arguments[1]?i(i({},arguments[1]),{streams:n}):null;m({data:[e,this.__rtcStatsId,[r,o]]});var d=a.apply(this,arguments);d.sender.__pcId=this.__rtcStatsId;var t=arguments[0];return"object"==typeof t&&(m({data:["onlocaltrack",this.__rtcStatsId,X(t)]}),this.__localTracks||(this.__localTracks=[]),this.__localTracks.push(t),t.addEventListener("ended",this.__trackPC.call(this,t))),d})})),["createDataChannel","restartIce"].forEach((function(e){var a=n.prototype[e];a&&(n.prototype[e]=function(){return m({data:[e,this.__rtcStatsId,arguments]}),a.apply(this,arguments)})})),["close"].forEach((function(e){var r=n.prototype[e];r&&(n.prototype[e]=function(){if(m({data:[e,this.__rtcStatsId,arguments]}),delete I[this.__rtcStatsId],this.__localTracks){for(var n=void 0;n=this.__localTracks.pop();)n.removeEventListener("ended",this.__trackPC),n=null;delete this.__localTracks}return(0,a.sdkLog)("debug","on RTCPeerConnection(".concat(this.__rtcStatsId,") close")),r.apply(this,arguments)})})),["addStream","removeStream"].forEach((function(e){var a=n.prototype[e];a&&(n.prototype[e]=function(){var n=this,r=arguments[0],o=r.getTracks().map((function(e){return e.kind+":"+e.id})).join(",");return m({data:[e,this.__rtcStatsId,r.id+" "+o]}),"addStream"===e&&r.getTracks().map((function(e){m({data:["onlocaltrack",n.__rtcStatsId,X(e)+" "+r.id]}),n.__localTracks||(n.__localTracks=[]),n.__localTracks.push(e),e.addEventListener("ended",n.__trackPC.call(n,e,r))})),a.apply(this,arguments)})})),["addTrack"].forEach((function(e){var a=n.prototype[e];a&&(n.prototype[e]=function(){var n=this,r=arguments[0],o=[].slice.call(arguments,1);m({data:[e,this.__rtcStatsId,X(r)+" "+(o.map((function(e){return"stream:"+e.id})).join(";")||"-")]}),m({data:["onlocaltrack",this.__rtcStatsId,X(r)+" "+o.map((function(e){return"stream:"+e.id}))]}),this.__localTracks||(this.__localTracks=[]),this.__localTracks.push(r),r.addEventListener("ended",this.__trackPC.call(this,r,o));var i=a.apply(this,arguments);i.__pcId=this.__rtcStatsId;var d=this.getTransceivers();return d&&d.forEach((function(e){e.__pcId=n.__rtcStatsId})),i})})),["removeTrack"].forEach((function(e){var a=n.prototype[e];a&&(n.prototype[e]=function(){var n=arguments[0].track;return m({data:[e,this.__rtcStatsId,n?X(n):"null"]}),a.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((function(e){var r=n.prototype[e];r&&(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]),m({data:[e,this.__rtcStatsId,n]}),"createOffer"===e&&n&&!0===n.iceRestart&&(0,a.addEvent)({name:"ice-restart",type:"local"}),r.apply(this,n?[n]:void 0).then((function(a){if(m({data:[e+"OnSuccess",o,a]}),!(i.length>0&&"function"==typeof i[0]))return a;i[0].apply(null,[a])}),(function(a){if(m({data:[e+"OnFailure",o,a.toString()]}),!(i.length>1&&"function"==typeof i[1]))throw a;i[1].apply(null,[a])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(e){var a=n.prototype[e];a&&(n.prototype[e]=function(){var n=this.__rtcStatsId,r=arguments,o=this,i="setLocalDescription"===e&&(!r[0]||r[0]&&!r[0].sdp);return m({data:[e,this.__rtcStatsId,i?{parameterless:!0}:r[0]]}),a.apply(this,[r[0]]).then((function(){m({data:[e+"OnSuccess",n,i?null==o?void 0:o.localDescription:void 0]}),r.length>=2&&"function"==typeof r[1]&&r[1].apply(null,[])}),(function(a){if(m({data:[e+"OnFailure",n,a.toString()]}),!(r.length>=3&&"function"==typeof r[2]))throw a;r[2].apply(null,[a])}))})})),n.generateCertificate&&Object.defineProperty(r,"generateCertificate",{get:function(){return arguments.length?n.generateCertificate.apply(null,arguments):n.generateCertificate}}),T[e+"RTCPeerConnection"]=r,T[e+"RTCPeerConnection"].prototype=n.prototype,(0,a.sdkLogWithoutTrace)("debug","RTCPeerConnection prefixes override complete")}else(0,a.sdkLogWithoutTrace)("debug","RTCPeerConnection prefixes override failed")})),C){if(n.forEach((function(e){var a=e+(e.length?"GetUserMedia":"getUserMedia");if(navigator[a]){var n=navigator[a].bind(navigator);navigator[a]=function(){m({data:["getUserMedia",null,arguments[0]]});var e=arguments[1],a=arguments[2];n(arguments[0],(function(a){m({data:["getUserMediaOnSuccess",null,(0,f.dumpStream)(a)]}),e&&e(a)}),(function(e){var n=["getUserMediaOnFailure",null,e.name];m({data:n}),ie(n),a&&a(e)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var h=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return m({data:["navigator.mediaDevices.getUserMedia",null,arguments[0]]}),h.apply(navigator.mediaDevices,arguments).then((function(e){return m({data:["navigator.mediaDevices.getUserMediaOnSuccess",null,(0,f.dumpStream)(e)]}),e}),(function(e){var a=["navigator.mediaDevices.getUserMediaOnFailure",null,e.name];return m({data:a}),ie(a),Promise.reject(e)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.addEventListener("devicechange",(function(){(0,a.sdkLogWithoutTrace)("debug","ondevicechanged"),m({data:["ondevicechanged",null,null]})})),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices){var x=navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices);navigator.mediaDevices.enumerateDevices=function(){return x.apply(navigator.mediaDevices,arguments).then((function(e){var n,r,o=H.setDevices(e);return(null===(n=null==o?void 0:o.addedDevices)||void 0===n?void 0:n.length)>0&&((0,a.sdkLogWithoutTrace)("debug","ondeviceadded",o.addedDevices),m({data:["ondevicesadded",null,{devices:o.addedDevices||[]}]})),(null===(r=null==o?void 0:o.removedDevices)||void 0===r?void 0:r.length)>0&&((0,a.sdkLogWithoutTrace)("debug","ondeviceremoved",o.removedDevices),m({data:["ondevicesremoved",null,{devices:o.removedDevices||[]}]})),e}),(function(e){var a=["navigator.mediaDevices.enumerateDevicesOnFailure",null,e.name];return m({data:a}),ie(a),Promise.reject(e)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var b=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return m({data:["navigator.mediaDevices.getDisplayMedia",null,arguments[0]]}),b.apply(navigator.mediaDevices,arguments).then((function(e){return m({data:["navigator.mediaDevices.getDisplayMediaOnSuccess",null,(0,f.dumpStream)(e)]}),e}),(function(e){var a=["navigator.mediaDevices.getDisplayMediaOnFailure",null,e.name];return m({data:a}),ie(a),Promise.reject(e)}))}.bind(navigator.mediaDevices)}}(null===(c=e.console)||void 0===c?void 0:c.level)&&(0,f.setConsoleLevel)(e.console.level,m)}else(0,a.sdkLogWithoutTrace)("info","init. RTCPeerConnection does not exist in global globalContext")},a.setConfig=function(e){var n;T.watchRTCInitialized?(!(!1===(null==z?void 0:z.allowBrowserLogCollection))&&!0===(null===(n=null==e?void 0:e.console)||void 0===n?void 0:n.override)&&e.console.level&&(0,f.setConsoleLevel)(e.console.level,m),"collectionInterval"in e&&delete e.collectionInterval,z=i(i({},z),e),L.rtcRoomId=z.rtcRoomId,L.rtcPeerId=z.rtcPeerId,(0,a.sdkLog)("debug","setConfig",{newWatchrtcConfig:JSON.stringify(e),watchrtcConfig:JSON.stringify(z)}),Y({})):(0,a.sdkLog)("error","SDK is not initialized. Use 'init' function first.")},a.setUserRating=function(e,n){var r;if(!T.watchRTCInitialized)return(0,a.sdkLog)("error","SDK is not initialized. Use 'init' function first."),Promise.resolve({error:"SDK is not initialized. Use 'init' function first."});if(!(0,f.validateRating)(e))return Promise.resolve({error:"Rating is invalid"});if("serverRejectedNoRetry"===G)return(0,a.sdkLog)("error","SDK connection has been rejected - Rating can't be sent. Please check your SDK parameters."),Promise.resolve({error:"SDK connection has been rejected. Rating can't be sent. Please check your SDK parameters."});var o=(null===(r=null==j?void 0:j.connection)||void 0===r?void 0:r.readyState)===T.WebSocket.OPEN,i=["userRating",null,{rating:e,ratingComment:n}];return new Promise((function(e,a){o?m({data:i,options:{promiseFuncs:{resolve:e,reject:a}}}):oe.apply(void 0,i).then((function(){return e({})})).catch((function(a){return e({error:a})}))}))},a.addKeys=function(e){var n;if(T.watchRTCInitialized){Object.keys(e||{}).forEach((function(a){"string"==typeof e[a]&&(e[a]=[e[a]])}));var r=["keys",null,e],o=(null===(n=null==j?void 0:j.connection)||void 0===n?void 0:n.readyState)===T.WebSocket.OPEN,i=null==j?void 0:j.wasConnected;return new Promise((function(e,a){var n={promiseFuncs:{resolve:e,reject:a}};o?m({data:r,options:n}):i?oe.apply(void 0,r).then((function(){return e({})})).catch((function(a){return e({error:a})})):m({data:r,options:n})}))}(0,a.sdkLog)("error","SDK is not initialized. Use 'init' function first.")},a.disableDataCollection=function(){T.watchRTCInitialized?(m({data:["disableDataCollection",null,null]}),null==j||j.disableDataCollection()):(0,a.sdkLog)("error","SDK is not initialized. Use 'init' function first.")},a.enableDataCollection=function(){T.watchRTCInitialized?(m({data:["enableDataCollection",null,null]}),null==j||j.enableDataCollection()):(0,a.sdkLog)("error","SDK is not initialized. Use 'init' function first.")},a.addEvent=function(e){if(T.watchRTCInitialized){if((0,f.validateEvent)(e,I)){var n=i({},e),r=null;n.pc&&(r=n.pc.__rtcStatsId||null,delete n.pc);var o=["event",r,n];return new Promise((function(e,a){m({data:o,options:{promiseFuncs:{resolve:e,reject:a}}})}))}}else(0,a.sdkLog)("error","addEvent error. SDK is not initialized. Use 'init' function first.")},a.mapStream=function(e,n){if(T.watchRTCInitialized){if(e&&n){var r=["mapStream",null,{id:e,name:n}];(0,a.sdkLog)("info","mapStream method is deprecated. Please use mapTrack instead."),m({data:r})}}else(0,a.sdkLog)("error","mapStream error. SDK is not initialized. Use 'init' function first.")},a.mapTrack=function(e,n){T.watchRTCInitialized?!e||!n||(Z[e]=n,m({data:["mapTrack",null,{id:e,name:n}]})):(0,a.sdkLog)("error","mapTrack error. SDK is not initialized. Use 'init' function first.")},a.mapPC=function(e,n){if(T.watchRTCInitialized){var r=e.__rtcStatsId;r&&n&&m({data:["mapPC",r,{pcName:r,displayName:n}]})}else(0,a.sdkLog)("error","mapTrack error. SDK is not initialized. Use 'init' function first.")},a.connect=function(){T.watchRTCInitialized?(J=!0,N=!0,K.reset(),(0,a.sdkLog)("debug","manual connect"),Y({})):(0,a.sdkLog)("error","connect error. SDK is not initialized. Use 'init' function first.")},a.disconnect=function(){T.watchRTCInitialized?(N=!1,U=!0,J=!0,G="applicationDisconnected",null==j||j.close(),(0,a.sdkLog)("debug","manual disconnect")):(0,a.sdkLog)("error","disconnect error. SDK is not initialized. Use 'init' function first.")},a.registerOnStatsListener=function(e){W=e},a.registerStateListener=function(e){F=e};var ae=function(e){function a(n,r,o,i){var d=e.call(this,n)||this;return d.name="WatchRTCError",d.errorCode=r,d.socketStatus=o,d.authenticationStatus=i,Object.setPrototypeOf(d,a.prototype),d}return o(a,e),a}(Error);a.WatchRTCError=ae;var ne={};function re(e){for(var n,r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];null===(n=ne[e])||void 0===n||n.forEach((function(n){try{n.apply(void 0,r)}catch(n){(0,a.sdkLog)("error","Error in event listener for ".concat(e,": ").concat(n))}}))}a.subscribe=function(e,a){ne[e]||(ne[e]=new Set),ne[e].add(a)},a.unsubscribe=function(e,a){var n;null===(n=ne[e])||void 0===n||n.delete(a)};var oe=function(){for(var e,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];if(!L.rtcRoomId||!L.rtcPeerId){var o="Missing configuration parameters rtcPeerId and rtcRoomId to connect";return!L.rtcRoomId&&L.rtcPeerId?o="Missing configuration parameter rtcRoomId to connect":!L.rtcPeerId&&L.rtcRoomId&&(o="Missing configuration parameter rtcPeerId to connect"),(0,a.sdkLog)("error",o),Promise.reject(o)}if(!L.projectId&&!z.rtcApiKey)return o="Missing apiKey to enable trace before connection establishment",(0,a.sdkLog)("info",o),Promise.reject(o);var i=(0,f.getConnectionData)("http",z.rtcApiKey,z.proxyUrl);return O?O.trace.apply(O,c(["".concat(i.url,"/trace"),T.watchRTCSessionId,null!==(e=L.projectId)&&void 0!==e?e:i.key,L.rtcRoomId,L.rtcPeerId],n,!1)):Promise.reject("Invalid configuration of http service")},ie=function(e){var n,r=null==z?void 0:z.rtcApiKey,o=null==z?void 0:z.rtcRoomId,i=null==z?void 0:z.rtcPeerId;if(r&&o&&i){var d=(0,f.getConnectionData)("http",null==z?void 0:z.rtcApiKey,z.proxyUrl);e=e||(null==j?void 0:j.buffer)||[],null==O||O.trace("".concat(d.url,"/error"),T.watchRTCSessionId,null!==(n=L.projectId)&&void 0!==n?n:d.key,o,i,e)}else(0,a.sdkLog)("error","Cannot report an error. Please provide rtcApiKey, rtcRoomId and rtcPeerId ")};a.persistentEnd=function(e){T.watchRTCInitialized?(clearInterval(s),N=!1,U=!0,J=!0,G="applicationDisconnected",m({data:["nailUpCallEnd",null,null]}),null==j||j.close(e),(0,a.sdkLog)("debug","persistentEnd. agentId: ".concat(T.watchRTCAgentId))):(0,a.sdkLog)("error","persistentEnd error. SDK is not initialized. Use 'init' function first.")};var de=function(){var e;(0,a.sdkLogWithoutTrace)("debug","resetConnectionState agentId: ".concat(T.watchRTCAgentId));for(var n=0,r=Object.values(I);n<r.length;n++)r[n].prev=null;(null===(e=null==j?void 0:j.buffer)||void 0===e?void 0:e.length)&&(j.buffer=j.buffer.filter((function(e){return"getstats"!==e[0]})))};a.persistentStart=function(e,n){T.watchRTCInitialized?(T.watchRTCSessionId=(0,f.generateID)(),z=i(i({},z),{rtcRoomId:e,rtcPeerId:n}),L.rtcRoomId=e,L.rtcPeerId=n,N=!0,U=!1,de(),Y({nailUp:!0}),(0,a.sdkLog)("debug","persistentStart. agentId: ".concat(T.watchRTCAgentId),{watchrtcConfig:z})):(0,a.sdkLog)("error","persistentStart error. SDK is not initialized. Use 'init' function first.")};var te=function(e){return new Promise((function(a,n){var r=document.createElement("script");r.src=e,r.onload=a,r.onerror=n,document.head.appendChild(r)}))},ce=!1;a.qrtcRun=function(e){var n=e.options,r=e.progressCallback;return d(void 0,void 0,void 0,(function(){var e,o,c,g,m,s,l,u,p,v,h,x,y,k;return t(this,(function(w){switch(w.label){case 0:if(!C)return(0,a.sdkLogWithoutTrace)("info","Cannot run qualityRTC test in non-browser environment"),[2];ce=!1,(0,a.disableDataCollection)(),w.label=1;case 1:return w.trys.push([1,,4,5]),o=(null==n?void 0:n.codeUrl)||"https://qualityrtc-sdk.s3.amazonaws.com/".concat(b.default,"/main.bundle.js"),c={},n&&Object.keys(n||{}).forEach((function(e){"string"==typeof n[e]&&(c[e]=n[e])})),g=(0,f.getConnectionData)("http",null==z?void 0:z.rtcApiKey,z.proxyUrl),m=!!(null==n?void 0:n.configUrl),s=m?"".concat(n.configUrl,"/.netlify/functions/get-config"):g.url+"/get-qualityrtc-config?apiKey=".concat(g.key,"&").concat(new URLSearchParams(c)),console.log("runNetworkTest: request to run, loading lib and config",{codeUrl:o,configUrl:s}),[4,Promise.all([(S=s,d(void 0,void 0,void 0,(function(){return t(this,(function(e){switch(e.label){case 0:return[4,fetch(S)];case 1:return[4,e.sent().json()];case 2:return[2,e.sent()]}}))}))),te(o)])];case 2:if(l=w.sent(),u=l[0],p=l[1],console.log("runNetworkTest:JS code & config loaded",{codeLoad:p,configAnswer:u}),!(v=T.__qualityRTC))throw new Error("runNetworkTest:Failed to load qualityRTC, __qualityRTC is undefined");return h=function(e){return!ce&&(r&&r(e),!0)},x=m?u.config:u.jsonConfig.config,y=m?null==n?void 0:n.configUrl:new URL(u.url).origin,k=i(i({},x),{isProbe:!0,options:i(i(i({},x.options),n),{wakeLock:!0,netlifyBaseUrl:y})}),console.log("runNetworkTest: code & config loaded, running test",{config:k,configData:x,qualityRTC:v,netlifyBaseUrl:y}),[4,v.run({config:k,progressCallback:h})];case 3:return e=w.sent(),console.log("runNetworkTest:JS Test completed",{answer:e}),[3,5];case 4:return(0,a.enableDataCollection)(),[7];case 5:return[2,e]}var S}))}))},a.qrtcStop=function(){C?ce=!0:(0,a.sdkLogWithoutTrace)("info","Cannot run qualityRTC test in non-browser environment")}},527:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.getStreamsFromStats=a.getTransportFromStats=void 0,a.getTransportFromStats=function(e,a){if(!a)return null;var n=Object.keys(a),r=n.filter((function(e){return"candidate-pair"===a[e].type&&a[e].nominated}));if(r.length>0){var o=a[r[0]],i=o.localCandidateId,d=o.remoteCandidateId,t=n.find((function(e){return"local-candidate"===a[e].type&&a[e].id===i})),c=n.find((function(e){return"remote-candidate"===a[e].type&&a[e].id===d}));if(t&&c){var g=a[t],m=a[c],s={};return s[e]={connection:"relay"===g.candidateType?"relay":"direct",transport:"relay"===g.candidateType?g.relayProtocol:"udp",address:"".concat(m.address,":").concat(m.port)},s}}return null},a.getStreamsFromStats=function(e,a,n,r){var o={},i=Object.keys(n);return i.filter((function(e){return"inbound-rtp"===n[e].type||"outbound-rtp"===n[e].type})).forEach((function(d){var t=n[d],c=a&&d in a?a[d]:null,g="inbound-rtp"===t.type?"inbound":"outbound",m=t.kind,s=t.remoteId in n?n[t.remoteId]:null,l=c&&c.remoteId in a?a[c.remoteId]:null,u=c?(t.timestamp-c.timestamp)/1e3:null,p={direction:g,kind:m,peerId:e};if("video"===m&&(p.frameWidth=t.frameWidth,p.frameHeight=t.frameHeight,p.framerate=t.framesPerSecond),"inbound-rtp"===t.type)p.jitter=t.jitter,p.mappedName=t.trackIdentifier in r?r[t.trackIdentifier]:null,p.bytesReceived=c?t.bytesReceived-c.bytesReceived:null,p.packetsReceived=c?t.packetsReceived-c.packetsReceived:null,p.packetsLost=c?t.packetsLost-c.packetsLost:null,p.packetsLoss=p.packetsLost+p.packetsReceived>0?100*p.packetsLost/(p.packe