9remote 2.0.78 → 2.0.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +2 -2
- package/dist/ptyDaemon.cjs +7 -7
- package/dist/server.cjs +6 -6
- package/dist/ui/assets/{index-H4gmuZzc.js → index-CaEPOW7w.js} +3447 -3447
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
package/dist/server.cjs
CHANGED
|
@@ -26,7 +26,7 @@ Content-Length: `+i+`\r
|
|
|
26
26
|
`+Object.keys(n).map(i=>`${i}: ${n[i]}`).join(`\r
|
|
27
27
|
`)+`\r
|
|
28
28
|
\r
|
|
29
|
-
`+t)}function li(r,e,t,n,i,s){if(r.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,li),r.emit("wsClientError",o,t,e)}else No(t,n,i,s)}});var vb=A((a8,gb)=>{"use strict";var mn=nl();mn.createWebSocketStream=ob();mn.Server=mb();mn.Receiver=kd();mn.Sender=Od();mn.WebSocket=mn;mn.WebSocketServer=mn.Server;gb.exports=mn});var Hd=A(ds=>{"use strict";var jd;Object.defineProperty(ds,"__esModule",{value:!0});ds.SessionAwareAdapter=ds.Adapter=void 0;var s2=require("events"),o2=p_(),sl=vb(),a2=typeof((jd=sl?.Sender)===null||jd===void 0?void 0:jd.frame)=="function",ol=class extends s2.EventEmitter{constructor(e){super(),this.nsp=e,this.rooms=new Map,this.sids=new Map,this.encoder=e.server.encoder}init(){}close(){}serverCount(){return Promise.resolve(1)}addAll(e,t){this.sids.has(e)||this.sids.set(e,new Set);for(let n of t)this.sids.get(e).add(n),this.rooms.has(n)||(this.rooms.set(n,new Set),this.emit("create-room",n)),this.rooms.get(n).has(e)||(this.rooms.get(n).add(e),this.emit("join-room",n,e))}del(e,t){this.sids.has(e)&&this.sids.get(e).delete(t),this._del(t,e)}_del(e,t){let n=this.rooms.get(e);n!=null&&(n.delete(t)&&this.emit("leave-room",e,t),n.size===0&&this.rooms.delete(e)&&this.emit("delete-room",e))}delAll(e){if(this.sids.has(e)){for(let t of this.sids.get(e))this._del(t,e);this.sids.delete(e)}}broadcast(e,t){let n=t.flags||{},i={preEncoded:!0,volatile:n.volatile,compress:n.compress};e.nsp=this.nsp.name;let s=this._encode(e,i);this.apply(t,o=>{typeof o.notifyOutgoingListeners=="function"&&o.notifyOutgoingListeners(e),o.client.writeToEngine(s,i)})}broadcastWithAck(e,t,n,i){let s=t.flags||{},o={preEncoded:!0,volatile:s.volatile,compress:s.compress};e.nsp=this.nsp.name,e.id=this.nsp._ids++;let a=this._encode(e,o),c=0;this.apply(t,l=>{c++,l.acks.set(e.id,i),typeof l.notifyOutgoingListeners=="function"&&l.notifyOutgoingListeners(e),l.client.writeToEngine(a,o)}),n(c)}_encode(e,t){let n=this.encoder.encode(e);if(a2&&n.length===1&&typeof n[0]=="string"){let i=Buffer.from("4"+n[0]);t.wsPreEncodedFrame=sl.Sender.frame(i,{readOnly:!1,mask:!1,rsv1:!1,opcode:1,fin:!0})}return n}sockets(e){let t=new Set;return this.apply({rooms:e},n=>{t.add(n.id)}),Promise.resolve(t)}socketRooms(e){return this.sids.get(e)}fetchSockets(e){let t=[];return this.apply(e,n=>{t.push(n)}),Promise.resolve(t)}addSockets(e,t){this.apply(e,n=>{n.join(t)})}delSockets(e,t){this.apply(e,n=>{t.forEach(i=>n.leave(i))})}disconnectSockets(e,t){this.apply(e,n=>{n.disconnect(t)})}apply(e,t){let n=e.rooms,i=this.computeExceptSids(e.except);if(n.size){let s=new Set;for(let o of n)if(this.rooms.has(o))for(let a of this.rooms.get(o)){if(s.has(a)||i.has(a))continue;let c=this.nsp.sockets.get(a);c&&(t(c),s.add(a))}}else for(let[s]of this.sids){if(i.has(s))continue;let o=this.nsp.sockets.get(s);o&&t(o)}}computeExceptSids(e){let t=new Set;if(e&&e.size>0)for(let n of e)this.rooms.has(n)&&this.rooms.get(n).forEach(i=>t.add(i));return t}serverSideEmit(e){console.warn("this adapter does not support the serverSideEmit() functionality")}persistSession(e){}restoreSession(e,t){return null}};ds.Adapter=ol;var Fd=class extends ol{constructor(e){super(e),this.nsp=e,this.sessions=new Map,this.packets=[],this.maxDisconnectionDuration=e.server.opts.connectionStateRecovery.maxDisconnectionDuration,setInterval(()=>{let n=Date.now()-this.maxDisconnectionDuration;this.sessions.forEach((i,s)=>{i.disconnectedAt<n&&this.sessions.delete(s)});for(let i=this.packets.length-1;i>=0;i--)if(this.packets[i].emittedAt<n){this.packets.splice(0,i+1);break}},60*1e3).unref()}persistSession(e){e.disconnectedAt=Date.now(),this.sessions.set(e.pid,e)}restoreSession(e,t){let n=this.sessions.get(e);if(!n)return null;if(n.disconnectedAt+this.maxDisconnectionDuration<Date.now())return this.sessions.delete(e),null;let s=this.packets.findIndex(a=>a.id===t);if(s===-1)return null;let o=[];for(let a=s+1;a<this.packets.length;a++){let c=this.packets[a];c2(n.rooms,c.opts)&&o.push(c.data)}return Promise.resolve(Object.assign(Object.assign({},n),{missedPackets:o}))}broadcast(e,t){var n;let i=e.type===2,s=e.id===void 0,o=((n=t.flags)===null||n===void 0?void 0:n.volatile)===void 0;if(i&&s&&o){let a=(0,o2.yeast)();e.data.push(a),this.packets.push({id:a,opts:t,data:e.data,emittedAt:Date.now()})}super.broadcast(e,t)}};ds.SessionAwareAdapter=Fd;function c2(r,e){let t=e.rooms.size===0||r.some(i=>e.rooms.has(i)),n=r.every(i=>!e.except.has(i));return t&&n}});var yb=A(Ur=>{"use strict";var l2=Ur&&Ur.__rest||function(r,e){var t={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(r);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(r,n[i])&&(t[n[i]]=r[n[i]]);return t};Object.defineProperty(Ur,"__esModule",{value:!0});Ur.ClusterAdapterWithHeartbeat=Ur.ClusterAdapter=Ur.MessageType=void 0;var u2=Hd(),p2=Ae(),f2=require("crypto"),Ee=(0,p2.debug)("socket.io-adapter"),d2="emitter",al=5e3;function ms(){return(0,f2.randomBytes)(8).toString("hex")}var Q;(function(r){r[r.INITIAL_HEARTBEAT=1]="INITIAL_HEARTBEAT",r[r.HEARTBEAT=2]="HEARTBEAT",r[r.BROADCAST=3]="BROADCAST",r[r.SOCKETS_JOIN=4]="SOCKETS_JOIN",r[r.SOCKETS_LEAVE=5]="SOCKETS_LEAVE",r[r.DISCONNECT_SOCKETS=6]="DISCONNECT_SOCKETS",r[r.FETCH_SOCKETS=7]="FETCH_SOCKETS",r[r.FETCH_SOCKETS_RESPONSE=8]="FETCH_SOCKETS_RESPONSE",r[r.SERVER_SIDE_EMIT=9]="SERVER_SIDE_EMIT",r[r.SERVER_SIDE_EMIT_RESPONSE=10]="SERVER_SIDE_EMIT_RESPONSE",r[r.BROADCAST_CLIENT_COUNT=11]="BROADCAST_CLIENT_COUNT",r[r.BROADCAST_ACK=12]="BROADCAST_ACK",r[r.ADAPTER_CLOSE=13]="ADAPTER_CLOSE"})(Q||(Ur.MessageType=Q={}));function ui(r){return{rooms:[...r.rooms],except:[...r.except],flags:r.flags}}function hs(r){return{rooms:new Set(r.rooms),except:new Set(r.except),flags:r.flags}}var cl=class extends u2.Adapter{constructor(e){super(e),this.requests=new Map,this.ackRequests=new Map,this.uid=ms()}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);if(e.nsp!==this.nsp.name)return Ee("[%s] ignore message from another namespace (%s)",this.uid,e.nsp);switch(Ee("[%s] new event of type %d from %s",this.uid,e.type,e.uid),e.type){case Q.BROADCAST:{if(e.data.requestId!==void 0)super.broadcastWithAck(e.data.packet,hs(e.data.opts),i=>{Ee("[%s] waiting for %d client acknowledgements",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_CLIENT_COUNT,data:{requestId:e.data.requestId,clientCount:i}})},i=>{Ee("[%s] received acknowledgement with value %j",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_ACK,data:{requestId:e.data.requestId,packet:i}})});else{let i=e.data.packet,s=hs(e.data.opts);this.addOffsetIfNecessary(i,s,t),super.broadcast(i,s)}break}case Q.SOCKETS_JOIN:super.addSockets(hs(e.data.opts),e.data.rooms);break;case Q.SOCKETS_LEAVE:super.delSockets(hs(e.data.opts),e.data.rooms);break;case Q.DISCONNECT_SOCKETS:super.disconnectSockets(hs(e.data.opts),e.data.close);break;case Q.FETCH_SOCKETS:{Ee("[%s] calling fetchSockets with opts %j",this.uid,e.data.opts),super.fetchSockets(hs(e.data.opts)).then(n=>{this.publishResponse(e.uid,{type:Q.FETCH_SOCKETS_RESPONSE,data:{requestId:e.data.requestId,sockets:n.map(i=>{let s=i.handshake,{sessionStore:o}=s,a=l2(s,["sessionStore"]);return{id:i.id,handshake:a,rooms:[...i.rooms],data:i.data}})}})});break}case Q.SERVER_SIDE_EMIT:{let n=e.data.packet;if(!(e.data.requestId!==void 0)){this.nsp._onServerSideEmit(n);return}let s=!1,o=a=>{s||(s=!0,Ee("[%s] calling acknowledgement with %j",this.uid,a),this.publishResponse(e.uid,{type:Q.SERVER_SIDE_EMIT_RESPONSE,data:{requestId:e.data.requestId,packet:a}}))};this.nsp._onServerSideEmit([...n,o]);break}case Q.BROADCAST_CLIENT_COUNT:case Q.BROADCAST_ACK:case Q.FETCH_SOCKETS_RESPONSE:case Q.SERVER_SIDE_EMIT_RESPONSE:this.onResponse(e);break;default:Ee("[%s] unknown message type: %s",this.uid,e.type)}}onResponse(e){var t,n;let i=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,i),e.type){case Q.BROADCAST_CLIENT_COUNT:{(t=this.ackRequests.get(i))===null||t===void 0||t.clientCountCallback(e.data.clientCount);break}case Q.BROADCAST_ACK:{(n=this.ackRequests.get(i))===null||n===void 0||n.ack(e.data.packet);break}case Q.FETCH_SOCKETS_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,e.data.sockets.forEach(o=>s.responses.push(o)),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(s.responses),this.requests.delete(i));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,s.responses.push(e.data.packet),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(null,s.responses),this.requests.delete(i));break}default:Ee("[%s] unknown response type: %s",this.uid,e.type)}}async broadcast(e,t){var n;if(!((n=t.flags)===null||n===void 0?void 0:n.local))try{let s=await this.publishAndReturnOffset({type:Q.BROADCAST,data:{packet:e,opts:ui(t)}});this.addOffsetIfNecessary(e,t,s)}catch(s){return Ee("[%s] error while broadcasting message: %s",this.uid,s.message)}super.broadcast(e,t)}addOffsetIfNecessary(e,t,n){var i;if(!this.nsp.server.opts.connectionStateRecovery)return;let s=e.type===2,o=e.id===void 0,a=((i=t.flags)===null||i===void 0?void 0:i.volatile)===void 0;s&&o&&a&&e.data.push(n)}broadcastWithAck(e,t,n,i){var s;if(!((s=t?.flags)===null||s===void 0?void 0:s.local)){let a=ms();this.ackRequests.set(a,{clientCountCallback:n,ack:i}),this.publish({type:Q.BROADCAST,data:{packet:e,requestId:a,opts:ui(t)}}),setTimeout(()=>{this.ackRequests.delete(a)},t.flags.timeout)}super.broadcastWithAck(e,t,n,i)}async addSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_JOIN,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.addSockets(e,t)}async delSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_LEAVE,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.delSockets(e,t)}async disconnectSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.DISCONNECT_SOCKETS,data:{opts:ui(e),close:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.disconnectSockets(e,t)}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets(e),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.requests.get(o);f&&(c(new Error(`timeout reached: only ${f.current} responses received out of ${f.expected}`)),this.requests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,current:0,expected:s,responses:n};this.requests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=await this.serverCount()-1;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.requests.get(s);c&&(n(new Error(`timeout reached: only ${c.current} responses received out of ${c.expected}`),c.responses),this.requests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,current:0,expected:i,responses:[]};this.requests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}publish(e){Ee("[%s] sending message %s",this.uid,e.type),this.publishAndReturnOffset(e).catch(t=>{Ee("[%s] error while publishing message: %s",this.uid,t)})}publishAndReturnOffset(e){return e.uid=this.uid,e.nsp=this.nsp.name,this.doPublish(e)}publishResponse(e,t){t.uid=this.uid,t.nsp=this.nsp.name,Ee("[%s] sending response %s to %s",this.uid,t.type,e),this.doPublishResponse(e,t).catch(n=>{Ee("[%s] error while publishing response: %s",this.uid,n)})}};Ur.ClusterAdapter=cl;var qd=class extends cl{constructor(e,t){super(e),this.nodesMap=new Map,this.customRequests=new Map,this._opts=Object.assign({heartbeatInterval:5e3,heartbeatTimeout:1e4},t),this.cleanupTimer=setInterval(()=>{let n=Date.now();this.nodesMap.forEach((i,s)=>{n-i>this._opts.heartbeatTimeout&&(Ee("[%s] node %s seems down",this.uid,s),this.removeNode(s))})},1e3)}init(){this.publish({type:Q.INITIAL_HEARTBEAT})}scheduleHeartbeat(){this.heartbeatTimer?this.heartbeatTimer.refresh():this.heartbeatTimer=setTimeout(()=>{this.publish({type:Q.HEARTBEAT})},this._opts.heartbeatInterval)}close(){this.publish({type:Q.ADAPTER_CLOSE}),clearTimeout(this.heartbeatTimer),this.cleanupTimer&&clearInterval(this.cleanupTimer)}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);switch(e.uid&&e.uid!==d2&&this.nodesMap.set(e.uid,Date.now()),e.type){case Q.INITIAL_HEARTBEAT:this.publish({type:Q.HEARTBEAT});break;case Q.HEARTBEAT:break;case Q.ADAPTER_CLOSE:this.removeNode(e.uid);break;default:super.onMessage(e,t)}}serverCount(){return Promise.resolve(1+this.nodesMap.size)}publish(e){return this.scheduleHeartbeat(),super.publish(e)}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=this.nodesMap.size;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.customRequests.get(s);c&&(n(new Error(`timeout reached: missing ${c.missingUids.size} responses`),c.responses),this.customRequests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,missingUids:new Set([...this.nodesMap.keys()]),responses:[]};this.customRequests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets({rooms:e.rooms,except:e.except,flags:{local:!0}}),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.customRequests.get(o);f&&(c(new Error(`timeout reached: missing ${f.missingUids.size} responses`)),this.customRequests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,missingUids:new Set([...this.nodesMap.keys()]),responses:n};this.customRequests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}onResponse(e){let t=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,t),e.type){case Q.FETCH_SOCKETS_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;e.data.sockets.forEach(i=>n.responses.push(i)),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(n.responses),this.customRequests.delete(t));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;n.responses.push(e.data.packet),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(null,n.responses),this.customRequests.delete(t));break}default:super.onResponse(e)}}removeNode(e){this.customRequests.forEach((t,n)=>{t.missingUids.delete(e),t.missingUids.size===0&&(clearTimeout(t.timeout),t.type===Q.FETCH_SOCKETS?t.resolve(t.responses):t.type===Q.SERVER_SIDE_EMIT&&t.resolve(null,t.responses),this.customRequests.delete(n))}),this.nodesMap.delete(e)}};Ur.ClusterAdapterWithHeartbeat=qd});var ll=A(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.MessageType=pr.ClusterAdapterWithHeartbeat=pr.ClusterAdapter=pr.SessionAwareAdapter=pr.Adapter=void 0;var xb=Hd();Object.defineProperty(pr,"Adapter",{enumerable:!0,get:function(){return xb.Adapter}});Object.defineProperty(pr,"SessionAwareAdapter",{enumerable:!0,get:function(){return xb.SessionAwareAdapter}});var Ud=yb();Object.defineProperty(pr,"ClusterAdapter",{enumerable:!0,get:function(){return Ud.ClusterAdapter}});Object.defineProperty(pr,"ClusterAdapterWithHeartbeat",{enumerable:!0,get:function(){return Ud.ClusterAdapterWithHeartbeat}});Object.defineProperty(pr,"MessageType",{enumerable:!0,get:function(){return Ud.MessageType}})});var wb=A(gs=>{"use strict";var h2=gs&&gs.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(gs,"__esModule",{value:!0});gs.ParentNamespace=void 0;var _b=md(),m2=ll(),g2=h2(Ae()),bb=(0,g2.default)("socket.io:parent-namespace"),ul=class r extends _b.Namespace{constructor(e){super(e,"/_"+r.count++),this.children=new Set}_initAdapter(){this.adapter=new $d(this)}emit(e,...t){return this.children.forEach(n=>{n.emit(e,...t)}),!0}createChild(e){bb("creating child namespace %s",e);let t=new _b.Namespace(this.server,e);if(this._fns.forEach(n=>t.use(n)),this.listeners("connect").forEach(n=>t.on("connect",n)),this.listeners("connection").forEach(n=>t.on("connection",n)),this.children.add(t),this.server._opts.cleanupEmptyChildNamespaces){let n=t._remove;t._remove=i=>{n.call(t,i),t.sockets.size===0&&(bb("closing child namespace %s",e),t.adapter.close(),this.server._nsps.delete(t.name),this.children.delete(t))}}return this.server._nsps.set(e,t),this.server.sockets.emitReserved("new_namespace",t),t}fetchSockets(){throw new Error("fetchSockets() is not supported on parent namespaces")}};gs.ParentNamespace=ul;ul.count=0;var $d=class extends m2.Adapter{broadcast(e,t){this.nsp.children.forEach(n=>{n.adapter.broadcast(e,t)})}}});var Ab=A(fi=>{"use strict";var v2=fi&&fi.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(fi,"__esModule",{value:!0});fi.patchAdapter=x2;fi.restoreAdapter=_2;fi.serveFile=w2;var pi=ll(),Sb=require("fs"),y2=v2(Ae()),pl=(0,y2.default)("socket.io:adapter-uws"),Wd="",{addAll:Tb,del:Cb,broadcast:kb}=pi.Adapter.prototype;function x2(r){pi.Adapter.prototype.addAll=function(e,t){let n=!this.sids.has(e);Tb.call(this,e,t);let i=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(i){if(i.conn.transport.name==="websocket"){Eb(this.nsp.name,i,n,t);return}n&&i.conn.on("upgrade",()=>{let s=this.sids.get(e);s&&Eb(this.nsp.name,i,n,s)})}},pi.Adapter.prototype.del=function(e,t){Cb.call(this,e,t);let n=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(n&&n.conn.transport.name==="websocket"){let i=n.conn.id,s=n.conn.transport.socket,o=`${this.nsp.name}${Wd}${t}`;pl("unsubscribe connection %s from topic %s",i,o),s.unsubscribe(o)}},pi.Adapter.prototype.broadcast=function(e,t){if(!(t.rooms.size<=1&&t.except.size===0)){kb.call(this,e,t);return}let i=t.flags||{},s={preEncoded:!0,volatile:i.volatile,compress:i.compress};e.nsp=this.nsp.name;let o=this.encoder.encode(e),a=t.rooms.size===0?this.nsp.name:`${this.nsp.name}${Wd}${t.rooms.keys().next().value}`;pl("fast publish to %s",a),o.forEach(c=>{let l=typeof c!="string";r.publish(a,l?c:"4"+c,l)}),this.apply(t,c=>{c.conn.transport.name!=="websocket"&&c.client.writeToEngine(o,s)})}}function Eb(r,e,t,n){let i=e.conn.id,s=e.conn.transport.socket;t&&(pl("subscribe connection %s to topic %s",i,r),s.subscribe(r)),n.forEach(o=>{let a=`${r}${Wd}${o}`;pl("subscribe connection %s to topic %s",i,a),s.subscribe(a)})}function _2(){pi.Adapter.prototype.addAll=Tb,pi.Adapter.prototype.del=Cb,pi.Adapter.prototype.broadcast=kb}var b2=r=>{let{buffer:e,byteOffset:t,byteLength:n}=r;return e.slice(t,t+n)};function w2(r,e){let{size:t}=(0,Sb.statSync)(e),n=(0,Sb.createReadStream)(e),i=()=>!n.destroyed&&n.destroy(),s=a=>{throw i(),a},o=a=>{let c=b2(a);r.cork(()=>{let l=r.getWriteOffset(),[u,f]=r.tryEnd(c,t);!f&&!u&&(n.pause(),r.onWritable(h=>{let[g,x]=r.tryEnd(c.slice(h-l),t);return!x&&g&&n.resume(),g}))})};r.onAborted(i),n.on("data",o).on("error",s).on("end",i)}});var Rb=A((d8,S2)=>{S2.exports={name:"socket.io",version:"4.8.3",description:"node.js realtime framework server",keywords:["realtime","framework","websocket","tcp","events","socket","io"],files:["dist/","client-dist/","wrapper.mjs","!**/*.tsbuildinfo"],directories:{doc:"docs/",example:"example/",lib:"lib/",test:"test/"},type:"commonjs",main:"./dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./wrapper.mjs",require:"./dist/index.js"},"./package.json":"./package.json"},types:"./dist/index.d.ts",license:"MIT",homepage:"https://github.com/socketio/socket.io/tree/main/packages/socket.io#readme",repository:{type:"git",url:"git+https://github.com/socketio/socket.io.git"},bugs:{url:"https://github.com/socketio/socket.io/issues"},scripts:{compile:"rimraf ./dist && tsc",test:"npm run format:check && npm run compile && npm run test:types && npm run test:unit","test:types":"tsd","test:unit":"nyc mocha --import=tsx --reporter spec --slow 200 --bail --timeout 10000 test/index.ts","format:check":'prettier --check "lib/**/*.ts" "test/**/*.ts"',"format:fix":'prettier --write "lib/**/*.ts" "test/**/*.ts"',prepack:"npm run compile"},dependencies:{accepts:"~1.3.4",base64id:"~2.0.0",cors:"~2.8.5",debug:"~4.4.1","engine.io":"~6.6.0","socket.io-adapter":"~2.5.2","socket.io-parser":"~4.2.4"},contributors:[{name:"Guillermo Rauch",email:"rauchg@gmail.com"},{name:"Arnout Kazemier",email:"info@3rd-eden.com"},{name:"Vladimir Dronnikov",email:"dronnikov@gmail.com"},{name:"Einar Otto Stangvik",email:"einaros@gmail.com"}],engines:{node:">=10.2.0"},tsd:{directory:"test"}}});var Bb=A((St,Do)=>{"use strict";var E2=St&&St.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),T2=St&&St.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),C2=St&&St.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&E2(e,r,t);return T2(e,r),e},Vd=St&&St.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(St,"__esModule",{value:!0});St.Namespace=St.Socket=St.Server=void 0;var k2=Vd(require("http")),A2=require("fs"),Gd=require("zlib"),R2=Qa(),fl=require("stream"),Ob=require("path"),Mb=zx(),O2=r_(),Pb=require("events"),Kd=md();Object.defineProperty(St,"Namespace",{enumerable:!0,get:function(){return Kd.Namespace}});var M2=wb(),Ib=ll(),P2=C2(To()),I2=Vd(Ae()),Lb=dd();Object.defineProperty(St,"Socket",{enumerable:!0,get:function(){return Lb.Socket}});var N2=qc(),zd=Ab(),D2=Vd(Vf()),Rt=(0,I2.default)("socket.io:server"),Nb=Rb().version,Db=/\.map/,vs=class r extends N2.StrictEventEmitter{constructor(e,t={}){super(),this._nsps=new Map,this.parentNsps=new Map,this.parentNamespacesFromRegExp=new Map,typeof e=="object"&&e instanceof Object&&!e.listen&&(t=e,e=void 0),this.path(t.path||"/socket.io"),this.connectTimeout(t.connectTimeout||45e3),this.serveClient(t.serveClient!==!1),this._parser=t.parser||P2,this.encoder=new this._parser.Encoder,this.opts=t,t.connectionStateRecovery?(t.connectionStateRecovery=Object.assign({maxDisconnectionDuration:120*1e3,skipMiddlewares:!0},t.connectionStateRecovery),this.adapter(t.adapter||Ib.SessionAwareAdapter)):this.adapter(t.adapter||Ib.Adapter),t.cleanupEmptyChildNamespaces=!!t.cleanupEmptyChildNamespaces,this.sockets=this.of("/"),(e||typeof e=="number")&&this.attach(e),this.opts.cors&&(this._corsMiddleware=(0,D2.default)(this.opts.cors))}get _opts(){return this.opts}serveClient(e){return arguments.length?(this._serveClient=e,this):this._serveClient}_checkNamespace(e,t,n){if(this.parentNsps.size===0)return n(!1);let i=this.parentNsps.keys(),s=()=>{let o=i.next();if(o.done)return n(!1);o.value(e,t,(a,c)=>{if(a||!c)return s();if(this._nsps.has(e))return Rt("dynamic namespace %s already exists",e),n(this._nsps.get(e));let l=this.parentNsps.get(o.value).createChild(e);Rt("dynamic namespace %s was created",e),n(l)})};s()}path(e){if(!arguments.length)return this._path;this._path=e.replace(/\/$/,"");let t=this._path.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");return this.clientPathRegex=new RegExp("^"+t+"/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)"),this}connectTimeout(e){return e===void 0?this._connectTimeout:(this._connectTimeout=e,this)}adapter(e){if(!arguments.length)return this._adapter;this._adapter=e;for(let t of this._nsps.values())t._initAdapter();return this}listen(e,t={}){return this.attach(e,t)}attach(e,t={}){if(typeof e=="function"){let n="You are trying to attach socket.io to an express request handler function. Please pass a http.Server instance.";throw new Error(n)}if(Number(e)==e&&(e=Number(e)),typeof e=="number"){Rt("creating http server and binding to %d",e);let n=e;e=k2.default.createServer((i,s)=>{s.writeHead(404),s.end()}),e.listen(n)}return Object.assign(t,this.opts),t.path=t.path||this._path,this.initEngine(e,t),this}attachApp(e,t={}){Object.assign(t,this.opts),t.path=t.path||this._path,Rt("creating uWebSockets.js-based engine with opts %j",t);let n=new Mb.uServer(t);n.attach(e,t),this.bind(n),this._serveClient&&e.get(`${this._path}/*`,(i,s)=>{if(!this.clientPathRegex.test(s.getUrl())){s.setYield(!0);return}let o=s.getUrl().replace(this._path,"").replace(/\?.*$/,"").replace(/^\//,""),a=Db.test(o),c=a?"map":"source",l='"'+Nb+'"',u="W/"+l,f=s.getHeader("if-none-match");if(f&&(l===f||u===f)){Rt("serve client %s 304",c),i.writeStatus("304 Not Modified"),i.end();return}Rt("serve client %s",c),i.writeHeader("cache-control","public, max-age=0"),i.writeHeader("content-type","application/"+(a?"json":"javascript")+"; charset=utf-8"),i.writeHeader("etag",l);let h=Ob.join(__dirname,"../client-dist/",o);(0,zd.serveFile)(i,h)}),(0,zd.patchAdapter)(e)}initEngine(e,t){Rt("creating engine.io instance with opts %j",t),this.eio=(0,Mb.attach)(e,t),this._serveClient&&this.attachServe(e),this.httpServer=e,this.bind(this.eio)}attachServe(e){Rt("attaching client serving req handler");let t=e.listeners("request").slice(0);e.removeAllListeners("request"),e.on("request",(n,i)=>{if(this.clientPathRegex.test(n.url))this._corsMiddleware?this._corsMiddleware(n,i,()=>{this.serve(n,i)}):this.serve(n,i);else for(let s=0;s<t.length;s++)t[s].call(e,n,i)})}serve(e,t){let n=e.url.replace(this._path,"").replace(/\?.*$/,""),i=Db.test(n),s=i?"map":"source",o='"'+Nb+'"',a="W/"+o,c=e.headers["if-none-match"];if(c&&(o===c||a===c)){Rt("serve client %s 304",s),t.writeHead(304),t.end();return}Rt("serve client %s",s),t.setHeader("Cache-Control","public, max-age=0"),t.setHeader("Content-Type","application/"+(i?"json":"javascript")+"; charset=utf-8"),t.setHeader("ETag",o),r.sendFile(n,e,t)}static sendFile(e,t,n){let i=(0,A2.createReadStream)(Ob.join(__dirname,"../client-dist/",e)),s=R2(t).encodings(["br","gzip","deflate"]),o=a=>{a&&n.end()};switch(s){case"br":n.writeHead(200,{"content-encoding":"br"}),(0,fl.pipeline)(i,(0,Gd.createBrotliCompress)(),n,o);break;case"gzip":n.writeHead(200,{"content-encoding":"gzip"}),(0,fl.pipeline)(i,(0,Gd.createGzip)(),n,o);break;case"deflate":n.writeHead(200,{"content-encoding":"deflate"}),(0,fl.pipeline)(i,(0,Gd.createDeflate)(),n,o);break;default:n.writeHead(200),(0,fl.pipeline)(i,n,o)}}bind(e){return this.engine=e,this.engine.on("connection",this.onconnection.bind(this)),this}onconnection(e){Rt("incoming connection with id %s",e.id);let t=new O2.Client(this,e);return e.protocol===3&&t.connect("/"),this}of(e,t){if(typeof e=="function"||e instanceof RegExp){let i=new M2.ParentNamespace(this);return Rt("initializing parent namespace %s",i.name),typeof e=="function"?this.parentNsps.set(e,i):(this.parentNsps.set((s,o,a)=>a(null,e.test(s)),i),this.parentNamespacesFromRegExp.set(e,i)),t&&i.on("connect",t),i}String(e)[0]!=="/"&&(e="/"+e);let n=this._nsps.get(e);if(!n){for(let[i,s]of this.parentNamespacesFromRegExp)if(i.test(e))return Rt("attaching namespace %s to parent namespace %s",e,i),s.createChild(e);Rt("initializing namespace %s",e),n=new Kd.Namespace(this,e),this._nsps.set(e,n),e!=="/"&&this.sockets.emitReserved("new_namespace",n)}return t&&n.on("connect",t),n}async close(e){if(await Promise.allSettled([...this._nsps.values()].map(async t=>{t.sockets.forEach(n=>{n._onclose("server shutting down")}),await t.adapter.close()})),this.engine.close(),(0,zd.restoreAdapter)(),this.httpServer)return new Promise(t=>{this.httpServer.close(n=>{e&&e(n),n&&Rt("server was not running"),t()})});e&&e()}use(e){return this.sockets.use(e),this}to(e){return this.sockets.to(e)}in(e){return this.sockets.in(e)}except(e){return this.sockets.except(e)}send(...e){return this.sockets.emit("message",...e),this}write(...e){return this.sockets.emit("message",...e),this}serverSideEmit(e,...t){return this.sockets.serverSideEmit(e,...t)}serverSideEmitWithAck(e,...t){return this.sockets.serverSideEmitWithAck(e,...t)}allSockets(){return this.sockets.allSockets()}compress(e){return this.sockets.compress(e)}get volatile(){return this.sockets.volatile}get local(){return this.sockets.local}timeout(e){return this.sockets.timeout(e)}fetchSockets(){return this.sockets.fetchSockets()}socketsJoin(e){return this.sockets.socketsJoin(e)}socketsLeave(e){return this.sockets.socketsLeave(e)}disconnectSockets(e=!1){return this.sockets.disconnectSockets(e)}};St.Server=vs;var L2=Object.keys(Pb.EventEmitter.prototype).filter(function(r){return typeof Pb.EventEmitter.prototype[r]=="function"});L2.forEach(function(r){vs.prototype[r]=function(){return this.sockets[r].apply(this.sockets,arguments)}});Do.exports=(r,e)=>new vs(r,e);Do.exports.Server=vs;Do.exports.Namespace=Kd.Namespace;Do.exports.Socket=Lb.Socket});function Yd(){return Lo=(0,Hb.randomBytes)(32).toString("hex"),Lo}function qb(){return Lo||Yd(),Lo}function Ub(r){return!!r&&typeof r=="string"&&r===Lo}var Hb,Lo,dl=Ce(()=>{Hb=require("crypto"),Lo=null});var zb,ml,$,pt=Ce(()=>{zb={darwin:{capture:"nodeScreenshots",encoder:"sharp",tileSize:128,inputFormat:"rgba"},win32:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"},linux:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"}},ml=zb[process.platform]||zb.linux,$={pipeline:{captureLib:ml.capture,encoder:ml.encoder,inputFormat:ml.inputFormat,tileSize:ml.tileSize,tileFormat:"webp",webpEffort:0,jpegQuality:50,tileConcurrency:6,outputScale:1,adaptiveTiers:[{minEffective:1,outputScale:1,jpegQuality:72},{minEffective:.7,outputScale:.95,jpegQuality:62},{minEffective:.4,outputScale:.8,jpegQuality:52},{minEffective:0,outputScale:.65,jpegQuality:45}],tierHysteresis:.05,checksumSampling:{rowStep:3,colStep:8}},webrtc:{enableWebRTC:!0,enableTurn:!1,turnApiUrl:"https://9remote.cc/api/webrtc/turn-credentials",turnRefreshInterval:1380*60*1e3,dcMaxMessageSize:65536,dcBufferThreshold:262144,iceDisconnectGraceMs:6e3,dcChunkSize:8,dcMaxTilesPerFrame:32,dcReliable:!0,dcOrdered:!1,answerTimeout:1e4,maxControlBuffer:500},robotSettings:{mouseDelay:2,keyboardDelay:2},throttling:{mouseThrottle:8,keyThrottle:25,typeTextThrottle:100,maxTextLength:1e3},resourceManagement:{inactiveTimeout:120*1e3,memoryCheckInterval:6e4,memoryWarningThreshold:1e3,maxTimersPerClient:100,maxChunkTimersPerClient:50,disconnectGraceMs:3e4},streaming:{activeInterval:60,idleInterval:400,idleThreshold:3,actionCaptureDelay:50,chunkSize:16,chunkDelay:5},focus:{paddingTiles:4},displayWake:{enabled:!0,throttleMs:3e4,macDurationSec:5},sleepInhibit:{defaultMode:"never",presets:{"30m":1800*1e3,"1h":3600*1e3,"2h":7200*1e3,"4h":14400*1e3,"24h":1440*60*1e3,never:null}},desktopSwitch:{darwin:{prev:{keyCode:123,mods:"control down"},next:{keyCode:124,mods:"control down"},new:{type:"missionControl"}},win32:{prev:["left",["control","command"]],next:["right",["control","command"]],new:["d",["control","command"]]},linux:{prev:null,next:null,new:null}},logging:{lifecycle:!1,errors:!0,dpiDetection:!1,focus:!1,focusEveryFrames:60,metrics:!1,metricsEveryFrames:30,webrtc:!1}}});var Bo,jo,ve,Xd=Ce(()=>{pt();ji();Bo=()=>$.logging,jo=On("remote"),ve={lifecycle:r=>{Bo().lifecycle&&jo.info(r)},focus:r=>{Bo().focus&&jo.info(r)},dpi:r=>{Bo().dpiDetection&&jo.info(r)},error:(r,e)=>{Bo().errors&&jo.error(`${r} ${e?.message||e||""}`)},warn:r=>{Bo().errors&&jo.warn(r)}}});function Ho(){for(let r of[ie.ROOT,ie.STATE])$r.default.existsSync(r)||$r.default.mkdirSync(r,{recursive:!0})}function eh(){try{return Ho(),$r.default.existsSync(Qd)?JSON.parse($r.default.readFileSync(Qd,"utf8"))||{}:{}}catch{return{}}}function Qb(r){try{Ho();let e={...eh(),...r};return $r.default.writeFileSync(Qd,JSON.stringify(e,null,2),{mode:384}),e}catch(e){return console.error("Error saving settings:",e),null}}function ew(){try{return Ho(),$r.default.existsSync(Zd)?JSON.parse($r.default.readFileSync(Zd,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function qn(r){try{Ho(),$r.default.writeFileSync(G2,JSON.stringify({cmd:r,ts:Date.now()}))}catch{}}function tw(r,e,t="Default"){try{Ho();let n={machineId:r,key:e,name:t,createdAt:new Date().toISOString()};return $r.default.writeFileSync(Zd,JSON.stringify(n,null,2),{mode:384}),n}catch(n){return console.error("Error saving key:",n),null}}var $r,Fo,j8,F8,Zd,G2,Qd,xs=Ce(()=>{$r=K(require("fs"),1),Fo=K(require("path"),1);bt();j8=ie.STATE,F8=Fo.default.join(ie.STATE,"state.json"),Zd=Fo.default.join(ie.ROOT,"keys.json"),G2=Fo.default.join(ie.STATE,"cmd.json"),Qd=Fo.default.join(ie.STATE,"settings.json")});function rw(){return new Promise(r=>{if(process.platform!=="darwin"){r({screenRecording:!0,accessibility:!0});return}let e=!1,t=!1,n=0,i=()=>{++n===2&&r({screenRecording:e,accessibility:t})};(0,qo.execFile)("osascript",["-e",'use framework "ApplicationServices"',"-e",`set checkOptions to current application's NSDictionary's dictionaryWithObject:(false) forKey:("AXTrustedCheckOptionPrompt" as string)`,"-e","return current application's AXIsProcessTrustedWithOptions(checkOptions) as boolean"],{timeout:3e3},(s,o)=>{t=!s&&o.trim()==="true",i()}),(0,qo.exec)(`osascript -e 'use framework "CoreGraphics"' -e "return (current application's CGPreflightScreenCaptureAccess()) as boolean"`,{timeout:3e3},(s,o)=>{e=!s&&o.trim()==="true",i()})})}function nw(r){let e=z2[r];e&&process.platform==="darwin"&&(0,qo.exec)(`open "${e}"`,()=>{})}var qo,z2,iw=Ce(()=>{qo=require("child_process"),z2={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"}});function V2(){return!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY}function Wo(){for(let r=sw,e=null;r!==e;e=r,r=Rr.default.dirname(r)){let t=Rr.default.join(r,"package.json");if((0,de.existsSync)(t)){try{let n=JSON.parse((0,de.readFileSync)(t,"utf8"));if(n.name!==Bi)continue;let i=typeof n.bin=="string"?n.bin:n.bin?.[Bi];if(i){let s=Rr.default.resolve(r,i);if((0,de.existsSync)(s))return s}}catch{}break}}return process.argv[1]||Rr.default.resolve(sw,"..","index.js")}function ws(){return process.execPath}function cw(){let r=Rr.default.dirname(ws()),e=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return e.includes(r)||e.unshift(r),e.join(":")}function th(r){return String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function K2(r,e){let t=[r,e,..._l].map(n=>` <string>${th(n)}</string>`).join(`
|
|
29
|
+
`+t)}function li(r,e,t,n,i,s){if(r.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,li),r.emit("wsClientError",o,t,e)}else No(t,n,i,s)}});var vb=A((a8,gb)=>{"use strict";var mn=nl();mn.createWebSocketStream=ob();mn.Server=mb();mn.Receiver=kd();mn.Sender=Od();mn.WebSocket=mn;mn.WebSocketServer=mn.Server;gb.exports=mn});var Hd=A(ds=>{"use strict";var jd;Object.defineProperty(ds,"__esModule",{value:!0});ds.SessionAwareAdapter=ds.Adapter=void 0;var s2=require("events"),o2=p_(),sl=vb(),a2=typeof((jd=sl?.Sender)===null||jd===void 0?void 0:jd.frame)=="function",ol=class extends s2.EventEmitter{constructor(e){super(),this.nsp=e,this.rooms=new Map,this.sids=new Map,this.encoder=e.server.encoder}init(){}close(){}serverCount(){return Promise.resolve(1)}addAll(e,t){this.sids.has(e)||this.sids.set(e,new Set);for(let n of t)this.sids.get(e).add(n),this.rooms.has(n)||(this.rooms.set(n,new Set),this.emit("create-room",n)),this.rooms.get(n).has(e)||(this.rooms.get(n).add(e),this.emit("join-room",n,e))}del(e,t){this.sids.has(e)&&this.sids.get(e).delete(t),this._del(t,e)}_del(e,t){let n=this.rooms.get(e);n!=null&&(n.delete(t)&&this.emit("leave-room",e,t),n.size===0&&this.rooms.delete(e)&&this.emit("delete-room",e))}delAll(e){if(this.sids.has(e)){for(let t of this.sids.get(e))this._del(t,e);this.sids.delete(e)}}broadcast(e,t){let n=t.flags||{},i={preEncoded:!0,volatile:n.volatile,compress:n.compress};e.nsp=this.nsp.name;let s=this._encode(e,i);this.apply(t,o=>{typeof o.notifyOutgoingListeners=="function"&&o.notifyOutgoingListeners(e),o.client.writeToEngine(s,i)})}broadcastWithAck(e,t,n,i){let s=t.flags||{},o={preEncoded:!0,volatile:s.volatile,compress:s.compress};e.nsp=this.nsp.name,e.id=this.nsp._ids++;let a=this._encode(e,o),c=0;this.apply(t,l=>{c++,l.acks.set(e.id,i),typeof l.notifyOutgoingListeners=="function"&&l.notifyOutgoingListeners(e),l.client.writeToEngine(a,o)}),n(c)}_encode(e,t){let n=this.encoder.encode(e);if(a2&&n.length===1&&typeof n[0]=="string"){let i=Buffer.from("4"+n[0]);t.wsPreEncodedFrame=sl.Sender.frame(i,{readOnly:!1,mask:!1,rsv1:!1,opcode:1,fin:!0})}return n}sockets(e){let t=new Set;return this.apply({rooms:e},n=>{t.add(n.id)}),Promise.resolve(t)}socketRooms(e){return this.sids.get(e)}fetchSockets(e){let t=[];return this.apply(e,n=>{t.push(n)}),Promise.resolve(t)}addSockets(e,t){this.apply(e,n=>{n.join(t)})}delSockets(e,t){this.apply(e,n=>{t.forEach(i=>n.leave(i))})}disconnectSockets(e,t){this.apply(e,n=>{n.disconnect(t)})}apply(e,t){let n=e.rooms,i=this.computeExceptSids(e.except);if(n.size){let s=new Set;for(let o of n)if(this.rooms.has(o))for(let a of this.rooms.get(o)){if(s.has(a)||i.has(a))continue;let c=this.nsp.sockets.get(a);c&&(t(c),s.add(a))}}else for(let[s]of this.sids){if(i.has(s))continue;let o=this.nsp.sockets.get(s);o&&t(o)}}computeExceptSids(e){let t=new Set;if(e&&e.size>0)for(let n of e)this.rooms.has(n)&&this.rooms.get(n).forEach(i=>t.add(i));return t}serverSideEmit(e){console.warn("this adapter does not support the serverSideEmit() functionality")}persistSession(e){}restoreSession(e,t){return null}};ds.Adapter=ol;var Fd=class extends ol{constructor(e){super(e),this.nsp=e,this.sessions=new Map,this.packets=[],this.maxDisconnectionDuration=e.server.opts.connectionStateRecovery.maxDisconnectionDuration,setInterval(()=>{let n=Date.now()-this.maxDisconnectionDuration;this.sessions.forEach((i,s)=>{i.disconnectedAt<n&&this.sessions.delete(s)});for(let i=this.packets.length-1;i>=0;i--)if(this.packets[i].emittedAt<n){this.packets.splice(0,i+1);break}},60*1e3).unref()}persistSession(e){e.disconnectedAt=Date.now(),this.sessions.set(e.pid,e)}restoreSession(e,t){let n=this.sessions.get(e);if(!n)return null;if(n.disconnectedAt+this.maxDisconnectionDuration<Date.now())return this.sessions.delete(e),null;let s=this.packets.findIndex(a=>a.id===t);if(s===-1)return null;let o=[];for(let a=s+1;a<this.packets.length;a++){let c=this.packets[a];c2(n.rooms,c.opts)&&o.push(c.data)}return Promise.resolve(Object.assign(Object.assign({},n),{missedPackets:o}))}broadcast(e,t){var n;let i=e.type===2,s=e.id===void 0,o=((n=t.flags)===null||n===void 0?void 0:n.volatile)===void 0;if(i&&s&&o){let a=(0,o2.yeast)();e.data.push(a),this.packets.push({id:a,opts:t,data:e.data,emittedAt:Date.now()})}super.broadcast(e,t)}};ds.SessionAwareAdapter=Fd;function c2(r,e){let t=e.rooms.size===0||r.some(i=>e.rooms.has(i)),n=r.every(i=>!e.except.has(i));return t&&n}});var yb=A(Ur=>{"use strict";var l2=Ur&&Ur.__rest||function(r,e){var t={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(r);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(r,n[i])&&(t[n[i]]=r[n[i]]);return t};Object.defineProperty(Ur,"__esModule",{value:!0});Ur.ClusterAdapterWithHeartbeat=Ur.ClusterAdapter=Ur.MessageType=void 0;var u2=Hd(),p2=Ae(),f2=require("crypto"),Ee=(0,p2.debug)("socket.io-adapter"),d2="emitter",al=5e3;function ms(){return(0,f2.randomBytes)(8).toString("hex")}var Q;(function(r){r[r.INITIAL_HEARTBEAT=1]="INITIAL_HEARTBEAT",r[r.HEARTBEAT=2]="HEARTBEAT",r[r.BROADCAST=3]="BROADCAST",r[r.SOCKETS_JOIN=4]="SOCKETS_JOIN",r[r.SOCKETS_LEAVE=5]="SOCKETS_LEAVE",r[r.DISCONNECT_SOCKETS=6]="DISCONNECT_SOCKETS",r[r.FETCH_SOCKETS=7]="FETCH_SOCKETS",r[r.FETCH_SOCKETS_RESPONSE=8]="FETCH_SOCKETS_RESPONSE",r[r.SERVER_SIDE_EMIT=9]="SERVER_SIDE_EMIT",r[r.SERVER_SIDE_EMIT_RESPONSE=10]="SERVER_SIDE_EMIT_RESPONSE",r[r.BROADCAST_CLIENT_COUNT=11]="BROADCAST_CLIENT_COUNT",r[r.BROADCAST_ACK=12]="BROADCAST_ACK",r[r.ADAPTER_CLOSE=13]="ADAPTER_CLOSE"})(Q||(Ur.MessageType=Q={}));function ui(r){return{rooms:[...r.rooms],except:[...r.except],flags:r.flags}}function hs(r){return{rooms:new Set(r.rooms),except:new Set(r.except),flags:r.flags}}var cl=class extends u2.Adapter{constructor(e){super(e),this.requests=new Map,this.ackRequests=new Map,this.uid=ms()}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);if(e.nsp!==this.nsp.name)return Ee("[%s] ignore message from another namespace (%s)",this.uid,e.nsp);switch(Ee("[%s] new event of type %d from %s",this.uid,e.type,e.uid),e.type){case Q.BROADCAST:{if(e.data.requestId!==void 0)super.broadcastWithAck(e.data.packet,hs(e.data.opts),i=>{Ee("[%s] waiting for %d client acknowledgements",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_CLIENT_COUNT,data:{requestId:e.data.requestId,clientCount:i}})},i=>{Ee("[%s] received acknowledgement with value %j",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_ACK,data:{requestId:e.data.requestId,packet:i}})});else{let i=e.data.packet,s=hs(e.data.opts);this.addOffsetIfNecessary(i,s,t),super.broadcast(i,s)}break}case Q.SOCKETS_JOIN:super.addSockets(hs(e.data.opts),e.data.rooms);break;case Q.SOCKETS_LEAVE:super.delSockets(hs(e.data.opts),e.data.rooms);break;case Q.DISCONNECT_SOCKETS:super.disconnectSockets(hs(e.data.opts),e.data.close);break;case Q.FETCH_SOCKETS:{Ee("[%s] calling fetchSockets with opts %j",this.uid,e.data.opts),super.fetchSockets(hs(e.data.opts)).then(n=>{this.publishResponse(e.uid,{type:Q.FETCH_SOCKETS_RESPONSE,data:{requestId:e.data.requestId,sockets:n.map(i=>{let s=i.handshake,{sessionStore:o}=s,a=l2(s,["sessionStore"]);return{id:i.id,handshake:a,rooms:[...i.rooms],data:i.data}})}})});break}case Q.SERVER_SIDE_EMIT:{let n=e.data.packet;if(!(e.data.requestId!==void 0)){this.nsp._onServerSideEmit(n);return}let s=!1,o=a=>{s||(s=!0,Ee("[%s] calling acknowledgement with %j",this.uid,a),this.publishResponse(e.uid,{type:Q.SERVER_SIDE_EMIT_RESPONSE,data:{requestId:e.data.requestId,packet:a}}))};this.nsp._onServerSideEmit([...n,o]);break}case Q.BROADCAST_CLIENT_COUNT:case Q.BROADCAST_ACK:case Q.FETCH_SOCKETS_RESPONSE:case Q.SERVER_SIDE_EMIT_RESPONSE:this.onResponse(e);break;default:Ee("[%s] unknown message type: %s",this.uid,e.type)}}onResponse(e){var t,n;let i=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,i),e.type){case Q.BROADCAST_CLIENT_COUNT:{(t=this.ackRequests.get(i))===null||t===void 0||t.clientCountCallback(e.data.clientCount);break}case Q.BROADCAST_ACK:{(n=this.ackRequests.get(i))===null||n===void 0||n.ack(e.data.packet);break}case Q.FETCH_SOCKETS_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,e.data.sockets.forEach(o=>s.responses.push(o)),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(s.responses),this.requests.delete(i));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,s.responses.push(e.data.packet),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(null,s.responses),this.requests.delete(i));break}default:Ee("[%s] unknown response type: %s",this.uid,e.type)}}async broadcast(e,t){var n;if(!((n=t.flags)===null||n===void 0?void 0:n.local))try{let s=await this.publishAndReturnOffset({type:Q.BROADCAST,data:{packet:e,opts:ui(t)}});this.addOffsetIfNecessary(e,t,s)}catch(s){return Ee("[%s] error while broadcasting message: %s",this.uid,s.message)}super.broadcast(e,t)}addOffsetIfNecessary(e,t,n){var i;if(!this.nsp.server.opts.connectionStateRecovery)return;let s=e.type===2,o=e.id===void 0,a=((i=t.flags)===null||i===void 0?void 0:i.volatile)===void 0;s&&o&&a&&e.data.push(n)}broadcastWithAck(e,t,n,i){var s;if(!((s=t?.flags)===null||s===void 0?void 0:s.local)){let a=ms();this.ackRequests.set(a,{clientCountCallback:n,ack:i}),this.publish({type:Q.BROADCAST,data:{packet:e,requestId:a,opts:ui(t)}}),setTimeout(()=>{this.ackRequests.delete(a)},t.flags.timeout)}super.broadcastWithAck(e,t,n,i)}async addSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_JOIN,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.addSockets(e,t)}async delSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_LEAVE,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.delSockets(e,t)}async disconnectSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.DISCONNECT_SOCKETS,data:{opts:ui(e),close:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.disconnectSockets(e,t)}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets(e),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.requests.get(o);f&&(c(new Error(`timeout reached: only ${f.current} responses received out of ${f.expected}`)),this.requests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,current:0,expected:s,responses:n};this.requests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=await this.serverCount()-1;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.requests.get(s);c&&(n(new Error(`timeout reached: only ${c.current} responses received out of ${c.expected}`),c.responses),this.requests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,current:0,expected:i,responses:[]};this.requests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}publish(e){Ee("[%s] sending message %s",this.uid,e.type),this.publishAndReturnOffset(e).catch(t=>{Ee("[%s] error while publishing message: %s",this.uid,t)})}publishAndReturnOffset(e){return e.uid=this.uid,e.nsp=this.nsp.name,this.doPublish(e)}publishResponse(e,t){t.uid=this.uid,t.nsp=this.nsp.name,Ee("[%s] sending response %s to %s",this.uid,t.type,e),this.doPublishResponse(e,t).catch(n=>{Ee("[%s] error while publishing response: %s",this.uid,n)})}};Ur.ClusterAdapter=cl;var qd=class extends cl{constructor(e,t){super(e),this.nodesMap=new Map,this.customRequests=new Map,this._opts=Object.assign({heartbeatInterval:5e3,heartbeatTimeout:1e4},t),this.cleanupTimer=setInterval(()=>{let n=Date.now();this.nodesMap.forEach((i,s)=>{n-i>this._opts.heartbeatTimeout&&(Ee("[%s] node %s seems down",this.uid,s),this.removeNode(s))})},1e3)}init(){this.publish({type:Q.INITIAL_HEARTBEAT})}scheduleHeartbeat(){this.heartbeatTimer?this.heartbeatTimer.refresh():this.heartbeatTimer=setTimeout(()=>{this.publish({type:Q.HEARTBEAT})},this._opts.heartbeatInterval)}close(){this.publish({type:Q.ADAPTER_CLOSE}),clearTimeout(this.heartbeatTimer),this.cleanupTimer&&clearInterval(this.cleanupTimer)}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);switch(e.uid&&e.uid!==d2&&this.nodesMap.set(e.uid,Date.now()),e.type){case Q.INITIAL_HEARTBEAT:this.publish({type:Q.HEARTBEAT});break;case Q.HEARTBEAT:break;case Q.ADAPTER_CLOSE:this.removeNode(e.uid);break;default:super.onMessage(e,t)}}serverCount(){return Promise.resolve(1+this.nodesMap.size)}publish(e){return this.scheduleHeartbeat(),super.publish(e)}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=this.nodesMap.size;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.customRequests.get(s);c&&(n(new Error(`timeout reached: missing ${c.missingUids.size} responses`),c.responses),this.customRequests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,missingUids:new Set([...this.nodesMap.keys()]),responses:[]};this.customRequests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets({rooms:e.rooms,except:e.except,flags:{local:!0}}),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.customRequests.get(o);f&&(c(new Error(`timeout reached: missing ${f.missingUids.size} responses`)),this.customRequests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,missingUids:new Set([...this.nodesMap.keys()]),responses:n};this.customRequests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}onResponse(e){let t=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,t),e.type){case Q.FETCH_SOCKETS_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;e.data.sockets.forEach(i=>n.responses.push(i)),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(n.responses),this.customRequests.delete(t));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;n.responses.push(e.data.packet),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(null,n.responses),this.customRequests.delete(t));break}default:super.onResponse(e)}}removeNode(e){this.customRequests.forEach((t,n)=>{t.missingUids.delete(e),t.missingUids.size===0&&(clearTimeout(t.timeout),t.type===Q.FETCH_SOCKETS?t.resolve(t.responses):t.type===Q.SERVER_SIDE_EMIT&&t.resolve(null,t.responses),this.customRequests.delete(n))}),this.nodesMap.delete(e)}};Ur.ClusterAdapterWithHeartbeat=qd});var ll=A(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.MessageType=pr.ClusterAdapterWithHeartbeat=pr.ClusterAdapter=pr.SessionAwareAdapter=pr.Adapter=void 0;var xb=Hd();Object.defineProperty(pr,"Adapter",{enumerable:!0,get:function(){return xb.Adapter}});Object.defineProperty(pr,"SessionAwareAdapter",{enumerable:!0,get:function(){return xb.SessionAwareAdapter}});var Ud=yb();Object.defineProperty(pr,"ClusterAdapter",{enumerable:!0,get:function(){return Ud.ClusterAdapter}});Object.defineProperty(pr,"ClusterAdapterWithHeartbeat",{enumerable:!0,get:function(){return Ud.ClusterAdapterWithHeartbeat}});Object.defineProperty(pr,"MessageType",{enumerable:!0,get:function(){return Ud.MessageType}})});var wb=A(gs=>{"use strict";var h2=gs&&gs.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(gs,"__esModule",{value:!0});gs.ParentNamespace=void 0;var _b=md(),m2=ll(),g2=h2(Ae()),bb=(0,g2.default)("socket.io:parent-namespace"),ul=class r extends _b.Namespace{constructor(e){super(e,"/_"+r.count++),this.children=new Set}_initAdapter(){this.adapter=new $d(this)}emit(e,...t){return this.children.forEach(n=>{n.emit(e,...t)}),!0}createChild(e){bb("creating child namespace %s",e);let t=new _b.Namespace(this.server,e);if(this._fns.forEach(n=>t.use(n)),this.listeners("connect").forEach(n=>t.on("connect",n)),this.listeners("connection").forEach(n=>t.on("connection",n)),this.children.add(t),this.server._opts.cleanupEmptyChildNamespaces){let n=t._remove;t._remove=i=>{n.call(t,i),t.sockets.size===0&&(bb("closing child namespace %s",e),t.adapter.close(),this.server._nsps.delete(t.name),this.children.delete(t))}}return this.server._nsps.set(e,t),this.server.sockets.emitReserved("new_namespace",t),t}fetchSockets(){throw new Error("fetchSockets() is not supported on parent namespaces")}};gs.ParentNamespace=ul;ul.count=0;var $d=class extends m2.Adapter{broadcast(e,t){this.nsp.children.forEach(n=>{n.adapter.broadcast(e,t)})}}});var Ab=A(fi=>{"use strict";var v2=fi&&fi.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(fi,"__esModule",{value:!0});fi.patchAdapter=x2;fi.restoreAdapter=_2;fi.serveFile=w2;var pi=ll(),Sb=require("fs"),y2=v2(Ae()),pl=(0,y2.default)("socket.io:adapter-uws"),Wd="",{addAll:Tb,del:Cb,broadcast:kb}=pi.Adapter.prototype;function x2(r){pi.Adapter.prototype.addAll=function(e,t){let n=!this.sids.has(e);Tb.call(this,e,t);let i=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(i){if(i.conn.transport.name==="websocket"){Eb(this.nsp.name,i,n,t);return}n&&i.conn.on("upgrade",()=>{let s=this.sids.get(e);s&&Eb(this.nsp.name,i,n,s)})}},pi.Adapter.prototype.del=function(e,t){Cb.call(this,e,t);let n=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(n&&n.conn.transport.name==="websocket"){let i=n.conn.id,s=n.conn.transport.socket,o=`${this.nsp.name}${Wd}${t}`;pl("unsubscribe connection %s from topic %s",i,o),s.unsubscribe(o)}},pi.Adapter.prototype.broadcast=function(e,t){if(!(t.rooms.size<=1&&t.except.size===0)){kb.call(this,e,t);return}let i=t.flags||{},s={preEncoded:!0,volatile:i.volatile,compress:i.compress};e.nsp=this.nsp.name;let o=this.encoder.encode(e),a=t.rooms.size===0?this.nsp.name:`${this.nsp.name}${Wd}${t.rooms.keys().next().value}`;pl("fast publish to %s",a),o.forEach(c=>{let l=typeof c!="string";r.publish(a,l?c:"4"+c,l)}),this.apply(t,c=>{c.conn.transport.name!=="websocket"&&c.client.writeToEngine(o,s)})}}function Eb(r,e,t,n){let i=e.conn.id,s=e.conn.transport.socket;t&&(pl("subscribe connection %s to topic %s",i,r),s.subscribe(r)),n.forEach(o=>{let a=`${r}${Wd}${o}`;pl("subscribe connection %s to topic %s",i,a),s.subscribe(a)})}function _2(){pi.Adapter.prototype.addAll=Tb,pi.Adapter.prototype.del=Cb,pi.Adapter.prototype.broadcast=kb}var b2=r=>{let{buffer:e,byteOffset:t,byteLength:n}=r;return e.slice(t,t+n)};function w2(r,e){let{size:t}=(0,Sb.statSync)(e),n=(0,Sb.createReadStream)(e),i=()=>!n.destroyed&&n.destroy(),s=a=>{throw i(),a},o=a=>{let c=b2(a);r.cork(()=>{let l=r.getWriteOffset(),[u,f]=r.tryEnd(c,t);!f&&!u&&(n.pause(),r.onWritable(h=>{let[g,x]=r.tryEnd(c.slice(h-l),t);return!x&&g&&n.resume(),g}))})};r.onAborted(i),n.on("data",o).on("error",s).on("end",i)}});var Rb=A((d8,S2)=>{S2.exports={name:"socket.io",version:"4.8.3",description:"node.js realtime framework server",keywords:["realtime","framework","websocket","tcp","events","socket","io"],files:["dist/","client-dist/","wrapper.mjs","!**/*.tsbuildinfo"],directories:{doc:"docs/",example:"example/",lib:"lib/",test:"test/"},type:"commonjs",main:"./dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./wrapper.mjs",require:"./dist/index.js"},"./package.json":"./package.json"},types:"./dist/index.d.ts",license:"MIT",homepage:"https://github.com/socketio/socket.io/tree/main/packages/socket.io#readme",repository:{type:"git",url:"git+https://github.com/socketio/socket.io.git"},bugs:{url:"https://github.com/socketio/socket.io/issues"},scripts:{compile:"rimraf ./dist && tsc",test:"npm run format:check && npm run compile && npm run test:types && npm run test:unit","test:types":"tsd","test:unit":"nyc mocha --import=tsx --reporter spec --slow 200 --bail --timeout 10000 test/index.ts","format:check":'prettier --check "lib/**/*.ts" "test/**/*.ts"',"format:fix":'prettier --write "lib/**/*.ts" "test/**/*.ts"',prepack:"npm run compile"},dependencies:{accepts:"~1.3.4",base64id:"~2.0.0",cors:"~2.8.5",debug:"~4.4.1","engine.io":"~6.6.0","socket.io-adapter":"~2.5.2","socket.io-parser":"~4.2.4"},contributors:[{name:"Guillermo Rauch",email:"rauchg@gmail.com"},{name:"Arnout Kazemier",email:"info@3rd-eden.com"},{name:"Vladimir Dronnikov",email:"dronnikov@gmail.com"},{name:"Einar Otto Stangvik",email:"einaros@gmail.com"}],engines:{node:">=10.2.0"},tsd:{directory:"test"}}});var Bb=A((St,Do)=>{"use strict";var E2=St&&St.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),T2=St&&St.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),C2=St&&St.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&E2(e,r,t);return T2(e,r),e},Vd=St&&St.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(St,"__esModule",{value:!0});St.Namespace=St.Socket=St.Server=void 0;var k2=Vd(require("http")),A2=require("fs"),Gd=require("zlib"),R2=Qa(),fl=require("stream"),Ob=require("path"),Mb=zx(),O2=r_(),Pb=require("events"),Kd=md();Object.defineProperty(St,"Namespace",{enumerable:!0,get:function(){return Kd.Namespace}});var M2=wb(),Ib=ll(),P2=C2(To()),I2=Vd(Ae()),Lb=dd();Object.defineProperty(St,"Socket",{enumerable:!0,get:function(){return Lb.Socket}});var N2=qc(),zd=Ab(),D2=Vd(Vf()),Rt=(0,I2.default)("socket.io:server"),Nb=Rb().version,Db=/\.map/,vs=class r extends N2.StrictEventEmitter{constructor(e,t={}){super(),this._nsps=new Map,this.parentNsps=new Map,this.parentNamespacesFromRegExp=new Map,typeof e=="object"&&e instanceof Object&&!e.listen&&(t=e,e=void 0),this.path(t.path||"/socket.io"),this.connectTimeout(t.connectTimeout||45e3),this.serveClient(t.serveClient!==!1),this._parser=t.parser||P2,this.encoder=new this._parser.Encoder,this.opts=t,t.connectionStateRecovery?(t.connectionStateRecovery=Object.assign({maxDisconnectionDuration:120*1e3,skipMiddlewares:!0},t.connectionStateRecovery),this.adapter(t.adapter||Ib.SessionAwareAdapter)):this.adapter(t.adapter||Ib.Adapter),t.cleanupEmptyChildNamespaces=!!t.cleanupEmptyChildNamespaces,this.sockets=this.of("/"),(e||typeof e=="number")&&this.attach(e),this.opts.cors&&(this._corsMiddleware=(0,D2.default)(this.opts.cors))}get _opts(){return this.opts}serveClient(e){return arguments.length?(this._serveClient=e,this):this._serveClient}_checkNamespace(e,t,n){if(this.parentNsps.size===0)return n(!1);let i=this.parentNsps.keys(),s=()=>{let o=i.next();if(o.done)return n(!1);o.value(e,t,(a,c)=>{if(a||!c)return s();if(this._nsps.has(e))return Rt("dynamic namespace %s already exists",e),n(this._nsps.get(e));let l=this.parentNsps.get(o.value).createChild(e);Rt("dynamic namespace %s was created",e),n(l)})};s()}path(e){if(!arguments.length)return this._path;this._path=e.replace(/\/$/,"");let t=this._path.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");return this.clientPathRegex=new RegExp("^"+t+"/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)"),this}connectTimeout(e){return e===void 0?this._connectTimeout:(this._connectTimeout=e,this)}adapter(e){if(!arguments.length)return this._adapter;this._adapter=e;for(let t of this._nsps.values())t._initAdapter();return this}listen(e,t={}){return this.attach(e,t)}attach(e,t={}){if(typeof e=="function"){let n="You are trying to attach socket.io to an express request handler function. Please pass a http.Server instance.";throw new Error(n)}if(Number(e)==e&&(e=Number(e)),typeof e=="number"){Rt("creating http server and binding to %d",e);let n=e;e=k2.default.createServer((i,s)=>{s.writeHead(404),s.end()}),e.listen(n)}return Object.assign(t,this.opts),t.path=t.path||this._path,this.initEngine(e,t),this}attachApp(e,t={}){Object.assign(t,this.opts),t.path=t.path||this._path,Rt("creating uWebSockets.js-based engine with opts %j",t);let n=new Mb.uServer(t);n.attach(e,t),this.bind(n),this._serveClient&&e.get(`${this._path}/*`,(i,s)=>{if(!this.clientPathRegex.test(s.getUrl())){s.setYield(!0);return}let o=s.getUrl().replace(this._path,"").replace(/\?.*$/,"").replace(/^\//,""),a=Db.test(o),c=a?"map":"source",l='"'+Nb+'"',u="W/"+l,f=s.getHeader("if-none-match");if(f&&(l===f||u===f)){Rt("serve client %s 304",c),i.writeStatus("304 Not Modified"),i.end();return}Rt("serve client %s",c),i.writeHeader("cache-control","public, max-age=0"),i.writeHeader("content-type","application/"+(a?"json":"javascript")+"; charset=utf-8"),i.writeHeader("etag",l);let h=Ob.join(__dirname,"../client-dist/",o);(0,zd.serveFile)(i,h)}),(0,zd.patchAdapter)(e)}initEngine(e,t){Rt("creating engine.io instance with opts %j",t),this.eio=(0,Mb.attach)(e,t),this._serveClient&&this.attachServe(e),this.httpServer=e,this.bind(this.eio)}attachServe(e){Rt("attaching client serving req handler");let t=e.listeners("request").slice(0);e.removeAllListeners("request"),e.on("request",(n,i)=>{if(this.clientPathRegex.test(n.url))this._corsMiddleware?this._corsMiddleware(n,i,()=>{this.serve(n,i)}):this.serve(n,i);else for(let s=0;s<t.length;s++)t[s].call(e,n,i)})}serve(e,t){let n=e.url.replace(this._path,"").replace(/\?.*$/,""),i=Db.test(n),s=i?"map":"source",o='"'+Nb+'"',a="W/"+o,c=e.headers["if-none-match"];if(c&&(o===c||a===c)){Rt("serve client %s 304",s),t.writeHead(304),t.end();return}Rt("serve client %s",s),t.setHeader("Cache-Control","public, max-age=0"),t.setHeader("Content-Type","application/"+(i?"json":"javascript")+"; charset=utf-8"),t.setHeader("ETag",o),r.sendFile(n,e,t)}static sendFile(e,t,n){let i=(0,A2.createReadStream)(Ob.join(__dirname,"../client-dist/",e)),s=R2(t).encodings(["br","gzip","deflate"]),o=a=>{a&&n.end()};switch(s){case"br":n.writeHead(200,{"content-encoding":"br"}),(0,fl.pipeline)(i,(0,Gd.createBrotliCompress)(),n,o);break;case"gzip":n.writeHead(200,{"content-encoding":"gzip"}),(0,fl.pipeline)(i,(0,Gd.createGzip)(),n,o);break;case"deflate":n.writeHead(200,{"content-encoding":"deflate"}),(0,fl.pipeline)(i,(0,Gd.createDeflate)(),n,o);break;default:n.writeHead(200),(0,fl.pipeline)(i,n,o)}}bind(e){return this.engine=e,this.engine.on("connection",this.onconnection.bind(this)),this}onconnection(e){Rt("incoming connection with id %s",e.id);let t=new O2.Client(this,e);return e.protocol===3&&t.connect("/"),this}of(e,t){if(typeof e=="function"||e instanceof RegExp){let i=new M2.ParentNamespace(this);return Rt("initializing parent namespace %s",i.name),typeof e=="function"?this.parentNsps.set(e,i):(this.parentNsps.set((s,o,a)=>a(null,e.test(s)),i),this.parentNamespacesFromRegExp.set(e,i)),t&&i.on("connect",t),i}String(e)[0]!=="/"&&(e="/"+e);let n=this._nsps.get(e);if(!n){for(let[i,s]of this.parentNamespacesFromRegExp)if(i.test(e))return Rt("attaching namespace %s to parent namespace %s",e,i),s.createChild(e);Rt("initializing namespace %s",e),n=new Kd.Namespace(this,e),this._nsps.set(e,n),e!=="/"&&this.sockets.emitReserved("new_namespace",n)}return t&&n.on("connect",t),n}async close(e){if(await Promise.allSettled([...this._nsps.values()].map(async t=>{t.sockets.forEach(n=>{n._onclose("server shutting down")}),await t.adapter.close()})),this.engine.close(),(0,zd.restoreAdapter)(),this.httpServer)return new Promise(t=>{this.httpServer.close(n=>{e&&e(n),n&&Rt("server was not running"),t()})});e&&e()}use(e){return this.sockets.use(e),this}to(e){return this.sockets.to(e)}in(e){return this.sockets.in(e)}except(e){return this.sockets.except(e)}send(...e){return this.sockets.emit("message",...e),this}write(...e){return this.sockets.emit("message",...e),this}serverSideEmit(e,...t){return this.sockets.serverSideEmit(e,...t)}serverSideEmitWithAck(e,...t){return this.sockets.serverSideEmitWithAck(e,...t)}allSockets(){return this.sockets.allSockets()}compress(e){return this.sockets.compress(e)}get volatile(){return this.sockets.volatile}get local(){return this.sockets.local}timeout(e){return this.sockets.timeout(e)}fetchSockets(){return this.sockets.fetchSockets()}socketsJoin(e){return this.sockets.socketsJoin(e)}socketsLeave(e){return this.sockets.socketsLeave(e)}disconnectSockets(e=!1){return this.sockets.disconnectSockets(e)}};St.Server=vs;var L2=Object.keys(Pb.EventEmitter.prototype).filter(function(r){return typeof Pb.EventEmitter.prototype[r]=="function"});L2.forEach(function(r){vs.prototype[r]=function(){return this.sockets[r].apply(this.sockets,arguments)}});Do.exports=(r,e)=>new vs(r,e);Do.exports.Server=vs;Do.exports.Namespace=Kd.Namespace;Do.exports.Socket=Lb.Socket});function Yd(){return Lo=(0,Hb.randomBytes)(32).toString("hex"),Lo}function qb(){return Lo||Yd(),Lo}function Ub(r){return!!r&&typeof r=="string"&&r===Lo}var Hb,Lo,dl=Ce(()=>{Hb=require("crypto"),Lo=null});var zb,ml,$,pt=Ce(()=>{zb={darwin:{capture:"nodeScreenshots",encoder:"sharp",tileSize:128,inputFormat:"rgba"},win32:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"},linux:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"}},ml=zb[process.platform]||zb.linux,$={pipeline:{captureLib:ml.capture,encoder:ml.encoder,inputFormat:ml.inputFormat,tileSize:ml.tileSize,tileFormat:"webp",webpEffort:0,jpegQuality:50,tileConcurrency:6,outputScale:1,adaptiveTiers:[{minEffective:1,outputScale:1,jpegQuality:72},{minEffective:.7,outputScale:.95,jpegQuality:62},{minEffective:.4,outputScale:.8,jpegQuality:52},{minEffective:0,outputScale:.65,jpegQuality:45}],tierHysteresis:.05,checksumSampling:{rowStep:3,colStep:8}},webrtc:{enableWebRTC:!0,enableTurn:!1,turnApiUrl:"https://9remote.cc/api/webrtc/turn-credentials",turnRefreshInterval:1380*60*1e3,dcMaxMessageSize:65536,dcBufferThreshold:262144,iceDisconnectGraceMs:6e3,dcChunkSize:8,dcMaxTilesPerFrame:32,dcReliable:!0,dcOrdered:!1,answerTimeout:1e4,maxControlBuffer:500},robotSettings:{mouseDelay:2,keyboardDelay:2},throttling:{mouseThrottle:8,keyThrottle:25,typeTextThrottle:100,maxTextLength:1e3},resourceManagement:{inactiveTimeout:120*1e3,memoryCheckInterval:6e4,memoryWarningThreshold:1e3,maxTimersPerClient:100,maxChunkTimersPerClient:50,disconnectGraceMs:3e4},streaming:{activeInterval:60,idleInterval:400,idleThreshold:3,actionCaptureDelay:50,chunkSize:32,chunkDelay:5},focus:{paddingTiles:4},displayWake:{enabled:!0,throttleMs:3e4,macDurationSec:5},sleepInhibit:{defaultMode:"never",presets:{"30m":1800*1e3,"1h":3600*1e3,"2h":7200*1e3,"4h":14400*1e3,"24h":1440*60*1e3,never:null}},desktopSwitch:{darwin:{prev:{keyCode:123,mods:"control down"},next:{keyCode:124,mods:"control down"},new:{type:"missionControl"}},win32:{prev:["left",["control","command"]],next:["right",["control","command"]],new:["d",["control","command"]]},linux:{prev:null,next:null,new:null}},logging:{lifecycle:!1,errors:!0,dpiDetection:!1,focus:!1,focusEveryFrames:60,metrics:!1,metricsEveryFrames:30,webrtc:!1}}});var Bo,jo,ve,Xd=Ce(()=>{pt();ji();Bo=()=>$.logging,jo=On("remote"),ve={lifecycle:r=>{Bo().lifecycle&&jo.info(r)},focus:r=>{Bo().focus&&jo.info(r)},dpi:r=>{Bo().dpiDetection&&jo.info(r)},error:(r,e)=>{Bo().errors&&jo.error(`${r} ${e?.message||e||""}`)},warn:r=>{Bo().errors&&jo.warn(r)}}});function Ho(){for(let r of[ie.ROOT,ie.STATE])$r.default.existsSync(r)||$r.default.mkdirSync(r,{recursive:!0})}function eh(){try{return Ho(),$r.default.existsSync(Qd)?JSON.parse($r.default.readFileSync(Qd,"utf8"))||{}:{}}catch{return{}}}function Qb(r){try{Ho();let e={...eh(),...r};return $r.default.writeFileSync(Qd,JSON.stringify(e,null,2),{mode:384}),e}catch(e){return console.error("Error saving settings:",e),null}}function ew(){try{return Ho(),$r.default.existsSync(Zd)?JSON.parse($r.default.readFileSync(Zd,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function qn(r){try{Ho(),$r.default.writeFileSync(G2,JSON.stringify({cmd:r,ts:Date.now()}))}catch{}}function tw(r,e,t="Default"){try{Ho();let n={machineId:r,key:e,name:t,createdAt:new Date().toISOString()};return $r.default.writeFileSync(Zd,JSON.stringify(n,null,2),{mode:384}),n}catch(n){return console.error("Error saving key:",n),null}}var $r,Fo,j8,F8,Zd,G2,Qd,xs=Ce(()=>{$r=K(require("fs"),1),Fo=K(require("path"),1);bt();j8=ie.STATE,F8=Fo.default.join(ie.STATE,"state.json"),Zd=Fo.default.join(ie.ROOT,"keys.json"),G2=Fo.default.join(ie.STATE,"cmd.json"),Qd=Fo.default.join(ie.STATE,"settings.json")});function rw(){return new Promise(r=>{if(process.platform!=="darwin"){r({screenRecording:!0,accessibility:!0});return}let e=!1,t=!1,n=0,i=()=>{++n===2&&r({screenRecording:e,accessibility:t})};(0,qo.execFile)("osascript",["-e",'use framework "ApplicationServices"',"-e",`set checkOptions to current application's NSDictionary's dictionaryWithObject:(false) forKey:("AXTrustedCheckOptionPrompt" as string)`,"-e","return current application's AXIsProcessTrustedWithOptions(checkOptions) as boolean"],{timeout:3e3},(s,o)=>{t=!s&&o.trim()==="true",i()}),(0,qo.exec)(`osascript -e 'use framework "CoreGraphics"' -e "return (current application's CGPreflightScreenCaptureAccess()) as boolean"`,{timeout:3e3},(s,o)=>{e=!s&&o.trim()==="true",i()})})}function nw(r){let e=z2[r];e&&process.platform==="darwin"&&(0,qo.exec)(`open "${e}"`,()=>{})}var qo,z2,iw=Ce(()=>{qo=require("child_process"),z2={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"}});function V2(){return!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY}function Wo(){for(let r=sw,e=null;r!==e;e=r,r=Rr.default.dirname(r)){let t=Rr.default.join(r,"package.json");if((0,de.existsSync)(t)){try{let n=JSON.parse((0,de.readFileSync)(t,"utf8"));if(n.name!==Bi)continue;let i=typeof n.bin=="string"?n.bin:n.bin?.[Bi];if(i){let s=Rr.default.resolve(r,i);if((0,de.existsSync)(s))return s}}catch{}break}}return process.argv[1]||Rr.default.resolve(sw,"..","index.js")}function ws(){return process.execPath}function cw(){let r=Rr.default.dirname(ws()),e=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return e.includes(r)||e.unshift(r),e.join(":")}function th(r){return String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function K2(r,e){let t=[r,e,..._l].map(n=>` <string>${th(n)}</string>`).join(`
|
|
30
30
|
`);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
31
31
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
32
32
|
<plist version="1.0">
|
|
@@ -110,10 +110,10 @@ WantedBy=default.target
|
|
|
110
110
|
`:`
|
|
111
111
|
`)+t,i=n+1,n=r.indexOf(`
|
|
112
112
|
`,i)}while(n!==-1);return s+=r.slice(i),s}var{stdout:bv,stderr:wv}=yv,Tp=Symbol("GENERATOR"),Ni=Symbol("STYLER"),so=Symbol("IS_EMPTY"),Sv=["ansi","ansi","ansi256","ansi16m"],Di=Object.create(null),LO=(r,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=bv?bv.level:0;r.level=e.level===void 0?t:e.level};var BO=r=>{let e=(...t)=>t.join(" ");return LO(e,r),Object.setPrototypeOf(e,oo.prototype),e};function oo(r){return BO(r)}Object.setPrototypeOf(oo.prototype,Function.prototype);for(let[r,e]of Object.entries(Sr))Di[r]={get(){let t=Ga(this,kp(e.open,e.close,this[Ni]),this[so]);return Object.defineProperty(this,r,{value:t}),t}};Di.visible={get(){let r=Ga(this,this[Ni],!0);return Object.defineProperty(this,"visible",{value:r}),r}};var Cp=(r,e,t,...n)=>r==="rgb"?e==="ansi16m"?Sr[t].ansi16m(...n):e==="ansi256"?Sr[t].ansi256(Sr.rgbToAnsi256(...n)):Sr[t].ansi(Sr.rgbToAnsi(...n)):r==="hex"?Cp("rgb",e,t,...Sr.hexToRgb(...n)):Sr[t][r](...n),jO=["rgb","hex","ansi256"];for(let r of jO){Di[r]={get(){let{level:t}=this;return function(...n){let i=kp(Cp(r,Sv[t],"color",...n),Sr.color.close,this[Ni]);return Ga(this,i,this[so])}}};let e="bg"+r[0].toUpperCase()+r.slice(1);Di[e]={get(){let{level:t}=this;return function(...n){let i=kp(Cp(r,Sv[t],"bgColor",...n),Sr.bgColor.close,this[Ni]);return Ga(this,i,this[so])}}}}var FO=Object.defineProperties(()=>{},{...Di,level:{enumerable:!0,get(){return this[Tp].level},set(r){this[Tp].level=r}}}),kp=(r,e,t)=>{let n,i;return t===void 0?(n=r,i=e):(n=t.openAll+r,i=e+t.closeAll),{open:r,close:e,openAll:n,closeAll:i,parent:t}},Ga=(r,e,t)=>{let n=(...i)=>HO(n,i.length===1?""+i[0]:i.join(" "));return Object.setPrototypeOf(n,FO),n[Tp]=r,n[Ni]=e,n[so]=t,n},HO=(r,e)=>{if(r.level<=0||!e)return r[so]?"":e;let t=r[Ni];if(t===void 0)return e;let{openAll:n,closeAll:i}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=xv(e,t.close,t.open),t=t.parent;let s=e.indexOf(`
|
|
113
|
-
`);return s!==-1&&(e=_v(e,i,n,s)),n+e+i};Object.defineProperties(oo.prototype,Di);var qO=oo(),x4=oo({level:wv?wv.level:0});var ao=qO;Lt();bt();ji();var jb=K(Bb(),1),{Server:Fb,Namespace:h8,Socket:m8}=jb.default;var IA=require("fs"),NA=require("path");bt();dl();var ct={control:"control",binary:"binary"},lt={idle:"idle",connecting:"connecting",open:"open",degraded:"degraded",closed:"closed"},$b={clientApp:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"rtc"},binary:{strategy:"priority",prefer:"rtc"}}},remoteDesktop:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"ws"},binary:{strategy:"priority",prefer:"rtc"}}}};var ys=class{static id="base";static capabilities={control:!1,binary:!1,signaling:"none"};static priority={control:0,binary:0};constructor(){this._listeners=new Map,this._state=lt.idle}get state(){return this._state}get ready(){return this._state===lt.open}supports(e){return!!this.constructor.capabilities[e]}on(e,t){this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t)}off(e,t){this._listeners.get(e)?.delete(t)}_emit(e,...t){let n=this._listeners.get(e);if(n)for(let i of n)i(...t)}_setState(e){this._state!==e&&(this._state=e,this._emit("stateChange",e))}connect(e){throw new Error("Not implemented: connect")}disconnect(){throw new Error("Not implemented: disconnect")}send(e,t){throw new Error("Not implemented: send")}};var hl=class extends ys{static id="ws";static capabilities={control:!0,binary:!0,signaling:"ws"};static priority={control:100,binary:10};constructor(){super(),this._socket=null}get socket(){return this._socket}connect(e){this._socket=e.socket,this._setState(e.socket.connected?lt.open:lt.connecting),e.socket.on("connect",()=>this._setState(lt.open)),e.socket.on("disconnect",()=>this._setState(lt.closed)),e.socket.onAny?.((t,n)=>this._emit("message",{event:t,data:n,source:"ws"}))}disconnect(){this._socket=null,this._setState(lt.closed)}send(e,t){if(!this._socket?.connected)return!1;let n=this._socket._rawEmit||this._socket.emit.bind(this._socket);if(e===ct.control){let{event:i,args:s=[]}=t;return n(i,...s),!0}if(e===ct.binary){let i=this._socket.conn?.transport;return i&&i.writable===!1?!1:(n("tiles-bin-v2",t),!0)}return!1}};var Jb=K(require("node-datachannel"),1);function B2(r,e){return e&&typeof e=="object"&&e.type==="Buffer"&&Array.isArray(e.data)?{__b:Buffer.from(e.data).toString("base64")}:e}function j2(r,e){return e&&typeof e=="object"&&typeof e.__b=="string"?Buffer.from(e.__b,"base64"):e}function Wb(r){return JSON.stringify(r,B2)}function Gb(r){return JSON.parse(typeof r=="string"?r:Buffer.from(r).toString("utf8"),j2)}pt();var Kb=K(require("node:dns/promises"),1),F2=3e4,H2=/\s([0-9a-f-]{8,}\.local)\s/i,Vb=new Map;async function q2(r){let e=Vb.get(r);if(e&&Date.now()-e.ts<F2)return e.ip;try{let{address:t}=await Kb.default.lookup(r);return Vb.set(r,{ip:t,ts:Date.now()}),t}catch{return null}}async function Yb(r){let e=r.match(H2);if(!e)return r;let t=await q2(e[1]);return t?r.replace(e[1],t):null}var{PeerConnection:U2}=Jb.default,$2=[{hostname:"stun.l.google.com",port:19302,type:"Stun"},{hostname:"stun1.l.google.com",port:19302,type:"Stun"},{hostname:"stun2.l.google.com",port:19302,type:"Stun"},{hostname:"stun3.l.google.com",port:19302,type:"Stun"},{hostname:"stun4.l.google.com",port:19302,type:"Stun"},{hostname:"global.stun.twilio.com",port:3478,type:"Stun"},{hostname:"stun.cloudflare.com",port:3478,type:"Stun"}];async function W2(r,e){try{let t=await fetch(r,{headers:{"X-API-Key":e}});if(!t.ok)throw new Error(`HTTP ${t.status}`);let{iceServers:n}=await t.json(),i=[];for(let s of n)for(let o of s.urls)if(o.startsWith("stun:")){let a=o.replace("stun:","").split(":")[0],c=parseInt(o.split(":")[2]||"3478");i.push({hostname:a,port:c,type:"Stun"})}else if(o.startsWith("turn:")||o.startsWith("turns:")){let a=o.startsWith("turns:"),l=o.replace(/^turns?:/,"").split("?")[0],u=l.split(":")[0],f=parseInt(l.split(":")[1]||(a?"5349":"3478")),h=o.includes("transport=tcp")?"Tcp":"Udp";i.push({hostname:u,port:f,type:a?"Tls":"Turn",relayType:h,username:s.username,password:s.credential})}return i}catch(t){return console.error("[WebRtcProtocol] TURN fetch failed:",t.message),null}}var gl=class extends ys{static id="rtc";static capabilities={control:!0,binary:!0,signaling:"external"};static priority={control:50,binary:100};constructor(){super(),this._pc=null,this._dcControl=null,this._dcBinary=null,this._iceServers=$2,this._refreshTimer=null,this._remoteSet=!1,this._pendingCandidates=[],this._signaling=null,this._iceGraceTimer=null}async connect(e){this._ctx=e,this._setState(lt.connecting);let t=e.profile?.rtc||{};t.enableTurn&&e.auth?.apiKey&&t.turnApiUrl&&await this._refreshTurn(t),this._signaling=e.signaling,this._signaling?.on?.(n=>this._handleSignal(n,t))}disconnect(){clearTimeout(this._refreshTimer),this._signaling?.off?.(),this._signaling=null,this._cleanupPeer(),this._setState(lt.closed)}send(e,t){if(e===ct.control){if(!this._dcControl)return!1;try{return this._dcControl.sendMessage(Wb({event:t.event,args:t.args||[],ackId:t.ackId||null})),!0}catch(n){return console.error("[WebRtcProtocol] send control:",n.message),!1}}if(e===ct.binary){if(!this._dcBinary)return!1;try{let n=Array.isArray(t)?t[0]:t,i=$.webrtc.dcBufferThreshold;return this._dcBinary.bufferedAmount()>i?!1:this._dcBinary.sendMessageBinary(n)}catch(n){return console.error("[WebRtcProtocol] send binary:",n.message),!1}}return!1}_handleSignal(e,t){if(e.type==="offer")this._processOffer(e.sdp,t);else if(e.type==="ice"){if(!this._remoteSet||!this._pc){this._pendingCandidates.push({candidate:e.candidate,mid:e.mid||"0"});return}this._addRemoteCandidate(e.candidate,e.mid||"0")}}async _addRemoteCandidate(e,t){try{let n=await Yb(e);if(!n||!this._pc)return;this._pc.addRemoteCandidate(n,t)}catch(n){console.error("[WebRtcProtocol] addRemoteCandidate:",n.message)}}_createPeer(e){try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null,this._remoteSet=!1,this._pendingCandidates=[],this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);let t=this._ctx?.auth?.socketId||"anon",n=new U2(`peer-${t}`,{iceServers:this._iceServers});this._pcState="new",n.onStateChange(i=>{if(this._pcState=i,i==="failed"||i==="closed")this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null),this._setState(lt.closed);else if(i==="disconnected"){if(this._iceGraceTimer)return;this._iceGraceTimer=setTimeout(()=>{this._iceGraceTimer=null,this._pcState!=="connected"&&this._setState(lt.closed)},$.webrtc.iceDisconnectGraceMs)}else i==="connected"&&this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null)}),n.onDataChannel(i=>{let s=i.getLabel?.()||"",o=()=>{s==="control"?this._dcControl=i:s==="binary"&&(this._dcBinary=i),this._dcControl&&this._dcBinary&&this._setState(lt.open)};i.onOpen(o),i.onClosed(()=>{s==="control"&&(this._dcControl=null),s==="binary"&&(this._dcBinary=null),!this._dcControl&&!this._dcBinary&&this._setState(lt.closed)}),i.onError(a=>console.error(`[WebRtcProtocol] DC[${s}] error:`,a)),i.onMessage(a=>{if(s!=="control")return;let c;try{c=Gb(a)}catch(l){console.error("[WebRtcProtocol] control parse:",l.message);return}try{this._emit("message",{event:c.event,data:c,source:"rtc"})}catch(l){console.error(`[WebRtcProtocol] handler error event=${c.event}:`,l.message)}})}),this._pc=n}_processOffer(e,t){return this._createPeer(t),new Promise((n,i)=>{this._pc.onLocalDescription((o,a)=>{a==="answer"&&(this._signaling?.send?.({type:"answer",sdp:o}),n())}),this._pc.onLocalCandidate((o,a)=>{o&&this._signaling?.send?.({type:"ice",candidate:o,mid:a})});try{this._pc.setRemoteDescription(e,"offer"),this._remoteSet=!0;for(let{candidate:o,mid:a}of this._pendingCandidates)this._addRemoteCandidate(o,a);this._pendingCandidates=[],this._pc.setLocalDescription()}catch(o){this._signaling?.send?.({type:"error",message:o.message}),i(o)}let s=t?.answerTimeout||1e4;setTimeout(()=>i(new Error("Answer timeout")),s)})}_cleanupPeer(){this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null}async _refreshTurn(e){let t=await W2(e.turnApiUrl,this._ctx.auth.apiKey);t?.length&&(this._iceServers=t,$.logging?.webrtc&&console.log(`[WebRtcProtocol] TURN credentials loaded (${t.length} servers)`)),clearTimeout(this._refreshTimer),this._refreshTimer=setTimeout(()=>this._refreshTurn(e),e.turnRefreshInterval)}};var Xb=new Map;function Jd(r){if(!r?.id)throw new Error("Adapter missing static id");Xb.set(r.id,r)}function Zb(r){return Xb.get(r)}mh();Jd(hl);Jd(gl);var Rl=class{constructor(e,t){let n=t.enableWebRTC?"remoteDesktop":"clientApp",i={...$b[n]};t.enableWebRTC||(i.enabled=["ws"]),i.rtc={enableTurn:!!(t.apiKey&&t.turnApiUrl),turnApiUrl:t.turnApiUrl||null,turnRefreshInterval:t.turnRefreshInterval,dcMaxMessageSize:t.dcMaxMessageSize,answerTimeout:t.answerTimeout},this._profile=i,this._auth={apiKey:t.apiKey||null,socketId:e.id},this._socket=e,this._wsChunkSize=t.wsChunkSize,this._dcChunkSize=t.dcChunkSize,this._dcMaxTilesPerFrame=t.dcMaxTilesPerFrame,this._maxControlBuffer=t.maxControlBuffer,this._adapters=new Map,this._listeners=new Map,this._buffer=[],this._rtcSignalingHandler=null,this._sigListeners=null,this._chunkOffset=0,this._wsPendingSince=new Map}get type(){return this._pickAdapter(ct.binary)?.constructor.id==="rtc"?"dc":"ws"}async init(){for(let e of this._profile.enabled){let t=Zb(e);if(!t)continue;let n=new t;n.on("stateChange",s=>this._onAdapterStateChange(e,s)),n.on("message",({event:s,data:o,source:a})=>this._dispatch(s,o,a)),this._adapters.set(e,n);let i=this._buildCtx(e);await n.connect(i)}}setupSignaling(e){this._installSignalingListeners()}emit(e,...t){this._sendControl(e,t)}sendTiles(e,t){let{tiles:n,timestamp:i}=e;if(!n?.length)return[];let s=this._pickAdapter(ct.binary),o=i??Date.now();return s?.constructor.id==="rtc"&&t?this._emitTilesRtc(s,n,o,t):this._emitTilesChunked(n,o)}close(){for(let e of this._adapters.values())try{e.disconnect()}catch{}this._adapters.clear(),this._buffer=[]}attachAsBus(e){if(e._rawEmit)return;let t=e.emit.bind(e);e._rawEmit=t;let n=new Set(["error","disconnect","disconnecting","connect","newListener","removeListener"]);e.emit=(i,...s)=>n.has(i)?t(i,...s):(this._sendControl(i,s),!0)}_emitTilesChunked(e,t){let n=this._adapters.get("ws");if(!n?.ready)return[];let i=this._wsChunkSize,s=this._wsPendingSince,o=t??Date.now(),a=[...e].sort((l,u)=>{let f=s.get(l.tileIndex)??1/0,h=s.get(u.tileIndex)??1/0;if(f!==h)return f-h;let g=(l.imageBuffer?.length||0)-(u.imageBuffer?.length||0);return g!==0?g:l.tileIndex-u.tileIndex}),c=[];for(let l=0;l<a.length;l+=i){let u=a.slice(l,l+i);if(n.send(ct.binary,Ts(u,t))===!1){for(let f=l;f<a.length;f++){let h=a[f].tileIndex;s.has(h)||s.set(h,o)}break}for(let f of u)s.delete(f.tileIndex);c.push(...u)}return c}_emitTilesRtc(e,t,n,i){let s=this._profile.rtc?.dcMaxMessageSize??65536,o=t.length,a=o>this._dcChunkSize?this._chunkOffset%o:0,c=h=>{let g=[];for(let x=0;x<h;x++)g.push(t[(a+x)%o]);return g},l=Math.min(this._dcChunkSize,o);for(;l>1&&i(c(l),n).length>s;)l=Math.floor(l/2);o>l&&(this._chunkOffset=(a+l)%o);let u=this._adapters.get("ws"),f=[];for(let h=0;h<o;h+=l){let g=[];for(let S=0;S<l&&h+S<o;S++)g.push(t[(a+h+S)%o]);let x=i(g,n);if(x.length>s){g.length===1&&u?.ready&&u.send(ct.binary,x)!==!1&&f.push(...g);continue}if(e.send(ct.binary,x)===!1)return f;f.push(...g)}return f}_buildCtx(e){let t={auth:this._auth,profile:this._profile};return e==="ws"&&(t.socket=this._socket),e==="rtc"&&(t.signaling={send:n=>this._sendSignaling(n),on:n=>{this._rtcSignalingHandler=n,this._installSignalingListeners()},off:()=>{this._rtcSignalingHandler=null,this._removeSignalingListeners()}}),t}_onAdapterStateChange(e,t){t===lt.open&&this._flushBuffer()}_pickAdapter(e){let t=this._profile.channels[e];if(!t)return null;let n=[...this._adapters.values()].filter(i=>i.supports(e)&&i.ready);if(t.prefer){let i=n.find(s=>s.constructor.id===t.prefer);if(i)return i}return n.sort((i,s)=>(s.constructor.priority[e]??0)-(i.constructor.priority[e]??0)),n[0]||null}hasReadyAdapter(){return!!(this._pickAdapter(ct.control)||this._pickAdapter(ct.binary))}_sendControl(e,t,n){let i=this._pickAdapter(ct.control);if(!i){this._buffer.push({event:e,args:t,ackId:n}),this._buffer.length>this._maxControlBuffer&&this._buffer.shift();return}i.constructor.id==="rtc"?i.send(ct.control,{event:e,args:t,ackId:n}):i.send(ct.control,{event:e,args:t})}_flushBuffer(){if(!(!this._buffer.length||!this._pickAdapter(ct.control)))for(;this._buffer.length;){let{event:t,args:n,ackId:i}=this._buffer.shift();this._sendControl(t,n,i)}}_dispatch(e,t,n){if(n==="rtc"){let s=Array.isArray(t?.args)?[...t.args]:[],o=t?.ackId;o&&s.push((...l)=>this._sendAck(o,l));let a=this._listeners.get(e);if(a)for(let l of a)l(...s);let c=this._socket.listeners?.(e)||[];for(let l of c)l(...s);return}let i=this._listeners.get(e);if(i)for(let s of i)s(t)}_sendAck(e,t){let n=this._adapters.get("rtc");n?.ready&&n.send(ct.control,{event:"__ack",args:t,ackId:e})}_sendSignaling(e){let t=this._adapters.get("ws");if(t?.ready){t.send(ct.control,{event:this._sigEvent(e.type),args:[this._sigData(e)]});return}console.warn("[ProtocolManager] signaling unavailable (ws down)")}_sigEvent(e){return e==="offer"?"webrtc:offer":e==="answer"?"webrtc:answer":e==="ice"?"webrtc:ice-candidate":"webrtc:error"}_sigData(e){return e.type==="offer"||e.type==="answer"?{sdp:e.sdp}:e.type==="ice"?{candidate:e.candidate,mid:e.mid}:e}_installSignalingListeners(){if(!this._rtcSignalingHandler||this._sigListeners)return;let e=({sdp:n})=>this._rtcSignalingHandler?.({type:"offer",sdp:n}),t=({candidate:n,mid:i})=>this._rtcSignalingHandler?.({type:"ice",candidate:n,mid:i});this._sigListeners={onOffer:e,onIce:t},this._socket.on("webrtc:offer",e),this._socket.on("webrtc:ice-candidate",t)}_removeSignalingListeners(){this._sigListeners&&(this._socket.off("webrtc:offer",this._sigListeners.onOffer),this._socket.off("webrtc:ice-candidate",this._sigListeners.onIce),this._sigListeners=null)}};hi();pt();var GT=require("path"),zT=require("url");var Nl=K(require("net"),1),ce=K(require("fs"),1),he=K(require("path"),1),Jw=K(require("os"),1),Xw=require("child_process"),Zw=require("url");var vh={win32:[{id:"cmd",label:"Command Prompt",path:"cmd.exe",args:[]},{id:"powershell",label:"PowerShell",path:"powershell.exe",args:["-NoLogo"]},{id:"pwsh",label:"PowerShell Core",path:"pwsh.exe",args:["-NoLogo"]}],unix:[{id:"bash",label:"Bash",path:"/bin/bash",args:["-l"]},{id:"zsh",label:"Zsh",path:"/bin/zsh",args:["-l"]},{id:"sh",label:"Sh",path:"/bin/sh",args:["-l"]}]};function Vw(){return process.platform==="win32"?vh.win32:[]}function yh(r){if(process.platform==="win32"){let n=r?vh.win32.find(s=>s.id===r):null;if(n)return n;let i=process.env.COMSPEC;return i?{id:"cmd",label:"Command Prompt",path:i,args:[]}:vh.win32[0]}let e=process.env.SHELL||"/bin/bash",t=e.split("/").pop();return{id:t,label:t,path:e,args:["-l"]}}var _h=he.default.dirname((0,Zw.fileURLToPath)(__importMetaUrl)),xn=he.default.join(Jw.default.homedir(),".9remote"),Jo=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":he.default.join(xn,"pty-daemon.sock"),Kw=he.default.join(_h,"ptyDaemon.js"),Yw=he.default.join(_h,"ptyDaemon.cjs"),Ol=he.default.join(xn,"daemon");function Qw(r,e){if(ce.default.existsSync(r)){ce.default.mkdirSync(e,{recursive:!0});for(let t of ce.default.readdirSync(r,{withFileTypes:!0})){let n=he.default.join(r,t.name),i=he.default.join(e,t.name);t.isDirectory()?Qw(n,i):t.isFile()&&ce.default.copyFileSync(n,i)}}}function yB(r,e){let t=r;for(let n=0;n<6;n++){let i=he.default.join(t,"node_modules",e);if(ce.default.existsSync(i))return i;let s=he.default.dirname(t);if(s===t)break;t=s}return null}var xB=r=>yB(r,"node-pty");function _B(r){try{if(!ce.default.existsSync(Ol))return;let e=he.default.join(xn,"pids","ptyDaemon.pid"),t=!1;try{let n=parseInt(ce.default.readFileSync(e,"utf8").trim(),10);if(Number.isFinite(n)&&n>0)try{process.kill(n,0),t=!0}catch{}}catch{}if(t)return;for(let n of ce.default.readdirSync(Ol))if(n!==`v${r}`)try{ce.default.rmSync(he.default.join(Ol,n),{recursive:!0,force:!0})}catch{}}catch{}}function bB(r){_B("22");let e=he.default.join(Ol,`v${"22"}`),t=r.endsWith(".js"),n=t?he.default.join(e,"features","terminal"):e,i=he.default.join(n,he.default.basename(r)),s=he.default.join(n,"node_modules","node-pty");if(ce.default.existsSync(i)&&ce.default.existsSync(s))return{script:i,cwd:n};try{if(ce.default.mkdirSync(n,{recursive:!0}),ce.default.copyFileSync(r,i),t){let a=he.default.dirname(r);ce.default.copyFileSync(he.default.join(a,"constants.js"),he.default.join(n,"constants.js"));let c=he.default.join(e,"lib");ce.default.mkdirSync(c,{recursive:!0}),ce.default.copyFileSync(he.default.resolve(a,"..","..","lib","constants.js"),he.default.join(c,"constants.js"))}let o=xB(he.default.dirname(r));return o?(Qw(o,s),{script:i,cwd:n}):null}catch{return null}}var Wr=null,ks=!1,$n=!1,xh="",wB=0,As=new Map,Ml=new Map;function SB(){return++wB}function Zo(r,e){Ml.has(r)||Ml.set(r,[]),Ml.get(r).push(e)}function Xo(r,e){let t=Ml.get(r);if(t)for(let n of t)try{n(e)}catch(i){console.error(`[DaemonClient] Error in ${r} handler:`,i)}}function bh(r){if(!Wr||!ks)return!1;try{return Wr.write(JSON.stringify(r)+`
|
|
113
|
+
`);return s!==-1&&(e=_v(e,i,n,s)),n+e+i};Object.defineProperties(oo.prototype,Di);var qO=oo(),x4=oo({level:wv?wv.level:0});var ao=qO;Lt();bt();ji();var jb=K(Bb(),1),{Server:Fb,Namespace:h8,Socket:m8}=jb.default;var IA=require("fs"),NA=require("path");bt();dl();var ct={control:"control",binary:"binary"},lt={idle:"idle",connecting:"connecting",open:"open",degraded:"degraded",closed:"closed"},$b={clientApp:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"rtc"},binary:{strategy:"priority",prefer:"rtc"}}},remoteDesktop:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"ws"},binary:{strategy:"priority",prefer:"rtc"}}}};var ys=class{static id="base";static capabilities={control:!1,binary:!1,signaling:"none"};static priority={control:0,binary:0};constructor(){this._listeners=new Map,this._state=lt.idle}get state(){return this._state}get ready(){return this._state===lt.open}supports(e){return!!this.constructor.capabilities[e]}on(e,t){this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t)}off(e,t){this._listeners.get(e)?.delete(t)}_emit(e,...t){let n=this._listeners.get(e);if(n)for(let i of n)i(...t)}_setState(e){this._state!==e&&(this._state=e,this._emit("stateChange",e))}connect(e){throw new Error("Not implemented: connect")}disconnect(){throw new Error("Not implemented: disconnect")}send(e,t){throw new Error("Not implemented: send")}};var hl=class extends ys{static id="ws";static capabilities={control:!0,binary:!0,signaling:"ws"};static priority={control:100,binary:10};constructor(){super(),this._socket=null}get socket(){return this._socket}connect(e){this._socket=e.socket,this._setState(e.socket.connected?lt.open:lt.connecting),e.socket.on("connect",()=>this._setState(lt.open)),e.socket.on("disconnect",()=>this._setState(lt.closed)),e.socket.onAny?.((t,n)=>this._emit("message",{event:t,data:n,source:"ws"}))}disconnect(){this._socket=null,this._setState(lt.closed)}send(e,t){if(!this._socket?.connected)return!1;let n=this._socket._rawEmit||this._socket.emit.bind(this._socket);if(e===ct.control){let{event:i,args:s=[]}=t;return n(i,...s),!0}if(e===ct.binary){let i=this._socket.conn?.transport;return i&&i.writable===!1?!1:(n("tiles-bin-v2",t),!0)}return!1}};var Jb=K(require("node-datachannel"),1);function B2(r,e){return e&&typeof e=="object"&&e.type==="Buffer"&&Array.isArray(e.data)?{__b:Buffer.from(e.data).toString("base64")}:e}function j2(r,e){return e&&typeof e=="object"&&typeof e.__b=="string"?Buffer.from(e.__b,"base64"):e}function Wb(r){return JSON.stringify(r,B2)}function Gb(r){return JSON.parse(typeof r=="string"?r:Buffer.from(r).toString("utf8"),j2)}pt();var Kb=K(require("node:dns/promises"),1),F2=3e4,H2=/\s([0-9a-f-]{8,}\.local)\s/i,Vb=new Map;async function q2(r){let e=Vb.get(r);if(e&&Date.now()-e.ts<F2)return e.ip;try{let{address:t}=await Kb.default.lookup(r);return Vb.set(r,{ip:t,ts:Date.now()}),t}catch{return null}}async function Yb(r){let e=r.match(H2);if(!e)return r;let t=await q2(e[1]);return t?r.replace(e[1],t):null}var{PeerConnection:U2}=Jb.default,$2=[{hostname:"stun.l.google.com",port:19302,type:"Stun"},{hostname:"stun1.l.google.com",port:19302,type:"Stun"},{hostname:"stun2.l.google.com",port:19302,type:"Stun"},{hostname:"stun3.l.google.com",port:19302,type:"Stun"},{hostname:"stun4.l.google.com",port:19302,type:"Stun"},{hostname:"global.stun.twilio.com",port:3478,type:"Stun"},{hostname:"stun.cloudflare.com",port:3478,type:"Stun"}];async function W2(r,e){try{let t=await fetch(r,{headers:{"X-API-Key":e}});if(!t.ok)throw new Error(`HTTP ${t.status}`);let{iceServers:n}=await t.json(),i=[];for(let s of n)for(let o of s.urls)if(o.startsWith("stun:")){let a=o.replace("stun:","").split(":")[0],c=parseInt(o.split(":")[2]||"3478");i.push({hostname:a,port:c,type:"Stun"})}else if(o.startsWith("turn:")||o.startsWith("turns:")){let a=o.startsWith("turns:"),l=o.replace(/^turns?:/,"").split("?")[0],u=l.split(":")[0],f=parseInt(l.split(":")[1]||(a?"5349":"3478")),h=o.includes("transport=tcp")?"Tcp":"Udp";i.push({hostname:u,port:f,type:a?"Tls":"Turn",relayType:h,username:s.username,password:s.credential})}return i}catch(t){return console.error("[WebRtcProtocol] TURN fetch failed:",t.message),null}}var gl=class extends ys{static id="rtc";static capabilities={control:!0,binary:!0,signaling:"external"};static priority={control:50,binary:100};constructor(){super(),this._pc=null,this._dcControl=null,this._dcBinary=null,this._iceServers=$2,this._refreshTimer=null,this._remoteSet=!1,this._pendingCandidates=[],this._signaling=null,this._iceGraceTimer=null}async connect(e){this._ctx=e,this._setState(lt.connecting);let t=e.profile?.rtc||{};t.enableTurn&&e.auth?.apiKey&&t.turnApiUrl&&await this._refreshTurn(t),this._signaling=e.signaling,this._signaling?.on?.(n=>this._handleSignal(n,t))}disconnect(){clearTimeout(this._refreshTimer),this._signaling?.off?.(),this._signaling=null,this._cleanupPeer(),this._setState(lt.closed)}send(e,t){if(e===ct.control){if(!this._dcControl)return!1;try{return this._dcControl.sendMessage(Wb({event:t.event,args:t.args||[],ackId:t.ackId||null})),!0}catch(n){return console.error("[WebRtcProtocol] send control:",n.message),!1}}if(e===ct.binary){if(!this._dcBinary)return!1;try{let n=Array.isArray(t)?t[0]:t,i=$.webrtc.dcBufferThreshold;return this._dcBinary.bufferedAmount()>i?!1:this._dcBinary.sendMessageBinary(n)}catch(n){return console.error("[WebRtcProtocol] send binary:",n.message),!1}}return!1}_handleSignal(e,t){if(e.type==="offer")this._processOffer(e.sdp,t);else if(e.type==="ice"){if(!this._remoteSet||!this._pc){this._pendingCandidates.push({candidate:e.candidate,mid:e.mid||"0"});return}this._addRemoteCandidate(e.candidate,e.mid||"0")}}async _addRemoteCandidate(e,t){try{let n=await Yb(e);if(!n||!this._pc)return;this._pc.addRemoteCandidate(n,t)}catch(n){console.error("[WebRtcProtocol] addRemoteCandidate:",n.message)}}_createPeer(e){try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null,this._remoteSet=!1,this._pendingCandidates=[],this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);let t=this._ctx?.auth?.socketId||"anon",n=new U2(`peer-${t}`,{iceServers:this._iceServers});this._pcState="new",n.onStateChange(i=>{if(this._pcState=i,i==="failed"||i==="closed")this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null),this._setState(lt.closed);else if(i==="disconnected"){if(this._iceGraceTimer)return;this._iceGraceTimer=setTimeout(()=>{this._iceGraceTimer=null,this._pcState!=="connected"&&this._setState(lt.closed)},$.webrtc.iceDisconnectGraceMs)}else i==="connected"&&this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null)}),n.onDataChannel(i=>{let s=i.getLabel?.()||"",o=()=>{s==="control"?this._dcControl=i:s==="binary"&&(this._dcBinary=i),this._dcControl&&this._dcBinary&&this._setState(lt.open)};i.onOpen(o),i.onClosed(()=>{s==="control"&&(this._dcControl=null),s==="binary"&&(this._dcBinary=null),!this._dcControl&&!this._dcBinary&&this._setState(lt.closed)}),i.onError(a=>console.error(`[WebRtcProtocol] DC[${s}] error:`,a)),i.onMessage(a=>{if(s!=="control")return;let c;try{c=Gb(a)}catch(l){console.error("[WebRtcProtocol] control parse:",l.message);return}try{this._emit("message",{event:c.event,data:c,source:"rtc"})}catch(l){console.error(`[WebRtcProtocol] handler error event=${c.event}:`,l.message)}})}),this._pc=n}_processOffer(e,t){return this._createPeer(t),new Promise((n,i)=>{this._pc.onLocalDescription((o,a)=>{a==="answer"&&(this._signaling?.send?.({type:"answer",sdp:o}),n())}),this._pc.onLocalCandidate((o,a)=>{o&&this._signaling?.send?.({type:"ice",candidate:o,mid:a})});try{this._pc.setRemoteDescription(e,"offer"),this._remoteSet=!0;for(let{candidate:o,mid:a}of this._pendingCandidates)this._addRemoteCandidate(o,a);this._pendingCandidates=[],this._pc.setLocalDescription()}catch(o){this._signaling?.send?.({type:"error",message:o.message}),i(o)}let s=t?.answerTimeout||1e4;setTimeout(()=>i(new Error("Answer timeout")),s)})}_cleanupPeer(){this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null}async _refreshTurn(e){let t=await W2(e.turnApiUrl,this._ctx.auth.apiKey);t?.length&&(this._iceServers=t,$.logging?.webrtc&&console.log(`[WebRtcProtocol] TURN credentials loaded (${t.length} servers)`)),clearTimeout(this._refreshTimer),this._refreshTimer=setTimeout(()=>this._refreshTurn(e),e.turnRefreshInterval)}};var Xb=new Map;function Jd(r){if(!r?.id)throw new Error("Adapter missing static id");Xb.set(r.id,r)}function Zb(r){return Xb.get(r)}mh();Jd(hl);Jd(gl);var Rl=class{constructor(e,t){let n=t.enableWebRTC?"remoteDesktop":"clientApp",i={...$b[n]};t.enableWebRTC||(i.enabled=["ws"]),i.rtc={enableTurn:!!(t.apiKey&&t.turnApiUrl),turnApiUrl:t.turnApiUrl||null,turnRefreshInterval:t.turnRefreshInterval,dcMaxMessageSize:t.dcMaxMessageSize,answerTimeout:t.answerTimeout},this._profile=i,this._auth={apiKey:t.apiKey||null,socketId:e.id},this._socket=e,this._wsChunkSize=t.wsChunkSize,this._dcChunkSize=t.dcChunkSize,this._dcMaxTilesPerFrame=t.dcMaxTilesPerFrame,this._maxControlBuffer=t.maxControlBuffer,this._adapters=new Map,this._listeners=new Map,this._buffer=[],this._rtcSignalingHandler=null,this._sigListeners=null,this._chunkOffset=0,this._wsPendingSince=new Map}get type(){return this._pickAdapter(ct.binary)?.constructor.id==="rtc"?"dc":"ws"}async init(){for(let e of this._profile.enabled){let t=Zb(e);if(!t)continue;let n=new t;n.on("stateChange",s=>this._onAdapterStateChange(e,s)),n.on("message",({event:s,data:o,source:a})=>this._dispatch(s,o,a)),this._adapters.set(e,n);let i=this._buildCtx(e);await n.connect(i)}}setupSignaling(e){this._installSignalingListeners()}emit(e,...t){this._sendControl(e,t)}sendTiles(e,t){let{tiles:n,timestamp:i}=e;if(!n?.length)return[];let s=this._pickAdapter(ct.binary),o=i??Date.now();return s?.constructor.id==="rtc"&&t?this._emitTilesRtc(s,n,o,t):this._emitTilesChunked(n,o)}close(){for(let e of this._adapters.values())try{e.disconnect()}catch{}this._adapters.clear(),this._buffer=[]}attachAsBus(e){if(e._rawEmit)return;let t=e.emit.bind(e);e._rawEmit=t;let n=new Set(["error","disconnect","disconnecting","connect","newListener","removeListener"]);e.emit=(i,...s)=>n.has(i)?t(i,...s):(this._sendControl(i,s),!0)}_emitTilesChunked(e,t){let n=this._adapters.get("ws");if(!n?.ready)return[];let i=this._wsChunkSize,s=this._wsPendingSince,o=t??Date.now(),a=[...e].sort((l,u)=>{let f=s.get(l.tileIndex)??1/0,h=s.get(u.tileIndex)??1/0;return f!==h?f-h:l.tileIndex-u.tileIndex}),c=[];for(let l=0;l<a.length;l+=i){let u=a.slice(l,l+i);if(n.send(ct.binary,Ts(u,t))===!1){for(let f=l;f<a.length;f++){let h=a[f].tileIndex;s.has(h)||s.set(h,o)}break}for(let f of u)s.delete(f.tileIndex);c.push(...u)}return c}_emitTilesRtc(e,t,n,i){let s=this._profile.rtc?.dcMaxMessageSize??65536,o=t.length,a=o>this._dcChunkSize?this._chunkOffset%o:0,c=h=>{let g=[];for(let x=0;x<h;x++)g.push(t[(a+x)%o]);return g},l=Math.min(this._dcChunkSize,o);for(;l>1&&i(c(l),n).length>s;)l=Math.floor(l/2);o>l&&(this._chunkOffset=(a+l)%o);let u=this._adapters.get("ws"),f=[];for(let h=0;h<o;h+=l){let g=[];for(let S=0;S<l&&h+S<o;S++)g.push(t[(a+h+S)%o]);let x=i(g,n);if(x.length>s){g.length===1&&u?.ready&&u.send(ct.binary,x)!==!1&&f.push(...g);continue}if(e.send(ct.binary,x)===!1)return f;f.push(...g)}return f}_buildCtx(e){let t={auth:this._auth,profile:this._profile};return e==="ws"&&(t.socket=this._socket),e==="rtc"&&(t.signaling={send:n=>this._sendSignaling(n),on:n=>{this._rtcSignalingHandler=n,this._installSignalingListeners()},off:()=>{this._rtcSignalingHandler=null,this._removeSignalingListeners()}}),t}_onAdapterStateChange(e,t){t===lt.open&&this._flushBuffer()}_pickAdapter(e){let t=this._profile.channels[e];if(!t)return null;let n=[...this._adapters.values()].filter(i=>i.supports(e)&&i.ready);if(t.prefer){let i=n.find(s=>s.constructor.id===t.prefer);if(i)return i}return n.sort((i,s)=>(s.constructor.priority[e]??0)-(i.constructor.priority[e]??0)),n[0]||null}hasReadyAdapter(){return!!(this._pickAdapter(ct.control)||this._pickAdapter(ct.binary))}_sendControl(e,t,n){let i=this._pickAdapter(ct.control);if(!i){this._buffer.push({event:e,args:t,ackId:n}),this._buffer.length>this._maxControlBuffer&&this._buffer.shift();return}i.constructor.id==="rtc"?i.send(ct.control,{event:e,args:t,ackId:n}):i.send(ct.control,{event:e,args:t})}_flushBuffer(){if(!(!this._buffer.length||!this._pickAdapter(ct.control)))for(;this._buffer.length;){let{event:t,args:n,ackId:i}=this._buffer.shift();this._sendControl(t,n,i)}}_dispatch(e,t,n){if(n==="rtc"){let s=Array.isArray(t?.args)?[...t.args]:[],o=t?.ackId;o&&s.push((...l)=>this._sendAck(o,l));let a=this._listeners.get(e);if(a)for(let l of a)l(...s);let c=this._socket.listeners?.(e)||[];for(let l of c)l(...s);return}let i=this._listeners.get(e);if(i)for(let s of i)s(t)}_sendAck(e,t){let n=this._adapters.get("rtc");n?.ready&&n.send(ct.control,{event:"__ack",args:t,ackId:e})}_sendSignaling(e){let t=this._adapters.get("ws");if(t?.ready){t.send(ct.control,{event:this._sigEvent(e.type),args:[this._sigData(e)]});return}console.warn("[ProtocolManager] signaling unavailable (ws down)")}_sigEvent(e){return e==="offer"?"webrtc:offer":e==="answer"?"webrtc:answer":e==="ice"?"webrtc:ice-candidate":"webrtc:error"}_sigData(e){return e.type==="offer"||e.type==="answer"?{sdp:e.sdp}:e.type==="ice"?{candidate:e.candidate,mid:e.mid}:e}_installSignalingListeners(){if(!this._rtcSignalingHandler||this._sigListeners)return;let e=({sdp:n})=>this._rtcSignalingHandler?.({type:"offer",sdp:n}),t=({candidate:n,mid:i})=>this._rtcSignalingHandler?.({type:"ice",candidate:n,mid:i});this._sigListeners={onOffer:e,onIce:t},this._socket.on("webrtc:offer",e),this._socket.on("webrtc:ice-candidate",t)}_removeSignalingListeners(){this._sigListeners&&(this._socket.off("webrtc:offer",this._sigListeners.onOffer),this._socket.off("webrtc:ice-candidate",this._sigListeners.onIce),this._sigListeners=null)}};hi();pt();var GT=require("path"),zT=require("url");var Nl=K(require("net"),1),ce=K(require("fs"),1),he=K(require("path"),1),Jw=K(require("os"),1),Xw=require("child_process"),Zw=require("url");var vh={win32:[{id:"cmd",label:"Command Prompt",path:"cmd.exe",args:[]},{id:"powershell",label:"PowerShell",path:"powershell.exe",args:["-NoLogo"]},{id:"pwsh",label:"PowerShell Core",path:"pwsh.exe",args:["-NoLogo"]}],unix:[{id:"bash",label:"Bash",path:"/bin/bash",args:["-l"]},{id:"zsh",label:"Zsh",path:"/bin/zsh",args:["-l"]},{id:"sh",label:"Sh",path:"/bin/sh",args:["-l"]}]};function Vw(){return process.platform==="win32"?vh.win32:[]}function yh(r){if(process.platform==="win32"){let n=r?vh.win32.find(s=>s.id===r):null;if(n)return n;let i=process.env.COMSPEC;return i?{id:"cmd",label:"Command Prompt",path:i,args:[]}:vh.win32[0]}let e=process.env.SHELL||"/bin/bash",t=e.split("/").pop();return{id:t,label:t,path:e,args:["-l"]}}var _h=he.default.dirname((0,Zw.fileURLToPath)(__importMetaUrl)),xn=he.default.join(Jw.default.homedir(),".9remote"),Jo=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":he.default.join(xn,"pty-daemon.sock"),Kw=he.default.join(_h,"ptyDaemon.js"),Yw=he.default.join(_h,"ptyDaemon.cjs"),Ol=he.default.join(xn,"daemon");function Qw(r,e){if(ce.default.existsSync(r)){ce.default.mkdirSync(e,{recursive:!0});for(let t of ce.default.readdirSync(r,{withFileTypes:!0})){let n=he.default.join(r,t.name),i=he.default.join(e,t.name);t.isDirectory()?Qw(n,i):t.isFile()&&ce.default.copyFileSync(n,i)}}}function yB(r,e){let t=r;for(let n=0;n<6;n++){let i=he.default.join(t,"node_modules",e);if(ce.default.existsSync(i))return i;let s=he.default.dirname(t);if(s===t)break;t=s}return null}var xB=r=>yB(r,"node-pty");function _B(r){try{if(!ce.default.existsSync(Ol))return;let e=he.default.join(xn,"pids","ptyDaemon.pid"),t=!1;try{let n=parseInt(ce.default.readFileSync(e,"utf8").trim(),10);if(Number.isFinite(n)&&n>0)try{process.kill(n,0),t=!0}catch{}}catch{}if(t)return;for(let n of ce.default.readdirSync(Ol))if(n!==`v${r}`)try{ce.default.rmSync(he.default.join(Ol,n),{recursive:!0,force:!0})}catch{}}catch{}}function bB(r){_B("25");let e=he.default.join(Ol,`v${"25"}`),t=r.endsWith(".js"),n=t?he.default.join(e,"features","terminal"):e,i=he.default.join(n,he.default.basename(r)),s=he.default.join(n,"node_modules","node-pty");if(ce.default.existsSync(i)&&ce.default.existsSync(s))return{script:i,cwd:n};try{if(ce.default.mkdirSync(n,{recursive:!0}),ce.default.copyFileSync(r,i),t){let a=he.default.dirname(r);ce.default.copyFileSync(he.default.join(a,"constants.js"),he.default.join(n,"constants.js"));let c=he.default.join(e,"lib");ce.default.mkdirSync(c,{recursive:!0}),ce.default.copyFileSync(he.default.resolve(a,"..","..","lib","constants.js"),he.default.join(c,"constants.js"))}let o=xB(he.default.dirname(r));return o?(Qw(o,s),{script:i,cwd:n}):null}catch{return null}}var Wr=null,ks=!1,$n=!1,xh="",wB=0,As=new Map,Ml=new Map;function SB(){return++wB}function Zo(r,e){Ml.has(r)||Ml.set(r,[]),Ml.get(r).push(e)}function Xo(r,e){let t=Ml.get(r);if(t)for(let n of t)try{n(e)}catch(i){console.error(`[DaemonClient] Error in ${r} handler:`,i)}}function bh(r){if(!Wr||!ks)return!1;try{return Wr.write(JSON.stringify(r)+`
|
|
114
114
|
`),!0}catch(e){return console.error("[DaemonClient] Send error:",e),!1}}function Qo(r,e=5e3){return new Promise((t,n)=>{let i=SB();r.requestId=i;let s=setTimeout(()=>{As.delete(i),n(new Error("Request timeout"))},e);As.set(i,{resolve:t,reject:n,timer:s}),bh(r)||(clearTimeout(s),As.delete(i),n(new Error("Not connected to daemon")))})}function EB(r){let{type:e,requestId:t,...n}=r;if(t&&As.has(t)){let{resolve:i,timer:s}=As.get(t);clearTimeout(s),As.delete(t),i({type:e,...n});return}switch(e){case"output":Xo("output",{sessionId:n.sessionId,data:Buffer.from(n.data,"base64")});break;case"sessionClosed":Xo("sessionClosed",n.sessionId);break;case"cwdChange":Xo("cwdChange",{sessionId:n.sessionId,cwd:n.cwd});break;case"pong":break;default:console.log("[DaemonClient] Unknown message:",e)}}function Il(){return new Promise(r=>{let e=Nl.default.connect(Jo),t=setTimeout(()=>{e.destroy(),r(!1)},1e3);e.on("connect",()=>{clearTimeout(t),e.destroy(),r(!0)}),e.on("error",()=>{if(clearTimeout(t),process.platform!=="win32"&&ce.default.existsSync(Jo))try{ce.default.unlinkSync(Jo)}catch{}r(!1)})})}function TB(){ce.default.existsSync(xn)||ce.default.mkdirSync(xn,{recursive:!0});let r=ce.default.existsSync(Kw)?Kw:ce.default.existsSync(Yw)?Yw:null;if(!r)return console.error("[DaemonClient] \u274C Daemon script not found"),null;let e=bB(r);return e||{script:r,cwd:_h}}async function CB(){if(!ce.default.existsSync(xn))try{ce.default.mkdirSync(xn,{recursive:!0})}catch(a){return console.error("[DaemonClient] Failed to create socket directory:",a.message),!1}let r=TB();if(!r)return!1;let{script:e,cwd:t}=r,n=he.default.join(xn,"logs");try{ce.default.mkdirSync(n,{recursive:!0})}catch{}let i=he.default.join(n,"daemon.log"),s;try{s=ce.default.openSync(i,"w")}catch(a){console.error("[DaemonClient] Failed to open log file:",a.message),s="ignore"}if((0,Xw.spawn)("node",[e],{detached:!0,stdio:["ignore",s,s],cwd:t}).unref(),typeof s=="number")try{ce.default.closeSync(s)}catch{}for(let a=0;a<20;a++)if(await new Promise(c=>setTimeout(c,100)),await Il())return!0;console.error("[DaemonClient] \u274C Failed to start daemon");try{let a=ce.default.readFileSync(i,"utf8");a.trim()&&(console.error("[DaemonClient] Daemon log:"),console.error(a))}catch{}return!1}function kB(){return new Promise(r=>{let e=Nl.default.connect(Jo),t="",n=s=>{try{e.destroy()}catch{}r(s)},i=setTimeout(()=>n(null),2e3);e.on("connect",()=>e.write(JSON.stringify({type:"ping",requestId:-1})+`
|
|
115
115
|
`)),e.on("data",s=>{t+=s.toString();let o=t.indexOf(`
|
|
116
|
-
`);if(o!==-1){clearTimeout(i);try{let a=JSON.parse(t.slice(0,o));n(a.version||"unknown")}catch{n(null)}}}),e.on("error",()=>{clearTimeout(i),n(null)})})}async function AB(){try{let r=he.default.join(xn,"pids","ptyDaemon.pid"),e=parseInt(ce.default.readFileSync(r,"utf8").trim(),10);Number.isFinite(e)&&e>0&&process.kill(e,"SIGTERM")}catch{}for(let r=0;r<20;r++){if(!await Il())return;await new Promise(e=>setTimeout(e,100))}}async function eS(){if(!(ks||$n)){$n=!0;try{if(await Il()){let r=await kB();r!=="
|
|
116
|
+
`);if(o!==-1){clearTimeout(i);try{let a=JSON.parse(t.slice(0,o));n(a.version||"unknown")}catch{n(null)}}}),e.on("error",()=>{clearTimeout(i),n(null)})})}async function AB(){try{let r=he.default.join(xn,"pids","ptyDaemon.pid"),e=parseInt(ce.default.readFileSync(r,"utf8").trim(),10);Number.isFinite(e)&&e>0&&process.kill(e,"SIGTERM")}catch{}for(let r=0;r<20;r++){if(!await Il())return;await new Promise(e=>setTimeout(e,100))}}async function eS(){if(!(ks||$n)){$n=!0;try{if(await Il()){let r=await kB();r!=="25"&&(console.log(`[DaemonClient] Daemon v${r} != v${"25"}, restarting`),await AB())}return!await Il()&&!await CB()?(console.error("[DaemonClient] \u274C Failed to start daemon"),$n=!1,!1):new Promise(r=>{let e=setTimeout(()=>{console.error("[DaemonClient] \u274C Connection timeout after 5s"),Wr&&Wr.destroy(),$n=!1,r(!1)},5e3);Wr=Nl.default.connect(Jo),Wr.on("connect",()=>{clearTimeout(e),ks=!0,$n=!1,Xo("connected"),r(!0)}),Wr.on("data",t=>{xh+=t.toString();let n=xh.split(`
|
|
117
117
|
`);xh=n.pop()||"";for(let i of n)if(i.trim())try{EB(JSON.parse(i))}catch{console.error("[DaemonClient] Invalid message:",i)}}),Wr.on("close",()=>{ks=!1,Wr=null,Xo("disconnected"),setTimeout(()=>{!ks&&!$n&&eS()},2e3)}),Wr.on("error",t=>{clearTimeout(e),console.error("[DaemonClient] \u274C Connection error:",t.message),console.error("[DaemonClient] Error code:",t.code),$n=!1,r(!1)})})}catch(r){return console.error("[DaemonClient] \u274C Connect error:",r),$n=!1,!1}}}async function tS(){return eS()}function Ut(){return ks}async function Dl(){return(await Qo({type:"listSessions"})).sessions||[]}async function Ll(r,e=80,t=24,n=null,i=`session-${Date.now()}`,s=null){return await Qo({type:"createSession",sessionId:i,name:r,cols:e,rows:t,shellId:n,cwd:s})}async function rS(r){try{return(await Qo({type:"getCwd",sessionId:r})).cwd||null}catch{return null}}async function wh(r){return await Qo({type:"joinSession",sessionId:r})}function Bl(r,e){return bh({type:"input",sessionId:r,data:e})}function nS(r,e,t){return bh({type:"resize",sessionId:r,cols:e,rows:t})}async function mi(r){return await Qo({type:"deleteSession",sessionId:r})}hi();ji();var sS=require("child_process");pt();var RB={darwin:()=>({cmd:"caffeinate",args:["-u","-t",String($.displayWake.macDurationSec)]}),linux:()=>({cmd:"xset",args:["dpms","force","on"]}),win32:()=>({cmd:"powershell.exe",args:["-NonInteractive","-NoProfile","-WindowStyle","Hidden","-Command",`Add-Type -Name K -Namespace W -MemberDefinition '[System.Runtime.InteropServices.DllImport("kernel32")]public static extern uint SetThreadExecutionState(uint e);'; [void][W.K]::SetThreadExecutionState(0x80000003)`]})},iS=0;function oS(){let r=$.displayWake;if(!r?.enabled)return;let e=Date.now();if(e-iS<r.throttleMs)return;iS=e;let t=RB[process.platform];if(t)try{let{cmd:n,args:i}=t(),s=(0,sS.spawn)(n,i,{detached:!0,stdio:"ignore",windowsHide:!0});s.on("error",()=>{}),s.unref()}catch{}}pt();var kS=On("remote"),_n=null;function DB(){return process.env.CODESPACES==="true"||process.env.GITPOD_WORKSPACE_ID||process.platform==="linux"&&!process.env.DISPLAY}async function PS(){if(_n!==null)return _n;if(DB())return _n=!1,kS.info("\u2705 Remote desktop not available (headless environment)"),_n;try{let r=await import("@hurdlegroup/robotjs");(r.default||r).getScreenSize(),_n=!0}catch{_n=!1,kS.info("\u2705 Remote desktop not available (no display or robotjs not installed)")}return _n}function $l(){return _n===!0}function IS(){return Gr}var vi=null,Ph=null,Ih=null,NS=null,DS=null,LS=null,BS=null,Gr=null,AS=null,RS=null,OS=null,MS=null;async function LB(){if(vi&&Ph&&Ih)return!0;try{let r=await import("@hurdlegroup/robotjs");vi=r.default||r;let{TileManager:e}=await Promise.resolve().then(()=>(vS(),gS)),{ResourceManager:t}=await Promise.resolve().then(()=>(xS(),yS)),{ScreenUpdateHelper:n}=await Promise.resolve().then(()=>(bS(),_S)),{MouseHandler:i}=await Promise.resolve().then(()=>(SS(),wS)),{KeyboardHandler:s}=await Promise.resolve().then(()=>(CS(),TS)),{ScreenHandler:o}=await Promise.resolve().then(()=>(mh(),Gw));return Ph=e,Ih=t,NS=n,DS=i,LS=s,BS=o,vi.setMouseDelay(2),vi.setKeyboardDelay(2),!0}catch(r){return console.error("\u274C Failed to load remote modules:",r.message),!1}}async function jS(r,e){if(!_n){r.emit("remote:unavailable");return}if(!await LB()){r.emit("remote:unavailable");return}Gr||(Gr=new Ih,AS=new NS(Gr),RS=new DS(vi,Gr),OS=new LS(vi,Gr),MS=new BS(Gr,AS),Gr.startResourceMonitoring());let n=r.data.protocol;if(!n){r.emit("remote:unavailable");return}let i=r.handshake.auth?.apiKey,s=new Ph(vi);Gr.addClient(r.id,{tileManager:s,protocol:n,screenInterval:null,authenticated:!0,apiKey:i}),r.data.remoteAttached=!0;let o=a=>(...c)=>(oS(),a(...c));RS.setupMouseHandlers(r,o),OS.setupKeyboardHandlers(r,o),MS.setupScreenHandlers(r,o,n),r.on("disconnect",()=>{let a=n._adapters?.get("rtc"),c=!1,l=null,u=null,f=()=>{c||(c=!0,l&&(clearTimeout(l),l=null),a&&u&&a.off("stateChange",u),Gr.removeClient(r.id),n.close(),Cs(n))};if(!a?.ready)return f();u=h=>{h===lt.closed&&f()},a.on("stateChange",u),l=setTimeout(f,$.resourceManagement.disconnectGraceMs)}),r.emit("remote:ready")}yn();var Wn=K(require("fs"),1),Nh=K(require("path"),1),Wl=0,ta=null,BB=6e4,jB={name:"9Remote",postCreateCommand:"npm install -g 9remote@latest",postAttachCommand:"9remote start",forwardPorts:[2208],portsAttributes:{2208:{label:"9Remote Server",onAutoForward:"notify"}}};function zr(){return process.env.CODESPACES==="true"}function FS(){return zr()?{isCodespaces:!0,codespaceName:process.env.CODESPACE_NAME||"unknown",workspacePath:process.env.CODESPACE_VSCODE_FOLDER||process.cwd()}:null}function HS(){Wl++,zr()&&Wl===1&&FB()}function qS(){Wl--,zr()&&Wl===0&&HB()}function FB(){ta||(ta=setInterval(()=>{process.memoryUsage()},BB))}function HB(){ta&&(console.log("\u23F8\uFE0F Stopping Codespaces heartbeat"),clearInterval(ta),ta=null)}function US(r){return Nh.default.join(r,".devcontainer","devcontainer.json")}function $S(r){try{let e=US(r);if(!Wn.default.existsSync(e))return{enabled:!1,exists:!1};let t=JSON.parse(Wn.default.readFileSync(e,"utf8"));return{enabled:t.postAttachCommand==="9remote start"||t.postAttachCommand==="9remote",exists:!0}}catch{return{enabled:!1,exists:!1,error:"Failed to read config"}}}function WS(r,e){try{let t=Nh.default.join(r,".devcontainer"),n=US(r);Wn.default.existsSync(t)||Wn.default.mkdirSync(t,{recursive:!0});let i={...jB};if(Wn.default.existsSync(n))try{i={...JSON.parse(Wn.default.readFileSync(n,"utf8"))}}catch{}return e?(i.postAttachCommand="9remote start",i.postCreateCommand||(i.postCreateCommand="npm install -g 9remote@latest")):delete i.postAttachCommand,Wn.default.writeFileSync(n,JSON.stringify(i,null,2)),{success:!0,enabled:e}}catch(t){return{success:!1,error:t.message}}}var Gl=K(require("os"),1),Oe=K(require("fs"),1),Gn=K(require("path"),1);bt();var Os=ie.BUFFERS,zl=Gn.default.join(ie.STATE,"sessions.json"),Vl=Gn.default.join(ie.STATE,"terminalGroups.json"),ra="/tmp/9remote-uploads";Oe.default.existsSync(ra)||Oe.default.mkdirSync(ra,{recursive:!0});function Dh(){return process.platform==="win32"?process.env.COMSPEC||"powershell.exe":process.env.SHELL||"/bin/zsh"}function Kl(r){return r?"/workspaces":Gl.default.homedir()}function Lh(){let r=Gl.default.homedir(),e=Gl.default.userInfo().username,t=Dh(),n={...process.env};if(delete n.PORT,Object.assign(n,{HOME:r,USER:e,LOGNAME:e,SHELL:t,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:"en_US.UTF-8",LC_ALL:"en_US.UTF-8",LC_CTYPE:"en_US.UTF-8",PWD:r,OLDPWD:r,TMPDIR:n.TMPDIR||(process.platform==="win32"?n.TEMP||n.TMP:"/tmp"),__CF_USER_TEXT_ENCODING:n.__CF_USER_TEXT_ENCODING,XPC_FLAGS:n.XPC_FLAGS,XPC_SERVICE_NAME:n.XPC_SERVICE_NAME,SSH_AUTH_SOCK:n.SSH_AUTH_SOCK,TERM_PROGRAM:"9Remote",TERM_PROGRAM_VERSION:"1.0.0",ITERM_SESSION_ID:`9remote-${Date.now()}`,SHLVL:"1"}),t.includes("bash")){let i=n.PROMPT_COMMAND||"";n.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${i?`; ${i}`:""}`}return n}function GS(){Oe.default.existsSync(Os)||Oe.default.mkdirSync(Os,{recursive:!0})}function Bh(r,e,t){if(t==="buffer"){GS();try{Oe.default.writeFileSync(Gn.default.join(Os,`${r}.buf`),e.join(""),"utf8")}catch(n){console.log(`\u26A0\uFE0F Failed to save buffer for ${r}:`,n.message)}}}function zS(r,e){if(e!=="buffer")return null;let t=Gn.default.join(Os,`${r}.buf`);try{if(Oe.default.existsSync(t))return Oe.default.readFileSync(t,"utf8")}catch(n){console.log(`\u26A0\uFE0F Failed to load buffer for ${r}:`,n.message)}return null}function Yl(r){let e=Gn.default.join(Os,`${r}.buf`);try{Oe.default.existsSync(e)&&Oe.default.unlinkSync(e)}catch{}}function VS(){GS();try{return Oe.default.readdirSync(Os).filter(r=>r.endsWith(".buf")).map(r=>r.replace(".buf",""))}catch{return[]}}function jh(){try{if(Oe.default.existsSync(zl))return JSON.parse(Oe.default.readFileSync(zl,"utf8"))}catch(r){console.log("\u26A0\uFE0F Failed to load session metadata:",r.message)}return{}}function Mr(r){try{let e={};for(let[n,i]of r)e[n]={name:i.name,createdAt:i.createdAt,shellId:i.shellId,cwd:i.cwd};let t=Gn.default.dirname(zl);Oe.default.existsSync(t)||Oe.default.mkdirSync(t,{recursive:!0}),Oe.default.writeFileSync(zl,JSON.stringify(e,null,2),"utf8")}catch(e){console.log("\u26A0\uFE0F Failed to save session metadata:",e.message)}}function KS(){try{if(Oe.default.existsSync(Vl)){let r=JSON.parse(Oe.default.readFileSync(Vl,"utf8"));return{groups:r.groups||[],sessionGroups:r.sessionGroups||{},sessionOrder:r.sessionOrder||[]}}}catch(r){console.log("\u26A0\uFE0F Failed to load groups:",r.message)}return{groups:[],sessionGroups:{},sessionOrder:[]}}function YS(r,e,t=[]){try{let n=Gn.default.dirname(Vl);Oe.default.existsSync(n)||Oe.default.mkdirSync(n,{recursive:!0});let i={groups:Array.from(r.values()),sessionGroups:e,sessionOrder:t};Oe.default.writeFileSync(Vl,JSON.stringify(i,null,2),"utf8")}catch(n){console.log("\u26A0\uFE0F Failed to save groups:",n.message)}}var Fh=K(require("node-pty"),1);hi();var JS=2*1024*1024,qB=256*1024,bn="daemon";function ZS(r,e){if(!r?.length||e<=0)return"";let t=e,n=[];for(let i=r.length-1;i>=0&&t>0;i--){let s=r[i];s.length<=t?(n.push(s),t-=s.length):(n.push(s.slice(s.length-t)),t=0)}return n.reverse(),n.join("")}function XS(r,e,t,n,i){let s=null;r.onData(o=>{t.buffer.push(o),t.buffer.reduce((c,l)=>c+l.length,0)>JS&&(t.buffer=[ZS(t.buffer,JS)]),yt(n,"output",{sessionId:e,data:Buffer.from(o,"utf-8")}),bn==="buffer"&&(s&&clearTimeout(s),s=setTimeout(()=>Bh(e,t.buffer,bn),2e3))}),r.onExit(({exitCode:o})=>{console.log(`PTY exited: sessionId=${e}, code=${o}`),bn==="buffer"&&t.buffer.length>0&&Bh(e,t.buffer,bn),i.delete(e),Yl(e),yt(n,"sessionClosed",e)})}function QS(r,e,t,n,i,s=[]){let o=()=>YS(n,i,s);r.on("getSessions",async a=>{let c=[],l=bn==="daemon"&&Ut();for(let[f,h]of t){let g=h.cwd;if(l&&h.daemon){let x=await rS(f);x&&(g=x,h.cwd!==x&&(h.cwd=x))}c.push({id:f,name:h.name,createdAt:h.createdAt,restored:h.restored||!1,shellId:h.shellId,shellLabel:h.shellLabel,groupId:i[f]||null,cwd:g})}let u=new Map(s.map((f,h)=>[f,h]));c.sort((f,h)=>(u.has(f.id)?u.get(f.id):1/0)-(u.has(h.id)?u.get(h.id):1/0)),a(c)}),r.on("getShells",a=>{a({platform:process.platform,shells:Vw()})}),r.on("getGroups",a=>{a(Array.from(n.values()))}),r.on("createGroup",({name:a},c)=>{let l=`group-${Date.now()}`,u={id:l,name:a||"Group",createdAt:Date.now()};n.set(l,u),o(),yt(e,"groupsChanged"),c({success:!0,group:u})}),r.on("renameGroup",({groupId:a,name:c},l)=>{let u=n.get(a);if(!u)return l({success:!1,error:"Group not found"});u.name=c,o(),yt(e,"groupsChanged"),l({success:!0})}),r.on("deleteGroup",async({groupId:a},c)=>{if(!n.delete(a))return c({success:!1,error:"Group not found"});let l=Object.keys(i).filter(u=>i[u]===a);for(let u of l){let f=t.get(u);if(f){if(f.daemon&&Ut())try{await mi(u)}catch{}else f.pty&&(f.pty.kill(),Yl(u));t.delete(u),yt(e,"sessionClosed",u)}delete i[u]}o(),yt(e,"groupsChanged"),c({success:!0})}),r.on("moveSession",({sessionId:a,groupId:c},l)=>{c&&n.has(c)?i[a]=c:delete i[a],o(),yt(e,"groupsChanged"),l({success:!0})}),r.on("reorderSession",({orderedIds:a},c)=>{if(!Array.isArray(a))return c?.({success:!1,error:"orderedIds required"});let l=new Set(a),u=s.filter(h=>!l.has(h)),f=[...t.keys()].filter(h=>!l.has(h)&&!u.includes(h));s.length=0,s.push(...u,...f,...a),o(),yt(e,"groupsChanged"),c?.({success:!0})}),r.on("createSession",async({name:a,shellId:c,groupId:l},u)=>{let f=`session-${Date.now()}`,h=yh(c),g=Lh();g.NINE_REMOTE_SESSION_ID=f;let x=Kl(zr());try{let S=a||`${h.label} ${t.size+1}`;if(bn==="daemon"&&Ut()){let M=await Ll(S,80,24,c,f,x);M.success?(t.set(M.sessionId,{daemon:!0,name:S,createdAt:Date.now(),cwd:M.cwd,shellId:M.shellId,shellLabel:M.shellLabel}),l&&n.has(l)&&(i[M.sessionId]=l,o()),Mr(t),u({success:!0,sessionId:M.sessionId,shellLabel:M.shellLabel})):u({success:!1,error:M.error});return}let k=Fh.default.spawn(h.path,h.args,{name:"xterm-256color",cols:80,rows:24,cwd:x,env:g,useConpty:!1}),R={pty:k,name:S,createdAt:Date.now(),buffer:[],cwd:x,shellId:h.id,shellLabel:h.label};XS(k,f,R,e,t),t.set(f,R),l&&n.has(l)&&(i[f]=l,o()),u({success:!0,sessionId:f,shellLabel:h.label})}catch(S){console.error("Failed to create session:",S),u({success:!1,error:S.message})}}),r.on("joinSession",async(a,c)=>{let l=t.get(a);if(!l&&bn==="daemon"&&Ut()){let u=`${yh().label} ${t.size+1}`,f=Kl(zr()),h=await Ll(u,80,24,void 0,a,f);if(!h.success)return c({success:!1,error:h.error});l={daemon:!0,name:u,createdAt:Date.now(),cwd:h.cwd,shellId:h.shellId,shellLabel:h.shellLabel},t.set(a,l),Mr(t);let g=await wh(a);return c({success:g.success,name:l.name,cwd:g.cwd||l.cwd,recreated:!0,error:g.error})}if(!l)return c({success:!1,error:"Session not found"});if(l.daemon&&Ut()){try{if(l.needsRespawn){let f=await Ll(l.name,80,24,l.shellId,a,l.cwd);if(!f.success)return c({success:!1,error:f.error});delete l.needsRespawn,l.cwd=f.cwd,l.shellLabel=f.shellLabel,Mr(t)}let u=await wh(a);u.cwd&&u.cwd!==l.cwd&&(l.cwd=u.cwd,Mr(t)),c({success:u.success,name:l.name,cwd:u.cwd||l.cwd,error:u.error})}catch(u){c({success:!1,error:u.message})}return}if(l.needsRestore&&bn==="buffer")try{let u=Dh(),f=process.platform==="win32"?[]:["-l"],h=Kl(zr()),g=Fh.default.spawn(u,f,{name:"xterm-256color",cols:80,rows:24,cwd:h,env:Lh(),useConpty:!1});l.pty=g,l.needsRestore=!1,l.cwd=h;let x=zS(a,bn);x&&(l.buffer=[x]),XS(g,a,l,e,t),console.log(`\u2705 Restored PTY session: ${a}`)}catch(u){return console.error("Failed to restore session:",u),c({success:!1,error:"Failed to restore session"})}l.buffer?.length>0&&r.emit("output",{sessionId:a,data:Buffer.from(ZS(l.buffer,qB),"utf-8")}),c({success:!0,name:l.name,cwd:l.cwd})}),r.on("deleteSession",async(a,c)=>{let l=t.get(a);if(!l)return c({success:!1,error:"Session not found"});if(l.daemon&&Ut()){try{await mi(a),t.delete(a),i[a]&&(delete i[a],o()),Mr(t),c({success:!0})}catch(u){c({success:!1,error:u.message})}return}l.pty&&l.pty.kill(),t.delete(a),i[a]&&(delete i[a],o()),Yl(a),yt(e,"sessionClosed",a),Mr(t),c({success:!0})}),r.on("renameSession",async({sessionId:a,name:c},l)=>{let u=t.get(a);if(!u)return l({success:!1,error:"Session not found"});u.name=c,yt(e,"session-renamed",{sessionId:a,name:c}),Mr(t),l({success:!0})})}var eE=require("child_process");function Ms(r,e,t){return new Promise((n,i)=>{let s=(0,eE.spawn)(r,e,{stdio:["pipe","ignore","pipe"]}),o="";s.stderr&&s.stderr.on("data",a=>{o+=a.toString()}),s.on("error",i),s.on("close",a=>a===0?n():i(new Error(o.trim()||`${r} exited ${a}`))),t!=null&&s.stdin.write(t),s.stdin.end()})}var UB=r=>typeof r=="string"&&r.startsWith("image/"),$B={darwin:{image:r=>Ms("osascript",["-e",`set the clipboard to (read (POSIX file ${JSON.stringify(r)}) as \xABclass PNGf\xBB)`]),file:r=>Ms("osascript",["-e",`set the clipboard to POSIX file ${JSON.stringify(r)}`])},linux:{image:r=>Ms("xclip",["-selection","clipboard","-t","image/png","-i",r]),file:r=>Ms("xclip",["-selection","clipboard","-t","text/uri-list","-i"],`file://${r}
|
|
118
118
|
`)},win32:{image:r=>Ms("powershell.exe",["-NonInteractive","-NoProfile","-STA","-Command",`Add-Type -AssemblyName System.Windows.Forms,System.Drawing; [System.Windows.Forms.Clipboard]::SetImage([System.Drawing.Image]::FromFile(${JSON.stringify(r)}))`]),file:r=>Ms("powershell.exe",["-NonInteractive","-NoProfile","-STA","-Command",`Set-Clipboard -Path ${JSON.stringify(r)}`])}};async function tE(r,e){let t=$B[process.platform];if(!t)throw new Error(`clipboard unsupported on ${process.platform}`);return UB(e)?t.image(r):t.file(r)}var Hh=K(require("fs"),1),qh=K(require("path"),1);var WB="";function rE(r,e){r.on("input",({sessionId:t,data:n})=>{if(!t)return;let i=e.get(t);if(i){if(i.daemon&&Ut())return Bl(t,n);i.pty&&i.pty.write(Buffer.isBuffer(n)?n.toString("utf-8"):n)}}),r.on("resize",({sessionId:t,cols:n,rows:i})=>{if(!t)return;let s=e.get(t);if(s){if(s.daemon&&Ut())return nS(t,n,i);if(s.pty)try{s.pty.resize(n,i)}catch(o){console.log(`Resize failed for ${t}: ${o.message}`)}}}),r.on("upload-file",({sessionId:t,filename:n,size:i,content:s})=>{if(!t)return;let o=e.get(t);if(o)try{let a=n.replace(/[^a-zA-Z0-9._-]/g,"_"),c=qh.default.join(ra,`${Date.now()}_${a}`);Hh.default.writeFileSync(c,Buffer.from(s,"base64")),console.log(`\u{1F4CE} File uploaded: ${c} (${i} bytes)`),o.daemon&&Ut()?Bl(t,c):o.pty&&o.pty.write(c)}catch(a){console.error("File upload error:",a),r.emit("output",{sessionId:t,data:Buffer.from(`\r
|
|
119
119
|
Error uploading file: ${a.message}\r
|
|
@@ -160,7 +160,7 @@ function post(type) {
|
|
|
160
160
|
export default function (${e}) {
|
|
161
161
|
${e}.on(${JSON.stringify(t)}, async () => post("stop"));
|
|
162
162
|
}
|
|
163
|
-
`}function O3(){let r=Te.amp(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("amp","amp","agent.end"),"utf8"),{success:!0}}function M3(){let r=Te.pi(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("pi","pi","agent_end"),"utf8"),{success:!0}}function NT(r,e){try{return se.default.existsSync(r)&&se.default.readFileSync(r,"utf8").includes(e)}catch{return!1}}function P3(r){switch(r){case"claude":{let e=xr(Te.claude());return!!(e.hooks?.Stop||e.hooks?.Notification)}case"codex":return NT(Te.codex(),"# 9Remote notification");case"gemini":{let e=xr(Te.gemini());return!!(e.hooks?.AfterAgent||e.hooks?.Notification)}case"opencode":case"amp":case"pi":return se.default.existsSync(Te[r]());case"kiro":case"antigravity":case"cursor":case"grok":case"copilot":case"codebuddy":case"factory":case"qoder":case"rovodev":case"hermes":return NT(Te[r](),`&tool=${r}`);default:return!1}}function I3(r){let e=(process.env.PATH||"").split(Me.default.delimiter).filter(Boolean),t=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT").split(";"):[""];return e.some(n=>t.some(i=>{try{return se.default.existsSync(Me.default.join(n,r+i))}catch{return!1}}))}function N3(r){let e=t3[r];if(e&&I3(e))return!0;let t=r3[r]?.();return t?(Array.isArray(t)?t:[t]).some(n=>se.default.existsSync(n)):!1}var D3={claude:i3,codex:c3,gemini:l3,opencode:p3,grok:d3,cursor:w3,antigravity:E3,kiro:T3,copilot:y3,codebuddy:x3,factory:_3,qoder:b3,rovodev:k3,hermes:R3,amp:O3,pi:M3};var L3=Mv;function B3(r){return D3[r]?.()||{success:!1,error:"Unknown tool"}}function UT(){let r={};for(let e of L3)if(!(!N3(e)||P3(e)))try{r[e]=B3(e).success}catch{r[e]=!1}return r}function $T(){let r=Te.claude(),e=xr(r);if(!e.hooks?.Stop&&!e.hooks?.Notification)return;let t=e.env||{};Object.keys(uo).some(i=>t[i]!==uo[i])&&(jT(e),Jr(r,e))}hi();var fz=(0,GT.dirname)((0,zT.fileURLToPath)(__importMetaUrl)),dz=ao.rgb(230,138,110),Am="daemon",j3="2.0.
|
|
163
|
+
`}function O3(){let r=Te.amp(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("amp","amp","agent.end"),"utf8"),{success:!0}}function M3(){let r=Te.pi(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("pi","pi","agent_end"),"utf8"),{success:!0}}function NT(r,e){try{return se.default.existsSync(r)&&se.default.readFileSync(r,"utf8").includes(e)}catch{return!1}}function P3(r){switch(r){case"claude":{let e=xr(Te.claude());return!!(e.hooks?.Stop||e.hooks?.Notification)}case"codex":return NT(Te.codex(),"# 9Remote notification");case"gemini":{let e=xr(Te.gemini());return!!(e.hooks?.AfterAgent||e.hooks?.Notification)}case"opencode":case"amp":case"pi":return se.default.existsSync(Te[r]());case"kiro":case"antigravity":case"cursor":case"grok":case"copilot":case"codebuddy":case"factory":case"qoder":case"rovodev":case"hermes":return NT(Te[r](),`&tool=${r}`);default:return!1}}function I3(r){let e=(process.env.PATH||"").split(Me.default.delimiter).filter(Boolean),t=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT").split(";"):[""];return e.some(n=>t.some(i=>{try{return se.default.existsSync(Me.default.join(n,r+i))}catch{return!1}}))}function N3(r){let e=t3[r];if(e&&I3(e))return!0;let t=r3[r]?.();return t?(Array.isArray(t)?t:[t]).some(n=>se.default.existsSync(n)):!1}var D3={claude:i3,codex:c3,gemini:l3,opencode:p3,grok:d3,cursor:w3,antigravity:E3,kiro:T3,copilot:y3,codebuddy:x3,factory:_3,qoder:b3,rovodev:k3,hermes:R3,amp:O3,pi:M3};var L3=Mv;function B3(r){return D3[r]?.()||{success:!1,error:"Unknown tool"}}function UT(){let r={};for(let e of L3)if(!(!N3(e)||P3(e)))try{r[e]=B3(e).success}catch{r[e]=!1}return r}function $T(){let r=Te.claude(),e=xr(r);if(!e.hooks?.Stop&&!e.hooks?.Notification)return;let t=e.env||{};Object.keys(uo).some(i=>t[i]!==uo[i])&&(jT(e),Jr(r,e))}hi();var fz=(0,GT.dirname)((0,zT.fileURLToPath)(__importMetaUrl)),dz=ao.rgb(230,138,110),Am="daemon",j3="2.0.80",Xr=new Map,VT=new Map,KT={},YT=[];async function WT(){let r=await Dl(),e=new Map(r.map(n=>[n.id,n])),t=jh();for(let n of r)if(!t[n.id])try{await mi(n.id)}catch{}Xr.clear();for(let[n,i]of Object.entries(t)){let s=e.get(n);Xr.set(n,{daemon:!0,name:i.name,createdAt:i.createdAt,shellId:i.shellId,cwd:s?.cwd||i.cwd,needsRespawn:!s})}Mr(Xr)}async function JT(){let r=KS();for(let n of r.groups)VT.set(n.id,n);Object.assign(KT,r.sessionGroups),YT.push(...r.sessionOrder);try{$T()}catch{}try{UT()}catch{}if(Am==="daemon")if(!await tS())console.error("\u274C Failed to connect to PTY daemon, falling back to buffer mode");else{await WT(),Zo("connected",()=>{WT().catch(()=>{})});return}console.log("\u{1F4E6} Buffer persistence mode - scrollback enabled");let e=VS(),t=jh();for(let n of e){let i=t[n]||{};Xr.set(n,{pty:null,name:i.name||`Terminal ${Xr.size+1}`,createdAt:i.createdAt||Date.now(),buffer:[],needsRestore:!0}),console.log(`\u{1F504} Found saved session: ${n}`)}e.length>0&&console.log(`\u2705 Found ${e.length} saved session(s)`)}function Gs(r,e){Am==="daemon"&&(Zo("output",({sessionId:i,data:s})=>yt(r,"output",{sessionId:i,data:s})),Zo("cwdChange",({sessionId:i,cwd:s})=>{let o=Xr.get(i);o&&s&&o.cwd!==s&&(o.cwd=s,Mr(Xr)),yt(r,"cwdChange",{sessionId:i,cwd:s})}),Zo("sessionClosed",i=>{Xr.delete(i),Su(i),yt(r,"sessionClosed",i),yt(r,"notificationCleared",i)}));let t=()=>({version:j3,remoteAvailable:Es(),daemonMode:Am==="daemon"&&Ut(),platform:process.platform,updateAvailable:ww(),canSelfUpdate:!0,...FS()}),n=()=>{let i=t();for(let s of r.sockets.sockets.values())s.data?.approved&&s.emit("serverInfo",i)};Tw(n),Gs._buildServerInfo=t,Gs._emitServerInfo=n}function XT(){Gs._emitServerInfo?.()}var ZT=null;function QT(r){ZT=r}async function eC(r,e,t){HS(),ZT?.(),r.emit("serverInfo",Gs._buildServerInfo?.()),QS(r,e,Xr,VT,KT,YT),rE(r,Xr),RT(r),$l()&&await jS(r,t).catch(n=>{console.error("\u274C Failed to setup remote handlers:",n.message)}),r.on("disconnect",()=>{ST(r.id),qS()})}var re=K(require("fs"),1),br=K(require("path"),1),Qr=K(require("os"),1),Zs=require("child_process"),cA=K(Qk(),1);var kg=["node_modules",".git","dist","build",".next","coverage","__pycache__",".cache",".vscode",".idea",".turbo",".vercel",".output","out",".nuxt",".svelte-kit","target","vendor",".gradle",".pytest_cache",".mypy_cache",".tox",".venv","venv","env",".DS_Store",".parcel-cache",".rollup.cache"],Gu=[".png",".jpg",".jpeg",".gif",".webp",".ico",".svg",".bmp",".pdf",".zip",".tar",".gz",".rar",".7z",".exe",".dll",".so",".dylib",".mp3",".mp4",".wav",".avi",".mov",".webm",".woff",".woff2",".ttf",".eot",".otf",".sqlite",".db"];var eA=[".ssh",".aws",".gnupg",".kube",".docker",".cargo",".npmrc",".netrc",".pypirc",".config/gh",".config/gcloud"],tA=["/etc/shadow","/etc/sudoers","/etc/ssh","/root","/private/etc/sudoers"];var rA=K(require("fs"),1),ka=K(require("path"),1),nA=K(require("os"),1);var iA=nA.default.homedir();function e$(r){if(!r)return null;let e=r.startsWith("~")?r.replace(/^~/,iA):r;try{return rA.default.realpathSync(e)}catch{return ka.default.resolve(e)}}function Tn(r){let e=e$(r);if(!e)return!1;for(let t of tA)if(e===t||e.startsWith(t+ka.default.sep))return!0;for(let t of eA){let n=ka.default.join(iA,t);if(e===n||e.startsWith(n+ka.default.sep))return!0}return!1}function zu(r){return kg.includes(r)}function Qs(r){return Gu.includes(br.default.extname(r).toLowerCase())}function r$(r,e){return r.isDirectory()?"folder":Qs(e)?"binary":"file"}function Aa(r){return r<1024?`${r}B`:r<1024*1024?`${(r/1024).toFixed(1)}KB`:`${(r/(1024*1024)).toFixed(1)}MB`}function lA(r,e,t,n=50){if(!(t.length>=n))try{for(let i of re.default.readdirSync(r)){if(t.length>=n)return;if(i.startsWith(".")||zu(i))continue;let s=br.default.join(r,i);try{let o=re.default.statSync(s);o.isDirectory()?lA(s,e,t,n):i.toLowerCase().includes(e.toLowerCase())&&t.push({name:i,path:s,type:Qs(i)?"binary":"file",size:o.size,sizeFormatted:Aa(o.size)})}catch{}}}catch{}}function aA(r){if(!r)return null;let e=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"::ANY::").replace(/\*/g,"[^/]*").replace(/::ANY::/g,".*").replace(/\?/g,".");return new RegExp(`^${e}$`)}function uA(r,e,t,n,i,s){if(s.length>=200)return;let o;try{o=re.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of o){if(s.length>=200)return;if(zu(a.name))continue;let c=br.default.join(r,a.name),l=br.default.relative(e,c);if(a.isDirectory()){uA(c,e,t,n,i,s);continue}if(a.isFile()&&!Qs(a.name)&&!(i&&i.test(l))&&!(n&&!n.test(l)))try{if(re.default.statSync(c).size>512e3)continue;let h=re.default.readFileSync(c,"utf-8").split(`
|
|
164
164
|
`),g=[];for(let x=0;x<h.length&&g.length<10;x++){let S=h[x],k=t(S);for(let R of k){if(g.length>=10)break;g.push({line:x+1,column:R.column+1,lineText:S,matchLength:R.length})}}g.length&&s.push({path:c,matches:g})}catch{}}}function pA(r,e,t){let n;try{n=re.default.readdirSync(r,{withFileTypes:!0})}catch{return[]}let i=[];for(let s of n){if(!t&&s.name.startsWith(".")&&s.name!==".env"&&s.name!==".env.example"||zu(s.name))continue;let o=br.default.join(r,s.name);if(s.isDirectory()){let a={name:s.name,path:o,type:"folder"};e>0&&(a.children=pA(o,e-1,t)),i.push(a)}else s.isFile()&&i.push({name:s.name,path:o,type:Qs(s.name)?"binary":"file"})}return i.sort((s,o)=>s.type==="folder"&&o.type!=="folder"?-1:s.type!=="folder"&&o.type==="folder"?1:s.name.localeCompare(o.name)),i}function n$(){if(process.platform!=="win32")return[];try{return(0,Zs.execSync)("wmic logicaldisk get name",{encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}).split(/\r?\n/).map(e=>e.trim()).filter(e=>/^[A-Z]:$/.test(e)).map(e=>({letter:e[0],path:e+"\\"}))}catch{return"CDEFGHIJ".split("").map(r=>`${r}:\\`).filter(r=>re.default.existsSync(r)).map(r=>({letter:r[0],path:r}))}}function fA(r){r.on("getSystemInfo",t=>{let n=process.platform;t({success:!0,platform:n,isWindows:n==="win32",drives:n==="win32"?n$():[],homedir:Qr.default.homedir()})}),r.on("getFiles",({dirPath:t,showHidden:n},i)=>{try{let s=t||Qr.default.homedir(),o=s.startsWith("~")?s.replace("~",Qr.default.homedir()):s;if(Tn(o))return i({success:!1,error:"Access denied"});if(!re.default.existsSync(o))return i({success:!1,error:"Directory not found"});let a=[];for(let c of re.default.readdirSync(o))if(!(!n&&c.startsWith(".")&&c!==".env"&&c!==".env.example")&&!zu(c))try{let l=br.default.join(o,c),u=re.default.statSync(l);a.push({name:c,path:l,type:r$(u,c),size:u.isFile()?u.size:null,sizeFormatted:u.isFile()?Aa(u.size):null,modified:u.mtime.getTime()})}catch{}a.sort((c,l)=>c.type==="folder"&&l.type!=="folder"?-1:c.type!=="folder"&&l.type==="folder"?1:c.name.localeCompare(l.name)),i({success:!0,files:a,currentPath:o,parentPath:br.default.dirname(o)})}catch(s){i({success:!1,error:s.message})}}),r.on("searchFiles",({workspace:t,query:n},i)=>{try{if(!n||n.length<2)return i({success:!0,files:[]});let s=(t||Qr.default.homedir()).replace(/^~/,Qr.default.homedir());if(!re.default.existsSync(s))return i({success:!1,error:"Workspace not found"});let o=[];lA(s,n,o,50),o.sort((a,c)=>{let l=a.name.toLowerCase()===n.toLowerCase(),u=c.name.toLowerCase()===n.toLowerCase();return l&&!u?-1:!l&&u?1:a.path.length-c.path.length}),i({success:!0,files:o})}catch(s){i({success:!1,error:s.message})}}),r.on("readFile",({filePath:t},n)=>{try{if(Tn(t))return n({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return n({success:!1,error:"File not found"});let i=re.default.statSync(t);if(i.size>512e3)return n({success:!1,error:`File too large (${Aa(i.size)}). Max ${Aa(512e3)}`});if(Qs(t))return n({success:!1,error:"Cannot open binary file"});n({success:!0,content:re.default.readFileSync(t,"utf-8")})}catch(i){n({success:!1,error:i.message})}}),r.on("readImage",({filePath:t},n)=>{try{if(Tn(t))return n({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return n({success:!1,error:"File not found"});let i=re.default.statSync(t),s=10*1024*1024;if(i.size>s)return n({success:!1,error:`Image too large (${Aa(i.size)})`});let o=br.default.extname(t).toLowerCase().slice(1),c={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp"}[o]||"application/octet-stream",l=re.default.readFileSync(t),u=`data:${c};base64,${l.toString("base64")}`;n({success:!0,dataUrl:u,size:i.size,mime:c})}catch(i){n({success:!1,error:i.message})}}),r.on("writeFile",({filePath:t,content:n},i)=>{try{if(Tn(t))return i({success:!1,error:"Access denied"});re.default.writeFileSync(t,n,"utf-8"),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("createItem",({itemPath:t,type:n},i)=>{try{if(Tn(t))return i({success:!1,error:"Access denied"});if(re.default.existsSync(t))return i({success:!1,error:"Item already exists"});n==="folder"?re.default.mkdirSync(t,{recursive:!0}):re.default.writeFileSync(t,"","utf-8"),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("deleteItem",({itemPath:t},n)=>{try{if(Tn(t))return n({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return n({success:!1,error:"Item not found"});re.default.statSync(t).isDirectory()?re.default.rmSync(t,{recursive:!0}):re.default.unlinkSync(t),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("renameItem",({oldPath:t,newPath:n},i)=>{try{if(Tn(t)||Tn(n))return i({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return i({success:!1,error:"Item not found"});if(re.default.existsSync(n))return i({success:!1,error:"Target already exists"});re.default.renameSync(t,n),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("searchInFiles",({workspace:t,query:n,caseSensitive:i,regex:s,includeGlob:o,excludeGlob:a},c)=>{try{if(!n)return c({success:!0,results:[]});let l=(t||Qr.default.homedir()).replace(/^~/,Qr.default.homedir());if(!re.default.existsSync(l))return c({success:!1,error:"Workspace not found"});let u;if(s){let x;try{x=new RegExp(n,i?"g":"gi")}catch(S){return c({success:!1,error:`Invalid regex: ${S.message}`})}u=S=>{let k=[],R;for(x.lastIndex=0;(R=x.exec(S))!==null;)k.push({column:R.index,length:R[0].length}),R.index===x.lastIndex&&x.lastIndex++;return k}}else{let x=i?n:n.toLowerCase();u=S=>{let k=i?S:S.toLowerCase(),R=[],M=0;for(;(M=k.indexOf(x,M))!==-1;)R.push({column:M,length:x.length}),M+=x.length||1;return R}}let f=aA(o),h=aA(a),g=[];uA(l,l,u,f,h,g),c({success:!0,results:g})}catch(l){c({success:!1,error:l.message})}}),r.on("replaceInFiles",({workspace:t,query:n,replacement:i,caseSensitive:s,regex:o,files:a},c)=>{try{if(!n||!Array.isArray(a)||!a.length)return c({success:!0,replacedCount:0,fileCount:0});let l;if(o){let h;try{h=new RegExp(n,s?"g":"gi")}catch(g){return c({success:!1,error:`Invalid regex: ${g.message}`})}l=g=>{let x=0;return{next:g.replace(h,k=>(x++,i)),count:x}}}else l=h=>{let g=0,x=s?"g":"gi",S=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),k=new RegExp(S,x);return{next:h.replace(k,()=>(g++,i)),count:g}};let u=0,f=0;for(let h of a)try{if(!re.default.existsSync(h)||Qs(h))continue;let g=re.default.statSync(h);if(!g.isFile()||g.size>512e3)continue;let x=re.default.readFileSync(h,"utf-8"),{next:S,count:k}=l(x);k>0&&(re.default.writeFileSync(h,S,"utf-8"),u+=k,f++)}catch{}c({success:!0,replacedCount:u,fileCount:f})}catch(l){c({success:!1,error:l.message})}});let e=new Map;r.on("watchDir",({dirPath:t},n)=>{try{if(!t||!re.default.existsSync(t))return n({success:!1,error:"Directory not found"});let i=e.get(t);if(i)return i.count++,n({success:!0});let s=cA.default.watch(t,{depth:0,ignoreInitial:!0,persistent:!0,ignored:a=>kg.includes(br.default.basename(a))}),o=a=>c=>r.emit("fileChange",{type:a,path:c});s.on("add",o("add")).on("change",o("change")).on("unlink",o("unlink")).on("addDir",o("addDir")).on("unlinkDir",o("unlinkDir")),e.set(t,{w:s,count:1}),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("unwatchDir",({dirPath:t},n)=>{try{let i=e.get(t);i&&--i.count<=0&&(i.w.close(),e.delete(t)),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.once("disconnect",()=>{for(let{w:t}of e.values())try{t.close()}catch{}e.clear()}),r.on("revealInOS",({filePath:t},n)=>{try{if(!t)return n({success:!1,error:"No path"});let i=process.platform,s,o;i==="darwin"?(s="open",o=["-R",t]):i==="win32"?(s="explorer",o=[`/select,${t}`]):(s="xdg-open",o=[br.default.dirname(t)]);let a=(0,Zs.spawn)(s,o,{detached:!0,stdio:"ignore",windowsHide:!0});a.on("error",c=>n({success:!1,error:c.message})),a.unref(),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("openInTerminal",({dirPath:t},n)=>{try{if(!t||!re.default.existsSync(t))return n({success:!1,error:"Directory not found"});let i=process.platform,s,o,a={detached:!0,stdio:"ignore",windowsHide:!0};i==="darwin"?(s="open",o=["-a","Terminal",t]):i==="win32"?(s="cmd",o=["/C","start","cmd","/K",`cd /d "${t}"`],a.shell=!1):(s="gnome-terminal",o=[`--working-directory=${t}`]);let c=(0,Zs.spawn)(s,o,a);c.on("error",()=>{if(i==="linux"){let l=(0,Zs.spawn)("xterm",["-e",`cd "${t}" && bash`],a);l.on("error",u=>n({success:!1,error:u.message})),l.unref()}else n({success:!1,error:"Failed to open terminal"})}),c.unref(),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("getFileTree",({dirPath:t,depth:n,showHidden:i},s)=>{try{let o=(t||Qr.default.homedir()).replace(/^~/,Qr.default.homedir());if(!re.default.existsSync(o))return s({success:!1,error:"Directory not found"});let c=pA(o,typeof n=="number"?n:3,!!i);s({success:!0,tree:{name:br.default.basename(o)||o,path:o,type:"folder",children:c}})}catch(o){s({success:!1,error:o.message})}})}var Gt=K(require("fs"),1),ki=K(require("path"),1),wr=require("child_process");function Ci(r,e){return new Promise(t=>{let n=(0,wr.spawn)("git",r,{cwd:e,windowsHide:!0}),i="",s="";n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.on("error",o=>t({code:-1,stdout:i,stderr:o.message})),n.on("close",o=>t({code:o,stdout:i,stderr:s}))})}function dA(r){return Gu.includes(ki.default.extname(r).toLowerCase())}function hA(r){r.on("gitStatus",({repoPath:e},t)=>{try{let n=(0,wr.execSync)("git status --porcelain",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}),i={};try{(0,wr.execSync)("git diff HEAD --numstat",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}).trim().split(`
|
|
165
165
|
`).filter(Boolean).forEach(a=>{let c=a.split(" ");c.length>=3&&(i[c[2]]={added:c[0]==="-"?0:parseInt(c[0],10)||0,deleted:c[1]==="-"?0:parseInt(c[1],10)||0})})}catch{}let s=[];for(let o of n.trim().split(`
|
|
166
166
|
`).filter(Boolean)){let a=o.match(/^([MADRCU?! ]{1,2})\s+(.+)$/);if(!a)continue;let c=a[1],l=a[2];if(!l)continue;let u;c.includes("?")?u="?":c.includes("A")?u="A":c.includes("D")?u="D":c.includes("M")?u="M":c.includes("R")?u="R":u=c.trim()[0]||"?";let f=i[l]||{added:0,deleted:0};if(u==="?")try{let h=ki.default.join(e,l);if(Gt.default.existsSync(h)&&!dA(l)){let g=Gt.default.readFileSync(h,"utf-8");f.added=g.split(`
|
|
@@ -291,8 +291,8 @@ self.addEventListener('fetch', (event) => {
|
|
|
291
291
|
</body>
|
|
292
292
|
</html>
|
|
293
293
|
`);return}e._proxyTargetPort=n,e.url=i+(s||""),r.web(e,t,{target:`http://localhost:${n}`,changeOrigin:!0},o=>{t.writeHead(502),t.end(`Bad Gateway: ${o.message}`)})}var kR=K(require("http"),1),AR=K(require("https"),1),RR=require("child_process"),OR=require("util"),q$=(0,OR.promisify)(RR.exec);async function U$(){let r=process.platform,e=new Set([80,443]);try{let t;if(r==="win32")t="netstat -ano | findstr LISTENING";else{let s="/dev/null";t=`lsof -iTCP -sTCP:LISTEN -P -n 2>${s} || netstat -tlnp 2>${s}`}let{stdout:n}=await q$(t),i=n.split(`
|
|
294
|
-
`);for(let s of i){let o=s.match(/[:\*\]](\d{2,5})(?:\s|$)/g);if(o)for(let a of o){let c=parseInt(a.replace(/[:\*\]\s]/g,""),10);c>0&&c<=65535&&(c===80||c===443||c>=1024)&&e.add(c)}}return Array.from(e)}catch(t){return console.error("Failed to get listening ports:",t.message),[80,443,3e3,3001,4200,5e3,5173,8e3,8080,9e3]}}function $$(r,e=2e3){return new Promise(t=>{let n=kR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"http",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}function W$(r,e=2e3){return new Promise(t=>{let n=AR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e,rejectUnauthorized:!1},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"https",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}async function G$(r){let[e,t]=await Promise.all([$$(r),W$(r)]);return t.active?{port:r,...t}:e.active?{port:r,...e}:{port:r,active:!1}}async function MR(){let r=await U$();return(await Promise.all(r.map(t=>G$(t)))).filter(t=>t.active).map(t=>({port:t.port,protocol:t.protocol,url:`${t.protocol}://localhost:${t.port}`,name:`localhost:${t.port}`,status:t.status})).sort((t,n)=>t.port-n.port)}var PR=K(require("crypto"),1),z$=process.env.API_KEY_SECRET||"9remote-api-key-secret";function V$(){let r="abcdefghijklmnopqrstuvwxyz0123456789",e="";for(let t=0;t<4;t++)e+=r.charAt(Math.floor(Math.random()*r.length));return e}function IR(r,e){return PR.default.createHmac("sha256",z$).update(r+e).digest("hex").slice(0,6)}function NR(r){let e=r.slice(0,8),t=V$(),n=IR(e,t);return{key:`sk-${e}-${t}-${n}`,keyId:t}}function K$(r){if(!r||!r.startsWith("sk-"))return null;let e=r.split("-");if(e.length===4){let[,t,n,i]=e,s=IR(t,n);return i!==s?null:{machineId:t,keyId:n}}return null}function rp(r){return K$(r)!==null}async function DR(r,e){let t=r.headers.authorization;if(!t||!t.startsWith("Bearer ")){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Missing API key"}));return}let n=t.slice(7);if(!rp(n)){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Invalid API key"}));return}let i=await MR();e.setHeader("Content-Type","application/json"),e.writeHead(200),e.end(JSON.stringify(i))}dl();var jR=require("url");var np=K(require("path"),1),FR=K(require("os"),1);bt();var LR=K(require("path"),1),BR=K(require("os"),1);var HV=LR.default.join(BR.default.homedir(),".9remote","pids");nh();var Fa={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"};var $V={orange:ao.rgb(230,138,110),orangeDim:ao.rgb(200,120,95)};var XV=np.default.dirname((0,jR.fileURLToPath)(__importMetaUrl));var ZV=np.default.join(FR.default.homedir(),".9remote","cloudflared.pid");function HR(r,e){let t=r.split(".").map(Number),n=e.split(".").map(Number);for(let i=0;i<3;i++){if(n[i]>t[i])return!0;if(n[i]<t[i])return!1}return!1}var QV=np.default.join(ie.STATE,Fa.lockFile);yn();Lt();bt();xs();var UR=K(qR(),1),Yg=K(require("crypto"),1),{machineIdSync:Y$}=UR.default;async function $R(r=null){let e=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=Y$();return Yg.default.createHash("sha256").update(t+e).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),Yg.default.randomUUID().replace(/-/g,"").substring(0,16)}}yn();async function WR(r,e){let t=_w(),n=t.workerUrl||"https://9remote.cc";if(!t.permanentKey){le(e,400,"No permanent key set");return}try{let s=await(await po(`${n}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.permanentKey,expiryMinutes:30})})).json(),o=`${n}/login?k=${s.tempKey}`;vn({oneTimeKey:s.tempKey,oneTimeKeyExpiresAt:s.expiresAt,qrUrl:o}),X(e,{oneTimeKey:s.tempKey,expiresAt:s.expiresAt,qrUrl:o})}catch(i){le(e,500,i.message)}}async function GR(r,e){try{let t=await $R(),{key:n}=NR(t),i=ew();tw(t,n,i?.name||"Default"),vn({permanentKey:n}),X(e,{ok:!0,permanentKey:n})}catch(t){le(e,500,t.message)}}Lt();async function zR(r,e){let t=await Dt(r,e);if(!t)return;let n=DA(t.socketId);X(e,{ok:n})}async function VR(r,e){let t=await Dt(r,e);if(!t)return;let n=BA(t.socketId);X(e,{ok:n})}function KR(r,e){X(e,{pending:CA()})}function YR(r,e){X(e,{devices:SA()})}function JR(r,e){X(e,{rejected:OA()})}async function XR(r,e){let t=await Dt(r,e);if(!t)return;let n=LA(t.deviceId);X(e,{ok:n})}async function ZR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),ro(t.deviceId),X(e))}async function QR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),bA(t.deviceId),X(e))}async function eO(r,e){let t=await Dt(r,e);if(!t)return;let n=Xu(t.deviceId);X(e,{disconnected:n})}function tO(r,e){X(e,{enabled:Ju()})}async function rO(r,e){let t=await Dt(r,e);if(!t)return;let n=wA(t.deviceId,t.label);X(e,{ok:n})}async function nO(r,e){let t=await Dt(r,e);if(!t)return;let n=PA(!!t.enabled);X(e,{enabled:n})}Lt();hi();var iO={},J$=1e4;function sO(r,e){if(e)return{type:e.type||"stop",sessionId:e.sessionId||"",tool:e.tool||"claude"};let t=JSON.parse(r||"{}");return{type:t.type||"stop",sessionId:t.sessionId||"",tool:t.tool||"claude"}}async function oO(r,e){let t="";await new Promise(n=>{r.on("data",i=>t+=i),r.on("end",n)});try{cO(sO(t,null)),X(e,{success:!0})}catch{le(e,400,"Invalid JSON")}}function aO(r,e,{query:t}){cO(sO(null,t)),X(e,{success:!0})}function cO({type:r,sessionId:e,tool:t}){let n=Date.now(),i=Ma();if(!i||!e)return;let s={type:r,sessionId:e,tool:t,timestamp:n};kT(e,s),yt(i,"chatNotification",s);let o=`${e}:${r}`;n-(iO[o]||0)<J$||(iO[o]=n,TT(s))}Lt();Tl();xs();pt();yn();function lO(){return{mode:lh(),active:ch(),presets:Object.keys($.sleepInhibit?.presets||{})}}function uO(r,e){X(e,lO())}async function pO(r,e){let t=await Dt(r,e);if(!t)return;let n=Yo(t.mode);Qb({sleepInhibitMode:n});let i=lO();Et("sleepInhibit",i),X(e,i)}Lt();async function fO(r,e){try{let t=await Dl();X(e,{sessions:t})}catch(t){le(e,500,t.message)}}async function dO(r,e){let t=await Dt(r,e);if(t){if(!t.sessionId)return le(e,400,"sessionId required");try{await mi(t.sessionId),X(e)}catch(n){le(e,500,n.message)}}}var An=K(require("os"),1);pt();Lt();function X$(){let r=IS();if(!r?.activeClients)return{total:0,streaming:0};let e=0;for(let t of r.activeClients.values())t.isStreaming&&e++;return{total:r.activeClients.size,streaming:e}}function Z$(){let r=process.memoryUsage(),e=An.default.cpus();return{agent:{pid:process.pid,version:"2.0.78",nodeVersion:process.version,platform:`${process.platform}/${process.arch}`,uptimeSec:Math.round(process.uptime()),memory:{heapUsedMB:Math.round(r.heapUsed/1048576*10)/10,heapTotalMB:Math.round(r.heapTotal/1048576*10)/10,rssMB:Math.round(r.rss/1048576*10)/10,externalMB:Math.round(r.external/1048576*10)/10}},os:{hostname:An.default.hostname(),platform:An.default.platform(),arch:An.default.arch(),uptimeSec:Math.round(An.default.uptime()),loadAvg:An.default.loadavg(),cpuModel:e?.[0]?.model||"unknown",cpuCount:e.length,totalMemMB:Math.round(An.default.totalmem()/1048576),freeMemMB:Math.round(An.default.freemem()/1048576)},remote:{available:$l(),...X$(),memoryWarningThresholdMB:$.resourceManagement.memoryWarningThreshold},timestamp:Date.now()}}function hO(r,e){try{X(e,Z$())}catch(t){le(e,500,"stats error",t.message)}}Tl();xs();pt();Dv();var Kn=On("server"),Yn=(0,yO.fileURLToPath)(new URL(".",__importMetaUrl)),xO=process.env.NODE_ENV==="development",Q$=5173,Jg=(0,Ii.existsSync)((0,rr.join)(Yn,"ui","dist"))?(0,rr.join)(Yn,"ui","dist"):(0,rr.join)(Yn,"ui"),e4={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".ico":"image/x-icon",".woff2":"font/woff2",".woff":"font/woff"};function t4(r,e,t){let n=(0,ip.request)({hostname:"localhost",port:Q$,path:r.url,method:r.method,headers:r.headers},i=>{e.writeHead(i.statusCode,i.headers),i.pipe(e)});n.on("error",()=>t?t():void(e.writeHead(502),e.end("Vite dev server not ready"))),r.pipe(n)}function mO(r,e){if(!(0,Ii.existsSync)(e))return!1;let t=e4[(0,rr.extname)(e)]||"application/octet-stream";return r.setHeader("Content-Type",t),r.writeHead(200),r.end((0,Ii.readFileSync)(e)),!0}async function Xg(r){try{let e=await po(Op);if(!e.ok)return;let{version:t}=await e.json();t&&HR(r,t)&&(Sw({version:t}),Et("updateAvailable",{version:t}),XT())}catch{}}var gO=0;function r4(r){let e=Date.now();e-gO<Fa.connectCheckDebounceMs||(gO=e,Xg(r))}function n4(r,e){if(process.env.CODESPACES!=="true"){le(e,400,"Not running on Codespaces");return}let t=process.env.CODESPACE_NAME;if(!t){le(e,400,"Codespace name not found");return}let n=Ma();n&&n.emit("codespace:stopping"),X(e,{success:!0,message:"Stopping codespace..."}),setTimeout(()=>(0,Pi.execFile)("gh",["codespace","stop","-c",t],{windowsHide:!0}),500)}var _O;async function vO(r,e,{pathname:t}){let n=r.headers.authorization;if(!n||!n.startsWith("Bearer ")||!rp(n.slice(7))){le(e,401,"Unauthorized");return}let{parseJsonBody:i}=await Promise.resolve().then(()=>(Lt(),Li)),s=await i(r,e);if(s){if(!s.port){le(e,400,"Port required");return}t.endsWith("start")?SR(s.port):ER(s.port),X(e,{success:!0})}}function i4(r,e,{pathname:t,search:n}){let i=t.match(/^\/proxy\/(\d+)(\/.*)?$/);i?CR(_O,r,e,i[1],i[2]||"/",n):le(e,404,"Not found")}var s4=[{path:"/api/health",method:"GET",public:!0,handler:(r,e)=>X(e,{status:"ok",timestamp:Date.now()})},{path:"/api/version",method:"GET",public:!0,handler:(r,e)=>{X(e,{version:"2.0.78"})}},{path:"/api/notify",method:"POST",public:!0,handler:oO},{path:"/api/notify",method:"GET",public:!0,handler:aO},{path:"/proxy/*",method:"*",public:!0,handler:i4},{path:"/api/ui/events",method:"GET",handler:Ow},{path:"/api/local-token",method:"GET",handler:Cw},{path:"/api/ui/state",method:"GET",handler:Mw},{path:"/api/ui/state",method:"POST",handler:Pw},{path:"/api/ui/stop",method:"POST",handler:Iw},{path:"/api/ui/start",method:"POST",handler:Nw},{path:"/api/ui/stop-tunnel",method:"POST",handler:Dw},{path:"/api/ui/shutdown",method:"POST",handler:Lw},{path:"/api/update",method:"POST",handler:Bw},{path:"/api/system/stats",method:"GET",handler:hO},{path:"/api/key/one-time",method:"POST",handler:WR},{path:"/api/key/regenerate",method:"POST",handler:GR},{path:"/api/device/approve",method:"POST",handler:zR},{path:"/api/device/reject",method:"POST",handler:VR},{path:"/api/device/pending",method:"GET",handler:KR},{path:"/api/device/approved",method:"GET",handler:YR},{path:"/api/device/rejected",method:"GET",handler:JR},{path:"/api/device/approve-rejected",method:"POST",handler:XR},{path:"/api/device/clear-rejected",method:"POST",handler:ZR},{path:"/api/device/remove",method:"POST",handler:QR},{path:"/api/device/label",method:"POST",handler:rO},{path:"/api/device/disconnect",method:"POST",handler:eO},{path:"/api/device/auto-approve",method:"GET",handler:tO},{path:"/api/device/auto-approve",method:"POST",handler:nO},{path:"/api/connections",method:"GET",handler:jw},{path:"/api/logs",method:"GET",handler:Fw},{path:"/api/permissions",method:"GET",handler:qw},{path:"/api/permissions/request",method:"POST",handler:Ww},{path:"/api/desktop/toggle",method:"POST",handler:Hw},{path:"/api/autostart",method:"GET",handler:Uw},{path:"/api/autostart",method:"POST",handler:$w},{path:"/api/sleep-inhibit",method:"GET",handler:uO},{path:"/api/sleep-inhibit",method:"POST",handler:pO},{path:"/api/sessions",method:"GET",handler:fO},{path:"/api/sessions/delete",method:"POST",handler:dO},{path:"/api/local-sites",method:"*",public:!0,handler:DR},{path:"/api/codespace/stop",method:"POST",handler:n4},{path:"/api/proxy/start",method:"POST",public:!0,handler:vO},{path:"/api/proxy/end",method:"POST",public:!0,handler:vO}];var o4=parseInt(process.env.PORT||"2208",10),qa=null;function a4(r){if(process.platform!=="win32")try{let e=(0,Pi.execSync)(`pgrep -f "vite --config ${r}"`,{encoding:"utf8"}).trim();for(let t of e.split(`
|
|
295
|
-
`).filter(Boolean))if((0,Pi.execSync)(`ps -o ppid= -p ${t}`,{encoding:"utf8"}).trim()==="1")try{process.kill(Number(t))}catch{}}catch{}}function c4(){if(!xO)return;let r=(0,rr.join)(Yn,"vite.config.js");if(!(0,Ii.existsSync)(r))return;a4(r);let e=(0,Ii.existsSync)((0,rr.join)(Yn,"node_modules",".bin","vite"))?(0,rr.join)(Yn,"node_modules",".bin","vite"):(0,rr.join)(Yn,"..","node_modules",".bin","vite");qa=(0,Pi.spawn)("node",[e,"--config",r],{cwd:Yn,stdio:"ignore",detached:!1}),qa.on("error",()=>{}),qa.unref()}async function bO(){let r=eh(),e=r.sleepInhibitMode;e||(r.sleepInhibit===!1?e="never":e=$.sleepInhibit?.defaultMode||"never"),Yo(e),await JT(),_O=TR(),c4();let n=Ap(s4,{fallback:(a,c,{pathname:l})=>{if(l.startsWith("/api/")||l.startsWith("/socket.io")){le(c,404,"Not found");return}let u=!!a.headers["cf-connecting-ip"],f=a.socket.remoteAddress==="127.0.0.1"||a.socket.remoteAddress==="::1";if(u||!f){le(c,403,"Forbidden");return}let h=()=>{let g=l==="/"||l===""?(0,rr.join)(Jg,"index.html"):(0,rr.join)(Jg,l);mO(c,g)||mO(c,(0,rr.join)(Jg,"index.html"))};if(xO){t4(a,c,h);return}h()}}),i=(0,ip.createServer)(async(a,c)=>{FA(c),!HA(a,c)&&await n(a,c)});Yd(),yw(),xw(),Al(),process.platform==="darwin"&&setInterval(Al,Av),await jA(i),i.listen(o4,a=>{if(a)throw a;let c="2.0.
|
|
294
|
+
`);for(let s of i){let o=s.match(/[:\*\]](\d{2,5})(?:\s|$)/g);if(o)for(let a of o){let c=parseInt(a.replace(/[:\*\]\s]/g,""),10);c>0&&c<=65535&&(c===80||c===443||c>=1024)&&e.add(c)}}return Array.from(e)}catch(t){return console.error("Failed to get listening ports:",t.message),[80,443,3e3,3001,4200,5e3,5173,8e3,8080,9e3]}}function $$(r,e=2e3){return new Promise(t=>{let n=kR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"http",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}function W$(r,e=2e3){return new Promise(t=>{let n=AR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e,rejectUnauthorized:!1},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"https",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}async function G$(r){let[e,t]=await Promise.all([$$(r),W$(r)]);return t.active?{port:r,...t}:e.active?{port:r,...e}:{port:r,active:!1}}async function MR(){let r=await U$();return(await Promise.all(r.map(t=>G$(t)))).filter(t=>t.active).map(t=>({port:t.port,protocol:t.protocol,url:`${t.protocol}://localhost:${t.port}`,name:`localhost:${t.port}`,status:t.status})).sort((t,n)=>t.port-n.port)}var PR=K(require("crypto"),1),z$=process.env.API_KEY_SECRET||"9remote-api-key-secret";function V$(){let r="abcdefghijklmnopqrstuvwxyz0123456789",e="";for(let t=0;t<4;t++)e+=r.charAt(Math.floor(Math.random()*r.length));return e}function IR(r,e){return PR.default.createHmac("sha256",z$).update(r+e).digest("hex").slice(0,6)}function NR(r){let e=r.slice(0,8),t=V$(),n=IR(e,t);return{key:`sk-${e}-${t}-${n}`,keyId:t}}function K$(r){if(!r||!r.startsWith("sk-"))return null;let e=r.split("-");if(e.length===4){let[,t,n,i]=e,s=IR(t,n);return i!==s?null:{machineId:t,keyId:n}}return null}function rp(r){return K$(r)!==null}async function DR(r,e){let t=r.headers.authorization;if(!t||!t.startsWith("Bearer ")){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Missing API key"}));return}let n=t.slice(7);if(!rp(n)){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Invalid API key"}));return}let i=await MR();e.setHeader("Content-Type","application/json"),e.writeHead(200),e.end(JSON.stringify(i))}dl();var jR=require("url");var np=K(require("path"),1),FR=K(require("os"),1);bt();var LR=K(require("path"),1),BR=K(require("os"),1);var HV=LR.default.join(BR.default.homedir(),".9remote","pids");nh();var Fa={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"};var $V={orange:ao.rgb(230,138,110),orangeDim:ao.rgb(200,120,95)};var XV=np.default.dirname((0,jR.fileURLToPath)(__importMetaUrl));var ZV=np.default.join(FR.default.homedir(),".9remote","cloudflared.pid");function HR(r,e){let t=r.split(".").map(Number),n=e.split(".").map(Number);for(let i=0;i<3;i++){if(n[i]>t[i])return!0;if(n[i]<t[i])return!1}return!1}var QV=np.default.join(ie.STATE,Fa.lockFile);yn();Lt();bt();xs();var UR=K(qR(),1),Yg=K(require("crypto"),1),{machineIdSync:Y$}=UR.default;async function $R(r=null){let e=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=Y$();return Yg.default.createHash("sha256").update(t+e).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),Yg.default.randomUUID().replace(/-/g,"").substring(0,16)}}yn();async function WR(r,e){let t=_w(),n=t.workerUrl||"https://9remote.cc";if(!t.permanentKey){le(e,400,"No permanent key set");return}try{let s=await(await po(`${n}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.permanentKey,expiryMinutes:30})})).json(),o=`${n}/login?k=${s.tempKey}`;vn({oneTimeKey:s.tempKey,oneTimeKeyExpiresAt:s.expiresAt,qrUrl:o}),X(e,{oneTimeKey:s.tempKey,expiresAt:s.expiresAt,qrUrl:o})}catch(i){le(e,500,i.message)}}async function GR(r,e){try{let t=await $R(),{key:n}=NR(t),i=ew();tw(t,n,i?.name||"Default"),vn({permanentKey:n}),X(e,{ok:!0,permanentKey:n})}catch(t){le(e,500,t.message)}}Lt();async function zR(r,e){let t=await Dt(r,e);if(!t)return;let n=DA(t.socketId);X(e,{ok:n})}async function VR(r,e){let t=await Dt(r,e);if(!t)return;let n=BA(t.socketId);X(e,{ok:n})}function KR(r,e){X(e,{pending:CA()})}function YR(r,e){X(e,{devices:SA()})}function JR(r,e){X(e,{rejected:OA()})}async function XR(r,e){let t=await Dt(r,e);if(!t)return;let n=LA(t.deviceId);X(e,{ok:n})}async function ZR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),ro(t.deviceId),X(e))}async function QR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),bA(t.deviceId),X(e))}async function eO(r,e){let t=await Dt(r,e);if(!t)return;let n=Xu(t.deviceId);X(e,{disconnected:n})}function tO(r,e){X(e,{enabled:Ju()})}async function rO(r,e){let t=await Dt(r,e);if(!t)return;let n=wA(t.deviceId,t.label);X(e,{ok:n})}async function nO(r,e){let t=await Dt(r,e);if(!t)return;let n=PA(!!t.enabled);X(e,{enabled:n})}Lt();hi();var iO={},J$=1e4;function sO(r,e){if(e)return{type:e.type||"stop",sessionId:e.sessionId||"",tool:e.tool||"claude"};let t=JSON.parse(r||"{}");return{type:t.type||"stop",sessionId:t.sessionId||"",tool:t.tool||"claude"}}async function oO(r,e){let t="";await new Promise(n=>{r.on("data",i=>t+=i),r.on("end",n)});try{cO(sO(t,null)),X(e,{success:!0})}catch{le(e,400,"Invalid JSON")}}function aO(r,e,{query:t}){cO(sO(null,t)),X(e,{success:!0})}function cO({type:r,sessionId:e,tool:t}){let n=Date.now(),i=Ma();if(!i||!e)return;let s={type:r,sessionId:e,tool:t,timestamp:n};kT(e,s),yt(i,"chatNotification",s);let o=`${e}:${r}`;n-(iO[o]||0)<J$||(iO[o]=n,TT(s))}Lt();Tl();xs();pt();yn();function lO(){return{mode:lh(),active:ch(),presets:Object.keys($.sleepInhibit?.presets||{})}}function uO(r,e){X(e,lO())}async function pO(r,e){let t=await Dt(r,e);if(!t)return;let n=Yo(t.mode);Qb({sleepInhibitMode:n});let i=lO();Et("sleepInhibit",i),X(e,i)}Lt();async function fO(r,e){try{let t=await Dl();X(e,{sessions:t})}catch(t){le(e,500,t.message)}}async function dO(r,e){let t=await Dt(r,e);if(t){if(!t.sessionId)return le(e,400,"sessionId required");try{await mi(t.sessionId),X(e)}catch(n){le(e,500,n.message)}}}var An=K(require("os"),1);pt();Lt();function X$(){let r=IS();if(!r?.activeClients)return{total:0,streaming:0};let e=0;for(let t of r.activeClients.values())t.isStreaming&&e++;return{total:r.activeClients.size,streaming:e}}function Z$(){let r=process.memoryUsage(),e=An.default.cpus();return{agent:{pid:process.pid,version:"2.0.80",nodeVersion:process.version,platform:`${process.platform}/${process.arch}`,uptimeSec:Math.round(process.uptime()),memory:{heapUsedMB:Math.round(r.heapUsed/1048576*10)/10,heapTotalMB:Math.round(r.heapTotal/1048576*10)/10,rssMB:Math.round(r.rss/1048576*10)/10,externalMB:Math.round(r.external/1048576*10)/10}},os:{hostname:An.default.hostname(),platform:An.default.platform(),arch:An.default.arch(),uptimeSec:Math.round(An.default.uptime()),loadAvg:An.default.loadavg(),cpuModel:e?.[0]?.model||"unknown",cpuCount:e.length,totalMemMB:Math.round(An.default.totalmem()/1048576),freeMemMB:Math.round(An.default.freemem()/1048576)},remote:{available:$l(),...X$(),memoryWarningThresholdMB:$.resourceManagement.memoryWarningThreshold},timestamp:Date.now()}}function hO(r,e){try{X(e,Z$())}catch(t){le(e,500,"stats error",t.message)}}Tl();xs();pt();Dv();var Kn=On("server"),Yn=(0,yO.fileURLToPath)(new URL(".",__importMetaUrl)),xO=process.env.NODE_ENV==="development",Q$=5173,Jg=(0,Ii.existsSync)((0,rr.join)(Yn,"ui","dist"))?(0,rr.join)(Yn,"ui","dist"):(0,rr.join)(Yn,"ui"),e4={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".ico":"image/x-icon",".woff2":"font/woff2",".woff":"font/woff"};function t4(r,e,t){let n=(0,ip.request)({hostname:"localhost",port:Q$,path:r.url,method:r.method,headers:r.headers},i=>{e.writeHead(i.statusCode,i.headers),i.pipe(e)});n.on("error",()=>t?t():void(e.writeHead(502),e.end("Vite dev server not ready"))),r.pipe(n)}function mO(r,e){if(!(0,Ii.existsSync)(e))return!1;let t=e4[(0,rr.extname)(e)]||"application/octet-stream";return r.setHeader("Content-Type",t),r.writeHead(200),r.end((0,Ii.readFileSync)(e)),!0}async function Xg(r){try{let e=await po(Op);if(!e.ok)return;let{version:t}=await e.json();t&&HR(r,t)&&(Sw({version:t}),Et("updateAvailable",{version:t}),XT())}catch{}}var gO=0;function r4(r){let e=Date.now();e-gO<Fa.connectCheckDebounceMs||(gO=e,Xg(r))}function n4(r,e){if(process.env.CODESPACES!=="true"){le(e,400,"Not running on Codespaces");return}let t=process.env.CODESPACE_NAME;if(!t){le(e,400,"Codespace name not found");return}let n=Ma();n&&n.emit("codespace:stopping"),X(e,{success:!0,message:"Stopping codespace..."}),setTimeout(()=>(0,Pi.execFile)("gh",["codespace","stop","-c",t],{windowsHide:!0}),500)}var _O;async function vO(r,e,{pathname:t}){let n=r.headers.authorization;if(!n||!n.startsWith("Bearer ")||!rp(n.slice(7))){le(e,401,"Unauthorized");return}let{parseJsonBody:i}=await Promise.resolve().then(()=>(Lt(),Li)),s=await i(r,e);if(s){if(!s.port){le(e,400,"Port required");return}t.endsWith("start")?SR(s.port):ER(s.port),X(e,{success:!0})}}function i4(r,e,{pathname:t,search:n}){let i=t.match(/^\/proxy\/(\d+)(\/.*)?$/);i?CR(_O,r,e,i[1],i[2]||"/",n):le(e,404,"Not found")}var s4=[{path:"/api/health",method:"GET",public:!0,handler:(r,e)=>X(e,{status:"ok",timestamp:Date.now()})},{path:"/api/version",method:"GET",public:!0,handler:(r,e)=>{X(e,{version:"2.0.80"})}},{path:"/api/notify",method:"POST",public:!0,handler:oO},{path:"/api/notify",method:"GET",public:!0,handler:aO},{path:"/proxy/*",method:"*",public:!0,handler:i4},{path:"/api/ui/events",method:"GET",handler:Ow},{path:"/api/local-token",method:"GET",handler:Cw},{path:"/api/ui/state",method:"GET",handler:Mw},{path:"/api/ui/state",method:"POST",handler:Pw},{path:"/api/ui/stop",method:"POST",handler:Iw},{path:"/api/ui/start",method:"POST",handler:Nw},{path:"/api/ui/stop-tunnel",method:"POST",handler:Dw},{path:"/api/ui/shutdown",method:"POST",handler:Lw},{path:"/api/update",method:"POST",handler:Bw},{path:"/api/system/stats",method:"GET",handler:hO},{path:"/api/key/one-time",method:"POST",handler:WR},{path:"/api/key/regenerate",method:"POST",handler:GR},{path:"/api/device/approve",method:"POST",handler:zR},{path:"/api/device/reject",method:"POST",handler:VR},{path:"/api/device/pending",method:"GET",handler:KR},{path:"/api/device/approved",method:"GET",handler:YR},{path:"/api/device/rejected",method:"GET",handler:JR},{path:"/api/device/approve-rejected",method:"POST",handler:XR},{path:"/api/device/clear-rejected",method:"POST",handler:ZR},{path:"/api/device/remove",method:"POST",handler:QR},{path:"/api/device/label",method:"POST",handler:rO},{path:"/api/device/disconnect",method:"POST",handler:eO},{path:"/api/device/auto-approve",method:"GET",handler:tO},{path:"/api/device/auto-approve",method:"POST",handler:nO},{path:"/api/connections",method:"GET",handler:jw},{path:"/api/logs",method:"GET",handler:Fw},{path:"/api/permissions",method:"GET",handler:qw},{path:"/api/permissions/request",method:"POST",handler:Ww},{path:"/api/desktop/toggle",method:"POST",handler:Hw},{path:"/api/autostart",method:"GET",handler:Uw},{path:"/api/autostart",method:"POST",handler:$w},{path:"/api/sleep-inhibit",method:"GET",handler:uO},{path:"/api/sleep-inhibit",method:"POST",handler:pO},{path:"/api/sessions",method:"GET",handler:fO},{path:"/api/sessions/delete",method:"POST",handler:dO},{path:"/api/local-sites",method:"*",public:!0,handler:DR},{path:"/api/codespace/stop",method:"POST",handler:n4},{path:"/api/proxy/start",method:"POST",public:!0,handler:vO},{path:"/api/proxy/end",method:"POST",public:!0,handler:vO}];var o4=parseInt(process.env.PORT||"2208",10),qa=null;function a4(r){if(process.platform!=="win32")try{let e=(0,Pi.execSync)(`pgrep -f "vite --config ${r}"`,{encoding:"utf8"}).trim();for(let t of e.split(`
|
|
295
|
+
`).filter(Boolean))if((0,Pi.execSync)(`ps -o ppid= -p ${t}`,{encoding:"utf8"}).trim()==="1")try{process.kill(Number(t))}catch{}}catch{}}function c4(){if(!xO)return;let r=(0,rr.join)(Yn,"vite.config.js");if(!(0,Ii.existsSync)(r))return;a4(r);let e=(0,Ii.existsSync)((0,rr.join)(Yn,"node_modules",".bin","vite"))?(0,rr.join)(Yn,"node_modules",".bin","vite"):(0,rr.join)(Yn,"..","node_modules",".bin","vite");qa=(0,Pi.spawn)("node",[e,"--config",r],{cwd:Yn,stdio:"ignore",detached:!1}),qa.on("error",()=>{}),qa.unref()}async function bO(){let r=eh(),e=r.sleepInhibitMode;e||(r.sleepInhibit===!1?e="never":e=$.sleepInhibit?.defaultMode||"never"),Yo(e),await JT(),_O=TR(),c4();let n=Ap(s4,{fallback:(a,c,{pathname:l})=>{if(l.startsWith("/api/")||l.startsWith("/socket.io")){le(c,404,"Not found");return}let u=!!a.headers["cf-connecting-ip"],f=a.socket.remoteAddress==="127.0.0.1"||a.socket.remoteAddress==="::1";if(u||!f){le(c,403,"Forbidden");return}let h=()=>{let g=l==="/"||l===""?(0,rr.join)(Jg,"index.html"):(0,rr.join)(Jg,l);mO(c,g)||mO(c,(0,rr.join)(Jg,"index.html"))};if(xO){t4(a,c,h);return}h()}}),i=(0,ip.createServer)(async(a,c)=>{FA(c),!HA(a,c)&&await n(a,c)});Yd(),yw(),xw(),Al(),process.platform==="darwin"&&setInterval(Al,Av),await jA(i),i.listen(o4,a=>{if(a)throw a;let c="2.0.80";Xg(c),setInterval(()=>Xg(c),Fa.checkIntervalMs),QT(()=>r4(c))});let s=!1,o=async a=>{if(s)return;s=!0,ah(),Kn.info(`\u{1F6D1} Received ${a}, shutting down gracefully...`);let c=setTimeout(()=>{Kn.error("\u26A0\uFE0F Forced exit"),process.exit(1)},5e3);try{if(i.close(()=>Kn.info("\u2713 HTTP server closed")),qa)try{qa.kill()}catch{}let l=Ma();l&&(l.emit("server:shutdown"),l.close(()=>Kn.info("\u2713 Socket.IO closed"))),await new Promise(u=>setTimeout(u,500)),clearTimeout(c),Kn.info("\u2705 Server stopped cleanly"),process.exit(0)}catch(l){Kn.error(`\u274C Error during shutdown: ${l?.message||l}`),clearTimeout(c),process.exit(1)}};return process.on("SIGINT",()=>o("SIGINT")),process.on("SIGTERM",()=>o("SIGTERM")),process.platform==="win32"&&process.on("SIGBREAK",()=>o("SIGBREAK")),process.on("uncaughtException",a=>{Kn.error(`\u26A0\uFE0F uncaughtException: ${a?.stack||a}`)}),process.on("unhandledRejection",a=>{Kn.error(`\u26A0\uFE0F unhandledRejection: ${a?.stack||a}`)}),i}bO();0&&(module.exports={startServer});
|
|
296
296
|
/*! Bundled license information:
|
|
297
297
|
|
|
298
298
|
negotiator/index.js:
|