1 line
17 KiB
JavaScript
Vendored
1 line
17 KiB
JavaScript
Vendored
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2700],{44974:function(e,t,n){let r;n.d(t,{me:function(){return V},FI:function(){return O},Q:function(){return T},L4:function(){return I},j$:function(){return _},ZA:function(){return L},g1:function(){return R},g8:function(){return U},db:function(){return k},ap:function(){return G},di:function(){return j},pT:function(){return x},hz:function(){return D},YW:function(){return P},We:function(){return M},RI:function(){return S},pH:function(){return H},Gt:function(){return v}});var o,a,s=n(67294),c=n(4480),i=n(99717);let l=(0,s.createContext)(class{static async getConfig(){let e=await fetch("/api/config"),t=await e.json();return t}});var u=n(81453);let d=(0,s.createContext)(class{static async getChatHistory(e){try{let t=await (0,u.$l)("".concat("/api/chat","?accessToken=").concat(e));return t}catch(e){return[]}}static async registerUser(e){let t={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({displayName:e})},n=await (0,u.$l)("/api/chat/register",t);return n}});var h=n(28997);class f{createAndConnect(){if(!this.host||this.isShutdown)return;let e=new URL(this.host);e.protocol="https:"===window.location.protocol?"wss:":"ws:",e.pathname="/ws",e.port="3000"===window.location.port?"8080":window.location.port,e.searchParams.append("accessToken",this.accessToken);let t=new WebSocket(e.toString());t.onopen=this.onOpen.bind(this),t.onerror=this.onError.bind(this),t.onmessage=this.onMessage.bind(this),this.websocket=t}onOpen(){this.websocketReconnectTimer&&clearTimeout(this.websocketReconnectTimer),this.socketConnected(),this.backOff=0}onError(){console.error("Chat has been disconnected and is likely not working for you. It's possible you were removed from chat. If this is a server configuration issue, visit troubleshooting steps to resolve. https://owncast.online/docs/troubleshooting/#chat-is-disabled"),this.socketDisconnected(),this.websocket.close(),this.isShutdown||this.scheduleReconnect()}scheduleReconnect(){this.isShutdown||(this.websocketReconnectTimer&&clearTimeout(this.websocketReconnectTimer),this.websocketReconnectTimer=setTimeout(this.createAndConnect,Math.min(this.backOff,1e4)),this.backOff+=1e3)}shutdown(){this.isShutdown=!0,this.websocket.close()}onMessage(e){let t;let n=e.data.split("\n");for(let e=0;e<n.length;e++){try{t=JSON.parse(n[e]),this.handleMessage&&this.handleMessage(t)}catch(e){console.error(e,e.data);return}if(!t.type){console.error("No type provided",t);return}if(t.type===h.C.PING){this.sendPong();return}}}isConnected(){var e,t;return(null===(e=this.websocket)||void 0===e?void 0:e.readyState)===(null===(t=this.websocket)||void 0===t?void 0:t.OPEN)}send(e){e.type&&h.C[e.type]||console.warn('Outbound message: Unknown socket message type: "'.concat(e.type,'" sent.'));let t=JSON.stringify(e);this.websocket.send(t)}sendPong(){let e={type:h.C.PONG};this.send(e)}constructor(e,t,n){this.isShutdown=!1,this.backOff=0,this.accessToken=e,this.path=t,this.websocketReconnectTimer=null,this.isShutdown=!1,this.host=n,this.createAndConnect=this.createAndConnect.bind(this),this.shutdown=this.shutdown.bind(this),this.createAndConnect()}}var E=n(4723);let g={chatAvailable:!0,chatLoading:!1,videoAvailable:!0,appLoading:!1};(o=a||(a={})).Loading="LOADING",o.Loaded="LOADED",o.Online="ONLINE",o.Offline="OFFLINE",o.NeedsRegister="NEEDS_REGISTER",o.Fail="FAIL",o.ChatUserDisabled="CHAT_USER_DISABLED";let p=(0,E.C)({id:"appState",initial:"loading",predictableActionArguments:!0,states:{loading:{meta:{chatAvailable:!1,chatLoading:!1,videoAvailable:!1,appLoading:!0},on:{NEEDS_REGISTER:{target:"loading"},LOADED:{target:"ready"},FAIL:{target:"serverFailure"}}},ready:{initial:"offline",states:{online:{meta:{...g},on:{OFFLINE:{target:"goodbye"},CHAT_USER_DISABLED:{target:"chatUserDisabled"}}},offline:{meta:{chatAvailable:!1,chatLoading:!1,videoAvailable:!1,appLoading:!1},on:{ONLINE:{target:"online"}}},goodbye:{on:{ONLINE:{target:"online"}},meta:{chatAvailable:!0,chatLoading:!1,videoAvailable:!1,appLoading:!1},after:{3e5:{target:"offline"}}},chatUserDisabled:{meta:{...g,chatAvailable:!1}}}},serverFailure:{type:"final"},userfailure:{type:"final"}}});var y=n(61225),w=n(63516);let b=(0,s.createContext)(class{static async getStatus(){let e=await fetch("/api/status"),t=await e.json();return t}});c.zl.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=!1;let m="accessToken",A=!1,C=!1,N="Cannot connect to the Owncast service. Please check your internet connection and verify this Owncast server is running.",S=(0,c.cn)({key:"serverStatusState",default:{online:!1,viewerCount:0,serverTime:new Date}}),R=(0,c.cn)({key:"clientConfigState",default:{name:"",summary:"",offlineMessage:"",logo:"",tags:[],version:"",nsfw:!1,extraPageContent:"",socialHandles:[],chatDisabled:!1,externalActions:[],customStyles:"",appearanceVariables:new Map,maxSocketPayloadSize:0,federation:{enabled:!1,account:"",followerCount:0},notifications:{browser:{enabled:!1,publicKey:""}},authentication:{indieAuthEnabled:!1}}}),O=(0,c.cn)({key:"accessTokenAtom",default:null}),k=(0,c.cn)({key:"currentUserAtom",default:null}),_=(0,c.cn)({key:"chatMessages",default:[]}),I=(0,c.cn)({key:"chatAuthenticatedAtom",default:!1}),v=(0,c.cn)({key:"websocketServiceAtom",default:null,dangerouslyAllowMutability:!0}),T=(0,c.cn)({key:"appState",default:{chatAvailable:!1,chatLoading:!0,videoAvailable:!1,appLoading:!0}}),D=(0,c.cn)({key:"isMobileAtom",default:void 0}),L=(0,c.cn)({key:"chatVisibilityToggleAtom",default:!0}),M=(0,c.cn)({key:"isVideoPlayingAtom",default:!1}),G=(0,c.cn)({key:"fatalErrorStateAtom",default:null}),U=(0,c.cn)({key:"clockSkewAtom",default:0}),F=(0,c.cn)({key:"removedMessageIds",default:[]}),j=(0,c.nZ)({key:"isChatAvailableSelector",get:e=>{let{get:t}=e,n=t(T),r=t(O);return r&&n.chatAvailable&&!C}}),x=(0,c.nZ)({key:"isChatVisibleSelector",get:e=>{let{get:t}=e,n=t(T),r=t(L);return n.chatAvailable&&r&&!C}}),P=(0,c.nZ)({key:"isOnlineSelector",get:e=>{let{get:t}=e,n=t(T),r=t(M);return n.videoAvailable||r}}),H=(0,c.nZ)({key:"visibleChatMessagesSelector",get:e=>{let{get:t}=e,n=t(_),r=t(F);return n.filter(e=>!r.includes(e.id))}}),V=()=>{let e;let t=(0,s.useContext)(l),n=(0,s.useContext)(d),o=(0,s.useContext)(b),[u,E,g]=(0,i.e)(p),[D,L]=(0,c.FV)(k),M=(0,c.Zl)(I),[j,x]=(0,c.FV)(R),P=(0,c.Zl)(S),H=(0,c.Zl)(U),V=(0,c.Zl)(_),[B,Z]=(0,c.FV)(O),Y=(0,c.Zl)(T),J=(0,c.Zl)(G),W=(0,c.Zl)(v),[K,Q]=(0,c.FV)(F),[$,X]=(0,s.useState)(!1),z=(e,t)=>{J({title:e,message:t})},q=e=>{E(e)},ee=e=>{if(u.matches("loading")){let t=[a.Loaded];e.online?t.push(a.Online):t.push(a.Offline),q(t);return}e.online&&u.matches("ready")?q([a.Online]):e.online||u.matches("ready.offline")||q([a.Offline])},et=async()=>{try{let e=await t.getConfig();x(e),J(null),X(!0)}catch(e){z("Unable to reach Owncast server",N),console.error("ClientConfigService -> getConfig() ERROR: \n",e)}},en=async()=>{try{let e=await o.getStatus();ee(e),P(e);let{serverTime:t}=e,n=new Date(t).getTime()-Date.now();H(n),J(null)}catch(e){q([a.Fail]),z("Unable to reach Owncast server",N),console.error("serverStatusState -> getStatus() ERROR: \n",e)}},er=async e=>{let t=(0,y.$o)(m);if(t){Z(t);return}try{q([a.NeedsRegister]);let t=await n.registerUser(e),{accessToken:r,displayName:o,displayColor:s}=t;if(!r)return;L({...D,displayName:o,displayColor:s}),Z(r),(0,y.qQ)(m,r)}catch(e){q([a.Fail]),console.error("ChatService -> registerUser() ERROR: \n".concat(e))}},eo=()=>{(0,y.qQ)(m,""),Z(null),null==e||e.shutdown(),er()},ea=e=>{let{ids:t,visible:n}=e;if(n){let e=K.filter(e=>!t.includes(e));Q(e)}else{let e=[...K,...t];Q(e)}},es=()=>{C=!0},ec=()=>{C=!1},ei=e=>{var t;switch(e.type){case h.C.ERROR_NEEDS_REGISTRATION:eo();break;case h.C.CONNECTED_USER_INFO:if(!function(e,t,n){let{user:r}=e,{id:o,displayName:a,displayColor:s,scopes:c,authenticated:i}=r;t(i),n({id:o.toString(),displayName:a,displayColor:s,isModerator:null==c?void 0:c.includes("MODERATOR")})}(e,M,L),e){let n=new h.s(e);!A&&(null===(t=n.user)||void 0===t?void 0:t.isModerator())&&(V(t=>[...t,e]),A=!0)}break;case h.C.CHAT:V(t=>[...t,e]);break;case h.C.NAME_CHANGE:V(t=>[...t,e]);break;case h.C.USER_JOINED:V(t=>[...t,e]);break;case h.C.SYSTEM:V(t=>[...t,e]);break;case h.C.CHAT_ACTION:V(t=>[...t,e]);break;case h.C.FEDIVERSE_ENGAGEMENT_FOLLOW:V(t=>[...t,e]);break;case h.C.FEDIVERSE_ENGAGEMENT_LIKE:V(t=>[...t,e]);break;case h.C.FEDIVERSE_ENGAGEMENT_REPOST:V(t=>[...t,e]);break;case h.C.VISIBILITY_UPDATE:ea(e);break;case h.C.ERROR_USER_DISABLED:console.log("User has been disabled"),q([a.ChatUserDisabled]);break;default:console.error("Unknown socket message type: ",e.type)}},el=async()=>{try{let e=await n.getChatHistory(B);e&&V(t=>[...t,...e])}catch(e){console.error("ChatService -> getChatHistory() ERROR: \n".concat(e))}},eu=async()=>{try{e&&(null==e||e.shutdown(),W(null),e=null);let{socketHostOverride:t}=j,n=window.location;n.hash="";let r=n.toString().replaceAll("#","");(e=new f(B,"/ws",t||r)).handleMessage=ei,e.socketDisconnected=es,e.socketConnected=ec,W(e)}catch(e){console.error("ChatService -> startChat() ERROR: \n".concat(e)),q([a.ChatUserDisabled])}};return(0,s.useEffect)(()=>{try{if(window.configHydration){let e=JSON.parse(window.configHydration);x(e),X(!0)}}catch(e){console.error("Error parsing config hydration",e)}try{if(window.statusHydration){let e=JSON.parse(window.statusHydration);P(e),ee(e)}}catch(e){console.error("error parsing status hydration",e)}},[]),(0,s.useEffect)(()=>{!j.chatDisabled&&B&&$&&!e&&eu()},[$,B]),(0,s.useEffect)(()=>(et(),er(),en(),clearInterval(r),r=setInterval(()=>{en()},5e3),()=>{clearInterval(r)}),[]),(0,s.useEffect)(()=>{B&&el()},[B]),(0,s.useEffect)(()=>{g.onTransition(e=>{let t=(0,w.YR)(e.meta);Y(t)})},[]),null}},21756:function(e,t,n){n.d(t,{Q:function(){return l}});var r=n(85893),o=n(9008),a=n.n(o),s=n(67294),c=n(4480),i=n(44974);let l=()=>{let e=(0,c.sJ)(i.g1),{appearanceVariables:t,customStyles:n}=e,o=Object.keys(t||{}).filter(e=>!!t[e]).map(e=>"--".concat(e,": ").concat(t[e])),[l,u]=(0,s.useState)("#fff");return(0,s.useEffect)(()=>{let e=getComputedStyle(document.documentElement).getPropertyValue("--theme-color-background-header");u(e)},[o]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a(),{children:(0,r.jsx)("meta",{name:"theme-color",content:l})}),(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:"\n :root {\n ".concat(o.join(";\n"),"\n }\n ").concat(n,"\n ")}})]})}},69183:function(e,t,n){n.d(t,{A:function(){return i}});var r=n(85893),o=n(14670),a=n(71577);let s=()=>{window.open("https://github.com/owncast/owncast/issues/new?assignees=&labels=&template=bug-report-feature-request.yml","_blank")},c=e=>{let{message:t,componentName:n,details:o,canRetry:a}=e;return(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"There was an unexpected error. It would be appreciated if you would report this so it can be fixed in the future."}),!!a&&(0,r.jsx)("p",{children:"You may optionally retry, however functionality might not work as expected."}),(0,r.jsxs)("code",{children:[(0,r.jsx)("div",{children:t&&"Error: ".concat(t)}),(0,r.jsxs)("div",{children:["Component: ",n]}),(0,r.jsx)("div",{children:o&&o})]})]})},i=e=>{let{message:t,componentName:n,details:i,retryFunction:l}=e;return(0,r.jsx)(o.Z,{message:"Error",showIcon:!0,description:(0,r.jsx)(c,{message:t,details:i,componentName:n,canRetry:!!l}),type:"error",action:(0,r.jsxs)(r.Fragment,{children:[l&&(0,r.jsx)(a.Z,{ghost:!0,size:"small",onClick:l,children:"Retry"}),(0,r.jsx)(a.Z,{ghost:!0,size:"small",danger:!0,onClick:s,children:"Report Error"})]})})}},28997:function(e,t,n){n.d(t,{C:function(){return o},s:function(){return s}});var r,o,a=n(25449);(r=o||(o={})).CHAT="CHAT",r.PING="PING",r.NAME_CHANGE="NAME_CHANGE",r.COLOR_CHANGE="COLOR_CHANGE",r.PONG="PONG",r.SYSTEM="SYSTEM",r.USER_JOINED="USER_JOINED",r.CHAT_ACTION="CHAT_ACTION",r.FEDIVERSE_ENGAGEMENT_FOLLOW="FEDIVERSE_ENGAGEMENT_FOLLOW",r.FEDIVERSE_ENGAGEMENT_LIKE="FEDIVERSE_ENGAGEMENT_LIKE",r.FEDIVERSE_ENGAGEMENT_REPOST="FEDIVERSE_ENGAGEMENT_REPOST",r.CONNECTED_USER_INFO="CONNECTED_USER_INFO",r.ERROR_USER_DISABLED="ERROR_USER_DISABLED",r.ERROR_NEEDS_REGISTRATION="ERROR_NEEDS_REGISTRATION",r.ERROR_MAX_CONNECTIONS_EXCEEDED="ERROR_MAX_CONNECTIONS_EXCEEDED",r.VISIBILITY_UPDATE="VISIBILITY-UPDATE";class s{constructor(e){this.id=e.id,this.timestamp=e.timestamp,this.type=e.type,this.body=e.body,e.user&&(this.user=new a.n(e.user))}}},25449:function(e,t,n){n.d(t,{n:function(){return r}});class r{constructor(e){this.isModerator=()=>!!this.scopes&&0!==this.scopes.length&&this.scopes.includes("MODERATOR"),this.id=e.id,this.displayName=e.displayName,this.displayColor=e.displayColor,this.createdAt=e.createdAt,this.previousNames=e.previousNames,this.nameChangedAt=e.nameChangedAt,this.scopes=e.scopes,this.authenticated=e.authenticated}}},81453:function(e,t,n){n.d(t,{$i:function(){return M},$l:function(){return Y},Bu:function(){return y},E8:function(){return F},Ff:function(){return k},GC:function(){return m},GR:function(){return Q},HP:function(){return U},IO:function(){return v},Kp:function(){return E},Kt:function(){return W},M_:function(){return D},N$:function(){return H},NE:function(){return i},NM:function(){return p},Q_:function(){return l},Qc:function(){return O},RB:function(){return w},UJ:function(){return B},WB:function(){return s},WE:function(){return S},WQ:function(){return N},Wr:function(){return I},XA:function(){return T},Y9:function(){return j},a_:function(){return f},ao:function(){return d},bl:function(){return u},e_:function(){return G},hn:function(){return R},iG:function(){return L},iV:function(){return h},jr:function(){return b},kb:function(){return x},kg:function(){return J},ms:function(){return _},nx:function(){return A},op:function(){return P},qk:function(){return g},rQ:function(){return Z},sG:function(){return C},um:function(){return V}});var r=n(34155);let o=r.env.NEXT_PUBLIC_ADMIN_USERNAME,a=r.env.NEXT_PUBLIC_ADMIN_STREAMKEY,s="/",c="".concat(s,"api/admin/"),i=15e3,l="".concat(c,"status"),u="".concat(c,"serverconfig"),d="".concat(c,"config"),h="".concat(c,"viewersOverTime"),f="".concat(c,"viewers"),E="".concat(c,"chat/clients"),g="".concat(c,"chat/users/disabled"),p="".concat(c,"chat/users/setenabled"),y="".concat(c,"chat/users/ipbans"),w="".concat(c,"chat/users/ipbans/remove"),b="".concat(c,"chat/users/setmoderator"),m="".concat(c,"chat/users/moderators"),A="".concat(c,"hardwarestats"),C="".concat(c,"logs"),N="".concat(c,"logs/warnings"),S="".concat(c,"chat/messages"),R="/api/admin/chat/messagevisibility",O="".concat(c,"emoji/upload"),k="".concat(c,"emoji/delete"),_="".concat(c,"accesstokens"),I="".concat(c,"accesstokens/delete"),v="".concat(c,"accesstokens/create"),T="".concat(c,"webhooks"),D="".concat(c,"webhooks/delete"),L="".concat(c,"webhooks/create"),M="".concat(s,"api/socialplatforms"),G="".concat(c,"federation/send"),U="".concat(c,"followers"),F="".concat(c,"followers/pending"),j="".concat(c,"followers/blocked"),x="".concat(c,"followers/approve"),P="".concat(c,"federation/actions"),H="".concat(c,"metrics/video"),V="".concat(c,"config/streamkeys"),B="".concat(c,"yp/reset");async function Z(e,t){let{data:n,method:r="GET",auth:s=!0}=t||{},c={method:r};if(n&&(c.body=JSON.stringify(n)),s&&o&&a){let e=btoa("".concat(o,":").concat(a));c.headers={Authorization:"Basic ".concat(e)},c.mode="cors",c.credentials="include"}let i=await fetch(e,c),l=await i.json();if(!i.ok){let e=l.message||"An error has occurred: ".concat(i.status);throw Error(e)}return l}async function Y(e,t){let n={method:"GET",auth:!1,...t};return Z(e,n)}async function J(e){try{let t=await fetch(e,{referrerPolicy:"no-referrer",referrer:""});if(!t.ok){let e="An error has occured: ".concat(t.status);throw Error(e)}let n=await t.json();return n}catch(e){console.log(e)}return{}}async function W(){return J("https://api.github.com/repos/owncast/owncast/releases/latest")}let K=/^\d+(\.\d+){0,2}$/;async function Q(e){let t=await W(),n=t.tag_name;return("v"===n.substr(0,1)&&(n=n.substr(1)),!function(e,t){if(!e||!t||0===e.length||0===t.length)return!1;if(e===t)return!0;if(K.test(e)&&K.test(t)){let n=e.split(".");for(;n.length<3;)n.push("0");let r=t.split(".");for(;r.length<3;)r.push("0");for(let e=0;e<3;e++){let t=parseInt(n[e],10),o=parseInt(r[e],10);if(t!==o)return t>o}return!0}return e>=t}(e,n))?n:null}},63516:function(e,t,n){function r(e,t){return 1===t?e:"".concat(e,"s")}function o(e){let t="string"==typeof e?new Date(e):e;return(new Date-t)/864e5}function a(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return Object.assign(t,r),t},{})}n.d(t,{Xb:function(){return o},YR:function(){return a},_6:function(){return r}})},61225:function(e,t,n){n.d(t,{$o:function(){return o},dA:function(){return r},qQ:function(){return a}});let r={username:"username",hasDisplayedNotificationModal:"HAS_DISPLAYED_NOTIFICATION_MODAL",userVisitCount:"USER_VISIT_COUNT"};function o(e){try{return localStorage.getItem(e)}catch(e){console.error(e)}return null}function a(e,t){try{return""!==t&&null!==t?localStorage.setItem(e,t):localStorage.removeItem(e),!0}catch(e){console.error(e)}return!1}}}]); |