2 lines
100 KiB
JavaScript
2 lines
100 KiB
JavaScript
"use strict";(self.webpackChunkmontana_messenger=self.webpackChunkmontana_messenger||[]).push([[2394],{26941(e,n,t){t.r(n),t.d(n,{ActiveCallHeader:()=>lt,GroupCall:()=>dt,PhoneCall:()=>ht,RatePhoneCallModal:()=>yt});var i=t(12859),a=t(96454),o=t(31481),r=t(61182),s=t(9705),c=t(41733);const d=e=>{const n=e.createOscillator(),t=n.connect(e.createMediaStreamDestination());return n.start(),new MediaStream([Object.assign(t.stream.getAudioTracks()[0],{enabled:!1})])},l=({width:e=640,height:n=480}={})=>{const t=Object.assign(document.createElement("canvas"),{width:e,height:n}),i=t.getContext("2d");if(!i)throw Error("Cannot create canvas ctx");i.fillRect(0,0,e,n);const a=t.captureStream();return new MediaStream([Object.assign(a.getVideoTracks()[0],{enabled:!1})])};function u(e){return 0|e}function p(e){return e>>>0}function m(e,n=3){if(!e)return 0;const{length:t}=e;let i=0;for(let n=0;n<t;n++)i+=e[n]*e[n];const a=Math.sqrt(i/t)/255;return Math.min(1,a*n)}function g(e){return{id:e.id,name:e.name,"rtcp-fbs":e.feedbackTypes,clockrate:e.clockrate,parameters:e.parameters,channels:e.channels}}const f=.1,h="getDisplayMedia"in(navigator?.mediaDevices||{}),v=navigator?.mediaDevices?.getSupportedConstraints().echoCancellation,y=navigator?.mediaDevices?.getSupportedConstraints().noiseSuppression,C=(e,n=!1,t=!1,i=!1)=>{const a=[],o=e=>{a.push(e)},{sessionId:r,ssrcs:s,audioExtensions:c,videoExtensions:d,audioPayloadTypes:l,videoPayloadTypes:u,transport:{ufrag:m,pwd:g,fingerprints:f,candidates:h}}=e;o("v=0"),o(`o=- ${r} 2 IN IP4 0.0.0.0`),o("s=-"),o("t=0 0"),o("a=ice-options:trickle"),o("a=msid-semantic:WMS *"),o(`a=group:BUNDLE ${s.map(e=>e.mid).join(" ")}${t?"":" "+(i?"3":"2")}`),i||o("a=ice-lite");const v=e=>{if(e.sdpString)o(`a=${e.sdpString}`);else{let n="";n+="a=candidate:",n+=`${e.foundation} ${e.component} ${e.protocol} ${e.priority} ${e.ip} ${e.port} typ ${e.type}`,"rel-addr"in e&&(n+=` raddr ${e["rel-addr"]} rport ${e["rel-port"]}`),n+=` generation ${e.generation}`,o(n)}},y=()=>{o(`a=ice-ufrag:${m}`),o(`a=ice-pwd:${g}`),f.forEach(e=>{o(`a=fingerprint:${e.hash} ${e.fingerprint}`);const t=n&&"active"!==e.setup&&"passive"!==e.setup?"passive":e.setup||"passive";o(`a=setup:${t}`)}),h.forEach(v)},C=e=>{const{channels:n,id:t,name:i,clockrate:a,parameters:r}=e;if(o(`a=rtpmap:${t} ${i}/${a}${n?`/${n}`:""}`),r){const e=Object.keys(r).map(e=>`${e}=${r[e]};`).join(" ");o(`a=fmtp:${t} ${e}`)}e["rtcp-fbs"]?.forEach(e=>{o(`a=rtcp-fb:${t} ${e.type}${e.subtype?` ${e.subtype}`:""}`)})},b=e=>{const t=e.isVideo?u:l,a=e.isVideo?"video":"audio";if(o(`m=${a} ${e.isRemoved?0:1} RTP/SAVPF ${t.map(e=>e.id).join(" ")}`),o("c=IN IP4 0.0.0.0"),o("b=AS:1300"),o(`a=mid:${e.mid}`),o("a=rtcp-mux"),t.forEach(C),o("a=rtcp:1 IN IP4 0.0.0.0"),e.isVideo&&o("a=rtcp-rsize"),(e.isVideo?d:c).forEach(({id:e,uri:n})=>{o(`a=extmap:${e} ${n}`)}),e.isRemoved)o("a=inactive");else{if(y(),i)o("a=sendrecv"),o("a=bundle-only");else{if(n)return void o("a=recvonly");e.isMain?o("a=sendrecv"):(o("a=sendonly"),o("a=bundle-only"))}e.sourceGroups.forEach(n=>{n.semantics&&o(`a=ssrc-group:${n.semantics} ${n.sources.map(p).join(" ")}`),n.sources.forEach(n=>{const t=p(n);o(`a=ssrc:${t} cname:${e.endpoint}`),o(`a=ssrc:${t} msid:${e.endpoint} ${e.endpoint}`),o(`a=ssrc:${t} mslabel:${e.endpoint}`),o(`a=ssrc:${t} label:${e.endpoint}`)})})}};return i?s.forEach(b):s.filter(e=>"0"===e.mid||"1"===e.mid).forEach(b),t||(o("m=application 1 UDP/DTLS/SCTP webrtc-datachannel"),o("c=IN IP4 0.0.0.0"),y(),o("a=ice-options:trickle"),o("a=mid:"+(i?"3":t?"1":"2")),o("a=sctp-port:5000"),o("a=max-message-size:262144")),i||s.filter(e=>"0"!==e.mid&&"1"!==e.mid).forEach(b),`${a.join("\n")}\n`};function b(e){return e.split(/\r?\nm=/).map((e,n)=>0===n?e:`m=${e}`).map(e=>{const n=e.split(/\r?\n/).filter(Boolean),t=n[0]?.match(/^m=([^\s]+)/)?.[1]||"session",i=n.find(e=>e.startsWith("a=mid:"))?.slice(6);return{kind:t,lines:n,mid:i}})}function S(e){const n=e.split(/\r?\n/).find(e=>e.startsWith("a=group:BUNDLE "));return n?.slice(15).split(" ").filter(Boolean)}function w(e,n,t){if(t){const i=t.lines.find(e=>e.startsWith(n));if(i)return i.slice(n.length);for(const t of e){if("session"!==t.kind)continue;const e=t.lines.find(e=>e.startsWith(n));if(e)return e.slice(n.length)}return}for(const t of e){const e=t.lines.find(e=>e.startsWith(n))?.slice(n.length);if(e)return e}}function I(e){return e.lines.find(e=>"a=sendrecv"===e||"a=sendonly"===e||"a=recvonly"===e||"a=inactive"===e)?.slice(2)}function k(e){return Number(e.lines[0]?.split(" ")[1]||0)}function x(e,n=!1){const t=new Set;return e.lines.forEach(e=>{if(n&&e.startsWith("a=ssrc-group:"))return void e.match(/\d+/g)?.forEach(e=>{t.add(Number(e))});const i=e.match(/^a=ssrc:(\d+)/);i?.[1]&&t.add(Number(i[1]))}),Array.from(t)}function A(e){return e.lines.filter(e=>e.startsWith("a=extmap:")).map(e=>{const[,n,t]=e.match(/^a=extmap:(\d+)(?:\/[^\s]+)?\s(.+)$/)||[];if(!n||!t)throw Error("Failed parsing SDP RTP extension");return{id:Number(n),uri:t}})}function P(e){const n=e.lines.filter(e=>e.startsWith("a=rtpmap:")).map(e=>{const[,n,t,i,a]=e.match(/^a=rtpmap:(\d+)\s([^/]+)\/(\d+)(?:\/(\d+))?/)||[];if(!n||!t||!i)throw Error("Failed parsing SDP payload type");return{id:Number(n),name:t,clockrate:Number(i),channels:a?Number(a):0}});return n.forEach(n=>{const t=function(e,n){const t={},i=e.lines.find(e=>e.startsWith(`a=fmtp:${n} `)),a=i?.slice(`a=fmtp:${n} `.length);return a?(a.split(";").forEach(e=>{const n=e.trim(),i=n.indexOf("=");if(-1===i)return;const a=n.slice(0,i),o=n.slice(i+1);a&&o&&(t[a]=o)}),t):t}(e,n.id),i=function(e,n){return e.lines.filter(e=>e.startsWith(`a=rtcp-fb:${n} `)).map(e=>{const t=e.slice(`a=rtcp-fb:${n} `.length),[i,a]=t.split(" ");return{type:i,subtype:a||""}})}(e,n.id);Object.keys(t).length&&(n.parameters=t),i.length&&(n.feedbackTypes=i)}),n}function E(e,n=!1){return b(e).filter(e=>"session"!==e.kind).map(e=>{const t=(e.lines[0]||"").split(" ");return{kind:e.kind,mid:e.mid,port:k(e),direction:I(e),payloads:t.slice(3),ssrcs:x(e,n)}})}function N(e){const n=[];return e.forEach(([e,...t])=>{e&&t.length&&n.push({semantics:e,sources:t.map(Number).map(u)})}),n}let M,T;function R(e,n={}){o._5g&&(0,r.bO)("debug",`[GroupCall] ${e}`,n)}function V(e){return e instanceof Error?{name:e.name,message:e.message}:String(e)}function $(e){if(e)return{id:e.id,kind:e.kind,enabled:e.enabled,muted:e.muted,readyState:e.readyState,label:e.label}}function D(e){if(e)return{id:e.id,active:e.active,tracks:e.getTracks().map($)}}function B(e){if(e)return{mid:e.mid,direction:e.direction,currentDirection:e.currentDirection,senderTrack:$(e.sender.track||void 0),receiverTrack:$(e.receiver.track)}}function F(e){if(e)return{connectionState:e.connectionState,iceConnectionState:e.iceConnectionState,iceGatheringState:e.iceGatheringState,signalingState:e.signalingState,transceivers:e.getTransceivers().map(B)}}function L(e){return{userId:e.userId,endpoint:e.endpoint,mid:e.mid,isMain:e.isMain,isRemoved:e.isRemoved,isVideo:e.isVideo,isPresentation:e.isPresentation,sourceGroups:e.sourceGroups}}function G(e){if(e)return{sessionId:e.sessionId,ssrcCount:e.ssrcs?.length,ssrcs:e.ssrcs?.map(L),transport:e.transport?{ufrag:e.transport.ufrag,candidateCount:e.transport.candidates?.length,fingerprintCount:e.transport.fingerprints?.length,isRtcpMux:e.transport["rtcp-mux"]}:void 0,audioPayloadTypes:e.audioPayloadTypes?.map(e=>`${e.id}:${e.name}`),videoPayloadTypes:e.videoPayloadTypes?.map(e=>`${e.id}:${e.name}`),audioExtensions:e.audioExtensions?.map(e=>`${e.id}:${e.uri}`),videoExtensions:e.videoExtensions?.map(e=>`${e.id}:${e.uri}`)}}function O(e){return{id:e.id,isSelf:e.isSelf,isMuted:e.isMuted,isMutedByMe:e.isMutedByMe,isLeft:e.isLeft,isVideoJoined:e.isVideoJoined,source:e.source,volume:e.volume,video:e.video?{endpoint:e.video.endpoint,sourceGroups:e.video.sourceGroups,isPaused:e.video.isPaused}:void 0,presentation:e.presentation?{endpoint:e.presentation.endpoint,sourceGroups:e.presentation.sourceGroups,isPaused:e.presentation.isPaused}:void 0}}function Y(e){return{isStream:e.stream,transport:{ufrag:e.transport.ufrag,candidateCount:e.transport.candidates.length,fingerprintCount:e.transport.fingerprints.length,isRtcpMux:e.transport["rtcp-mux"]},audioPayloadTypes:e.audio?.["payload-types"].map(e=>`${e.id}:${e.name}`),videoPayloadTypes:e.video["payload-types"].map(e=>`${e.id}:${e.name}`),audioExtensions:e.audio?.["rtp-hdrexts"].map(e=>`${e.id}:${e.uri}`),videoExtensions:e.video["rtp-hdrexts"].map(e=>`${e.id}:${e.uri}`),videoEndpoint:e.video.endpoint,serverSources:e.video.server_sources}}function U(e){const{channels:n,id:t,name:i,clockrate:a,parameters:o}=e,r=[`a=rtpmap:${t} ${i}/${a}${n?`/${n}`:""}`];if(o){const e=Object.keys(o).map(e=>`${e}=${o[e]};`).join(" ");r.push(`a=fmtp:${t} ${e}`)}return e["rtcp-fbs"]?.forEach(e=>{r.push(`a=rtcp-fb:${t} ${e.type}${e.subtype?` ${e.subtype}`:""}`)}),r}function _(e){const n=M?.conference?.videoPayloadTypes,t=M?.conference?.videoExtensions;if(!n?.length)return R("presentation offer munge skipped: missing protocol video params",{hasVideoPayloadTypes:Boolean(n?.length),hasVideoExtensions:Boolean(t?.length)}),e;const i=n.flatMap(U);return t?.length&&i.push(...t.map(({id:e,uri:n})=>`a=extmap:${e} ${n}`)),`${e.split(/\r?\nm=/).map((e,n)=>0===n?e:`m=${e}`).map(e=>{const t=e.split(/\r?\n/).filter(Boolean);if(!t[0]?.startsWith("m=video "))return e;const a=[`${t[0].split(" ").slice(0,3).join(" ")} ${n.map(({id:e})=>e).join(" ")}`];let o=!1;return t.slice(1).forEach(e=>{e.startsWith("a=rtpmap:")||e.startsWith("a=fmtp:")||e.startsWith("a=rtcp-fb:")||e.startsWith("a=extmap:")||(a.push(e),"a=rtcp-mux"===e&&(a.push(...i),o=!0))}),o||a.splice(1,0,...i),a.join("\r\n")}).join("\r\n")}\r\n`}function j(e){M&&(M.screenshareDataChannel?.close(),M.screenshareConnection?.close(),e||M.onUpdate?.({"@type":"updateGroupCallLeavePresentation"}))}function J(e){return M?.streams?.[e]}function z(e,n){const t=M?.participantFunctions?.[e];t&&t.setVolume?.(n)}function q(e,n){const t=n||M?.myId,i=t&&J(t)?.[e];return!!i&&i.getTracks()[0]?.enabled}function K(e){M?.onUpdate?.({"@type":"updateGroupCallStreams",userId:e,hasAudioStream:q("audio",e),hasVideoStream:q("video",e),hasPresentationStream:q("presentation",e),amplitude:M.speaking?.[e]})}async function H(e,n="user"){if("audio"===e&&M?.audioStream)return M.audioStream;if("presentation"===e)return navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0});const t=await navigator.mediaDevices.getUserMedia({audio:"audio"===e&&{...v&&{echoCancellation:!0},...y&&{noiseSuppression:!0}},video:"video"===e&&{facingMode:n}});if(M&&"audio"===e&&(M.audioStream=t),"video"===e){const e=document.createElement("video");e.srcObject=t;const n=new s.A;e.oncanplay=()=>n.resolve(),await n.promise}return t}async function W(e,n=void 0){if(!(M&&M.myId&&M.connection&&M.streams))return void R("toggle stream skipped: missing state",{streamType:e,hasState:Boolean(M)});const t=J(M.myId)?.[e];if(!t)return void R("toggle stream skipped: missing stream",{streamType:e,myId:M.myId});const i=t.getTracks()[0];if(!i)return void R("toggle stream skipped: missing track",{streamType:e,stream:D(t)});const a=[...M.connection.getSenders(),...M.screenshareConnection?.getSenders()||[]].find(e=>i.id===e.track?.id);if(a){n=void 0===n?!i.enabled:n;try{if(n&&!i.enabled){const n=await H(e);if(await a.replaceTrack(n.getTracks()[0]),M.streams[M.myId][e]=n,"video"===e)M.facingMode="user";else if("audio"===e){const{audioContext:e}=M;if(!e)return;const t=M.audioSource||e.createMediaStreamSource(n),i=M.audioAnalyser||e.createAnalyser();i.minDecibels=-100,i.maxDecibels=-30,i.smoothingTimeConstant=.05,i.fftSize=1024,t.connect(i),M={...M,audioSource:t,audioAnalyser:i,participantFunctions:{...M.participantFunctions,[M.myId]:{...M.participantFunctions?.[M.myId],getCurrentAmplitude:()=>{const e=new Uint8Array(i.frequencyBinCount);return i.getByteFrequencyData(e),m(e,1.5)}}}}}}else if(!n&&i.enabled){const n="audio"===e?M.silence:M.black;if(!n)return;await a.replaceTrack(n.getTracks()[0]),M.streams[M.myId][e]=n,"video"===e&&(M.facingMode=void 0),"audio"!==e?i.stop():(M.audioSource?.disconnect(),M.audioAnalyser?.disconnect())}K(M.myId),"presentation"!==e||n||j(!0)}catch(t){R("toggle stream failed",{streamType:e,shouldEnable:n,error:V(t)})}}else R("toggle stream skipped: missing sender",{streamType:e,track:$(i)})}function Z(e){R("connection state update",{connectionState:e}),M?.onUpdate?.({"@type":"updateGroupCallConnectionState",connectionState:e})}function Q(){M&&(R("leave",{myId:M.myId,connection:F(M.connection),screenshareConnection:F(M.screenshareConnection),streamUserCount:Object.keys(M.streams||{}).length}),M.myId&&M.streams?.[M.myId]&&Object.values(M.streams[M.myId]||{}).forEach(e=>{e?.getTracks().forEach(e=>{e.stop()})}),M.audioStream?.getTracks().forEach(e=>{e.stop()}),j(!0),M.dataChannel?.close(),M.connection?.close(),Z("disconnected"),M.analyserInterval&&clearInterval(M.analyserInterval),M.participantFunctions&&Object.values(M.participantFunctions).forEach(({dispose:e})=>{e?.()}),M=void 0)}function X(){M&&M.participantFunctions&&Object.keys(M.participantFunctions).forEach(e=>{const n=M.participantFunctions[e];if(!n)return;const{getCurrentAmplitude:t}=n;if(t){const n=t(),i=M.speaking[e]||0;M.speaking[e]=n,(n>f&&i<=f||n<=f&&i>f)&&K(e)}})}function ee(){const e=function(){const e=[];return M?.conference?.ssrcs?.forEach(n=>{n.isVideo&&!n.isRemoved&&n.userId&&n.endpoint&&(e.includes(n.endpoint)||e.push(n.endpoint))}),e}(),n={};e.forEach(e=>{n[e]={minHeight:0,maxHeight:720}}),function(e){if(!M?.dataChannel||"open"!==M.dataChannel.readyState)return R("data channel send skipped",{colibriClass:e.colibriClass,hasDataChannel:Boolean(M?.dataChannel),readyState:M?.dataChannel?.readyState}),!1;const n=JSON.stringify(e);M.dataChannel.send(n)}({colibriClass:"ReceiverVideoConstraints",defaultConstraints:{maxHeight:0},constraints:n,onStageEndpoints:e})}async function ne(e){if(!M)return void R("participants update skipped: missing state",{participantCount:e.length});const{participants:n,conference:t,connection:i,myId:a}=M;if(!(n&&t&&i&&t.ssrcs&&t.transport&&a))return void R("participants update skipped: incomplete state",{participantCount:e.length,hasParticipants:Boolean(n),hasConference:Boolean(t),hasConnection:Boolean(i),hasSsrcs:Boolean(t?.ssrcs),hasTransport:Boolean(t?.transport),myId:a});if(e.find(e=>e.isSelf&&e.source!==M?.conference?.ssrcs?.find(e=>e.isMain&&!e.isVideo)?.sourceGroups[0].sources[0]))return R("participants update detected self source mismatch; leaving",{participants:e.map(O),mainAudioSource:M?.conference?.ssrcs?.find(e=>e.isMain&&!e.isVideo)?.sourceGroups[0].sources[0]}),void Q();if(e.forEach(e=>{if(e.isSelf)return void(e.isMuted&&!e.canSelfUnmute&&(W("audio",!1),W("video",!1),W("presentation",!1)));const{isLeft:n}=e,i=e.isMuted||e.isMutedByMe,a=!e.isVideoJoined||!e.video||n,o=!e.presentation||n;let r=!1,s=!1,c=!1;t.ssrcs.filter(n=>n.userId===e.id).forEach(n=>{n.isVideo||(n.sourceGroups[0].sources[0]===e.source&&(s=!0),n.isRemoved=i),n.isVideo&&(n.isPresentation||(Boolean(e.video)&&n.endpoint===e.video.endpoint&&(r=!0),n.isRemoved=a),n.isPresentation&&(Boolean(e.presentation)&&n.endpoint===e.presentation.endpoint&&(c=!0),n.isRemoved=o))}),i||s||(M.lastMid=M.lastMid+1,R("participant audio source added",{participant:O(e),mid:M.lastMid.toString()}),t.ssrcs.push({userId:e.id,isMain:!1,endpoint:`audio${e.source}`,isVideo:!1,sourceGroups:[{sources:[e.source]}],mid:M.lastMid.toString()})),a||r||!e.video||(M.lastMid=M.lastMid+1,R("participant video source added",{participant:O(e),endpoint:e.video.endpoint,mid:M.lastMid.toString(),sourceGroups:e.video.sourceGroups}),t.ssrcs.push({userId:e.id,isMain:!1,endpoint:e.video.endpoint,isVideo:!0,sourceGroups:e.video.sourceGroups,mid:M.lastMid.toString()})),o||c||!e.presentation||(M.lastMid=M.lastMid+1,R("participant presentation source added",{participant:O(e),endpoint:e.presentation.endpoint,mid:M.lastMid.toString(),sourceGroups:e.presentation.sourceGroups}),t.ssrcs.push({isPresentation:!0,userId:e.id,isMain:!1,endpoint:e.presentation.endpoint,isVideo:!0,sourceGroups:e.presentation.sourceGroups,mid:M.lastMid.toString()}))}),M.updatingParticipantsQueue)return void M.updatingParticipantsQueue.push(t);M.updatingParticipantsQueue=[];const o=C(t);try{await i.setRemoteDescription({type:"offer",sdp:o});const e=await i.createAnswer();if(await i.setLocalDescription(e),ee(),K(a),M.updatingParticipantsQueue.length>0)for(const e of M.updatingParticipantsQueue){const n=C(e);await i.setRemoteDescription({type:"offer",sdp:n});const t=await i.createAnswer();await i.setLocalDescription(t),ee(),K(a)}}catch(e){R("participants negotiation failed",{error:V(e),connection:F(i)})}finally{M&&(M.updatingParticipantsQueue=void 0)}}function te(e){if(!(M&&M.audioElement&&M.audioContext&&M.mediaStream))return void R("remote track skipped: incomplete state",{track:$(e.track),streamCount:e.streams.length,hasState:Boolean(M),hasAudioElement:Boolean(M?.audioElement),hasAudioContext:Boolean(M?.audioContext),hasMediaStream:Boolean(M?.mediaStream)});const n=M.conference?.ssrcs?.find(n=>n.endpoint===e.track.id);if(!n||!n.userId)return void R("remote track skipped: no matching ssrc",{track:$(e.track),endpoint:e.track.id,conference:G(M.conference)});const{userId:t,isPresentation:i}=n,a=M.participants?.find(e=>e.id===t),o="video"===e.track.kind?i?"presentation":"video":"audio";e.track.onended=()=>{R("remote track ended",{userId:t,streamType:o,track:$(e.track)}),"audio"===o&&M?.streams?.[t]?.audio===r&&(M.participantFunctions?.[t]?.dispose?.(),delete M.participantFunctions?.[t]),delete M?.streams?.[t][o],K(t)},e.track.onmute=()=>{},e.track.onunmute=()=>{};const r=e.streams[0];if(r){if("audio"===e.track.kind){const{audioContext:e}=M;M.participantFunctions?.[t]?.dispose?.();const n=e.createMediaStreamSource(r),i=e.createGain();i.gain.value=(a?.volume||1e4)/1e4;const o=e.createGain();o.gain.value=M.isSpeakerDisabled?0:1;const s=e.createAnalyser();s.minDecibels=-100,s.maxDecibels=-30,s.smoothingTimeConstant=.05,s.fftSize=1024,n.connect(s).connect(o).connect(i).connect(e.destination);const c=new Audio;c.srcObject=r,c.muted=!0,c.remove(),M={...M,participantFunctions:{...M.participantFunctions,[t]:{...M.participantFunctions?.[t],setVolume:e=>{i.gain.value=e>1?2*e:e},toggleMute:e=>{o.gain.value=e?0:1},getCurrentAmplitude:()=>{const e=new Uint8Array(s.frequencyBinCount);return s.getByteFrequencyData(e),m(e,1.5)},dispose:()=>{n.disconnect(),s.disconnect(),o.disconnect(),i.disconnect()}}}}}M={...M,streams:{...M.streams,[t]:{...M.streams?.[t],[o]:r}}},K(t)}else R("remote track skipped: missing stream",{userId:t,streamType:o,track:$(e.track)})}function ie(e,n,t=!1){const i=new RTCPeerConnection,a=t?void 0:function(e){const n=e.createDataChannel("data",{id:0});return n.onopen=()=>{ee()},n.onmessage=e=>{if("string"!=typeof e.data)return void R("data channel non-string message",{dataType:typeof e.data});let n;try{n=JSON.parse(e.data)}catch(n){return void R("data channel message parse failed",{dataLength:e.data.length,error:V(n)})}n.colibriClass},n.onerror=e=>{R("data channel error",{id:n.id,label:n.label,readyState:n.readyState,error:e instanceof ErrorEvent?e.message:V(e)})},n}(i);return e.forEach(e=>e.getTracks().forEach(n=>{i.addTrack(n,e)})),t||(i.oniceconnectionstatechange=()=>{const e=i.iceConnectionState;"connected"===e||"completed"===e?Z("connected"):"checking"===e||"new"===e?Z("connecting"):"disconnected"===i.iceConnectionState&&Z("reconnecting")}),i.ontrack=te,i.onnegotiationneeded=async()=>{if(!M)return;const{myId:a}=M;if(!a)return;let o=await i.createOffer({offerToReceiveVideo:!0,offerToReceiveAudio:!t});if(t&&o.sdp&&(o={...o,sdp:_(o.sdp)}),R("local offer created",{isPresentation:t,sdp:o.sdp?E(o.sdp,!0):void 0}),await i.setLocalDescription(o),!o.sdp)return;const r=((e,n=!1)=>{if(!e.sdp)return;const t=b(e.sdp).reduce((e,n)=>{const t="session"===n.kind?"header":n.kind;return e[e.hasOwnProperty(t)&&"video"===t?"screencast":t]=n,e},{}),i=(e,n)=>w(Object.values(t),e,n?t[n]:void 0),a=(e,n)=>t[n]?.lines.filter(n=>n.startsWith(e)).map(n=>n.slice(e.length))||[],o=e=>A(t[e]),r=e=>P(t[e]),s=i("a=ssrc:","audio"),c=s&&Number(s.split(" ")[0]),d=a("a=ssrc-group:","video").map(e=>e.split(" ")),l=a("a=ssrc-group:","screencast").map(e=>e.split(" "));if(!d.length)return;const[p,m]=i("a=fingerprint:")?.split(" ")||[],g=i("a=setup:");if(!p||!m)return;const f=i("a=ice-ufrag:"),h=i("a=ice-pwd:");if(!f||!h)return;const v={fingerprints:[{fingerprint:m,hash:p,setup:"active"===g||"passive"===g?g:"passive"}],pwd:h,ufrag:f};c&&(v.ssrc=u(c));const y=N(d);if(!y.length)return;if(n&&l.length&&y.push(...N(l)),v["ssrc-groups"]=y,!n)return v;const C=Boolean(t.screencast);try{return{...v,audioExtmap:o("audio"),videoExtmap:o("video"),screencastExtmap:C?o("screencast"):[],audioPayloadTypes:r("audio"),videoPayloadTypes:r("video"),screencastPayloadTypes:C?r("screencast"):[]}}catch{return}})(o);if(!r)return R("local offer parse failed",{isPresentation:t}),void n(void 0);t&&!r.ssrc&&(r.ssrc=function(e){const n=e?.[0]?.sources[0];if(n)return u(p(n)-1)}(r["ssrc-groups"]));const s=t?void 0:{userId:"",sourceGroups:[{sources:[r.ssrc||0]}],isRemoved:t,isMain:!0,isVideo:!1,isPresentation:t,endpoint:t?"1":"0",mid:t?"1":"0"},c=r["ssrc-groups"]&&{isPresentation:t,userId:"",sourceGroups:r["ssrc-groups"],isMain:!0,isVideo:!0,endpoint:t?"0":"1",mid:t?"0":"1"},d=t?M.screenshareConference:M.conference,l=[];t?(c&&l.push(c),s&&l.push(s)):(s&&l.push(s),c&&l.push(c));const m=e.find(e=>"audio"===e.getTracks()[0].kind),g=e.find(e=>"video"===e.getTracks()[0].kind);M={...M,...t?{screenshareConference:{...d,ssrcs:l}}:{conference:{...d,ssrcs:l}},streams:{...M.streams,[a]:{...M.streams?.[a],...m&&{audio:m},...!t&&g?{video:g}:{presentation:g}}}},K(a),n(r)},{connection:i,dataChannel:a}}let ae=Promise.resolve();function oe(){T?.onUpdate({...T.remoteMediaState,"@type":"updatePhoneCallMediaState"})}function re(e,n={}){o._5g&&(0,r.bO)("debug",`[PhoneCall][P2P] ${e}`,JSON.stringify(n),n)}function se(e,n={}){(0,r.bO)("warn",`[PhoneCall][P2P] ${e}`,JSON.stringify(n),n)}function ce(e,n="user"){if("presentation"===e)return navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0});const t="audio"===e&&{echoCancellation:!!v||void 0,noiseSuppression:!!y||void 0},i="video"===e&&{facingMode:n};return navigator.mediaDevices.getUserMedia({audio:t,video:i})}function de(e){return e?.getTracks()[0]}function le(e){return"live"===de(e)?.readyState}function ue(e){if(T)return"audio"===e?T.senders.audio:"video"===e?T.senders.video:T.senders.presentation}function pe(e,n){T&&("audio"===e?T.streams.ownAudio=n:"video"===e?T.streams.ownVideo=n:T.streams.ownPresentation=n)}async function me(e,n=void 0){if(!T)return;const t=function(e){if(T)return"audio"===e?T.streams.ownAudio:"video"===e?T.streams.ownVideo:T.streams.ownPresentation}(e),i=de(t),a=ue(e);if(!i||"audio"===e&&!a)return void re("toggle skipped: missing track or sender",{streamType:e,track:Le(i),hasSender:Boolean(a)});const o=void 0===n?!i.enabled:n;try{let n=!1,r=!1;if(o&&!i.enabled){const t="video"===e?T.facingMode||"user":void 0,i=await ce(e,t),o=de(i);if(!o)return void ye(i);try{o.onended=()=>{me(e,!1)};let n=function(e){if(T)return"audio"===e?T.transceivers.audio:"video"===e?T.transceivers.video:T.transceivers.presentation}(e);"audio"===e||a&&n&&"stopped"!==n.currentDirection?await a.replaceTrack(o):(n=T.connection.addTransceiver(o,{direction:"sendrecv",streams:[i]}),function(e,n){T&&("video"===e?(T.transceivers.video=n,T.senders.video=n.sender):(T.transceivers.presentation=n,T.senders.presentation=n.sender))}(e,n),r=!0),n&&"audio"!==e&&(r||=!n.mid||"inactive"===n.currentDirection,n.direction="sendrecv"),pe(e,i)}catch(e){throw ye(i),e}n=!0,"video"===e?(T.facingMode=t,T.isUpdatingExclusiveVideo=!0,await me("presentation",!1),T.isUpdatingExclusiveVideo=!1):"presentation"===e&&(T.isUpdatingExclusiveVideo=!0,await me("video",!1),T.isUpdatingExclusiveVideo=!1)}else if(!o&&i.enabled){const i=function(e){if(T)return"audio"===e?T.silence:"video"===e?T.blackVideo:T.blackPresentation}(e),o=de(i);if(!i||!o)return;if(!a)return;try{await a.replaceTrack(o)}catch(n){return void re("toggle failed replacing stream with fallback",{error:n instanceof Error?n.message:String(n),streamType:e})}ye(t,i),pe(e,i),n=!0}if(!n)return;oe(),be(),r=r&&!T.isStarting&&!T.isUpdatingExclusiveVideo&&("video"===e||"presentation"===e),r&&we()}catch(n){re("toggle failed",{streamType:e,shouldEnable:o,error:n instanceof Error?{name:n.name,message:n.message}:String(n)})}}function ge(){T&&(ye(T.streams.ownVideo),ye(T.streams.ownPresentation),ye(T.streams.ownAudio),ye(T.blackVideo),ye(T.blackPresentation),ye(T.silence),T.dataChannel?.close(),T.connection.close(),T.audio.srcObject=new MediaStream,T.audioContext.close().catch(()=>{}),T=void 0)}function fe(e,n){if(!T||!e.mid)return!1;const[,t,i]=Te(T.pendingRemoteNegotiation?.contents||[]),a=n?i:t;return Boolean(a&&T.pendingRemoteContentMids?.[a.ssrc]===e.mid)}function he(e,n){const t=[];return e.forEach(e=>{const i=[];e.isTurn&&(i.push(ve("turn",e.ip,e.port)),e.ipv6&&i.push(ve("turn",e.ipv6,e.port))),n&&e.isStun&&(i.push(ve("stun",e.ip,e.port)),e.ipv6&&i.push(ve("stun",e.ipv6,e.port))),i.length&&t.push({urls:i,username:e.username,credential:e.password})}),t}function ve(e,n,t){return`${e}:${n.includes(":")&&!n.startsWith("[")?`[${n}]`:n}:${t}`}function ye(e,n){e&&e!==n&&e.getTracks().forEach(e=>{e.stop()})}function Ce(e){T&&(T.dataChannel=e,e.onopen=()=>{be()},e.onclose=()=>{},e.onerror=()=>{re("data channel error",{id:e.id,readyState:e.readyState})},e.onmessage=e=>{if("string"!=typeof e.data)return void re("data channel non-string message",{dataType:typeof e.data});let n;try{n=JSON.parse(e.data)}catch(n){return void re("data channel message parse failed",{dataLength:e.data.length,dataType:typeof e.data,error:n instanceof Error?n.message:String(n)})}(function(e){return ae=ae.catch(()=>{}).then(()=>Ye(e)),ae})(n).catch(e=>{re("data channel signaling message failed",{error:e instanceof Error?e.message:String(e),messageType:n["@type"]})})})}function be(){if(!T||"open"!==T.dataChannel?.readyState)return;const e=de(T.streams.ownAudio),n=de(T.streams.ownVideo),t=de(T.streams.ownPresentation),i={"@type":"MediaState",videoRotation:0,muted:!e?.enabled,lowBattery:!1,videoState:n?.enabled?"active":"inactive",screencastState:t?.enabled?"active":"inactive"};T.dataChannel.send(JSON.stringify(i))}function Se(){if(!T)return{audio:"0",video:"1",presentation:"2",data:"3"};const e=T.connection.localDescription?.sdp,n=e?b(e).find(e=>"application"===e.kind)?.mid:void 0;return{audio:T.transceivers.audio.mid||"0",video:T.transceivers.video?.mid||"1",presentation:T.transceivers.presentation?.mid||"2",data:n||"3"}}async function we(){if(!T||T.isMakingOffer||"closed"===T.connection.signalingState)return;const{connection:e}=T;T.isMakingOffer=!0,re("create offer",{signalingState:e.signalingState,transceivers:Ge()});try{const n=await e.createOffer();if(!T)return;const t=String(++T.exchangeId);T.localCandidateExchangeId=t,await e.setLocalDescription(n),function(e,n){if(!T||!e?.sdp)return;const t=De(e.sdp,Se(),xe()),i=n||String(++T.exchangeId);"offer"===e.type&&(T.pendingLocalContentMids=Be(e.sdp,t)),T.localCandidateExchangeId=i,re("send local negotiation",{exchangeId:i,type:e.type,signalingState:T.connection.signalingState,contents:Oe(t),contentMids:T.pendingLocalContentMids,sdp:E(e.sdp),transceivers:Ge()}),ke(e),T.pendingLocalExchangeId=i,T.emitSignalingData({"@type":"NegotiateChannels",exchangeId:i,contents:t})}(e.localDescription||void 0,t)}catch{re("create offer failed",{signalingState:e.signalingState})}finally{T&&(T.isMakingOffer=!1)}}async function Ie(){if(!T||!T.remoteSetup||!T.pendingRemoteNegotiation?.contents.length)return;if(T.isApplyingRemoteNegotiation)return void re("remote negotiation already applying",{exchangeId:T.pendingRemoteNegotiation.exchangeId});const{connection:e,remoteSetup:n,pendingLocalExchangeId:t,pendingRemoteNegotiation:i}=T,a=i.exchangeId===t;if(a&&"have-local-offer"!==e.signalingState)return re("apply logical remote answer",{exchangeId:i.exchangeId,signalingState:e.signalingState,contents:Oe(i.contents)}),T.pendingLocalExchangeId=void 0,T.pendingLocalContentMids=void 0,T.handledRemoteExchangeIds.add(i.exchangeId),void(T.pendingRemoteNegotiation=void 0);a||(function(e){if(!T)return;const n=e.some(e=>"audio"===e.type),t=e.filter(e=>"video"===e.type).length,i=n&&!T.transceivers.audio.mid;i?T.transceivers.audio.direction="sendrecv":n&&!Ae("remoteAudio","audio","recvonly")&&(T.transceivers.remoteAudio=T.connection.addTransceiver("audio",{direction:"recvonly"})),t>=1&&!Ae("remoteVideo","video","recvonly")&&(T.transceivers.remoteVideo=T.connection.addTransceiver("video",{direction:"recvonly"})),t>=2&&!Ae("remotePresentation","video","recvonly")&&(T.transceivers.remotePresentation=T.connection.addTransceiver("video",{direction:"recvonly"})),n&&!i||Ae("remoteAudio","audio","inactive"),t<1&&Ae("remoteVideo","video","inactive"),t<2&&Ae("remotePresentation","video","inactive")}(i.contents),T.pendingRemoteContentMids=function(e){if(!T)return{};const[n,t,i]=Te(e),a={};return n&&(a[n.ssrc]=T.transceivers.audio.mid?T.transceivers.remoteAudio?.mid||n.ssrc:Se().audio),t&&(a[t.ssrc]=T.transceivers.remoteVideo?.mid||t.ssrc),i&&(a[i.ssrc]=T.transceivers.remotePresentation?.mid||i.ssrc),a}(i.contents));const o=function(e,n,t){const i=Se(),a=Te(n),[o,r,s]=a,c=r||s,d=function(e){const n=T?.connection.localDescription?.sdp?b(T.connection.localDescription.sdp):[],t=n.find(n=>n.mid===e.audio),i=n.find(n=>n.mid===e.video)||n.find(n=>n.mid===e.presentation);return{audioPayloadTypes:"audio"===t?.kind?P(t).map(g):[{id:111,name:"opus",clockrate:48e3,channels:2,parameters:{minptime:10,useinbandfec:1}}],audioExtensions:"audio"===t?.kind?A(t):[],videoPayloadTypes:"video"===i?.kind?P(i).map(g):[{id:96,name:"VP8",clockrate:9e4,channels:0}],videoExtensions:"video"===i?.kind?A(i):[]}}(i),l=T?.pendingRemoteContentMids||{},u=!t&&Boolean(o)&&!T?.transceivers.audio.mid,p=u||t?i.audio:o?l[o.ssrc]:i.audio,m=t?i.video:r?l[r.ssrc]:i.video,f=t?i.presentation:s?l[s.ssrc]:i.presentation,h="offer"===T?.connection.localDescription?.type?T.connection.localDescription.sdp:void 0,v=u?"sendrecv":void 0,y=t?function(e,n){let t=0;return e.map(e=>{const i=T?.pendingLocalContentMids?.[e.ssrc]||("audio"===e.type?n.audio:t++?n.presentation:n.video);return Ve(e,i,"video"===e.type,i===n.presentation)})}(n,i):[{...Ve(o,p,!1),direction:v},Ve(r,m,!0),Ve(s,f,!0,!0)];return!t&&function(e,n){const t=T?.transceivers.audio.sender.track,i=Ne()||[];return Boolean(t?.enabled)&&!e.some(e=>e.mid===n.audio&&!e.isRemoved)&&!i.some(e=>e.mid===n.audio)}(y,i)&&y.push({...Ve(void 0,i.audio,!1),isLocalOnly:!0,isRemoved:!1}),function({setup:e,mids:n,isAnswer:t,entries:i,audioPayloadTypes:a,audioExtensions:o,videoPayloadTypes:r,videoExtensions:s,sectionOrder:c,bundleMids:d}){const l=[],u=e=>{l.push(e)},p=n=>{u(`a=ice-ufrag:${e.ufrag}`),u(`a=ice-pwd:${e.pwd}`),e.fingerprints.forEach(e=>{u(`a=fingerprint:${e.hash} ${e.fingerprint}`);const i=t?function(e,n){const t=Ee()?.find(n=>n.mid===e)?.lines.find(e=>e.startsWith("a=setup:"))?.slice(8);return"active"===t?"passive":"passive"===t?"active":"active"===n||"passive"===n?n:"passive"}(n,e.setup):e.setup;u(`a=setup:${i}`)})},m=e=>{const n=e.channels?`/${e.channels}`:"";if(u(`a=rtpmap:${e.id} ${e.name}/${e.clockrate}${n}`),e.parameters){const n=Object.keys(e.parameters).map(n=>`${n}=${e.parameters[n]}`).join(";");u(`a=fmtp:${e.id} ${n}`)}e["rtcp-fbs"]?.forEach(n=>{u(`a=rtcp-fb:${e.id} ${n.type}${n.subtype?` ${n.subtype}`:""}`)})},g=(e,n,i,a,o=!0,r)=>{a=a||(e.isVideo?"video":"audio");const s=e.isRemoved&&o?0:9;u(`m=${a} ${s} UDP/TLS/RTP/SAVPF ${n.map(e=>e.id).join(" ")}`),u("c=IN IP4 0.0.0.0"),u(`a=mid:${e.mid}`),0!==s?(u("b=AS:1300"),u("a=rtcp-mux"),n.forEach(m),u("a=rtcp:1 IN IP4 0.0.0.0"),e.isVideo&&u("a=rtcp-rsize"),i.forEach(({id:e,uri:n})=>{u(`a=extmap:${e} ${n}`)}),p(e.mid),e.isRemoved?u("a=inactive"):(u(`a=${r||e.direction||(t?"recvonly":"sendonly")}`),t||"recvonly"===r||e.sourceGroups.forEach(n=>{n.semantics&&u(`a=ssrc-group:${n.semantics} ${n.sources.join(" ")}`),n.sources.forEach(n=>{u(`a=ssrc:${n} cname:${e.endpoint}`),u(`a=ssrc:${n} msid:${e.endpoint} ${e.endpoint}`),u(`a=ssrc:${n} mslabel:${e.endpoint}`),u(`a=ssrc:${n} label:${e.endpoint}`)})}))):u("a=inactive")},f=(e,n=!1)=>{u(`m=application ${n?0:1} UDP/DTLS/SCTP webrtc-datachannel`),u("c=IN IP4 0.0.0.0"),u(`a=mid:${e}`),n?u("a=inactive"):(p(e),u("a=ice-options:trickle"),u("a=sctp-port:5000"),u("a=max-message-size:262144"))},h=e=>{const n=i.find(n=>n.mid===e.mid)||Ve(void 0,e.mid||"","video"===e.kind),c=!t&&n.isRemoved&&function(e){if("audio"!==e.kind&&"video"!==e.kind)return!1;const n=I(e);return 0!==k(e)&&("recvonly"===n||"sendrecv"===n)}(e),l=t&&n.isRemoved&&function(e){if(!T||"recvonly"!==I(e))return!1;const n=e.mid;return"audio"===e.kind?n===T.transceivers.remoteAudio?.mid&&le(T.streams.audio):"video"===e.kind&&(n===T.transceivers.remoteVideo?.mid&&le(T.streams.video)||n===T.transceivers.remotePresentation?.mid&&le(T.streams.presentation))}(e),u=c||l?{...n,isRemoved:!1}:n,p=t&&!$e(e,d),m=p?{...u,isRemoved:!0}:u,g=t&&(m.isRemoved||p),f="audio"===e.kind?a:r,h="audio"===e.kind?o:s;return{direction:l?"sendonly":m.isLocalOnly||c?"recvonly":void 0,extensions:h,mediaEntry:m,payloadTypes:f,shouldRejectRemoved:g}},v=(c?.map(e=>{const i=e.mid||("application"===e.kind?n.data:void 0);if(!i)return;if("application"===e.kind)return t?$e(e,d)?i:void 0:i;const{mediaEntry:a,shouldRejectRemoved:o}=h(e);return a.isRemoved&&o?void 0:a.mid}).filter(Boolean)||[...i.filter(e=>!e.isRemoved).map(e=>e.mid),n.data]).concat(t?[]:i.filter(e=>!e.isRemoved&&!c?.some(n=>n.mid===e.mid)).map(e=>e.mid)),y=new Set,C=v.filter(e=>!y.has(e)&&(y.add(e),!0));return re("generated P2P SDP bundle mids",{isAnswer:t,bundledMids:C}),u("v=0"),u(`o=- ${Date.now()} 2 IN IP4 0.0.0.0`),u("s=-"),u("t=0 0"),u("a=ice-options:trickle"),u("a=msid-semantic:WMS *"),u(`a=group:BUNDLE ${C.join(" ")}`),c?.length?(c.forEach(e=>{if("application"===e.kind){const i=e.mid||n.data,a=t&&!$e(e,d);return void f(i,a)}const{direction:i,extensions:a,mediaEntry:o,payloadTypes:r,shouldRejectRemoved:s}=h(e);g(o,r,a,e.kind,s,i)}),i.filter(e=>!c.some(n=>n.mid===e.mid)).forEach(e=>{const n=e.isVideo?r:a,t=e.isVideo?s:o;g(e,n,t,void 0,!0,e.isLocalOnly?"recvonly":void 0)})):(i.forEach(e=>{const n=e.isVideo?r:a,t=e.isVideo?s:o;g(e,n,t,void 0,!0,e.isLocalOnly?"recvonly":void 0)}),f(n.data)),`${l.join("\r\n")}\r\n`}({setup:e,mids:i,isAnswer:t,entries:y,audioPayloadTypes:o?.payloadTypes?.map(g)||d.audioPayloadTypes,audioExtensions:o?.rtpExtensions||d.audioExtensions,videoPayloadTypes:Re(c)?.map(g)||d.videoPayloadTypes,videoExtensions:c?.rtpExtensions||d.videoExtensions,sectionOrder:t?Ee():Ne(),bundleMids:t&&h?S(h):void 0})}(n,i.contents,a);re("apply remote negotiation",{exchangeId:i.exchangeId,type:a?"answer":"offer",signalingState:e.signalingState,contents:Oe(i.contents),sdp:E(o),transceivers:Ge()}),T.isApplyingRemoteNegotiation=!0;try{if(a||"have-local-offer"!==e.signalingState||T.isOutgoing||(re("rollback local offer for remote offer glare",{exchangeId:i.exchangeId}),await e.setLocalDescription({type:"rollback"}),T.pendingLocalExchangeId=void 0),a&&"have-local-offer"!==e.signalingState)return void re("ignore remote answer in wrong signaling state",{exchangeId:i.exchangeId,signalingState:e.signalingState});if(!a&&"stable"!==e.signalingState)return void re("ignore remote offer in wrong signaling state",{exchangeId:i.exchangeId,signalingState:e.signalingState});if(a||re("prepared transceivers for remote offer",{exchangeId:i.exchangeId,transceivers:Ge()}),a&&function(e,n){if(!e)return;const t=new Set(S(e)||[]),i=new Set(S(n)||[]),a=b(e).filter(e=>"session"!==e.kind),o=b(n).filter(e=>"session"!==e.kind),r=a.map((e,n)=>{const a=o[n];return{index:n,offer:Me(e,t),answer:a?Me(a,i):void 0}}),s=r.flatMap(({answer:e,index:n,offer:t})=>{if(!e)return[`m-line ${n} is missing in answer`];const i=[];return e.mid!==t.mid&&i.push(`m-line ${n} mid mismatch`),0===e.port||e.isBundled||i.push(`m-line ${n} is active but not bundled`),0!==t.port||t.hasBundleOnly||0===e.port||i.push(`m-line ${n} answer activates rejected offer section`),0!==e.port&&e.hasBundleOnly&&i.push(`m-line ${n} active answer m-line has bundle-only`),0===e.port||"audio"!==e.kind&&"video"!==e.kind||e.hasRtcpMux||i.push(`m-line ${n} is active RTP without rtcp-mux`),0!==e.port&&"video"===e.kind&&"recvonly"!==e.direction&&"sendrecv"!==e.direction&&i.push(`m-line ${n} active video direction is ${e.direction||"missing"}`),0===e.port||0===t.port||t.isBundled||i.push(`m-line ${n} answers an unbundled offer section`),i}),c={mLines:r,issues:s};s.length?se("remote answer SDP validation failed",c):re("remote answer SDP validation passed",c)}(e.localDescription?.sdp,o),await e.setRemoteDescription({type:a?"answer":"offer",sdp:o}),T.appliedRemoteExchangeId=i.exchangeId,T.appliedRemoteExchangeIds.add(i.exchangeId),T.appliedRemoteUfrag=n.ufrag,re("remote description applied",{exchangeId:i.exchangeId,type:a?"answer":"offer",ufrag:n.ufrag,signalingState:e.signalingState,transceivers:Ge()}),a||(Pe(i.contents),await async function(){if(!T||T.transceivers.audio.mid)return;const e=T.senders.audio.track;if(!e?.enabled)return;const n=Se().audio,t=T.connection.getTransceivers().find(e=>e.mid===n&&"audio"===e.receiver.track.kind);t&&t!==T.transceivers.audio&&(await t.sender.replaceTrack(e),t.direction="sendrecv",T.transceivers.audio=t,T.senders.audio=t.sender,T.transceivers.remoteAudio=void 0,re("bound local audio to shared remote offer transceiver",{mid:t.mid,track:Le(e),transceivers:Ge()}))}()),await Ue(),a)T.pendingLocalExchangeId=void 0,T.pendingLocalContentMids=void 0;else{const n=await e.createAnswer();if(!T)return;T.localCandidateExchangeId=i.exchangeId,await e.setLocalDescription(n);const t=e.localDescription||void 0,a=t?.sdp?function(e,n,t){const i=b(e),a=i.find(e=>e.mid===t.audio),o=[i.find(e=>e.mid===t.video),i.find(e=>e.mid===t.presentation)].filter(Boolean);let r=0;return n.map(e=>{const n=T?.pendingRemoteContentMids?.[e.ssrc],t=n?i.find(e=>e.mid===n):"audio"===e.type?a:o[r++];if(!t||0===k(t))return;const s=I(t);if("recvonly"!==s&&"sendrecv"!==s)return;const c=Fe(t,e.type,e);return c.payloadTypes?.length?c:void 0}).filter(Boolean)}(t.sdp,i.contents,Se()):[];Pe(a),re("send local answer negotiation",{exchangeId:i.exchangeId,contents:Oe(a),sdp:t?.sdp?E(t.sdp):void 0,transceivers:Ge()}),ke(t),T.emitSignalingData({"@type":"NegotiateChannels",exchangeId:i.exchangeId,contents:a}),T&&!T.isOutgoing&&!T.pendingLocalExchangeId&&Boolean(de(T.streams.ownAudio)?.enabled||de(T.streams.ownVideo)?.enabled||de(T.streams.ownPresentation)?.enabled)&&(re("send local media offer after remote answer",{exchangeId:i.exchangeId,transceivers:Ge()}),function(){if(!T?.connection.localDescription?.sdp)return;const{localDescription:e}=T.connection,n=De(e.sdp,Se(),xe());if(!n.length)return;const t=String(++T.exchangeId);T.pendingLocalExchangeId=t,T.localCandidateExchangeId=t,T.pendingLocalContentMids=Be(e.sdp,n),re("send local media negotiation",{exchangeId:t,type:e.type,contents:Oe(n),contentMids:T.pendingLocalContentMids,sdp:E(e.sdp),transceivers:Ge()}),T.emitSignalingData({"@type":"NegotiateChannels",exchangeId:t,contents:n})}())}T.handledRemoteExchangeIds.add(i.exchangeId)}finally{T&&(T.pendingRemoteNegotiation?.exchangeId===i.exchangeId&&(T.pendingRemoteNegotiation=void 0,T.pendingRemoteContentMids=void 0),T.isApplyingRemoteNegotiation=!1,T.pendingLocalExchangeId||T.pendingRemoteNegotiation||!T.queuedRemoteNegotiation||(T.pendingRemoteNegotiation=T.queuedRemoteNegotiation,T.queuedRemoteNegotiation=void 0),T.pendingRemoteNegotiation&&Ie())}}function ke(e){if(!T||!e?.sdp)return;const n=function(e){const n=b(e),t=w(n,"a=ice-ufrag:"),i=w(n,"a=ice-pwd:"),a=function(e){const n=new Map;return e.forEach(t=>{const i=w(e,"a=fingerprint:",t);if(!i)return;const[a,o]=i.split(" "),r=w(e,"a=setup:",t)||"actpass";a&&o&&n.set(`${a}:${o}:${r}`,{hash:a,setup:r,fingerprint:o})}),Array.from(n.values())}(n),o=w(n,"a=ice-options:");if(!t||!i||!a.length)throw Error("Failed parsing SDP transport setup");return{"@type":"InitialSetup",ufrag:t,pwd:i,renomination:Boolean(o?.split(" ").includes("renomination")),fingerprints:a}}(e.sdp),t=JSON.stringify(n);T.lastLocalSetupKey!==t&&(T.lastLocalSetupKey=t,re("send initial setup",{setup:{ufrag:n.ufrag,fingerprintCount:n.fingerprints.length,renomination:n.renomination}}),T.emitSignalingData(n))}function xe(){return{hasVideo:Boolean(de(T?.streams.ownVideo)?.enabled),hasPresentation:Boolean(de(T?.streams.ownPresentation)?.enabled)}}function Ae(e,n,t){if(!T?.transceivers[e])return!1;try{const i=T.transceivers[e];return i.receiver.track.kind===n&&(i.direction=t,!0)}catch{return!1}}function Pe(e){if(!T)return;const n=e.filter(e=>"video"===e.type).length;T.remoteMediaState.videoState=n>=1?"active":"inactive",T.remoteMediaState.screencastState=n>=2?"active":"inactive",oe()}function Ee(){if(T?.connection.localDescription?.sdp&&"offer"===T.connection.localDescription.type)return b(T.connection.localDescription.sdp).filter(e=>"session"!==e.kind)}function Ne(){const e=T?.connection.remoteDescription?.sdp||T?.connection.localDescription?.sdp;if(e)return b(e).filter(e=>"session"!==e.kind)}function Me(e,n){return{kind:e.kind,mid:e.mid,port:k(e),direction:I(e),hasRtcpMux:e.lines.includes("a=rtcp-mux"),hasBundleOnly:e.lines.includes("a=bundle-only"),isBundled:Boolean(e.mid&&n.has(e.mid))}}function Te(e){const n=e.find(e=>"audio"===e.type),t=e.filter(e=>"video"===e.type);return[n,t[0],t[1]]}function Re(e){const n=e?.payloadTypes;if(!n?.length)return;const t=RTCRtpReceiver.getCapabilities("video")?.codecs||[],i=new Set(t.map(e=>e.mimeType.split("/")[1]?.toUpperCase()).filter(Boolean)),a=n.find(e=>"VP8"===e.name.toUpperCase()&&i.has("VP8"))||n.find(e=>"RTX"!==e.name.toUpperCase()&&i.has(e.name.toUpperCase()));if(!a)return;const o=[a],r=n.find(e=>"RTX"===e.name.toUpperCase()&&Number(e.parameters?.apt)===a.id);return r&&o.push(r),o}function Ve(e,n,t,i=!1){if(!e)return{isVideo:t,isPresentation:i,isMain:!1,isRemoved:!0,userId:"0",endpoint:n,mid:n,sourceGroups:[]};const a=e.ssrcGroups||[];return{isVideo:t,isPresentation:i,isMain:!1,userId:"0",endpoint:n,mid:n,sourceGroups:a.length?a.map(e=>({semantics:e.semantics,sources:e.ssrcs})):[{sources:[Number(e.ssrc)]}]}}function $e(e,n){return function(e,n){return Boolean(e.mid&&(!n||n.includes(e.mid)))}(e,n)&&!function(e){return 0===k(e)&&!function(e){return e.lines.includes("a=bundle-only")}(e)}(e)}function De(e,n,t){const i=b(e),a=[],o=i.find(e=>e.mid===n.audio),r=i.find(e=>e.mid===n.video),s=i.find(e=>e.mid===n.presentation);return o&&a.push(Fe(o,"audio")),r&&!1!==t?.hasVideo&&a.push(Fe(r,"video")),s&&!1!==t?.hasPresentation&&a.push(Fe(s,"video")),a}function Be(e,n){const t=b(e),i={};return n.forEach(e=>{const n=t.find(n=>n.mid&&x(n).includes(Number(e.ssrc)));n?.mid&&(i[e.ssrc]=n.mid)}),i}function Fe(e,n,t){const i=function(e){return e.lines.filter(e=>e.startsWith("a=ssrc-group:")).map(e=>{const[,n]=e.split(":"),[t,...i]=n.split(" ");return{semantics:t,ssrcs:i.map(Number)}})}(e),a=i[0]?.ssrcs[0]||x(e)[0]||Number(t?.ssrc);if(!a)throw Error("Failed parsing SDP media SSRC");return{type:n,ssrc:t?.ssrc||String(a),ssrcGroups:t?t.ssrcGroups||[]:i,payloadTypes:P(e),rtpExtensions:A(e)}}function Le(e){if(e)return{id:e.id,kind:e.kind,enabled:e.enabled,muted:e.muted,readyState:e.readyState,label:e.label}}function Ge(){return T?[{name:"audio",transceiver:T.transceivers.audio},{name:"remoteAudio",transceiver:T.transceivers.remoteAudio},{name:"video",transceiver:T.transceivers.video},{name:"remoteVideo",transceiver:T.transceivers.remoteVideo},{name:"presentation",transceiver:T.transceivers.presentation},{name:"remotePresentation",transceiver:T.transceivers.remotePresentation}].map(({name:e,transceiver:n})=>n?{name:e,mid:n.mid,direction:n.direction,currentDirection:n.currentDirection,senderTrack:Le(n.sender.track||void 0),receiverTrack:Le(n.receiver.track||void 0)}:{name:e}):[]}function Oe(e){return e.map((e,n)=>({index:n,type:e.type,ssrc:e.ssrc,ssrcGroups:e.ssrcGroups?.map(e=>({semantics:e.semantics,count:e.ssrcs.length}))||[],payloads:e.payloadTypes?.map(e=>`${e.id}:${e.name}`)||[],extensions:e.rtpExtensions?.map(e=>`${e.id}:${e.uri}`)||[]}))}async function Ye(e){if(T&&e)switch(e["@type"]){case"MediaState":{const n="inactive"===e.videoState&&le(T.streams.video)?"active":e.videoState,t="inactive"===e.screencastState&&le(T.streams.presentation)?"active":e.screencastState;T.remoteMediaState={isMuted:e.muted,isBatteryLow:e.lowBattery,videoState:n,videoRotation:e.videoRotation,screencastState:t},oe();break}case"Candidates":re("received ICE candidates",{exchangeId:e.exchangeId,ufrag:e.ufrag,pendingRemoteExchangeId:T.pendingRemoteNegotiation?.exchangeId,remoteDescriptionMids:je(T.connection),count:e.candidates.length}),T.pendingCandidates.push(...e.candidates.map(n=>({...n,exchangeId:e.exchangeId,ufrag:e.ufrag||n.usernameFragment}))),await Ue();break;case"InitialSetup":T.remoteSetup=e,await Ie();break;case"NegotiateChannels":if(T.handledRemoteExchangeIds.has(e.exchangeId))return void re("ignore duplicate remote negotiation",{exchangeId:e.exchangeId});if(T.isApplyingRemoteNegotiation&&T.pendingRemoteNegotiation?.exchangeId===e.exchangeId)return void re("ignore in-flight duplicate remote negotiation",{exchangeId:e.exchangeId});if(T.pendingLocalExchangeId&&e.exchangeId!==T.pendingLocalExchangeId){if(T.isOutgoing)return T.queuedRemoteNegotiation=e,void re("queue remote offer until local answer is applied",{exchangeId:e.exchangeId,pendingLocalExchangeId:T.pendingLocalExchangeId});T.pendingLocalExchangeId=void 0}T.pendingRemoteNegotiation=e,await Ie()}}async function Ue(){if(!T||!T.pendingCandidates.length)return;const{connection:e,pendingCandidates:n}=T,t=[],i=[];n.forEach(n=>{const a=function(e){if(!T?.connection.remoteDescription)return"queue";const n=e.exchangeId,t=_e(e),i=function(e){const n=e.remoteDescription?.sdp;if(!n)return new Set;const t=b(n),i=new Set;return t.forEach(e=>{const n=w(t,"a=ice-ufrag:",e);n&&i.add(n)}),i}(T.connection),a=!t||i.has(t)||t===T.appliedRemoteUfrag;return n?T.appliedRemoteExchangeIds.has(n)?a?"add":"drop":n===T.pendingLocalExchangeId||n===T.pendingRemoteNegotiation?.exchangeId||n===T.queuedRemoteNegotiation?.exchangeId?"queue":T.handledRemoteExchangeIds.has(n)?"drop":"queue":a?"add":"queue"}(n);re("ICE candidate routing",{decision:a,exchangeId:n.exchangeId,ufrag:_e(n),pendingRemoteExchangeId:T?.pendingRemoteNegotiation?.exchangeId,appliedRemoteExchangeId:T?.appliedRemoteExchangeId,remoteDescriptionMids:je(e)}),"add"===a?t.push(n):"queue"===a&&i.push(n)}),T.pendingCandidates=i,await Promise.all(t.map(n=>async function(e,n){const t=ze(n.sdpString);if(!t)return;const i={candidate:t,sdpMid:n.sdpMid,sdpMLineIndex:n.sdpMLineIndex,usernameFragment:_e(n)};if(!i.sdpMid&&(void 0===i.sdpMLineIndex||null===i.sdpMLineIndex)){const n=function(e){const n=e.remoteDescription?.sdp;if(!n)return;const t=b(n).filter(e=>"session"!==e.kind),i=t.filter(e=>0!==k(e)),a=i.filter(e=>"audio"===e.kind||"video"===e.kind);return 1===i.length?t.indexOf(i[0]):1===a.length&&i.every(e=>"application"===e.kind||e===a[0])?t.indexOf(a[0]):void 0}(e);if(void 0===n)return void re("drop ICE candidate without media id",{candidate:i,remoteSdpSummary:Je(e)});i.sdpMLineIndex=n}await async function(e,n){try{await e.addIceCandidate(n)}catch(t){se("failed to add ICE candidate",{candidate:n,remoteSdpSummary:Je(e),errorName:t instanceof Error?t.name:void 0,errorMessage:t instanceof Error?t.message:String(t)})}}(e,i)}(e,n)))}function _e(e){return e.ufrag||e.usernameFragment||void 0}function je(e){const n=e.remoteDescription?.sdp;if(!n)return[];const t=b(n);return t.filter(e=>"session"!==e.kind).map((e,n)=>({index:n,kind:e.kind,mid:e.mid,port:k(e),ufrag:w(t,"a=ice-ufrag:",e)}))}function Je(e){const n=e.remoteDescription?.sdp;return n?E(n):void 0}function ze(e){if(!e)return;const n=e.match(/^candidate:\S+ (\d+) /)?.[1];return"2"!==n?e:void 0}var qe=t(14487),Ke=t(4875),He=t(13439),We=t(80840),Ze=t(32989),Qe=t(11597),Xe=t(71331),en=t(42347);function nn(e){return e instanceof Error?{name:e.name,message:e.message}:String(e)}(0,He.aJ)("leaveGroupCall",async(e,n,t)=>{const{isFromLibrary:a,shouldDiscard:o,shouldRemove:r,rejoin:s,isPageUnload:c,tabId:d=(0,qe.g0)()}=t||{},l=(0,Xe.iT)(e);if(!l)return;e=(0,We.R6)(e,{connectionState:"disconnected"},l.participantsCount-1),e={...e,groupCalls:{...e.groupCalls,activeGroupCallId:void 0}},(0,He.UF)(e);const u=l.localJoinAsId??e.currentUserId,p=l.localSource??(u?l.participants[u]?.source:void 0);await(0,Ke.px)("leaveGroupCall",{call:l,isPageUnload:c,source:p}),await(0,Ke.px)("abortRequestGroup","call"),o&&await(0,Ke.px)("discardGroupCall",{call:l}),e=(0,He.mS)(),r&&(e=(0,We.um)(e,l.id)),(0,i.ow)(),(0,He.UF)(e),n.toggleGroupCallPanel({force:void 0,tabId:d}),a||Q(),n.afterHangUp(),s&&n.requestMasterAndJoinGroupCall({...s,tabId:d})}),(0,He.aJ)("toggleGroupCallVideo",async e=>{const n=(0,Xe.iT)(e),t=(0,Qe.mBe)(e,e.currentUserId);t&&n&&(await W("video"),await(0,Ke.px)("editGroupCallParticipant",{call:n,videoStopped:!q("video"),participant:t}))}),(0,He.aJ)("requestToSpeak",(e,n,t)=>{const{value:i}=t||{value:!0},a=(0,Xe.iT)(e),o=(0,Qe.mBe)(e,e.currentUserId);o&&a&&(0,Ke.px)("editGroupCallParticipant",{call:a,raiseHand:i,participant:o})}),(0,He.aJ)("setGroupCallParticipantVolume",(e,n,t)=>{const{participantId:i,volume:a}=t,r=(0,Xe.iT)(e),s=(0,Qe.mBe)(e,i);s&&r&&(z(i,Math.floor(a/o.CH0)/100),(0,Ke.px)("editGroupCallParticipant",{call:r,volume:Number(a),participant:s}))}),(0,He.aJ)("toggleGroupCallMute",async(e,n,t)=>{const{participantId:i,value:a}=t||{},o=(0,Xe.iT)(e),r=(0,Qe.mBe)(e,i||e.currentUserId);if(!r||!o)return;const s=void 0===a?q("audio",r.id):a;i?z(i,s?0:1):await W("audio"),await(0,Ke.px)("editGroupCallParticipant",{call:o,muted:s,participant:r})}),(0,He.aJ)("toggleGroupCallPresentation",async(e,n,t)=>{const i=(0,Xe.iT)(e),a=(0,Qe.mBe)(e,e.currentUserId);if(a&&i){if(void 0!==t?.value?t?.value:!q("presentation")){const e=await async function(){if(M)try{const e=await H("presentation");return e?(e.getTracks()[0].onended=()=>{M&&M.myId&&(R("screen sharing track ended",{myId:M.myId,stream:D(e)}),delete M.streams?.[M.myId].presentation,K(M.myId),j())},await new Promise(n=>{const{connection:t,dataChannel:i}=ie([e],n,!0);M={...M,screenshareConnection:t,screenshareDataChannel:i}})):void R("start sharing screen failed: missing stream")}catch(e){return void R("start sharing screen failed",{error:V(e)})}else R("start sharing screen skipped: missing state")}();if(!e)return;await(0,Ke.px)("joinGroupCallPresentation",{call:i,params:e})}else await W("presentation",!1),await(0,Ke.px)("leaveGroupCallPresentation",{call:i});await(0,Ke.px)("editGroupCallParticipant",{call:i,presentationPaused:!q("presentation"),participant:a})}}),(0,He.aJ)("connectToActiveGroupCall",async(e,n,t)=>{const{tabId:a=(0,qe.g0)()}=t||{},o=(0,Xe.iT)(e);if(!o)return;if("discarded"===o.connectionState)return void n.showNotification({message:"This voice chat is not active",tabId:a});const r=(0,i.sN)(),s=(0,i.Hc)();if(!r||!s)return;const{currentUserId:u}=e;if(!u)return;const p=o.localJoinAsId??u,m=o.localJoinAsId?(0,Qe.PVB)(e,o.localJoinAsId):void 0;if(o.localJoinAsId&&!m)return;const g=await function(e,n,t,i){if(M)throw Error("Already in call");R("join",{myId:e,audioContextState:n.state}),Z("connecting");const a=new MediaStream;return t.srcObject=a,(0,c.A)(t),M={onUpdate:i,participants:[],myId:e,speaking:{},silence:d(n),black:l({width:640,height:480}),analyserInterval:setInterval(X,1e3),audioElement:t,audioContext:n,mediaStream:a,lastMid:3},H("audio").catch(e=>{R("initial microphone preparation failed",{error:V(e)})}),new Promise(e=>{M={...M,...ie([M.silence,M.black],e)}})}(p,s,r,n.apiUpdate);if(!g)return n.showNotification({message:"Failed to join voice chat",tabId:a}),void n.leaveGroupCall({tabId:a});const f=await(0,Ke.px)("joinGroupCall",{call:o,params:g,inviteHash:o.inviteHash,joinAs:m});if(e=(0,He.mS)(),!f)return n.showNotification({message:"Failed to join voice chat",tabId:a}),void n.leaveGroupCall({tabId:a});if(void 0!==g.ssrc&&(e=(0,We.R6)(e,{localSource:g.ssrc}),(0,He.UF)(e)),n.loadMoreGroupCallParticipants(),o.chatId){const t=(0,Qe.hds)(e,o.chatId);if(!t)return;await(0,en.ad)(e,n,t)}}),(0,He.aJ)("connectToActivePhoneCall",async(e,n)=>{const{phoneCall:t}=e;if(!t)return;const i=(0,Xe.uu)(e);if(!i)return;const a=await(0,Ke.px)("getDhConfig");if(!a)return;await(0,Ke.px)("createPhoneCallState",{isOutgoing:!0,shouldUseSctp:!t.customParameters?.network_signaling_nosctp});const o=await(0,Ke.px)("requestPhoneCall",[a]);await(0,Ke.px)("requestCall",{user:i,gAHash:o,isVideo:t.isVideo})||"hangUp"in n&&n.hangUp({tabId:(0,qe.g0)()})}),(0,He.aJ)("acceptCall",async e=>{const{phoneCall:n}=e;if(!n)return;const t=await(0,Ke.px)("getDhConfig");if(!t)return;await(0,Ke.px)("createPhoneCallState",{isOutgoing:!1,shouldUseSctp:!n.customParameters?.network_signaling_nosctp});const i=await(0,Ke.px)("acceptPhoneCall",[t]);await(0,Ke.px)("acceptCall",{call:n,gB:i})}),(0,He.aJ)("sendSignalingData",(e,n,t)=>{const{phoneCall:i}=e;i&&(async()=>{try{const e=await(0,Ke.px)("encodePhoneCallData",[t]);if(!e)return;await(0,Ke.px)("sendSignalingData",{data:e,call:i});const n=await(0,Ke.px)("drainPhoneCallSignalingData");if(!n)return;for(const e of n)await(0,Ke.px)("sendSignalingData",{data:e,call:i})}catch(n){e={error:nn(n)},o._5g&&(0,r.bO)("warn","[PhoneCall] Failed to send phone call signaling data",e)}var e})()}),(0,He.aJ)("closeCallRatingModal",(e,n,t)=>{const{tabId:i=(0,qe.g0)()}=t||{};return(0,Ze.w)(e,{ratingPhoneCall:void 0},i)}),(0,He.aJ)("setCallRating",(e,n,t)=>{const{rating:i,comment:a,tabId:o=(0,qe.g0)()}=t,{ratingPhoneCall:r}=(0,Qe.nTw)(e,o);if(r)return(0,Ke.px)("setCallRating",{call:r,rating:i,comment:a}),(0,Ze.w)(e,{ratingPhoneCall:void 0},o)}),(0,He.aJ)("hangUp",(e,n,t)=>{const{isPageUnload:i,tabId:a=(0,qe.g0)()}=t||{},{phoneCall:o}=e;if(o){if("discarded"===o.state)return(0,Ke.px)("destroyPhoneCallState"),ge(),e={...e,phoneCall:void 0},(0,He.UF)(e),n.toggleGroupCallPanel({force:void 0,tabId:a}),void n.afterHangUp();if((0,Ke.px)("destroyPhoneCallState"),ge(),(0,Ke.px)("discardCall",{call:o,isPageUnload:i}),"requesting"===o.state)return e={...e,phoneCall:void 0},(0,He.UF)(e),n.toggleGroupCallPanel({force:void 0,tabId:a}),void n.afterHangUp();setTimeout(()=>{e=(0,He.mS)(),e={...e,phoneCall:void 0},(0,He.UF)(e),n.toggleGroupCallPanel({force:void 0,tabId:a}),n.afterHangUp()},500)}});var tn=t(87894),an=t(6e4);const on=new Uint16Array([55357,56841,55357,56845,55357,56859,55357,56877,55357,56881,55357,56865,55357,56846,55357,56884,55357,56885,55357,56840,55357,56876,55357,56839,55357,56847,55357,56430,55357,56439,55357,56450,55357,56438,55357,56424,55357,56425,55357,56436,55357,56437,55357,56891,55357,56893,55357,56896,55357,56442,55357,56904,55357,56905,55357,56906,55357,56448,55357,56445,55357,56489,55357,56613,55357,56485,55357,56484,55357,56386,55357,56384,55357,56387,55357,56389,55357,56388,55357,56397,55357,56398,55357,56396,55357,56394,9996,9995,55357,56400,55357,56390,55357,56391,55357,56393,55357,56392,55357,56911,55357,56399,55357,56490,55357,57014,55356,57283,55357,56451,55357,56427,55357,56426,55357,56428,55357,56429,55357,56453,55356,57257,55357,56401,55357,56402,55357,56415,55357,56414,55357,56416,55357,56405,55357,56407,55357,56406,55357,56409,55357,56412,55357,56403,55356,57216,55357,56452,55357,56475,55357,56473,55357,56476,55357,56474,55357,56461,55357,56462,55357,56374,55357,56378,55357,56369,55357,56365,55357,56377,55357,56368,55357,56376,55357,56367,55357,56360,55357,56379,55357,56375,55357,56366,55357,56343,55357,56372,55357,56337,55357,56344,55357,56380,55357,56359,55357,56357,55357,56340,55357,56333,55357,56354,55357,56347,55357,56349,55357,56348,55357,56350,55357,56332,55357,56345,55357,56346,55357,56351,55357,56364,55357,56331,55357,56336,55357,56330,55357,56363,55356,57152,55356,57145,55356,57147,55356,57153,55356,57150,55356,57156,55356,57141,55356,57140,55356,57139,55356,57118,55356,57114,55356,57113,55356,57102,55356,57099,9889,9748,10052,9924,55356,57088,55356,57096,55356,57098,55356,57235,55356,57222,55356,57219,55357,56443,55356,57221,55356,57220,55356,57217,55356,57224,55357,56622,55356,57253,55357,56567,55357,56511,55357,56507,9742,55357,56545,55357,56570,55357,56571,55357,56585,55357,56596,9203,9200,8986,55357,56594,55357,56593,55357,56590,55357,56481,55357,56614,55357,56588,55357,56587,55357,57023,55357,57021,55357,56615,55357,56616,55357,57002,55357,57004,55357,56483,55357,56619,55357,56618,55357,56458,55357,56457,55357,56496,55357,56501,55357,56499,9993,55357,56555,55357,56550,55357,56517,55357,56513,9986,55357,56524,55357,56526,10002,9999,55357,56528,55357,56538,55357,56620,55357,56621,55356,57256,55356,57260,55356,57252,55356,57255,55356,57269,55356,57273,55356,57275,55356,57274,55356,57272,55357,56446,55356,57262,55356,56527,55356,57266,55356,57263,55356,57288,55356,57280,9917,9918,55356,57278,55356,57265,55356,57289,55356,57267,55356,57281,55356,57287,55356,57286,55356,57290,55356,57284,9749,55356,57212,55356,57210,55356,57207,55356,57204,55356,57173,55356,57172,55356,57183,55356,57175,55356,57201,55356,57178,55356,57180,55356,57185,55356,57203,55356,57182,55356,57193,55356,57190,55356,57218,55356,57200,55356,57194,55356,57195,55356,57197,55356,57199,55356,57166,55356,57167,55356,57162,55356,57163,55356,57170,55356,57159,55356,57161,55356,57171,55356,57169,55356,57164,55356,57168,55356,57165,55356,57158,55356,57157,55356,57149,55356,57313,55356,57317,55356,57318,9962,55356,57328,9978,55356,57325,55357,56827,55357,56829,55356,57248,55356,57249,9970,55356,57250,55357,56994,55357,56996,9875,55357,56960,9992,55357,56961,55357,56962,55357,56971,55357,56974,55357,56972,55357,56985,55357,56983,55357,56981,55357,56987,55357,57e3,55357,56980,55357,56978,55357,56977,55357,57010,55357,56992,55357,56988,55357,56998,9888,55357,56999,9981,55356,57264,55357,56831,55356,57258,55356,57261,55356,56815,55356,56821,55356,56816,55356,56823,55356,56809,55356,56810,55356,56808,55356,56819,55356,56826,55356,56824,55356,56811,55356,56823,55356,56810,55356,56824,55356,56814,55356,56825,55356,56823,55356,56826,55356,56812,55356,56807,49,8419,50,8419,51,8419,52,8419,53,8419,54,8419,55,8419,56,8419,57,8419,48,8419,55357,56607,10071,10067,9829,9830,55357,56495,55357,56599,55357,56625,55357,56628,55357,56629,55357,56630,55357,56631]),rn=[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,87,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,259,260,261,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,295,297,299,301,303,305,306,307,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,351,353,355,357,359,360,362,364,365,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,407,408,410,412,414,416,418,420,422,424,426,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459,461,463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,508,510,511,513,515,517,519,521,522,524,526,528,529,531,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,567,569,570,572,574,576,578,582,586,590,594,598,602,606,610,614,618,620,622,624,626,628,630,632,634,636,638,640,641,642,643,644,646,648,650,652,654,656,658];let sn=Promise.resolve(),cn=Promise.resolve();function dn(e){cn=cn.catch(()=>{}).then(e).catch(e=>{ln("Failed to process group call negotiation update",{error:e instanceof Error?e.message:String(e)})})}function ln(e,n){o._5g&&(0,r.bO)("warn",`[PhoneCall] ${e}`,n)}function un(e){return e.length>=12&&19===e[0]&&136===e[1]&&19===e[2]&&136===e[3]}(0,He.aJ)("apiUpdate",(e,n,t)=>{const{activeGroupCallId:i}=e.groupCalls;switch(t["@type"]){case"updateGroupCallLeavePresentation":n.toggleGroupCallPresentation({value:!1});break;case"updateGroupCallStreams":if(!t.userId||!i)break;if(!(0,Xe.n5)(e,i,t.userId))break;return(0,We.c5)(e,i,t.userId,(0,tn.cJ)(t,["@type","userId"]));case"updateGroupCallConnectionState":if(!i)break;if("disconnected"===t.connectionState){"leaveGroupCall"in n&&n.leaveGroupCall({isFromLibrary:!0,tabId:(0,qe.g0)()});break}return(0,We.h9)(e,i,{connectionState:t.connectionState,isSpeakerDisabled:t.isSpeakerDisabled});case"updateGroupCallParticipants":{const{groupCallId:e,participants:n}=t;i===e&&dn(()=>ne(n));break}case"updateGroupCallConnection":if(t.data.stream){n.showNotification({message:"Big live streams are not yet supported",tabId:(0,qe.g0)()}),"leaveGroupCall"in n&&n.leaveGroupCall({tabId:(0,qe.g0)()});break}dn(async()=>{await async function(e,n){if(!M)return void R("connection update skipped: missing state",{isPresentation:n,data:Y(e)});const t=n?M.screenshareConference:M.conference,i=n?M.screenshareConnection:M.connection;if(!t||!i||!t.ssrcs)return void R("connection update skipped: incomplete state",{isPresentation:n,hasConference:Boolean(t),hasConnection:Boolean(i),hasSsrcs:Boolean(t?.ssrcs),data:Y(e)});const a={...t,ssrcs:t.ssrcs,transport:e.transport,sessionId:Date.now(),audioExtensions:e.audio?.["rtp-hdrexts"]||t.audioExtensions||[],audioPayloadTypes:e.audio?.["payload-types"]||t.audioPayloadTypes||[],videoExtensions:e.video["rtp-hdrexts"],videoPayloadTypes:e.video["payload-types"]};M={...M,...n?{screenshareConference:a}:{conference:a}};try{const e=C(a,!0,n);await i.setRemoteDescription({type:"answer",sdp:e})}catch(e){R("server answer apply failed",{isPresentation:n,error:V(e),connection:F(i)})}}(t.data,t.presentation),e=(0,He.mS)();const n=(0,Xe.iT)(e);n?.participants&&Object.keys(n.participants).length>0&&await ne(Object.values(n.participants))});break;case"updatePhoneCallMediaState":return{...e,phoneCall:{...e.phoneCall,...(0,tn.cJ)(t,["@type"])}};case"updatePhoneCall":{if(!a.OL)return;const{phoneCall:i,currentUserId:s}=e,c={...i,...t.call},u=i?.adminId===s;if(e={...e,phoneCall:c},(0,He.UF)(e),e=(0,He.mS)(),i&&i.id&&c.id!==i.id)return void("discarded"!==c.state&&(0,Ke.px)("discardCall",{call:c,isBusy:!0}));const{accessHash:p,state:m,connections:g,gB:f}=c;if(("active"===m||"accepted"===m)&&(r=c.protocol,!Boolean(r&&o.wIX.some(e=>r.libraryVersions.includes(e))))){const t=(0,Xe.uu)(e);return"hangUp"in n&&n.hangUp({tabId:(0,qe.g0)()}),void n.showNotification({message:an.yE("VoipPeerIncompatible",t?.firstName),tabId:(0,qe.g0)()})}if("discarded"===m){if(!i)return;return(0,Ze.w)(e,{...c.needRating&&{ratingPhoneCall:c},isCallPanelVisible:void 0},(0,qe.g0)())}return"accepted"===m&&p&&f?(async()=>{try{const n=c.id,t=await(0,Ke.px)("confirmPhoneCall",[f,on,rn]);if(!t)return void ln("Failed to confirm accepted phone call",{callId:n});const{gA:i,keyFingerprint:a,emojis:o}=t;if(e=(0,He.mS)(),e.phoneCall?.id!==n)return;if(await(0,Ke.px)("confirmCall",{call:c,gA:i,keyFingerprint:a}),e=(0,He.mS)(),e.phoneCall?.id!==n)return;const r={...e.phoneCall,emojis:o};e={...e,phoneCall:r},(0,He.UF)(e)}catch(e){ln("Failed to confirm accepted phone call",{callId:c.id,error:e instanceof Error?e.message:String(e)})}})():"active"===m&&g&&"active"!==i?.state&&(async()=>{try{const t=c.id;let i;try{i=await(0,Ke.px)("fetchCallConfig")}catch(e){ln("Failed to fetch phone call config",{error:e instanceof Error?e.message:String(e)})}const a=function(e){const n={};return Object.entries(e||{}).forEach(([e,t])=>{"string"!=typeof t&&"number"!=typeof t&&"boolean"!=typeof t||(n[e]=t)}),Object.keys(n).length?n:void 0}(i)||{},o=Object.assign({},a,c.customParameters);if(c.customParameters=o,e=(0,He.mS)(),e.phoneCall?.id===c.id&&(e={...e,phoneCall:{...e.phoneCall,customParameters:o}},(0,He.UF)(e)),e=(0,He.mS)(),e.phoneCall?.id===c.id&&await(0,Ke.px)("setPhoneCallSctpEnabled",!o.network_signaling_nosctp),!u){if(await(0,Ke.px)("receivedCall",{call:c}),e=(0,He.mS)(),e.phoneCall?.id!==t)return;const n=await(0,Ke.px)("confirmPhoneCall",[c.gAOrB,on,rn]);if(!n)return void ln("Failed to confirm phone call",{callId:t});const{emojis:i}=n;if(e=(0,He.mS)(),e.phoneCall?.id!==t)return;const a={...e.phoneCall,emojis:i};e={...e,phoneCall:a},(0,He.UF)(e)}if(e=(0,He.mS)(),e.phoneCall?.id!==t)return;await async function(e,n,t,i,a,o){const r=new RTCPeerConnection({iceServers:he(e,a),iceTransportPolicy:a?"all":"relay",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",iceCandidatePoolSize:10}),s=new AudioContext,c=d(s),u=l({width:640,height:480}),p=l({width:640,height:480}),m=de(c);if(!m)throw Error("Failed creating phone call placeholder tracks");const g=r.addTransceiver(m,{direction:"sendrecv",streams:[c]}),f=t?r.createDataChannel("data",{id:0}):void 0,h=new Audio;h.autoplay=!0,re("join",{isOutgoing:t,shouldStartVideo:i,iceTransportPolicy:a?"all":"relay",iceServers:e.map(e=>({isTurn:e.isTurn,isStun:e.isStun,port:e.port}))}),T={audio:h,audioContext:s,connection:r,emitSignalingData:n,isOutgoing:t,isStarting:!0,handledRemoteExchangeIds:new Set,pendingCandidates:[],appliedRemoteExchangeIds:new Set,onUpdate:o,streams:{ownVideo:u,ownAudio:c,ownPresentation:p},remoteMediaState:{isBatteryLow:!1,screencastState:"inactive",videoState:"inactive",videoRotation:0,isMuted:!0},blackVideo:u,blackPresentation:p,silence:c,dataChannel:f,transceivers:{audio:g},senders:{audio:g.sender},exchangeId:Math.floor(4294967295*Math.random())},r.onicecandidate=e=>{if(!e.candidate||!T)return;const n=e.candidate.toJSON(),t=ze(n.candidate);t&&T.emitSignalingData({"@type":"Candidates",exchangeId:T.pendingLocalExchangeId||T.localCandidateExchangeId,ufrag:n.usernameFragment||void 0,candidates:[{sdpString:t,sdpMid:n.sdpMid||void 0,sdpMLineIndex:n.sdpMLineIndex??void 0,usernameFragment:n.usernameFragment||void 0}]})},r.onconnectionstatechange=()=>{re("connection state changed",{connectionState:r.connectionState,iceConnectionState:r.iceConnectionState,signalingState:r.signalingState}),o({"@type":"updatePhoneCallConnectionState",connectionState:r.connectionState})},r.ontrack=e=>{if(!T)return;"connected"!==r.iceConnectionState&&"completed"!==r.iceConnectionState||o({"@type":"updatePhoneCallConnectionState",connectionState:"connected"});const n=e.streams[0]||new MediaStream([e.track]);"audio"===e.track.kind?(e.transceiver!==T.transceivers.audio&&(T.transceivers.remoteAudio=e.transceiver),T.audio.srcObject=n,T.audio.muted=!1,T.audio.setAttribute("playsinline","true"),T.audio.play().catch(e=>{re("audio playback failed",{error:e instanceof Error?e.message:String(e)})}),e.track.onunmute=()=>{T&&(T.audio.srcObject=n,T.audio.play().catch(e=>{re("audio playback after unmute failed",{error:e instanceof Error?e.message:String(e)})}))},T.streams.audio=n):e.transceiver===T.transceivers.remoteVideo||fe(e.transceiver,!1)?(T.transceivers.remoteVideo=e.transceiver,T.remoteMediaState.videoState="active",T.streams.video=n):e.transceiver===T.transceivers.remotePresentation||fe(e.transceiver,!0)?(T.transceivers.remotePresentation=e.transceiver,T.remoteMediaState.screencastState="active",T.streams.presentation=n):re("remote video track ignored: unknown transceiver",{track:Le(e.track),mid:e.transceiver.mid}),oe()},r.oniceconnectionstatechange=()=>{"connected"!==r.iceConnectionState&&"completed"!==r.iceConnectionState||o({"@type":"updatePhoneCallConnectionState",connectionState:"connected"}),T&&t&&"failed"===r.iceConnectionState&&(re("ICE restart requested"),r.restartIce(),we())},r.ondatachannel=e=>{"data"===e.channel.label&&Ce(e.channel)},f&&Ce(f),await me("audio",!0),i&&await me("video",!0),T&&(T.isStarting=!1),t&&await we()}(g,n.sendSignalingData,u,Boolean(c?.isVideo),Boolean(c.isP2pAllowed),n.apiUpdate)}catch(e){ln("Failed to start phone call",{error:e instanceof Error?e.message:String(e),callId:c.id})}})(),e}case"updatePhoneCallConnectionState":{const{connectionState:i}=t;return e.phoneCall?"closed"===i||"disconnected"===i||"failed"===i?void("hangUp"in n&&n.hangUp({tabId:(0,qe.g0)()})):{...e,phoneCall:{...e.phoneCall,isConnected:"connected"===i}}:e}case"updatePhoneCallSignalingData":{const{phoneCall:n}=e;if(!n)break;const i={callId:n.id,data:t.data};sn=sn.then(()=>async function(e){const{data:n}=e;let t,i=(0,He.mS)();if(i.phoneCall?.id!==e.callId)return;try{t=await(0,Ke.px)("decodePhoneCallData",[n])}catch(e){return void ln("Failed to decode phone call signaling data",{error:e instanceof Error?e.message:String(e),isSctp:un(n),length:n.length})}i=(0,He.mS)();const a=i.phoneCall;if(a?.id!==e.callId)return;let o=0;if(a)try{const e=await(0,Ke.px)("drainPhoneCallSignalingData");if(o=e?.length||0,e)for(const n of e)await(0,Ke.px)("sendSignalingData",{data:n,call:a})}catch(e){ln("Failed to drain phone call signaling data",{error:e instanceof Error?e.message:String(e),isSctp:un(n),length:n.length})}if(Array.isArray(t))for(const e of t)await Ye(e);else t?await Ye(t):o||un(n)||ln("Failed to decode phone call signaling data",{length:n.length})}(i)).catch(e=>{ln("Failed to process phone call signaling data",{error:e instanceof Error?e.message:String(e),isSctp:un(i.data),length:i.data.length})});break}}var r});var pn=t(84051),mn=t(87357),gn=t(43874),fn=t(37661),hn=t(5912),vn=t(17712),yn=t(59030),Cn=t(90423),bn=t(73767),Sn=t(93545),wn=t(64493),In=t(19806),kn=t(12933),xn=t(22337),An=t(96374),Pn=t(46222),En=t(4961);function Nn(e){return Math.floor((e.volume||o.iRY)/o.CH0).toString()}var Mn=t(10722),Tn=t(21849),Rn=t(34431),Vn=t(18276),$n=t(22720),Dn=t(44029),Bn=t(672),Fn=t(4438),Ln=t(285),Gn=t(71429),On=t(24433),Yn=t(20021);const Un=[0,17],_n=[17,34],jn=(0,pn.ph)((0,He.EK)(e=>({isAdmin:(0,Xe.qI)(e)}))(({participant:e,onCloseAnimationEnd:n,onClose:t,isDropdownOpen:i,isAdmin:a,menuRef:r,...s})=>{const{toggleGroupCallMute:c,setGroupCallParticipantVolume:d,toggleGroupCallPanel:l,openChat:u,requestToSpeak:p}=(0,He.ko)(),m=(0,yn.A)(),[g,f,h]=(0,fn.A)(),v=e?.id,{isMutedByMe:y,isMuted:C,isSelf:b,canSelfUnmute:S}=e||{},w=Boolean(e?.raiseHandRating),I=!S&&C,[k,x]=(0,pn.J0)(y?0:(e?.volume||o.iRY)/o.CH0),[A,P]=(0,pn.J0)(!1),E=0===k,N=E?Un:_n;(0,pn.vJ)(()=>{i||P(!1)},[i]);const M=(0,vn.A)(e=>{x(e),P(0===e!==E)});(0,pn.vJ)(()=>{x(y?0:(e?.volume||o.iRY)/o.CH0)},[v]);const T=function(e,n,t=[]){return(0,Bn.A)(e=>{e()},t,e,n)}(500),R=(0,vn.A)(e=>{e.stopPropagation(),f(),t()}),V=(0,vn.A)(e=>{e.stopPropagation(),p({value:!1}),t()}),$=(0,vn.A)(n=>{n.stopPropagation(),t(),a?I&&M((e?.volume??o.iRY)/o.CH0):M(y?o.iRY/o.CH0:0),c({participantId:v,value:a?!I:!y})}),D=(0,vn.A)(e=>{e.stopPropagation(),l(),u({id:v}),t()});return(0,Yn.FD)("div",{children:[(0,Yn.FD)(Gn.A,{isOpen:i,ref:r,withPortal:!0,onClose:t,onCloseAnimationEnd:n,className:"participant-menu with-menu-transitions",...s,children:[!b&&!I&&(0,Yn.Y)("div",{className:"group",children:(0,Yn.FD)("div",{className:(0,mn.A)("volume-control",k<50&&"low",k>=50&&k<100&&"medium",k>=100&&k<150&&"normal",k>=150&&"high"),children:[(0,Yn.Y)("input",{type:"range",min:"0",max:"200",value:k,onChange:e=>{const n=Number(e.target.value);M(n),T(()=>{0===n?c({participantId:v,value:!0}):d({participantId:v,volume:Math.floor(n*o.CH0)})})}}),(0,Yn.FD)("div",{className:"info",children:[(0,Yn.Y)(Fn.A,{tgsUrl:Dn.w.Speaker,play:!!A&&N.toString(),playSegment:N,size:24}),(0,Yn.FD)("span",{children:[k,"%"]})]})]})}),(0,Yn.FD)("div",{className:"group",children:[w&&b&&(0,Yn.Y)(On.A,{icon:"stop-raising-hand",onClick:V,children:m("VoipGroupCancelRaiseHand")}),!b&&(0,Yn.Y)(On.A,{icon:"user",onClick:D,children:m("VoipGroupOpenProfile")}),!b&&(0,Yn.Y)(On.A,{icon:C&&a&&I?"allow-speak":"microphone-alt",onClick:$,children:m(a?I?"VoipGroupAllowToSpeak":"VoipMute":y?"VoipGroupUnmuteForMe":"VoipGroupMuteForMe")}),!b&&a&&(0,Yn.Y)(On.A,{icon:"delete-user",destructive:!0,onClick:R,children:m("VoipGroupUserRemove")})]})]}),!b&&a&&(0,Yn.Y)(Ln.A,{isOpen:g,userId:v,onClose:h})]})})),Jn=(0,pn.ph)(({participant:e,noColor:n,className:t})=>{const{isMuted:i,isMutedByMe:a}=e,o=(e.amplitude||0)>f,r=Boolean(e.raiseHandRating),s=(0,bn.A)(r),c=!Boolean(e?.canSelfUnmute)&&i,d=(0,bn.A)(i),l=(0,pn.Kr)(()=>i&&!d?[43,64]:!i&&d?[22,42]:r&&!s?[65,84]:!c&&s?[0,21]:i?[22,23]:[43,44],[i,c,r]),u=(0,pn.Kr)(()=>n?"#ffffff":r?"#4da6e0":c||a?"#ff706f":o?"#57bc6c":"#aaaaaa",[n,r,c,a,o]);return(0,Yn.Y)(Fn.A,{tgsUrl:Dn.w.VoiceOutlined,play:l.toString(),playSegment:l,size:28,color:u,className:t,forceAlways:!0,nonInteractive:!0})}),zn={root:"Wk7JwPx3",subtitle:"ShcCNemD",subtitleText:"UZLgp2cx",icon:"vRc6jhKf",subtitleBlue:"yA7bxEWw",subtitleRed:"DnuZwImI",subtitleGreen:"BkgYQGFq",avatar:"ouHUJ9ff"},qn=(0,pn.ph)((0,He.EK)((e,{participant:n})=>({peer:(0,Qe.mBe)(e,n.id)||(0,Qe.hds)(e,n.id)}))(({participant:e,peer:n})=>{const t=(0,pn.li)(),i=(0,pn.li)(),a=(0,yn.A)(),{isSelf:r,isMutedByMe:s,isMuted:c,hasVideoStream:d,hasPresentationStream:l}=e,u=(e.amplitude||0)>f,p=Boolean(e.raiseHandRating),{isContextMenuOpen:m,contextMenuAnchor:g,handleContextMenu:h,handleBeforeContextMenu:v,handleContextMenuClose:y,handleContextMenuHide:C}=(0,Mn.A)(t,r),b=(0,pn.hb)(()=>t.current,[]),S=(0,pn.hb)(()=>t.current.closest(".custom-scroll, .no-scrollbar"),[]),w=(0,pn.hb)(()=>i.current,[]),I=(0,pn.hb)(()=>({withPortal:!0}),[]),k=Boolean(!c&&u&&e.volume&&e.volume!==o.iRY),[x,A]=(0,pn.Kr)(()=>s?[a("VoipGroupMutedForMe"),zn.subtitleRed]:p?[a("WantsToSpeak"),zn.subtitleBlue]:k?[a("SpeakingWithVolume",Nn(e)).replace("%%","%"),zn.subtitleGreen]:!c&&u?[a("Speaking"),zn.subtitleGreen]:r?[a("ThisIsYou"),zn.subtitleBlue]:e.about?[e.about,""]:[a("Listening"),zn.subtitleBlue],[s,p,k,c,u,r,e,a]);if(n)return(0,Yn.FD)($n.A,{leftElement:(0,Yn.Y)(Tn.A,{peer:n,className:zn.avatar}),rightElement:(0,Yn.Y)(Jn,{participant:e,className:zn.icon}),className:zn.root,onClick:h,onMouseDown:v,onContextMenu:h,multiline:!0,ripple:!0,ref:t,children:[(0,Yn.Y)(Rn.A,{peer:n,withEmojiStatus:!0,className:zn.title}),(0,Yn.FD)("span",{className:(0,mn.A)(zn.subtitle,"subtitle",A),children:[l&&(0,Yn.Y)(Vn.A,{name:"share-screen"}),d&&(0,Yn.Y)(Vn.A,{name:"video"}),k&&(0,Yn.Y)(Vn.A,{name:"speaker"}),(0,Yn.Y)("span",{className:zn.subtitleText,children:(0,En.A)(x)})]}),(0,Yn.Y)(jn,{participant:e,isDropdownOpen:m,anchor:g,getTriggerElement:b,getRootElement:S,getMenuElement:w,getLayout:I,onClose:y,onCloseAnimationEnd:C,menuRef:i})]})}));function Kn(e,n){return(0,tn.zV)(!e.isMuted,!n.isMuted)||(0,tn.zV)(e.presentation,n.presentation)||(0,tn.zV)(e.video,n.video)||(0,tn.zV)(e.raiseHandRating,n.raiseHandRating)}const Hn=(0,pn.ph)((0,He.EK)(e=>{const{participantsCount:n,participants:t}=(0,Xe.iT)(e)||{};return{participants:t,participantsCount:n||0}})(({panelOffset:e,participants:n,participantsCount:t,isLandscape:i})=>{const{loadMoreGroupCallParticipants:a}=(0,He.ko)(),o=(0,pn.Kr)(()=>Object.values(n||{}).sort(Kn).map(e=>e.id),[n]),r=(0,vn.A)(()=>{a()}),[s,c]=(0,An.A)(r,o,o.length>=t);return(0,Yn.Y)(Pn.A,{items:s,onLoadMore:c,style:`transform: translateY(${e}px);`,className:(0,mn.A)("npTa6CmI",!i&&"v7oB2HTv"),children:n&&s?.map(e=>n[e]&&(0,Yn.Y)(qn,{teactOrderKey:o.indexOf(e),participant:n[e]},e))})}));var Wn=t(32587),Zn=t(66644),Qn=t(19822),Xn=t(37836),et=t(32625),nt=t(55158);const tt="eUXuK9Oz",it="O2bTiH2E",at=(0,pn.ph)((0,He.EK)((e,{participant:n})=>({user:n.isUser?(0,Qe.mBe)(e,n.id):void 0,chat:n.isUser?void 0:(0,Qe.hds)(e,n.id)}))(({layout:e,pinnedVideo:n,setPinned:t,canPin:i,className:r,participant:s,user:c,chat:d})=>{const l=(0,yn.A)(),u=(0,pn.li)(),p=(0,pn.li)(),m=(0,pn.li)(),{x:g,y:h,width:v,height:y,noAnimate:C,isRemoved:b,type:S}=e,{isSelf:w,isMutedByMe:I,isMuted:k}=s,x=n?.id===s.id&&n?.type===S,A=(s.amplitude||0)>f,P=Boolean(s.raiseHandRating),E="video"===S&&s.isSelf,N=(0,pn.Kr)(()=>w?l("ThisIsYou"):I?l("VoipGroupMutedForMe"):P?l("WantsToSpeak"):k||!A?l("Listening"):s.volume&&s.volume!==o.iRY?l("SpeakingWithVolume",Nn(s)).replace("%%","%"):l("Speaking"),[w,I,P,k,A,s,l]),M=(0,pn.li)();b||(M.current=e);const{x:T,y:R,width:V,height:$}=M.current||{},[D,B,F,L]=b?[T,R,V,$]:[g,h,v,y],[G,O]=(0,pn.J0)(!C),Y=J(c?.id||d.id),U="video"===S?Y?.video:Y?.presentation,_=(0,pn.li)(U);U?.active&&U?.getVideoTracks()[0].enabled&&(_.current=U);const j=_.current,z=(0,vn.A)(()=>{const e=p.current;e&&(e.srcObject=null)});(0,pn.vJ)(()=>(j?.addEventListener("inactive",z),()=>{j?.removeEventListener("inactive",z)}),[z,j]),(0,pn.vJ)(()=>{O(!1)},[]);const[q,K]=(0,pn.J0)(!0),H=(0,vn.A)(()=>{K(!1)});(0,et.A)(()=>{if(!j?.active)return;const e=p.current,n=m.current;(0,Zn.RK)(()=>{n.width=e.videoWidth,n.height=e.videoHeight,n.getContext("2d").drawImage(e,0,0,n.width,n.height)})},1e3),(0,pn.vJ)(()=>{const e=p.current,n=u.current;if(!e||!n||!j)return;const t=n.getContext("2d",{alpha:!1});if(!t)return;let i=!0;return(0,Zn.RK)(()=>{i&&(n.width=16,n.height=16,t.filter="blur(2px)",(0,Qn.i0)(()=>!!i&&!!j.active&&(t.drawImage(e,0,0,e.videoWidth,e.videoHeight,0,0,n.width,n.height),a.QH||(0,Wn.A)(t,0,0,n.width,n.height,2,2),!0),Xn.IJ))}),()=>{i=!1}},[j]);const W=(0,pn.li)(),Z=(0,pn.li)(),{isContextMenuOpen:Q,contextMenuAnchor:X,handleContextMenu:ee,handleContextMenuClose:ne,handleContextMenuHide:te}=(0,Mn.A)(W,w),ie=(0,pn.hb)(()=>W.current,[]),ae=(0,pn.hb)(()=>W.current.closest(".custom-scroll, .no-scrollbar"),[]),oe=(0,pn.hb)(()=>Z.current,[]),re=(0,pn.hb)(()=>({withPortal:!0}),[]),se=(0,pn.hb)(()=>{t(x?void 0:{id:c?.id||d.id,type:S})},[d,x,t,S,c?.id]);return(0,Yn.FD)("div",{className:(0,mn.A)("DKuzmnN7",(G||b)&&"T_wodAHA",C&&"yPCkJzpi",r,x&&"B4WZhF9P"),style:`--x: ${D}px; --y: ${B}px; --width: ${F}px; --height: ${L}px;`,ref:W,onContextMenu:ee,onDoubleClick:i?se:void 0,children:[(0,Yn.FD)("div",{className:(0,mn.A)("eBq1NoLo",A&&"h4NcT6OS"),children:[q&&(0,Yn.Y)(nt.A,{className:(0,mn.A)(tt,"XedVWQii"),animation:"wave"}),j&&(0,Yn.Y)("video",{className:(0,mn.A)(tt,E&&it),muted:!0,autoPlay:!0,playsInline:!0,srcObject:j,ref:p,onCanPlay:H}),(0,Yn.Y)("canvas",{className:(0,mn.A)("eTpvBU_b eUXuK9Oz",E&&it),ref:m}),(0,Yn.Y)("div",{className:"R5ULTrF9",children:(0,Yn.Y)("canvas",{className:(0,mn.A)("cjUWuViy",E&&it),ref:u})}),i&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",ripple:!0,color:"translucent",className:"lPdblo0y",ariaLabel:l(x?"lng_group_call_context_unpin_camera":"lng_group_call_context_pin_camera"),onClick:se,iconName:x?"unpin":"pin"}),(0,Yn.FD)("div",{className:"T1deCDSn",children:[(0,Yn.FD)("div",{className:"LzFFayK3",children:[(0,Yn.Y)(Rn.A,{peer:c||d,className:"RBwMAuKp"}),(0,Yn.Y)("div",{className:"z1ZZTsjC",children:N})]}),(0,Yn.Y)(Jn,{participant:s,className:"j1aDzn1H",noColor:!0})]})]}),(0,Yn.Y)(jn,{participant:s,isDropdownOpen:Q,anchor:X,getTriggerElement:ie,getRootElement:ae,getMenuElement:oe,getLayout:re,onClose:ne,onCloseAnimationEnd:te,menuRef:Z})]})})),ot=()=>{navigator.vibrate?.(50)};var rt=t(97422);const st=(0,pn.ph)((0,He.EK)(e=>{const n=(0,Xe.iT)(e),{connectionState:t}=n||{},i=n&&(0,Xe.n5)(e,n.id,e.currentUserId),{raiseHandRating:a,hasAudioStream:o,canSelfUnmute:r,isMuted:s}=i||{};return{connectionState:t||"discarded",hasRequestedToSpeak:Boolean(a),noAudioStream:!o,canSelfUnmute:r,isMuted:s}})(({className:e,noAudioStream:n,canSelfUnmute:t,isMuted:i,connectionState:a})=>{const{toggleGroupCallMute:o,requestToSpeak:r,playGroupCallSound:s}=(0,He.ko)(),c=(0,yn.A)(),d=(0,pn.li)("up"),[l,u]=(0,pn.J0)(!1),p="connected"!==a,m=!t&&i,g=(0,bn.A)(m);(0,pn.vJ)(()=>{g&&!m&&s({sound:"allowTalk"})},[s,g,m]);const f=(0,pn.Kr)(()=>{if(l){const e=Math.floor(100*Math.random());return e<32?[0,120]:e<64?[120,240]:e<97?[240,420]:[420,540]}return!g&&m?n?[99,135]:[136,172]:g&&!m?[0,36]:m?[0,0]:n?[69,99]:[36,69]},[g,l,n,m]),h=l?"HandFilled":"VoiceMini",v=(0,pn.hb)(()=>{ot(),o()},[o]),y=(0,pn.hb)(()=>{if(m){if(l)return;return ot(),r(),u(!0),void setTimeout(()=>{u(!1)},3e3)}d.current="down",n&&setTimeout(()=>{"down"===d.current&&(d.current="hold",v())},200)},[l,n,r,m,v]),C=(0,pn.hb)(()=>{m||(v(),d.current="up")},[m,v]);return(0,Yn.FD)(wn.A,{round:!0,size:"default",className:(0,mn.A)("lKdhQ5pw",!p&&n&&"bjKqp3SI",!p&&m&&"Ynow5UuE",e),onMouseDown:y,onMouseUp:C,ariaLabel:c(i?"VoipUnmute":"VoipMute"),disabled:p,children:[(0,Yn.Y)(Fn.A,{tgsUrl:Dn.w[h],size:36,play:f.toString(),playSegment:f,className:"Ea1XnQaX",forceAlways:!0}),(0,Yn.Y)(rt.A,{className:(0,mn.A)("tyQNJC6B",p&&"LowChABq"),color:"white"})]})})),ct={root:"OsO5GKfn",panelWrapper:"cUVoePr_",panel:"Thuz79M3",panelScrollTrigger:"zoK6Y6IS",panelHeader:"DMBtCL9Z",scrolled:"GdEH1Agb",fullscreen:"JJx0QI2w",landscape:"wamCuzMB",headerButton:"gmyieSid",firstButton:"hVnn6KBp",lastButton:"iy78A5rG",panelHeaderText:"TwEEA77i",title:"pNZ9skLf",bigger:"NumT3v5i",subtitle:"gmfUKabx",participants:"iTeC_RxH",participantVideos:"PZmKIdTl",addParticipantButton:"clmu2oBt",videos:"ATwoMlAV",mainVideoContainer:"hqFon3dV",videosHeader:"KPHc659W",appFullscreen:"cl2sfoBF",videosHeaderLastButton:"_t50HVNJ",videosContent:"oEEQZilE",actions:"uGzi9s97",actionButton:"foXbVcnN",destructive:"YIR9Z9CZ",canRequestToSpeak:"ZoiZQu_O",muted:"wpvv1V6m",portrait:"R6HQcMwx",noVideoParticipants:"aepCFyJQ",noSidebar:"XjgP21E6"},dt=(0,pn.ph)((0,He.EK)((e,{groupCallId:n})=>{const{connectionState:t,title:i,participants:a,participantsCount:o,chatId:r}=(0,Xe.Ip)(e,n)||{},s=r?(0,Qe.hds)(e,r):void 0;return{connectionState:t,title:i||s?.title,participantsCount:o,meParticipant:(0,Xe.n5)(e,n,e.currentUserId),isCallPanelVisible:Boolean((0,Qe.nTw)(e).isCallPanelVisible),isAdmin:(0,Xe.qI)(e),participants:a,canInvite:(0,Xe.O7)(e)}})(({groupCallId:e,isCallPanelVisible:n,connectionState:t,participantsCount:i,title:a,meParticipant:o,isAdmin:r,participants:s,canInvite:c})=>{const{toggleGroupCallVideo:d,toggleGroupCallPresentation:l,leaveGroupCall:u,toggleGroupCallPanel:p,connectToActiveGroupCall:m,playGroupCallSound:g,createGroupCallInviteLink:f}=(0,He.ko)(),v=(0,yn.A)(),y=(0,pn.li)(),C=(0,pn.li)(),b=(0,pn.li)(),S=(0,pn.li)(),w=(0,pn.li)(),[I,k]=(0,pn.J0)(!1),x=!n&&!I,{observe:A}=(0,hn.BL)({rootRef:w,throttleMs:200,isDisabled:!x}),P=!(0,hn.Vz)(S,x?A:void 0),{isMobile:E,isLandscape:N}=(0,gn.Ay)(),[M,T,R]=(0,fn.A)(),[V,$,D]=(0,fn.A)(!0),B=Boolean(M&&N),F=(0,Cn.zk)(),L=(0,pn.Kr)(()=>Object.values(s).find(({presentation:e})=>e),[s]),G=(0,pn.Kr)(()=>Object.values(s).filter(({video:e,presentation:n})=>e||n).flatMap(({id:e,video:n,presentation:t})=>(0,tn.oE)([n?{id:e,type:"video"}:void 0,t?{id:e,type:"screen"}:void 0])),[s]),O=G.length>0,Y=a||v("VoipGroupVoiceChat"),U=v("Participants",i,"i"),[_,j,J]=(0,fn.A)(),[z,q]=(0,pn.J0)(!1),[K,H]=(0,pn.J0)(!1),W=o?.hasVideoStream,Z=o?.hasPresentationStream,Q=o?.hasAudioStream,X="connected"!==t,ee=o?.canSelfUnmute,ne=!ee&&!Q;(0,pn.vJ)(()=>{"connected"===t?g({sound:"join"}):"reconnecting"===t&&g({sound:"connecting"})},[t]);const te=(0,vn.A)(()=>{J(),q(!1)}),ie=(0,vn.A)(()=>{y.current&&!E&&(M?R():T())}),ae=(0,vn.A)(()=>{V?D():$()}),oe=(0,vn.A)(()=>{p()}),re=(0,vn.A)(()=>{f()}),se=(0,vn.A)(()=>{d()});(0,pn.vJ)(()=>{m()},[m,e]);const ce=(0,vn.A)(()=>{!r||_?(g({sound:"leave"}),k(!0),J()):j()}),de=(0,vn.A)(()=>{I&&u({shouldDiscard:K})}),le=(0,vn.A)(()=>{l()}),ue=G.length>1&&!E,pe=B&&O,[me,ge]=(0,pn.J0)(void 0),{videoLayout:fe,panelOffset:he}=function({primaryContainerRef:e,secondaryContainerRef:n,videoParticipants:t,isLandscapeLayout:i,pinnedVideo:a}){const[o,r]=(0,pn.J0)([]),[s,c]=(0,pn.J0)(0),d=t.length,l=(0,bn.A)(d),u=(0,bn.A)(t),p=(0,pn.Kr)(()=>u?.filter(({id:e,type:n})=>!t.some(t=>t.id===e&&t.type===n)),[u,t]),m=(0,vn.A)(()=>{const o=e.current,s=n.current;if(!s)return;const u=void 0!==l&&l>d?l-d:0,{x:m,y:g,width:f}=s.getBoundingClientRect(),h=[];if(void 0!==a||!o||!i){const e=!0;let n,s=!1,l=0,v=t;if(a&&o&&i&&(l=v.findIndex(({id:e,type:n})=>e===a.id&&n===a.type),-1!==l)){const{x:e,y:t,width:i,height:r}=o.getBoundingClientRect(),{id:c,type:d}=a;n={x:e,y:t,width:i,height:r,participantId:c,type:d,orderKey:l},s=!0,v=v.filter(({id:e,type:n})=>e!==c||n!==a.type)}const y=s?d-1:d,C=y%2==1,b=2,S=Math.ceil(y/b),w=(f-10*(b-1))/b,I=Math.max(0,C?240+(S-1)*w+8*(S-1):S*w+8*(S-1));for(let n=0;n<y;n++){const t=C&&0===n,i=t?f:w,a=t?240:w,o=C&&0!==n?n+1:n,r=(e?0:m)+o%b*(i+10),s=(e?0:g)+(C&&0!==n?248+(Math.floor(o/b)-1)*(a+8):Math.floor(o/b)*(a+8));h.push({x:r,y:s,width:i,height:a,shouldRemount:!e,isRemounted:e,noAnimate:!0,participantId:v[n].id,type:v[n].type,orderKey:n>=l?n+1:n})}if(n&&h.splice(l,0,n),p)for(let n=0;n<u;n++)h.push({x:0,y:0,width:0,height:0,isRemounted:e,isRemoved:!0,participantId:p[n].id,type:p[n].type,orderKey:n+d});return c(I),void r(h)}const{x:v,y,width:C,height:b}=o.getBoundingClientRect(),S=function(e){return e>=25?5:e>=13?4:e>=7?3:e>=3?2:1}(d),w=Math.ceil(d/S),I=w*S>d,k=(C-10*(S-1))/S,x=(b-8*(w-1))/w,A=k*(d%S);for(let e=0;e<d;e++){const n=Math.floor(e/S),i=v+e%S*(k+10)+(I&&n===w-1?(C-A)/2:0),a=y+Math.floor(e/S)*(x+8);h.push({x:i,y:a,width:k,height:x,participantId:t[e].id,type:t[e].type,orderKey:e})}if(p)for(let e=0;e<u;e++)h.push({x:0,y:0,width:0,height:0,isRemoved:!0,participantId:p[e].id,type:p[e].type,orderKey:e+d});c(0),r(h)});return(0,pn.vJ)(m,[m,t,i,a]),(0,Sn.A)(e,m,!e.current),(0,Sn.A)(n,m,!n.current),{videoLayout:o,panelOffset:s}}({primaryContainerRef:C,secondaryContainerRef:b,videoParticipants:G,isLandscapeLayout:B,pinnedVideo:me}),ve=(0,vn.A)(e=>{ge(e),e&&!M&&T()}),ye=(0,vn.A)(()=>{L&&ge({id:L.id,type:"screen"})});return(0,pn.vJ)(ye,[ye,Boolean(L)]),(0,pn.vJ)(()=>{me&&(G.some(e=>e.type===me.type&&e.id===me.id)||ge(void 0))},[me,fe,G]),(0,Yn.FD)(xn.A,{isOpen:x,onClose:p,className:(0,mn.A)(ct.root,(M||E)&&ct.fullscreen,F&&ct.appFullscreen,B&&ct.landscape,!O&&ct.noVideoParticipants,!B&&ct.portrait,!V&&pe&&ct.noSidebar),dialogRef:y,onCloseAnimationEnd:de,children:[pe&&(0,Yn.FD)("div",{className:ct.videos,children:[(0,Yn.FD)("div",{className:ct.videosHeader,children:[!E&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",color:"translucent",onClick:ie,className:(0,mn.A)(ct.headerButton,ct.firstButton),ariaLabel:v(M?"AccExitFullscreen":"AccSwitchToFullscreen"),iconName:M?"smallscreen":"fullscreen"}),(0,Yn.Y)("h3",{className:(0,mn.A)(ct.title,ct.bigger),children:a||v("VoipGroupVoiceChat")}),pe&&!V&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",color:"translucent",className:(0,mn.A)(ct.headerButton,ct.videosHeaderLastButton),onClick:ae,ariaLabel:v("AccDescrExpandPanel"),iconName:"sidebar"})]}),(0,Yn.Y)("div",{className:ct.videosContent,ref:C})]}),(0,Yn.FD)("div",{className:ct.panelWrapper,ref:w,children:[(0,Yn.FD)("div",{className:(0,mn.A)(ct.panel,"custom-scroll"),children:[(0,Yn.Y)("div",{className:ct.panelScrollTrigger,ref:S}),(0,Yn.FD)("div",{className:(0,mn.A)(ct.panelHeader,P&&ct.scrolled),children:[!pe&&!E&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",color:"translucent",ripple:!E,className:(0,mn.A)(ct.firstButton,ct.headerButton),onClick:ie,ariaLabel:v("AccSwitchToFullscreen"),iconName:"fullscreen"}),E&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",color:"translucent",onClick:oe,className:(0,mn.A)(ct.headerButton,ct.firstButton),ariaLabel:v("Close"),iconName:"close"}),pe&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",ripple:!E,className:(0,mn.A)(ct.firstButton,ct.headerButton),color:"translucent",onClick:ae,ariaLabel:v("AccDescrCollapsePanel"),iconName:"sidebar"}),(0,Yn.FD)("div",{className:ct.panelHeaderText,children:[(0,Yn.Y)("h3",{className:(0,mn.A)(ct.title,pe&&ct.bigger),children:pe?U:Y}),!pe&&(0,Yn.Y)("span",{className:ct.subtitle,children:U})]}),!pe&&c&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",ripple:!E,className:(0,mn.A)(ct.lastButton,ct.headerButton),color:"translucent",onClick:re,ariaLabel:v("VoipGroupInviteMember"),iconName:"add-user"})]}),(0,Yn.FD)("div",{className:ct.participants,children:[(0,Yn.Y)("div",{className:ct.participantVideos,ref:b,style:`height: ${he}px;`,children:fe.map(e=>{const n=s[e.participantId];return e.isRemounted&&n?(0,Yn.Y)(at,{teactOrderKey:e.orderKey,layout:e,canPin:ue,setPinned:ve,pinnedVideo:me,participant:n},`${e.participantId}_${e.type}`):(0,Yn.Y)("div",{teactOrderKey:e.orderKey},`${e.participantId}_${e.type}`)})}),(0,Yn.Y)(Hn,{panelOffset:he,isLandscape:pe})]})]}),(0,Yn.Y)(kn.A,{isShown:pe&&c,onClick:re,className:ct.addParticipantButton,ariaLabel:v("VoipGroupInviteMember"),iconName:"add-user-filled"},"add-participant")]}),(0,Yn.Y)("div",{className:ct.mainVideoContainer,children:fe.map(e=>{const n=s[e.participantId];return e.isRemounted||!n?(0,Yn.Y)("div",{teactOrderKey:e.orderKey},`${e.participantId}_${e.type}`):(0,Yn.Y)(at,{teactOrderKey:e.orderKey,layout:e,canPin:ue,setPinned:ve,pinnedVideo:me,participant:n,className:ct.video},`${e.participantId}_${e.type}`)})}),(0,Yn.FD)("div",{className:ct.actions,children:[(0,Yn.Y)(wn.A,{round:!0,size:"default",ripple:!0,className:(0,mn.A)(ct.actionButton,!Q&&ct.muted,ne&&ct.canRequestToSpeak),onClick:se,ariaLabel:v(W?"VoipStopVideo":"VoipStartVideo"),disabled:X,iconName:W?"video":"video-stop"}),(0,Yn.Y)(wn.A,{round:!0,size:"default",ripple:!0,className:(0,mn.A)(ct.actionButton,!Q&&ct.muted,ne&&ct.canRequestToSpeak),onClick:le,ariaLabel:v(Z?"lng_group_call_screen_share_stop":"lng_group_call_tooltip_screen"),disabled:X||!h,iconName:Z?"share-screen":"share-screen-stop"}),(0,Yn.Y)(st,{className:ct.actionButton}),(0,Yn.Y)(wn.A,{round:!0,size:"default",ripple:!0,className:(0,mn.A)(ct.actionButton,!Q&&ct.muted,ne&&ct.canRequestToSpeak),ariaLabel:v("lng_group_call_settings"),disabled:!0,iconName:"settings-filled"}),(0,Yn.Y)(wn.A,{round:!0,size:"default",ripple:!0,className:(0,mn.A)(ct.actionButton,ct.destructive),onClick:ce,ariaLabel:v("lng_group_call_leave"),iconName:"close"})]}),(0,Yn.FD)(xn.A,{isOpen:_,onClose:te,className:"error",title:v(z?"VoipGroupEndAlertTitle":"VoipGroupLeaveAlertTitle"),children:[(0,Yn.Y)("p",{children:v(z?"VoipGroupEndAlertText":"VoipGroupLeaveAlertText")}),!z&&(0,Yn.Y)(In.A,{className:"dialog-checkbox",label:v("VoipGroupEndChat"),checked:K,onCheck:H}),(0,Yn.FD)("div",{className:"dialog-buttons",children:[(0,Yn.Y)(wn.A,{isText:!0,className:"confirm-dialog-button",onClick:ce,children:v(z?"VoipGroupEnd":"VoipGroupLeave")}),(0,Yn.Y)(wn.A,{isText:!0,className:"confirm-dialog-button",onClick:te,children:v("Cancel")})]})]})]})})),lt=(0,pn.ph)((0,He.EK)(e=>{const n=(0,Qe.nTw)(e);return{groupCall:n.isMasterTab?(0,Xe.iT)(e):void 0,isCallPanelVisible:n.isCallPanelVisible,phoneCallUser:n.isMasterTab?(0,Xe.uu)(e):void 0}})(({groupCall:e,phoneCallUser:n,isCallPanelVisible:t})=>{const{toggleGroupCallPanel:i}=(0,He.ko)(),a=(0,yn.A)();if((0,pn.vJ)(()=>(document.body.classList.toggle("has-call-header",Boolean(t)),window.tauri?.markTitleBarOverlay(!t),()=>{document.body.classList.toggle("has-call-header",!1),window.tauri?.markTitleBarOverlay(!0)}),[t]),e||n)return(0,Yn.Y)("div",{className:(0,mn.A)("ActiveCallHeader",t&&"open"),onClick:function(){i()},children:(0,Yn.Y)("span",{className:"title",children:n?.firstName||e?.title||a("VoipGroupVoiceChat")})})}));var ut=t(58744),pt=t(80140),mt=t(30857);const gt=(0,pn.ph)(({label:e,customIcon:n,icon:t,iconClassName:i,className:a,isDisabled:o,isActive:r,onClick:s})=>(0,Yn.FD)("div",{className:"lBO3RZUM",children:[(0,Yn.Y)(wn.A,{round:!0,className:(0,mn.A)(a,"ch2sqAKW",r&&"OQxlsRp7"),onClick:s,disabled:o,children:n||(0,Yn.Y)(Vn.A,{name:t,className:i})}),(0,Yn.Y)("div",{className:"aHguvLcL",children:e})]})),ft={root:"GNYRVAUg",blurred:"RBmbMiou","single-column":"O7cZE08z",singleColumn:"O7cZE08z",fullscreenDialog:"AjeGqfrS",header:"GI6dY5aJ","close-button":"ULiJZuaP",closeButton:"ULiJZuaP","emojis-backdrop":"RFBKZpjx",emojisBackdrop:"RFBKZpjx",open:"zi1NlOXX",emojis:"DFco1VIN","emoji-tooltip":"MRIShZ3V",emojiTooltip:"MRIShZ3V","user-info":"eaUe2A0c",userInfo:"eaUe2A0c",buttons:"qIeflO02",leave:"hclywYYk",accept:"ln_ZBUHy","accept-icon":"cVRd3twS",acceptIcon:"cVRd3twS","main-video":"bGlBFSJq",mainVideo:"bGlBFSJq","second-video":"TOFu1n5x",secondVideo:"TOFu1n5x",visible:"LOnSFN9w",fullscreen:"Omg5T1o6"},ht=(0,pn.ph)((0,He.EK)(e=>{const{phoneCall:n,currentUserId:t}=e,{isCallPanelVisible:i,isMasterTab:a}=(0,Qe.nTw)(e),o=(0,Xe.uu)(e);return{isCallPanelVisible:Boolean(i),user:o,isOutgoing:n?.adminId===t,phoneCall:a?n:void 0}})(({user:e,isOutgoing:n,phoneCall:t,isCallPanelVisible:i})=>{const o=(0,yn.A)(),{hangUp:r,requestMasterAndAcceptCall:s,playGroupCallSound:c,toggleGroupCallPanel:d,connectToActivePhoneCall:l}=(0,He.ko)(),u=(0,pn.li)(),[p,m,g]=(0,fn.A)(),{isMobile:f}=(0,gn.Ay)(),v=Boolean(t&&"discarded"!==t.state&&!i),y=(0,pn.hb)(()=>{document.fullscreenElement===u.current?document.exitFullscreen().catch(()=>{}).then(g):g()},[g]),C=(0,pn.hb)(()=>{u.current&&(p?y():u.current.requestFullscreen().then(m).catch(()=>{}))},[y,p,m]);(0,pn.vJ)(()=>{if(!a.SC)return;const e=()=>{document.fullscreenElement===u.current?m():g()};return document.addEventListener("fullscreenchange",e),()=>{document.removeEventListener("fullscreenchange",e)}},[g,m]),(0,pn.vJ)(()=>{!v&&p&&y()},[y,p,v]);const b=(0,pn.hb)(()=>{d(),p&&y()},[y,p,d]),S="discarded"===t?.state,w="busy"===t?.reason,I="requested"===t?.state&&!n,k=("requested"===t?.state||"waiting"===t?.state)&&n,x="active"===t?.state,A=t?.isConnected,[P,E,N]=(0,fn.A)(),M=(0,pn.hb)(()=>{E(),r()},[r,E]);(0,pn.vJ)(()=>{P?c({sound:"end"}):I?c({sound:"incoming"}):w?c({sound:"busy"}):S?c({sound:"end"}):k?c({sound:"ringing"}):A&&c({sound:"connect"})},[w,S,I,k,A,c,P]),(0,pn.vJ)(()=>{t?.id?N():l()},[l,t?.id,N]);const R=(0,mt.A)();(0,et.A)(R,A?1e3:void 0);const V=(0,pn.Kr)(()=>{const e=t?.state;return P?o("lng_call_status_hanging"):w?"busy":"requesting"===e?o("lng_call_status_requesting"):"requested"===e?o(n?"lng_call_status_ringing":"lng_call_status_incoming"):"waiting"===e?o("lng_call_status_waiting"):"active"===e&&A?void 0:o("lng_call_status_exchanging")},[w,A,P,n,o,t?.state]),$="active"===t?.videoState,D="active"===t?.screencastState,B=T?.streams,F=B?.ownAudio?.getTracks()?.[0]?.enabled??!1,L=B?.ownPresentation?.getTracks()?.[0]?.enabled??!1,G=B?.ownVideo?.getTracks()?.[0]?.enabled??!1,[O,Y,U]=(0,fn.A)(),[_,j,J]=(0,fn.A)(),z=(0,pn.hb)(()=>{L&&Y(),G&&j(),setTimeout(async()=>{await me("presentation"),U(),J()},250)},[L,G,Y,j,U,J]),q=(0,pn.hb)(()=>{G&&j(),L&&Y(),setTimeout(async()=>{await me("video"),U(),J()},250)},[L,G,Y,j,U,J]),K=(0,pn.hb)(()=>{me("audio")},[]),[H,W,Z]=(0,fn.A)(),[Q,X,ee]=(0,fn.A)(),ne=(0,pn.hb)(()=>{X(),async function(){if(!T||!T.facingMode)return;const e=ue("video");if(!e)return void re("switch camera skipped: missing sender");const n="environment"===T.facingMode?"user":"environment";let t;try{t=await ce("video",n);const i=de(t);if(!i)return void ye(t);const a=T.streams.ownVideo;await e.replaceTrack(i),T.facingMode=n,T.streams.ownVideo=t,ye(a,T.blackVideo),oe(),be()}catch{ye(t),re("switch camera failed")}}(),setTimeout(ee,250)},[X,ee]),te=t?.startDate&&(0,pt.Fm)()-t.startDate;return(0,pn.vJ)(()=>{if("discarded"===t?.state){const e=setTimeout(r,250);return()=>{clearTimeout(e)}}},[t?.reason,t?.state]),(0,Yn.FD)(xn.A,{isOpen:v,onClose:b,className:(0,mn.A)(ft.root,f&&ft.singleColumn),dialogClassName:(0,mn.A)(p&&ft.fullscreenDialog),dialogRef:u,children:[(0,Yn.Y)(Tn.A,{peer:e,size:"jumbo",className:$||D?ft.blurred:""}),"active"===t?.screencastState&&B?.presentation&&(0,Yn.Y)("video",{className:ft.mainVideo,muted:!0,autoPlay:!0,playsInline:!0,srcObject:B.presentation}),"active"===t?.videoState&&B?.video&&(0,Yn.Y)("video",{className:ft.mainVideo,muted:!0,autoPlay:!0,playsInline:!0,srcObject:B.video}),(0,Yn.Y)("video",{className:(0,mn.A)(ft.secondVideo,!O&&L&&ft.visible,L&&p&&ft.fullscreen),muted:!0,autoPlay:!0,playsInline:!0,srcObject:L?B?.ownPresentation:void 0}),(0,Yn.Y)("video",{className:(0,mn.A)(ft.secondVideo,!_&&G&&ft.visible,G&&p&&ft.fullscreen),muted:!0,autoPlay:!0,playsInline:!0,srcObject:G?B?.ownVideo:void 0}),(0,Yn.FD)("div",{className:ft.header,children:[a.SC&&(0,Yn.Y)(wn.A,{round:!0,size:"smaller",color:"translucent",iconName:p?"smallscreen":"fullscreen",onClick:C,ariaLabel:o(p?"AccExitFullscreen":"AccSwitchToFullscreen")}),(0,Yn.Y)(wn.A,{round:!0,size:"smaller",color:"translucent",iconName:"close",onClick:b,className:ft.closeButton})]}),(0,Yn.FD)("div",{className:(0,mn.A)(ft.emojisBackdrop,H&&ft.open),onClick:H?Z:W,children:[(0,Yn.Y)("div",{className:(0,mn.A)(ft.emojis,H&&ft.open),children:t?.isConnected&&t?.emojis&&(0,En.A)(t.emojis,["emoji"])}),(0,Yn.Y)("div",{className:(0,mn.A)(ft.emojiTooltip,H&&ft.open),children:o("CallEmojiKeyTooltip",e?.firstName).replace("%%","%")})]}),(0,Yn.FD)("div",{className:ft.userInfo,children:[(0,Yn.Y)("h1",{children:e?.firstName}),(0,Yn.Y)("span",{className:ft.status,children:V||(0,ut.QO)(te||0)})]}),(0,Yn.FD)("div",{className:ft.buttons,children:[(0,Yn.Y)(gt,{onClick:K,icon:"microphone",isDisabled:!x,isActive:F,label:o(F?"lng_call_mute_audio":"lng_call_unmute_audio")}),(0,Yn.Y)(gt,{onClick:q,icon:"video",isDisabled:!x,isActive:G,label:o(G?"lng_call_stop_video":"lng_call_start_video")}),G&&(a.Ni||a.pz)&&(0,Yn.Y)(gt,{onClick:ne,customIcon:(0,Yn.Y)(Fn.A,{tgsUrl:Dn.w.CameraFlip,playSegment:Q?[0,10]:[0,1],size:32}),isDisabled:!x,label:o("VoipFlip")}),h&&(0,Yn.Y)(gt,{onClick:z,icon:"share-screen",isDisabled:!x,isActive:L,label:o("lng_call_screencast")}),I&&(0,Yn.Y)(gt,{onClick:s,icon:"phone-discard",isDisabled:S,label:o("lng_call_accept"),className:ft.accept,iconClassName:ft.acceptIcon}),(0,Yn.Y)(gt,{onClick:M,icon:"phone-discard",isDisabled:S,label:o(I?"lng_call_decline":"lng_call_end_call"),className:ft.leave})]})]})}));var vt=t(40664);const yt=(0,pn.ph)(({isOpen:e})=>{const{closeCallRatingModal:n,setCallRating:t}=(0,He.ko)(),i=(0,pn.li)(),a=(0,yn.A)(),[o,r]=(0,pn.J0)(),s=(0,pn.hb)(()=>{o?t({rating:o+1,comment:i.current?.value||""}):n()},[n,o,t]),c=(0,pn.hb)(()=>{n()},[n]);return(0,Yn.FD)(xn.A,{title:a("lng_call_rate_label"),className:"narrow",onClose:n,isOpen:e,children:[(0,Yn.Y)("div",{className:"P7EfDKJN",children:new Array(5).fill(void 0).map((e,n)=>{const t=void 0!==o&&o>=n;return(0,Yn.Y)(Vn.A,{name:t?"favorite-filled":"favorite",className:(0,mn.A)(t&&"_XX6q8YW","t8LJLFSN"),onClick:(i=n,()=>r(o===i?void 0:i))});var i})}),(0,Yn.Y)(vt.A,{ref:i,placeholder:a("lng_call_rate_comment"),className:(0,mn.A)("EvL0WaKD",4!==o&&void 0!==o&&"v5hn1XvT")}),(0,Yn.FD)("div",{className:"dialog-buttons mt-2",children:[(0,Yn.Y)(wn.A,{className:"confirm-dialog-button",isText:!0,onClick:s,children:a("Send")}),(0,Yn.Y)(wn.A,{className:"confirm-dialog-button",isText:!0,onClick:c,children:a("Cancel")})]})]})});(a.Yw||a.pz)&&document.addEventListener("click",i.cw,{once:!0})},59324(e,n,t){t.d(n,{A:()=>c});var i=t(84051),a=t(97422),o=t(41036),r=t(18276);var s=t(20021);const c=(0,i.ph)(({iconName:e,isLoading:n})=>(0,s.Y)(o.Ay,{className:"LLqNvbR9",activeKey:n?0:1,name:"fade",children:n?(0,s.Y)(a.A,{className:"PbV71feg",color:"white"}):(0,s.Y)(r.A,{className:"sohV68PB",name:e})}))},285(e,n,t){t.d(n,{A:()=>u});var i=t(84051),a=t(13439),o=t(90709),r=t(11597),s=t(4961),c=t(59030),d=t(94189),l=t(20021);const u=(0,i.ph)((0,a.EK)((e,{userId:n})=>{const t=(0,r.meB)(e),i=n&&(0,r.mBe)(e,n);return{chat:t,contactName:i?(0,o.u0)(i):void 0}})(({isOpen:e,chat:n,userId:t,contactName:o,onClose:r})=>{const{deleteChatMember:u}=(0,a.ko)(),p=(0,c.A)(),m=(0,i.hb)(()=>{u({chatId:n.id,userId:t}),r()},[n,u,r,t]);if(n&&t)return(0,l.Y)(d.A,{isOpen:e,onClose:r,title:p("GroupRemoved.Remove"),textParts:(0,s.A)(p("PeerInfo.Confirm.RemovePeer",o)),confirmLabel:p("lng_box_remove"),confirmHandler:m,confirmIsDestructive:!0})}))},71331(e,n,t){t.d(n,{Ip:()=>s,O7:()=>p,iT:()=>l,mD:()=>r,n5:()=>c,qI:()=>d,uu:()=>u});var i=t(90709),a=t(21133),o=t(19926);function r(e,n){const t=(0,a.AW)(e,n);if(t&&t.groupCallId)return s(e,t.groupCallId)}function s(e,n){return e.groupCalls.byId[n]}function c(e,n,t){return s(e,n)?.participants[t]}function d(e){const n=l(e)?.chatId;if(!n)return!1;const t=(0,a.hd)(e,n);return!!t&&((0,i.yn)(t)&&t.isCreator||Boolean(t.adminRights?.manageCall))}function l(e){const{groupCalls:{activeGroupCallId:n}}=e;if(n)return s(e,n)}function u(e){const{phoneCall:n,currentUserId:t}=e;if(!n||!n.participantId||!n.adminId)return;const i=n.adminId===t?n.participantId:n.adminId;return(0,o.mB)(e,i)}function p(e){const n=l(e);if(!n||!n.chatId)return!1;const t=(0,a.hd)(e,n.chatId);if(!t)return!1;if(Boolean((0,i.Kl)(t)))return!0;const o=(0,a.AW)(e,t.id)?.inviteLink;return Boolean(o)}},90423(e,n,t){t.d(n,{Ay:()=>s,j9:()=>l,zk:()=>c});var i=t(84051),a=t(63495),o=t(96454);const r=d();function s(e,n,t){const[a,s]=(0,i.J0)(Boolean(r&&document[r]));return(0,i.Nf)(()=>{const i=e.current,a=()=>{const e=Boolean(r&&document[r]);s(e),e?t?.(!1):n?.(!1),i instanceof HTMLVideoElement&&(i.controls=e)},o=()=>{s(!0),t&&t(!0)},c=()=>{s(!1),n&&n(!1)};return document.addEventListener("fullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),i&&(i.addEventListener("webkitbeginfullscreen",o,!1),i.addEventListener("webkitendfullscreen",c,!1)),()=>{document.removeEventListener("fullscreenchange",a,!1),document.removeEventListener("webkitfullscreenchange",a,!1),document.removeEventListener("mozfullscreenchange",a,!1),i&&(i.removeEventListener("webkitbeginfullscreen",o,!1),i.removeEventListener("webkitendfullscreen",c,!1))}},[]),r||o.pz?[a,()=>{var n;e.current&&(r||o.pz)&&!a&&((n=e.current).requestFullscreen?n.requestFullscreen():n.webkitRequestFullscreen?n.webkitRequestFullscreen():n.webkitEnterFullscreen?n.webkitEnterFullscreen():n.mozRequestFullScreen&&n.mozRequestFullScreen(),s(!0))},()=>{e.current&&(document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen(),s(!1))}]:[!1]}const c=()=>{const[e,n]=(0,i.J0)(!1);return(0,i.vJ)(()=>{const e=()=>{n(l())};let t;return a.Vq&&(window.tauri?.getCurrentWindow().then(e=>{e.isFullscreen().then(n)}),(async()=>{const e=await(window.tauri?.getCurrentWindow());t=await e.onResized(()=>{e.isFullscreen().then(n)})})()),document.addEventListener("fullscreenchange",e,!1),document.addEventListener("webkitfullscreenchange",e,!1),document.addEventListener("mozfullscreenchange",e,!1),()=>{t?.(),document.removeEventListener("fullscreenchange",e,!1),document.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1)}},[]),e};function d(){return void 0!==document.fullscreenElement?"fullscreenElement":void 0!==document.mozFullScreenElement?"mozFullScreenElement":void 0!==document.webkitFullscreenElement?"webkitFullscreenElement":""}function l(){const e=d();return Boolean(e&&document[e])}}}]);
|
|
//# sourceMappingURL=2394.e338ae7052a0f4eb3598.js.map
|