@linzumi/cli 1.0.26 → 1.0.28
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/README.md +1 -1
- package/dist/cloud-supervisor.mjs +14 -0
- package/dist/index.js +358 -351
- package/package.json +5 -3
- package/scripts/build.mjs +23 -0
package/README.md
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
var $r=Object.create;var ln=Object.defineProperty;var Dr=Object.getOwnPropertyDescriptor;var Jr=Object.getOwnPropertyNames;var jr=Object.getPrototypeOf,Vr=Object.prototype.hasOwnProperty;var x=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,r)=>(typeof require<"u"?require:n)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var v=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var Fr=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of Jr(n))!Vr.call(e,o)&&o!==r&&ln(e,o,{get:()=>n[o],enumerable:!(t=Dr(n,o))||t.enumerable});return e};var Y=(e,n,r)=>(r=e!=null?$r(jr(e)):{},Fr(n||!e||!e.__esModule?ln(r,"default",{value:e,enumerable:!0}):r,e));var P=v((ps,fn)=>{"use strict";var cn=["nodebuffer","arraybuffer","fragments"],un=typeof Blob<"u";un&&cn.push("blob");fn.exports={BINARY_TYPES:cn,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:un,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Q=v((hs,fe)=>{"use strict";var{EMPTY_BUFFER:Gr}=P(),Ie=Buffer[Symbol.species];function Br(e,n){if(e.length===0)return Gr;if(e.length===1)return e[0];let r=Buffer.allocUnsafe(n),t=0;for(let o=0;o<e.length;o++){let s=e[o];r.set(s,t),t+=s.length}return t<n?new Ie(r.buffer,r.byteOffset,t):r}function pn(e,n,r,t,o){for(let s=0;s<o;s++)r[t+s]=e[s]^n[s&3]}function hn(e,n){for(let r=0;r<e.length;r++)e[r]^=n[r&3]}function qr(e){return e.length===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.length)}function Ae(e){if(Ae.readOnly=!0,Buffer.isBuffer(e))return e;let n;return e instanceof ArrayBuffer?n=new Ie(e):ArrayBuffer.isView(e)?n=new Ie(e.buffer,e.byteOffset,e.byteLength):(n=Buffer.from(e),Ae.readOnly=!1),n}fe.exports={concat:Br,mask:pn,toArrayBuffer:qr,toBuffer:Ae,unmask:hn};if(!process.env.WS_NO_BUFFER_UTIL)try{let e=x("bufferutil");fe.exports.mask=function(n,r,t,o,s){s<48?pn(n,r,t,o,s):e.mask(n,r,t,o,s)},fe.exports.unmask=function(n,r){n.length<32?hn(n,r):e.unmask(n,r)}}catch{}});var mn=v((ys,gn)=>{"use strict";var yn=Symbol("kDone"),Te=Symbol("kRun"),Ne=class{constructor(n){this[yn]=()=>{this.pending--,this[Te]()},this.concurrency=n||1/0,this.jobs=[],this.pending=0}add(n){this.jobs.push(n),this[Te]()}[Te](){if(this.pending!==this.concurrency&&this.jobs.length){let n=this.jobs.shift();this.pending++,n(this[yn])}}};gn.exports=Ne});var ne=v((gs,vn)=>{"use strict";var ee=x("zlib"),_n=Q(),Wr=mn(),{kStatusCode:xn}=P(),zr=Buffer[Symbol.species],Hr=Buffer.from([0,0,255,255]),he=Symbol("permessage-deflate"),I=Symbol("total-length"),G=Symbol("callback"),M=Symbol("buffers"),B=Symbol("error"),pe,Me=class{constructor(n,r,t){if(this._maxPayload=t|0,this._options=n||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!r,this._deflate=null,this._inflate=null,this.params=null,!pe){let o=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;pe=new Wr(o)}}static get extensionName(){return"permessage-deflate"}offer(){let n={};return this._options.serverNoContextTakeover&&(n.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(n.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(n.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?n.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(n.client_max_window_bits=!0),n}accept(n){return n=this.normalizeParams(n),this.params=this._isServer?this.acceptAsServer(n):this.acceptAsClient(n),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let n=this._deflate[G];this._deflate.close(),this._deflate=null,n&&n(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(n){let r=this._options,t=n.find(o=>!(r.serverNoContextTakeover===!1&&o.server_no_context_takeover||o.server_max_window_bits&&(r.serverMaxWindowBits===!1||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>o.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!o.client_max_window_bits));if(!t)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(t.server_no_context_takeover=!0),r.clientNoContextTakeover&&(t.client_no_context_takeover=!0),typeof r.serverMaxWindowBits=="number"&&(t.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?t.client_max_window_bits=r.clientMaxWindowBits:(t.client_max_window_bits===!0||r.clientMaxWindowBits===!1)&&delete t.client_max_window_bits,t}acceptAsClient(n){let r=n[0];if(this._options.clientNoContextTakeover===!1&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(n){return n.forEach(r=>{Object.keys(r).forEach(t=>{let o=r[t];if(o.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(o=o[0],t==="client_max_window_bits"){if(o!==!0){let s=+o;if(!Number.isInteger(s)||s<8||s>15)throw new TypeError(`Invalid value for parameter "${t}": ${o}`);o=s}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${o}`)}else if(t==="server_max_window_bits"){let s=+o;if(!Number.isInteger(s)||s<8||s>15)throw new TypeError(`Invalid value for parameter "${t}": ${o}`);o=s}else if(t==="client_no_context_takeover"||t==="server_no_context_takeover"){if(o!==!0)throw new TypeError(`Invalid value for parameter "${t}": ${o}`)}else throw new Error(`Unknown parameter "${t}"`);r[t]=o})}),n}decompress(n,r,t){pe.add(o=>{this._decompress(n,r,(s,i)=>{o(),t(s,i)})})}compress(n,r,t){pe.add(o=>{this._compress(n,r,(s,i)=>{o(),t(s,i)})})}_decompress(n,r,t){let o=this._isServer?"client":"server";if(!this._inflate){let s=`${o}_max_window_bits`,i=typeof this.params[s]!="number"?ee.Z_DEFAULT_WINDOWBITS:this.params[s];this._inflate=ee.createInflateRaw({...this._options.zlibInflateOptions,windowBits:i}),this._inflate[he]=this,this._inflate[I]=0,this._inflate[M]=[],this._inflate.on("error",Zr),this._inflate.on("data",Sn)}this._inflate[G]=t,this._inflate.write(n),r&&this._inflate.write(Hr),this._inflate.flush(()=>{let s=this._inflate[B];if(s){this._inflate.close(),this._inflate=null,t(s);return}let i=_n.concat(this._inflate[M],this._inflate[I]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[I]=0,this._inflate[M]=[],r&&this.params[`${o}_no_context_takeover`]&&this._inflate.reset()),t(null,i)})}_compress(n,r,t){let o=this._isServer?"server":"client";if(!this._deflate){let s=`${o}_max_window_bits`,i=typeof this.params[s]!="number"?ee.Z_DEFAULT_WINDOWBITS:this.params[s];this._deflate=ee.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:i}),this._deflate[I]=0,this._deflate[M]=[],this._deflate.on("data",Kr)}this._deflate[G]=t,this._deflate.write(n),this._deflate.flush(ee.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let s=_n.concat(this._deflate[M],this._deflate[I]);r&&(s=new zr(s.buffer,s.byteOffset,s.length-4)),this._deflate[G]=null,this._deflate[I]=0,this._deflate[M]=[],r&&this.params[`${o}_no_context_takeover`]&&this._deflate.reset(),t(null,s)})}};vn.exports=Me;function Kr(e){this[M].push(e),this[I]+=e.length}function Sn(e){if(this[I]+=e.length,this[he]._maxPayload<1||this[I]<=this[he]._maxPayload){this[M].push(e);return}this[B]=new RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][xn]=1009,this.removeListener("data",Sn),this.reset()}function Zr(e){if(this[he]._inflate=null,this[B]){this[G](this[B]);return}e[xn]=1007,this[G](e)}});var q=v((ms,ye)=>{"use strict";var{isUtf8:wn}=x("buffer"),{hasBlob:Xr}=P(),Yr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Qr(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function Le(e){let n=e.length,r=0;for(;r<n;)if((e[r]&128)===0)r++;else if((e[r]&224)===192){if(r+1===n||(e[r+1]&192)!==128||(e[r]&254)===192)return!1;r+=2}else if((e[r]&240)===224){if(r+2>=n||(e[r+1]&192)!==128||(e[r+2]&192)!==128||e[r]===224&&(e[r+1]&224)===128||e[r]===237&&(e[r+1]&224)===160)return!1;r+=3}else if((e[r]&248)===240){if(r+3>=n||(e[r+1]&192)!==128||(e[r+2]&192)!==128||(e[r+3]&192)!==128||e[r]===240&&(e[r+1]&240)===128||e[r]===244&&e[r+1]>143||e[r]>244)return!1;r+=4}else return!1;return!0}function et(e){return Xr&&typeof e=="object"&&typeof e.arrayBuffer=="function"&&typeof e.type=="string"&&typeof e.stream=="function"&&(e[Symbol.toStringTag]==="Blob"||e[Symbol.toStringTag]==="File")}ye.exports={isBlob:et,isValidStatusCode:Qr,isValidUTF8:Le,tokenChars:Yr};if(wn)ye.exports.isValidUTF8=function(e){return e.length<24?Le(e):wn(e)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let e=x("utf-8-validate");ye.exports.isValidUTF8=function(n){return n.length<32?Le(n):e(n)}}catch{}});var je=v((_s,Pn)=>{"use strict";var{Writable:nt}=x("stream"),En=ne(),{BINARY_TYPES:rt,EMPTY_BUFFER:bn,kStatusCode:tt,kWebSocket:ot}=P(),{concat:Ue,toArrayBuffer:st,unmask:it}=Q(),{isValidStatusCode:at,isValidUTF8:Cn}=q(),ge=Buffer[Symbol.species],C=0,On=1,kn=2,Rn=3,$e=4,De=5,me=6,Je=class extends nt{constructor(n={}){super(),this._allowSynchronousEvents=n.allowSynchronousEvents!==void 0?n.allowSynchronousEvents:!0,this._binaryType=n.binaryType||rt[0],this._extensions=n.extensions||{},this._isServer=!!n.isServer,this._maxPayload=n.maxPayload|0,this._skipUTF8Validation=!!n.skipUTF8Validation,this[ot]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=C}_write(n,r,t){if(this._opcode===8&&this._state==C)return t();this._bufferedBytes+=n.length,this._buffers.push(n),this.startLoop(t)}consume(n){if(this._bufferedBytes-=n,n===this._buffers[0].length)return this._buffers.shift();if(n<this._buffers[0].length){let t=this._buffers[0];return this._buffers[0]=new ge(t.buffer,t.byteOffset+n,t.length-n),new ge(t.buffer,t.byteOffset,n)}let r=Buffer.allocUnsafe(n);do{let t=this._buffers[0],o=r.length-n;n>=t.length?r.set(this._buffers.shift(),o):(r.set(new Uint8Array(t.buffer,t.byteOffset,n),o),this._buffers[0]=new ge(t.buffer,t.byteOffset+n,t.length-n)),n-=t.length}while(n>0);return r}startLoop(n){this._loop=!0;do switch(this._state){case C:this.getInfo(n);break;case On:this.getPayloadLength16(n);break;case kn:this.getPayloadLength64(n);break;case Rn:this.getMask();break;case $e:this.getData(n);break;case De:case me:this._loop=!1;return}while(this._loop);this._errored||n()}getInfo(n){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let o=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");n(o);return}let t=(r[0]&64)===64;if(t&&!this._extensions[En.extensionName]){let o=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(o);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(t){let o=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(o);return}if(!this._fragmented){let o=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");n(o);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let o=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");n(o);return}this._compressed=t}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let o=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");n(o);return}if(t){let o=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");n(o);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let o=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");n(o);return}}else{let o=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");n(o);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let o=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");n(o);return}}else if(this._masked){let o=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");n(o);return}this._payloadLength===126?this._state=On:this._payloadLength===127?this._state=kn:this.haveLength(n)}getPayloadLength16(n){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(n)}getPayloadLength64(n){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),t=r.readUInt32BE(0);if(t>Math.pow(2,21)-1){let o=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");n(o);return}this._payloadLength=t*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(n)}haveLength(n){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(r);return}this._masked?this._state=Rn:this._state=$e}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=$e}getData(n){let r=bn;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&it(r,this._mask)}if(this._opcode>7){this.controlMessage(r,n);return}if(this._compressed){this._state=De,this.decompress(r,n);return}r.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(r)),this.dataMessage(n)}decompress(n,r){this._extensions[En.extensionName].decompress(n,this._fin,(o,s)=>{if(o)return r(o);if(s.length){if(this._messageLength+=s.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let i=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(i);return}this._fragments.push(s)}this.dataMessage(r),this._state===C&&this.startLoop(r)})}dataMessage(n){if(!this._fin){this._state=C;return}let r=this._messageLength,t=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let o;this._binaryType==="nodebuffer"?o=Ue(t,r):this._binaryType==="arraybuffer"?o=st(Ue(t,r)):this._binaryType==="blob"?o=new Blob(t):o=t,this._allowSynchronousEvents?(this.emit("message",o,!0),this._state=C):(this._state=me,setImmediate(()=>{this.emit("message",o,!0),this._state=C,this.startLoop(n)}))}else{let o=Ue(t,r);if(!this._skipUTF8Validation&&!Cn(o)){let s=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(s);return}this._state===De||this._allowSynchronousEvents?(this.emit("message",o,!1),this._state=C):(this._state=me,setImmediate(()=>{this.emit("message",o,!1),this._state=C,this.startLoop(n)}))}}controlMessage(n,r){if(this._opcode===8){if(n.length===0)this._loop=!1,this.emit("conclude",1005,bn),this.end();else{let t=n.readUInt16BE(0);if(!at(t)){let s=this.createError(RangeError,`invalid status code ${t}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(s);return}let o=new ge(n.buffer,n.byteOffset+2,n.length-2);if(!this._skipUTF8Validation&&!Cn(o)){let s=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(s);return}this._loop=!1,this.emit("conclude",t,o),this.end()}this._state=C;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",n),this._state=C):(this._state=me,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",n),this._state=C,this.startLoop(r)}))}createError(n,r,t,o,s){this._loop=!1,this._errored=!0;let i=new n(t?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(i,this.createError),i.code=s,i[tt]=o,i}};Pn.exports=Je});var Ge=v((Ss,Tn)=>{"use strict";var{Duplex:xs}=x("stream"),{randomFillSync:dt}=x("crypto"),In=ne(),{EMPTY_BUFFER:lt,kWebSocket:ct,NOOP:ut}=P(),{isBlob:W,isValidStatusCode:ft}=q(),{mask:An,toBuffer:U}=Q(),O=Symbol("kByteLength"),pt=Buffer.alloc(4),_e=8*1024,$,z=_e,k=0,ht=1,yt=2,Ve=class e{constructor(n,r,t){this._extensions=r||{},t&&(this._generateMask=t,this._maskBuffer=Buffer.alloc(4)),this._socket=n,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=k,this.onerror=ut,this[ct]=void 0}static frame(n,r){let t,o=!1,s=2,i=!1;r.mask&&(t=r.maskBuffer||pt,r.generateMask?r.generateMask(t):(z===_e&&($===void 0&&($=Buffer.alloc(_e)),dt($,0,_e),z=0),t[0]=$[z++],t[1]=$[z++],t[2]=$[z++],t[3]=$[z++]),i=(t[0]|t[1]|t[2]|t[3])===0,s=6);let a;typeof n=="string"?(!r.mask||i)&&r[O]!==void 0?a=r[O]:(n=Buffer.from(n),a=n.length):(a=n.length,o=r.mask&&r.readOnly&&!i);let d=a;a>=65536?(s+=8,d=127):a>125&&(s+=2,d=126);let l=Buffer.allocUnsafe(o?a+s:s);return l[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(l[0]|=64),l[1]=d,d===126?l.writeUInt16BE(a,2):d===127&&(l[2]=l[3]=0,l.writeUIntBE(a,4,6)),r.mask?(l[1]|=128,l[s-4]=t[0],l[s-3]=t[1],l[s-2]=t[2],l[s-1]=t[3],i?[l,n]:o?(An(n,t,l,s,a),[l]):(An(n,t,n,0,a),[l,n])):[l,n]}close(n,r,t,o){let s;if(n===void 0)s=lt;else{if(typeof n!="number"||!ft(n))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)s=Buffer.allocUnsafe(2),s.writeUInt16BE(n,0);else{let a=Buffer.byteLength(r);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");s=Buffer.allocUnsafe(2+a),s.writeUInt16BE(n,0),typeof r=="string"?s.write(r,2):s.set(r,2)}}let i={[O]:s.length,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==k?this.enqueue([this.dispatch,s,!1,i,o]):this.sendFrame(e.frame(s,i),o)}ping(n,r,t){let o,s;if(typeof n=="string"?(o=Buffer.byteLength(n),s=!1):W(n)?(o=n.size,s=!1):(n=U(n),o=n.length,s=U.readOnly),o>125)throw new RangeError("The data size must not be greater than 125 bytes");let i={[O]:o,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:s,rsv1:!1};W(n)?this._state!==k?this.enqueue([this.getBlobData,n,!1,i,t]):this.getBlobData(n,!1,i,t):this._state!==k?this.enqueue([this.dispatch,n,!1,i,t]):this.sendFrame(e.frame(n,i),t)}pong(n,r,t){let o,s;if(typeof n=="string"?(o=Buffer.byteLength(n),s=!1):W(n)?(o=n.size,s=!1):(n=U(n),o=n.length,s=U.readOnly),o>125)throw new RangeError("The data size must not be greater than 125 bytes");let i={[O]:o,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:s,rsv1:!1};W(n)?this._state!==k?this.enqueue([this.getBlobData,n,!1,i,t]):this.getBlobData(n,!1,i,t):this._state!==k?this.enqueue([this.dispatch,n,!1,i,t]):this.sendFrame(e.frame(n,i),t)}send(n,r,t){let o=this._extensions[In.extensionName],s=r.binary?2:1,i=r.compress,a,d;typeof n=="string"?(a=Buffer.byteLength(n),d=!1):W(n)?(a=n.size,d=!1):(n=U(n),a=n.length,d=U.readOnly),this._firstFragment?(this._firstFragment=!1,i&&o&&o.params[o._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(i=a>=o._threshold),this._compress=i):(i=!1,s=0),r.fin&&(this._firstFragment=!0);let l={[O]:a,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:s,readOnly:d,rsv1:i};W(n)?this._state!==k?this.enqueue([this.getBlobData,n,this._compress,l,t]):this.getBlobData(n,this._compress,l,t):this._state!==k?this.enqueue([this.dispatch,n,this._compress,l,t]):this.dispatch(n,this._compress,l,t)}getBlobData(n,r,t,o){this._bufferedBytes+=t[O],this._state=yt,n.arrayBuffer().then(s=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Fe,this,a,o);return}this._bufferedBytes-=t[O];let i=U(s);r?this.dispatch(i,r,t,o):(this._state=k,this.sendFrame(e.frame(i,t),o),this.dequeue())}).catch(s=>{process.nextTick(gt,this,s,o)})}dispatch(n,r,t,o){if(!r){this.sendFrame(e.frame(n,t),o);return}let s=this._extensions[In.extensionName];this._bufferedBytes+=t[O],this._state=ht,s.compress(n,t.fin,(i,a)=>{if(this._socket.destroyed){let d=new Error("The socket was closed while data was being compressed");Fe(this,d,o);return}this._bufferedBytes-=t[O],this._state=k,t.readOnly=!1,this.sendFrame(e.frame(a,t),o),this.dequeue()})}dequeue(){for(;this._state===k&&this._queue.length;){let n=this._queue.shift();this._bufferedBytes-=n[3][O],Reflect.apply(n[0],this,n.slice(1))}}enqueue(n){this._bufferedBytes+=n[3][O],this._queue.push(n)}sendFrame(n,r){n.length===2?(this._socket.cork(),this._socket.write(n[0]),this._socket.write(n[1],r),this._socket.uncork()):this._socket.write(n[0],r)}};Tn.exports=Ve;function Fe(e,n,r){typeof r=="function"&&r(n);for(let t=0;t<e._queue.length;t++){let o=e._queue[t],s=o[o.length-1];typeof s=="function"&&s(n)}}function gt(e,n,r){Fe(e,n,r),e.onerror(n)}});var Vn=v((vs,jn)=>{"use strict";var{kForOnEventAttribute:re,kListener:Be}=P(),Nn=Symbol("kCode"),Mn=Symbol("kData"),Ln=Symbol("kError"),Un=Symbol("kMessage"),$n=Symbol("kReason"),H=Symbol("kTarget"),Dn=Symbol("kType"),Jn=Symbol("kWasClean"),A=class{constructor(n){this[H]=null,this[Dn]=n}get target(){return this[H]}get type(){return this[Dn]}};Object.defineProperty(A.prototype,"target",{enumerable:!0});Object.defineProperty(A.prototype,"type",{enumerable:!0});var D=class extends A{constructor(n,r={}){super(n),this[Nn]=r.code===void 0?0:r.code,this[$n]=r.reason===void 0?"":r.reason,this[Jn]=r.wasClean===void 0?!1:r.wasClean}get code(){return this[Nn]}get reason(){return this[$n]}get wasClean(){return this[Jn]}};Object.defineProperty(D.prototype,"code",{enumerable:!0});Object.defineProperty(D.prototype,"reason",{enumerable:!0});Object.defineProperty(D.prototype,"wasClean",{enumerable:!0});var K=class extends A{constructor(n,r={}){super(n),this[Ln]=r.error===void 0?null:r.error,this[Un]=r.message===void 0?"":r.message}get error(){return this[Ln]}get message(){return this[Un]}};Object.defineProperty(K.prototype,"error",{enumerable:!0});Object.defineProperty(K.prototype,"message",{enumerable:!0});var te=class extends A{constructor(n,r={}){super(n),this[Mn]=r.data===void 0?null:r.data}get data(){return this[Mn]}};Object.defineProperty(te.prototype,"data",{enumerable:!0});var mt={addEventListener(e,n,r={}){for(let o of this.listeners(e))if(!r[re]&&o[Be]===n&&!o[re])return;let t;if(e==="message")t=function(s,i){let a=new te("message",{data:i?s:s.toString()});a[H]=this,xe(n,this,a)};else if(e==="close")t=function(s,i){let a=new D("close",{code:s,reason:i.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[H]=this,xe(n,this,a)};else if(e==="error")t=function(s){let i=new K("error",{error:s,message:s.message});i[H]=this,xe(n,this,i)};else if(e==="open")t=function(){let s=new A("open");s[H]=this,xe(n,this,s)};else return;t[re]=!!r[re],t[Be]=n,r.once?this.once(e,t):this.on(e,t)},removeEventListener(e,n){for(let r of this.listeners(e))if(r[Be]===n&&!r[re]){this.removeListener(e,r);break}}};jn.exports={CloseEvent:D,ErrorEvent:K,Event:A,EventTarget:mt,MessageEvent:te};function xe(e,n,r){typeof e=="object"&&e.handleEvent?e.handleEvent.call(e,r):e.call(n,r)}});var qe=v((ws,Fn)=>{"use strict";var{tokenChars:oe}=q();function R(e,n,r){e[n]===void 0?e[n]=[r]:e[n].push(r)}function _t(e){let n=Object.create(null),r=Object.create(null),t=!1,o=!1,s=!1,i,a,d=-1,l=-1,u=-1,p=0;for(;p<e.length;p++)if(l=e.charCodeAt(p),i===void 0)if(u===-1&&oe[l]===1)d===-1&&(d=p);else if(p!==0&&(l===32||l===9))u===-1&&d!==-1&&(u=p);else if(l===59||l===44){if(d===-1)throw new SyntaxError(`Unexpected character at index ${p}`);u===-1&&(u=p);let f=e.slice(d,u);l===44?(R(n,f,r),r=Object.create(null)):i=f,d=u=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);else if(a===void 0)if(u===-1&&oe[l]===1)d===-1&&(d=p);else if(l===32||l===9)u===-1&&d!==-1&&(u=p);else if(l===59||l===44){if(d===-1)throw new SyntaxError(`Unexpected character at index ${p}`);u===-1&&(u=p),R(r,e.slice(d,u),!0),l===44&&(R(n,i,r),r=Object.create(null),i=void 0),d=u=-1}else if(l===61&&d!==-1&&u===-1)a=e.slice(d,p),d=u=-1;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(o){if(oe[l]!==1)throw new SyntaxError(`Unexpected character at index ${p}`);d===-1?d=p:t||(t=!0),o=!1}else if(s)if(oe[l]===1)d===-1&&(d=p);else if(l===34&&d!==-1)s=!1,u=p;else if(l===92)o=!0;else throw new SyntaxError(`Unexpected character at index ${p}`);else if(l===34&&e.charCodeAt(p-1)===61)s=!0;else if(u===-1&&oe[l]===1)d===-1&&(d=p);else if(d!==-1&&(l===32||l===9))u===-1&&(u=p);else if(l===59||l===44){if(d===-1)throw new SyntaxError(`Unexpected character at index ${p}`);u===-1&&(u=p);let f=e.slice(d,u);t&&(f=f.replace(/\\/g,""),t=!1),R(r,a,f),l===44&&(R(n,i,r),r=Object.create(null),i=void 0),a=void 0,d=u=-1}else throw new SyntaxError(`Unexpected character at index ${p}`);if(d===-1||s||l===32||l===9)throw new SyntaxError("Unexpected end of input");u===-1&&(u=p);let y=e.slice(d,u);return i===void 0?R(n,y,r):(a===void 0?R(r,y,!0):t?R(r,a,y.replace(/\\/g,"")):R(r,a,y),R(n,i,r)),n}function xt(e){return Object.keys(e).map(n=>{let r=e[n];return Array.isArray(r)||(r=[r]),r.map(t=>[n].concat(Object.keys(t).map(o=>{let s=t[o];return Array.isArray(s)||(s=[s]),s.map(i=>i===!0?o:`${o}=${i}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Fn.exports={format:xt,parse:_t}});var Ee=v((Cs,er)=>{"use strict";var St=x("events"),vt=x("https"),wt=x("http"),qn=x("net"),Et=x("tls"),{randomBytes:bt,createHash:Ct}=x("crypto"),{Duplex:Es,Readable:bs}=x("stream"),{URL:We}=x("url"),L=ne(),Ot=je(),kt=Ge(),{isBlob:Rt}=q(),{BINARY_TYPES:Gn,EMPTY_BUFFER:Se,GUID:Pt,kForOnEventAttribute:ze,kListener:It,kStatusCode:At,kWebSocket:S,NOOP:Wn}=P(),{EventTarget:{addEventListener:Tt,removeEventListener:Nt}}=Vn(),{format:Mt,parse:Lt}=qe(),{toBuffer:Ut}=Q(),$t=30*1e3,zn=Symbol("kAborted"),He=[8,13],T=["CONNECTING","OPEN","CLOSING","CLOSED"],Dt=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,m=class e extends St{constructor(n,r,t){super(),this._binaryType=Gn[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Se,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=e.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,n!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(t=r,r=[]):r=[r]),Hn(this,n,r,t)):(this._autoPong=t.autoPong,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(n){Gn.includes(n)&&(this._binaryType=n,this._receiver&&(this._receiver._binaryType=n))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(n,r,t){let o=new Ot({allowSynchronousEvents:t.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:t.maxPayload,skipUTF8Validation:t.skipUTF8Validation}),s=new kt(n,this._extensions,t.generateMask);this._receiver=o,this._sender=s,this._socket=n,o[S]=this,s[S]=this,n[S]=this,o.on("conclude",Vt),o.on("drain",Ft),o.on("error",Gt),o.on("message",Bt),o.on("ping",qt),o.on("pong",Wt),s.onerror=zt,n.setTimeout&&n.setTimeout(0),n.setNoDelay&&n.setNoDelay(),r.length>0&&n.unshift(r),n.on("close",Xn),n.on("data",we),n.on("end",Yn),n.on("error",Qn),this._readyState=e.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=e.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[L.extensionName]&&this._extensions[L.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=e.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(n,r){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){w(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===e.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=e.CLOSING,this._sender.close(n,r,!this._isServer,t=>{t||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Zn(this)}}pause(){this.readyState===e.CONNECTING||this.readyState===e.CLOSED||(this._paused=!0,this._socket.pause())}ping(n,r,t){if(this.readyState===e.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"?(t=n,n=r=void 0):typeof r=="function"&&(t=r,r=void 0),typeof n=="number"&&(n=n.toString()),this.readyState!==e.OPEN){Ke(this,n,t);return}r===void 0&&(r=!this._isServer),this._sender.ping(n||Se,r,t)}pong(n,r,t){if(this.readyState===e.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"?(t=n,n=r=void 0):typeof r=="function"&&(t=r,r=void 0),typeof n=="number"&&(n=n.toString()),this.readyState!==e.OPEN){Ke(this,n,t);return}r===void 0&&(r=!this._isServer),this._sender.pong(n||Se,r,t)}resume(){this.readyState===e.CONNECTING||this.readyState===e.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(n,r,t){if(this.readyState===e.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(t=r,r={}),typeof n=="number"&&(n=n.toString()),this.readyState!==e.OPEN){Ke(this,n,t);return}let o={binary:typeof n!="string",mask:!this._isServer,compress:!0,fin:!0,...r};this._extensions[L.extensionName]||(o.compress=!1),this._sender.send(n||Se,o,t)}terminate(){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){w(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=e.CLOSING,this._socket.destroy())}}};Object.defineProperty(m,"CONNECTING",{enumerable:!0,value:T.indexOf("CONNECTING")});Object.defineProperty(m.prototype,"CONNECTING",{enumerable:!0,value:T.indexOf("CONNECTING")});Object.defineProperty(m,"OPEN",{enumerable:!0,value:T.indexOf("OPEN")});Object.defineProperty(m.prototype,"OPEN",{enumerable:!0,value:T.indexOf("OPEN")});Object.defineProperty(m,"CLOSING",{enumerable:!0,value:T.indexOf("CLOSING")});Object.defineProperty(m.prototype,"CLOSING",{enumerable:!0,value:T.indexOf("CLOSING")});Object.defineProperty(m,"CLOSED",{enumerable:!0,value:T.indexOf("CLOSED")});Object.defineProperty(m.prototype,"CLOSED",{enumerable:!0,value:T.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(e=>{Object.defineProperty(m.prototype,e,{enumerable:!0})});["open","error","close","message"].forEach(e=>{Object.defineProperty(m.prototype,`on${e}`,{enumerable:!0,get(){for(let n of this.listeners(e))if(n[ze])return n[It];return null},set(n){for(let r of this.listeners(e))if(r[ze]){this.removeListener(e,r);break}typeof n=="function"&&this.addEventListener(e,n,{[ze]:!0})}})});m.prototype.addEventListener=Tt;m.prototype.removeEventListener=Nt;er.exports=m;function Hn(e,n,r,t){let o={allowSynchronousEvents:!0,autoPong:!0,protocolVersion:He[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...t,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(e._autoPong=o.autoPong,!He.includes(o.protocolVersion))throw new RangeError(`Unsupported protocol version: ${o.protocolVersion} (supported versions: ${He.join(", ")})`);let s;if(n instanceof We)s=n;else try{s=new We(n)}catch{throw new SyntaxError(`Invalid URL: ${n}`)}s.protocol==="http:"?s.protocol="ws:":s.protocol==="https:"&&(s.protocol="wss:"),e._url=s.href;let i=s.protocol==="wss:",a=s.protocol==="ws+unix:",d;if(s.protocol!=="ws:"&&!i&&!a?d=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!s.pathname?d="The URL's pathname is empty":s.hash&&(d="The URL contains a fragment identifier"),d){let c=new SyntaxError(d);if(e._redirects===0)throw c;ve(e,c);return}let l=i?443:80,u=bt(16).toString("base64"),p=i?vt.request:wt.request,y=new Set,f;if(o.createConnection=o.createConnection||(i?jt:Jt),o.defaultPort=o.defaultPort||l,o.port=s.port||l,o.host=s.hostname.startsWith("[")?s.hostname.slice(1,-1):s.hostname,o.headers={...o.headers,"Sec-WebSocket-Version":o.protocolVersion,"Sec-WebSocket-Key":u,Connection:"Upgrade",Upgrade:"websocket"},o.path=s.pathname+s.search,o.timeout=o.handshakeTimeout,o.perMessageDeflate&&(f=new L(o.perMessageDeflate!==!0?o.perMessageDeflate:{},!1,o.maxPayload),o.headers["Sec-WebSocket-Extensions"]=Mt({[L.extensionName]:f.offer()})),r.length){for(let c of r){if(typeof c!="string"||!Dt.test(c)||y.has(c))throw new SyntaxError("An invalid or duplicated subprotocol was specified");y.add(c)}o.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(o.origin&&(o.protocolVersion<13?o.headers["Sec-WebSocket-Origin"]=o.origin:o.headers.Origin=o.origin),(s.username||s.password)&&(o.auth=`${s.username}:${s.password}`),a){let c=o.path.split(":");o.socketPath=c[0],o.path=c[1]}let h;if(o.followRedirects){if(e._redirects===0){e._originalIpc=a,e._originalSecure=i,e._originalHostOrSocketPath=a?o.socketPath:s.host;let c=t&&t.headers;if(t={...t,headers:{}},c)for(let[g,_]of Object.entries(c))t.headers[g.toLowerCase()]=_}else if(e.listenerCount("redirect")===0){let c=a?e._originalIpc?o.socketPath===e._originalHostOrSocketPath:!1:e._originalIpc?!1:s.host===e._originalHostOrSocketPath;(!c||e._originalSecure&&!i)&&(delete o.headers.authorization,delete o.headers.cookie,c||delete o.headers.host,o.auth=void 0)}o.auth&&!t.headers.authorization&&(t.headers.authorization="Basic "+Buffer.from(o.auth).toString("base64")),h=e._req=p(o),e._redirects&&e.emit("redirect",e.url,h)}else h=e._req=p(o);o.timeout&&h.on("timeout",()=>{w(e,h,"Opening handshake has timed out")}),h.on("error",c=>{h===null||h[zn]||(h=e._req=null,ve(e,c))}),h.on("response",c=>{let g=c.headers.location,_=c.statusCode;if(g&&o.followRedirects&&_>=300&&_<400){if(++e._redirects>o.maxRedirects){w(e,h,"Maximum redirects exceeded");return}h.abort();let E;try{E=new We(g,n)}catch{let N=new SyntaxError(`Invalid URL: ${g}`);ve(e,N);return}Hn(e,E,r,t)}else e.emit("unexpected-response",h,c)||w(e,h,`Unexpected server response: ${c.statusCode}`)}),h.on("upgrade",(c,g,_)=>{if(e.emit("upgrade",c),e.readyState!==m.CONNECTING)return;h=e._req=null;let E=c.headers.upgrade;if(E===void 0||E.toLowerCase()!=="websocket"){w(e,g,"Invalid Upgrade header");return}let b=Ct("sha1").update(u+Pt).digest("base64");if(c.headers["sec-websocket-accept"]!==b){w(e,g,"Invalid Sec-WebSocket-Accept header");return}let N=c.headers["sec-websocket-protocol"],X;if(N!==void 0?y.size?y.has(N)||(X="Server sent an invalid subprotocol"):X="Server sent a subprotocol but none was requested":y.size&&(X="Server sent no subprotocol"),X){w(e,g,X);return}N&&(e._protocol=N);let an=c.headers["sec-websocket-extensions"];if(an!==void 0){if(!f){w(e,g,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let Re;try{Re=Lt(an)}catch{w(e,g,"Invalid Sec-WebSocket-Extensions header");return}let dn=Object.keys(Re);if(dn.length!==1||dn[0]!==L.extensionName){w(e,g,"Server indicated an extension that was not requested");return}try{f.accept(Re[L.extensionName])}catch{w(e,g,"Invalid Sec-WebSocket-Extensions header");return}e._extensions[L.extensionName]=f}e.setSocket(g,_,{allowSynchronousEvents:o.allowSynchronousEvents,generateMask:o.generateMask,maxPayload:o.maxPayload,skipUTF8Validation:o.skipUTF8Validation})}),o.finishRequest?o.finishRequest(h,e):h.end()}function ve(e,n){e._readyState=m.CLOSING,e._errorEmitted=!0,e.emit("error",n),e.emitClose()}function Jt(e){return e.path=e.socketPath,qn.connect(e)}function jt(e){return e.path=void 0,!e.servername&&e.servername!==""&&(e.servername=qn.isIP(e.host)?"":e.host),Et.connect(e)}function w(e,n,r){e._readyState=m.CLOSING;let t=new Error(r);Error.captureStackTrace(t,w),n.setHeader?(n[zn]=!0,n.abort(),n.socket&&!n.socket.destroyed&&n.socket.destroy(),process.nextTick(ve,e,t)):(n.destroy(t),n.once("error",e.emit.bind(e,"error")),n.once("close",e.emitClose.bind(e)))}function Ke(e,n,r){if(n){let t=Rt(n)?n.size:Ut(n).length;e._socket?e._sender._bufferedBytes+=t:e._bufferedAmount+=t}if(r){let t=new Error(`WebSocket is not open: readyState ${e.readyState} (${T[e.readyState]})`);process.nextTick(r,t)}}function Vt(e,n){let r=this[S];r._closeFrameReceived=!0,r._closeMessage=n,r._closeCode=e,r._socket[S]!==void 0&&(r._socket.removeListener("data",we),process.nextTick(Kn,r._socket),e===1005?r.close():r.close(e,n))}function Ft(){let e=this[S];e.isPaused||e._socket.resume()}function Gt(e){let n=this[S];n._socket[S]!==void 0&&(n._socket.removeListener("data",we),process.nextTick(Kn,n._socket),n.close(e[At])),n._errorEmitted||(n._errorEmitted=!0,n.emit("error",e))}function Bn(){this[S].emitClose()}function Bt(e,n){this[S].emit("message",e,n)}function qt(e){let n=this[S];n._autoPong&&n.pong(e,!this._isServer,Wn),n.emit("ping",e)}function Wt(e){this[S].emit("pong",e)}function Kn(e){e.resume()}function zt(e){let n=this[S];n.readyState!==m.CLOSED&&(n.readyState===m.OPEN&&(n._readyState=m.CLOSING,Zn(n)),this._socket.end(),n._errorEmitted||(n._errorEmitted=!0,n.emit("error",e)))}function Zn(e){e._closeTimer=setTimeout(e._socket.destroy.bind(e._socket),$t)}function Xn(){let e=this[S];this.removeListener("close",Xn),this.removeListener("data",we),this.removeListener("end",Yn),e._readyState=m.CLOSING;let n;!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&(n=e._socket.read())!==null&&e._receiver.write(n),e._receiver.end(),this[S]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",Bn),e._receiver.on("finish",Bn))}function we(e){this[S]._receiver.write(e)||this.pause()}function Yn(){let e=this[S];e._readyState=m.CLOSING,e._receiver.end(),this.end()}function Qn(){let e=this[S];this.removeListener("error",Qn),this.on("error",Wn),e&&(e._readyState=m.CLOSING,this.destroy())}});var or=v((ks,tr)=>{"use strict";var Os=Ee(),{Duplex:Ht}=x("stream");function nr(e){e.emit("close")}function Kt(){!this.destroyed&&this._writableState.finished&&this.destroy()}function rr(e){this.removeListener("error",rr),this.destroy(),this.listenerCount("error")===0&&this.emit("error",e)}function Zt(e,n){let r=!0,t=new Ht({...n,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on("message",function(s,i){let a=!i&&t._readableState.objectMode?s.toString():s;t.push(a)||e.pause()}),e.once("error",function(s){t.destroyed||(r=!1,t.destroy(s))}),e.once("close",function(){t.destroyed||t.push(null)}),t._destroy=function(o,s){if(e.readyState===e.CLOSED){s(o),process.nextTick(nr,t);return}let i=!1;e.once("error",function(d){i=!0,s(d)}),e.once("close",function(){i||s(o),process.nextTick(nr,t)}),r&&e.terminate()},t._final=function(o){if(e.readyState===e.CONNECTING){e.once("open",function(){t._final(o)});return}e._socket!==null&&(e._socket._writableState.finished?(o(),t._readableState.endEmitted&&t.destroy()):(e._socket.once("finish",function(){o()}),e.close()))},t._read=function(){e.isPaused&&e.resume()},t._write=function(o,s,i){if(e.readyState===e.CONNECTING){e.once("open",function(){t._write(o,s,i)});return}e.send(o,i)},t.on("end",Kt),t.on("error",rr),t}tr.exports=Zt});var ir=v((Rs,sr)=>{"use strict";var{tokenChars:Xt}=q();function Yt(e){let n=new Set,r=-1,t=-1,o=0;for(o;o<e.length;o++){let i=e.charCodeAt(o);if(t===-1&&Xt[i]===1)r===-1&&(r=o);else if(o!==0&&(i===32||i===9))t===-1&&r!==-1&&(t=o);else if(i===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${o}`);t===-1&&(t=o);let a=e.slice(r,t);if(n.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);n.add(a),r=t=-1}else throw new SyntaxError(`Unexpected character at index ${o}`)}if(r===-1||t!==-1)throw new SyntaxError("Unexpected end of input");let s=e.slice(r,o);if(n.has(s))throw new SyntaxError(`The "${s}" subprotocol is duplicated`);return n.add(s),n}sr.exports={parse:Yt}});var pr=v((Is,fr)=>{"use strict";var Qt=x("events"),be=x("http"),{Duplex:Ps}=x("stream"),{createHash:eo}=x("crypto"),ar=qe(),J=ne(),no=ir(),ro=Ee(),{GUID:to,kWebSocket:oo}=P(),so=/^[+/0-9A-Za-z]{22}==$/,dr=0,lr=1,ur=2,Ze=class extends Qt{constructor(n,r){if(super(),n={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ro,...n},n.port==null&&!n.server&&!n.noServer||n.port!=null&&(n.server||n.noServer)||n.server&&n.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(n.port!=null?(this._server=be.createServer((t,o)=>{let s=be.STATUS_CODES[426];o.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"}),o.end(s)}),this._server.listen(n.port,n.host,n.backlog,r)):n.server&&(this._server=n.server),this._server){let t=this.emit.bind(this,"connection");this._removeListeners=io(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(o,s,i)=>{this.handleUpgrade(o,s,i,t)}})}n.perMessageDeflate===!0&&(n.perMessageDeflate={}),n.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=n,this._state=dr}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(n){if(this._state===ur){n&&this.once("close",()=>{n(new Error("The server is not running"))}),process.nextTick(se,this);return}if(n&&this.once("close",n),this._state!==lr)if(this._state=lr,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(se,this):process.nextTick(se,this);else{let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{se(this)})}}shouldHandle(n){if(this.options.path){let r=n.url.indexOf("?");if((r!==-1?n.url.slice(0,r):n.url)!==this.options.path)return!1}return!0}handleUpgrade(n,r,t,o){r.on("error",cr);let s=n.headers["sec-websocket-key"],i=n.headers.upgrade,a=+n.headers["sec-websocket-version"];if(n.method!=="GET"){j(this,n,r,405,"Invalid HTTP method");return}if(i===void 0||i.toLowerCase()!=="websocket"){j(this,n,r,400,"Invalid Upgrade header");return}if(s===void 0||!so.test(s)){j(this,n,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){j(this,n,r,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(n)){ie(r,400);return}let d=n.headers["sec-websocket-protocol"],l=new Set;if(d!==void 0)try{l=no.parse(d)}catch{j(this,n,r,400,"Invalid Sec-WebSocket-Protocol header");return}let u=n.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&u!==void 0){let y=new J(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let f=ar.parse(u);f[J.extensionName]&&(y.accept(f[J.extensionName]),p[J.extensionName]=y)}catch{j(this,n,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let y={origin:n.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(n.socket.authorized||n.socket.encrypted),req:n};if(this.options.verifyClient.length===2){this.options.verifyClient(y,(f,h,c,g)=>{if(!f)return ie(r,h||401,c,g);this.completeUpgrade(p,s,l,n,r,t,o)});return}if(!this.options.verifyClient(y))return ie(r,401)}this.completeUpgrade(p,s,l,n,r,t,o)}completeUpgrade(n,r,t,o,s,i,a){if(!s.readable||!s.writable)return s.destroy();if(s[oo])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>dr)return ie(s,503);let l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${eo("sha1").update(r+to).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(t.size){let p=this.options.handleProtocols?this.options.handleProtocols(t,o):t.values().next().value;p&&(l.push(`Sec-WebSocket-Protocol: ${p}`),u._protocol=p)}if(n[J.extensionName]){let p=n[J.extensionName].params,y=ar.format({[J.extensionName]:[p]});l.push(`Sec-WebSocket-Extensions: ${y}`),u._extensions=n}this.emit("headers",l,o),s.write(l.concat(`\r
|
|
4
|
+
`).join(`\r
|
|
5
|
+
`)),s.removeListener("error",cr),u.setSocket(s,i,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(u),u.on("close",()=>{this.clients.delete(u),this._shouldEmitClose&&!this.clients.size&&process.nextTick(se,this)})),a(u,o)}};fr.exports=Ze;function io(e,n){for(let r of Object.keys(n))e.on(r,n[r]);return function(){for(let t of Object.keys(n))e.removeListener(t,n[t])}}function se(e){e._state=ur,e.emit("close")}function cr(){this.destroy()}function ie(e,n,r,t){r=r||be.STATUS_CODES[n],t={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...t},e.once("finish",e.destroy),e.end(`HTTP/1.1 ${n} ${be.STATUS_CODES[n]}\r
|
|
6
|
+
`+Object.keys(t).map(o=>`${o}: ${t[o]}`).join(`\r
|
|
7
|
+
`)+`\r
|
|
8
|
+
\r
|
|
9
|
+
`+r)}function j(e,n,r,t,o,s){if(e.listenerCount("wsClientError")){let i=new Error(o);Error.captureStackTrace(i,j),e.emit("wsClientError",i,r,n)}else ie(r,t,o,s)}});import{spawn as Ho}from"node:child_process";import{rmSync as Ko,writeFileSync as Tr,mkdirSync as sn,chmodSync as Ar,readFileSync as Zo}from"node:fs";import{dirname as Xo}from"node:path";var ao=Y(or(),1),lo=Y(je(),1),co=Y(Ge(),1),Xe=Y(Ee(),1),uo=Y(pr(),1);function V(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{appendFileSync as fo,openSync as Ms}from"node:fs";import{homedir as po}from"node:os";import{dirname as ho,join as yo}from"node:path";import{mkdirSync as go}from"node:fs";var F="<SENSITIVE_DATA>",hr=new Set(["access_token","authorization","code","cookie","kandan_preview_ticket","refresh_token","token"]),mo=new Set(["--access-token","--api-key","--authorization","--cookie","--oauth-code","--password","--refresh-token","--secret","--token"]);function ae(e,n,r={}){let t=r.logFile??_o();try{go(ho(t),{recursive:!0}),fo(t,`${JSON.stringify({ts:new Date().toISOString(),event:e,...r.sessionId===void 0?{}:{sessionId:r.sessionId},...xo(n)})}
|
|
10
|
+
`,"utf8")}catch{return}}function _o(){let e=process.env.LINZUMI_CLI_AUDIT_LOG?.trim();return e===void 0||e===""?yo(po(),".linzumi","logs","command-events.jsonl"):e}function xo(e){return yr(e)}function Ye(e,n){return wo(n)?F:typeof e=="string"?gr(e):Array.isArray(e)?n==="args"?So(e):e.map(r=>Ye(r,void 0)):e!==null&&typeof e=="object"?yr(e):e}function yr(e){let n=typeof e.name=="string"?e.name.toLowerCase():void 0,r=n==="authorization"||n==="cookie"||n==="set-cookie";return Object.fromEntries(Object.entries(e).filter(([t])=>t!=="runner_console").map(([t,o])=>[t,r&&t==="value"?F:Ye(o,t)]))}function So(e){let n=!1;return e.map(r=>{if(typeof r!="string")return n=!1,Ye(r,void 0);if(n)return n=!1,F;let[t,o]=vo(r);return mo.has(t)?o===void 0?(n=!0,r):`${t}=${F}`:gr(r)})}function vo(e){let n=e.indexOf("=");return n===-1?[e,void 0]:[e.slice(0,n),e.slice(n+1)]}function wo(e){return e===void 0?!1:/^(authorization|cookie|set-cookie|password)$/i.test(e)||/(^|[_-])(access[_-]?token|api[_-]?key|auth[_-]?token|oauth[_-]?code|refresh[_-]?token|secret|token)$/i.test(e)}function gr(e){return Eo(e).replace(/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,F)}function Eo(e){let n;try{n=new URL(e)}catch{return bo(e)}for(let r of[...n.searchParams.keys()])hr.has(r.toLowerCase())&&n.searchParams.set(r,F);return n.toString()}function bo(e){let n=e.indexOf("?"),r=e.indexOf("#");if(n===-1||r!==-1&&r<n)return e;let t=e.slice(0,n),o=r===-1?e.slice(n+1):e.slice(n+1,r),s=r===-1?"":e.slice(r),i=new URLSearchParams(o),a=!1;for(let d of[...i.keys()])hr.has(d.toLowerCase())&&(i.set(d,F),a=!0);switch(a){case!0:return`${t}?${i.toString()}${s}`;case!1:return e}}import{mkdirSync as Co,appendFileSync as Oo}from"node:fs";import{dirname as ko}from"node:path";function Ce(e){return e!==void 0&&V(e)?e:void 0}function Qe(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function mr(e){return JSON.stringify(e)}var de,Ro=/(^|[_-])(token|secret|api[_-]?key|authorization|cookie|private[_-]?key|login[_-]?url)([_-]|$)/iu;function ce(e){let n=Po();if(n===void 0)return;let r=Io(n),t=Ao(e),o={schemaVersion:1,provider:e.provider,captureKind:e.captureKind,ordinal:r.nextOrdinal,offsetMs:Math.max(0,Date.now()-r.startedAtMs),...t.rawText===void 0?{}:{rawText:t.rawText},...t.rawValue===void 0?{}:{rawValue:t.rawValue},...e.captureMetadata===void 0?{}:{captureMetadata:le(e.captureMetadata)},...t.transforms.length===0?e.transforms===void 0?{}:{transforms:e.transforms}:{transforms:[...e.transforms??[],...t.transforms]}};r.nextOrdinal+=1,Oo(n,`${mr(o)}
|
|
11
|
+
`,"utf8")}function Po(){let e=process.env.LINZUMI_AGENT_REPLAY_RECORD_FILE?.trim();return e===void 0||e===""?void 0:e}function Io(e){return de!==void 0&&de.path===e||(Co(ko(e),{recursive:!0}),de={path:e,startedAtMs:Date.now(),nextOrdinal:0}),de}function Ao(e){if(process.env.LINZUMI_AGENT_REPLAY_EXACT_RAW==="1")return{rawText:e.rawText,rawValue:e.rawValue,transforms:[]};let n=[],r=e.rawValue===void 0?void 0:le(e.rawValue,"$.rawValue",n);return{rawText:To(e.rawText,n),rawValue:r,transforms:n}}function To(e,n){if(e!==void 0)try{let r=JSON.parse(e);return JSON.stringify(le(r,"$.rawText",n))}catch{return e}}function le(e,n="$",r=[]){if(Array.isArray(e))return e.map((o,s)=>le(o,`${n}[${s}]`,r));if(!V(e))return e;let t=Object.entries(e).map(([o,s])=>{let i=`${n}.${o}`;return Ro.test(o)?(r.push({type:"credential_redaction",path:i}),[o,"[REDACTED]"]):[o,s===void 0?void 0:le(s,i,r)]});return Object.fromEntries(t)}function _r(e){return{name:"linzumi",command:e.command??"linzumi",args:[...e.argsPrefix??[],"mcp","server","--api-url",e.kandanUrl,...e.authFilePath===void 0?[]:["--auth-file",e.authFilePath],...e.delegationAuthFilePath===void 0?[]:["--delegation-auth-file",e.delegationAuthFilePath],...e.ownerUsername===void 0?[]:["--owner-username",e.ownerUsername],...e.cwd===void 0?[]:["--cwd",e.cwd],...e.threadId===void 0?[]:["--thread-id",e.threadId],"--mode",e.operatingMode??"text",...e.toolScope===void 0||e.toolScope==="all"?[]:["--tool-scope",e.toolScope],...e.agentSession===!0?["--agent-session"]:[]],env:{...e.accessToken===void 0?{}:{LINZUMI_MCP_ACCESS_TOKEN:e.accessToken},ELECTRON_RUN_AS_NODE:"1"}}}function en(e){return["-c",`mcp_servers.${e.name}.command=${JSON.stringify(e.command)}`,"-c",`mcp_servers.${e.name}.args=${No(e.args)}`,...Object.entries(e.env).flatMap(([n,r])=>["-c",`mcp_servers.${e.name}.env.${n}=${JSON.stringify(r)}`])]}function No(e){return`[${e.map(n=>JSON.stringify(n)).join(", ")}]`}var Xs=["# Managed by Linzumi - do not edit by hand.","# This isolated CODEX_HOME keeps Linzumi-spawned codex processes off the","# user's ~/.codex config and the macOS Keychain. See codexHome.ts.",'mcp_oauth_credentials_store = "file"','cli_auth_credentials_store = "file"',""].join(`
|
|
12
|
+
`);function xr(){return["-c",'mcp_oauth_credentials_store="file"',"-c",'cli_auth_credentials_store="file"']}var Mo=(()=>{let e=process.env.LINZUMI_CODEX_WS_KEEPALIVE_MS;if(e===void 0)return 2e4;let n=Number.parseInt(e,10);return Number.isInteger(n)&&n>0?n:2e4})();function Lo(e){let n=e;if(typeof n.ping=="function"&&n.readyState===WebSocket.OPEN)try{n.ping()}catch{}}function wr(e,n={}){return["app-server",...$o(n),"--listen",e]}var Uo=["-c","features.apps=false"];function $o(e){return[...Uo,...xr(),...e.model===void 0?[]:["-c",`model=${JSON.stringify(e.model)}`],...e.reasoningEffort===void 0?[]:["-c",`model_reasoning_effort=${JSON.stringify(e.reasoningEffort)}`],...e.fast===!0?["-c",`service_tier=${JSON.stringify("fast")}`]:[],...(e.mcpServers??[]).flatMap(n=>en(n)),...e.modelProvider===void 0?[]:Do(e.modelProvider)]}function Do(e){return["-c",`model_providers.${e.id}.name=${JSON.stringify(e.name)}`,"-c",`model_providers.${e.id}.base_url=${JSON.stringify(e.baseUrl)}`,"-c",`model_providers.${e.id}.env_key=${JSON.stringify(e.envKey)}`,"-c",`model_providers.${e.id}.wire_api=${JSON.stringify(e.wireApi)}`,...Object.entries(e.httpHeaders??{}).flatMap(([n,r])=>["-c",`model_providers.${e.id}.http_headers.${n}=${JSON.stringify(r)}`]),...Object.entries(e.envHttpHeaders??{}).flatMap(([n,r])=>["-c",`model_providers.${e.id}.env_http_headers.${n}=${JSON.stringify(r)}`]),"-c",`model_provider=${JSON.stringify(e.id)}`]}async function Er(e,n=r=>new Xe.default(r)){let r=await Vo(e,n),t=new Map,o=new Set,s=new Set,i=[],a=new Set,d={nextId:1,closeError:void 0},l=f=>{let h=new Error(f);t.forEach(c=>c.reject(h)),t.clear()},u=setInterval(()=>Lo(r),Mo);u.unref?.();let p=f=>{if(clearInterval(u),l(f),d.closeError===void 0){d.closeError=new Error(f);for(let h of a)vr(h,d.closeError);a.clear()}};return r.addEventListener("close",()=>p("codex app-server websocket closed")),r.addEventListener("error",()=>p("codex app-server websocket closed")),r.addEventListener("message",f=>{let h=String(f.data),c=jo(h);if(c!==void 0){if(ce({provider:"codex-app-server",captureKind:Jo(c),rawText:h,rawValue:{message:c}}),"id"in c&&("result"in c||"error"in c)){let g=t.get(c.id);g!==void 0&&(t.delete(c.id),g.resolve(c));return}if("id"in c&&typeof c.method=="string"){Go(r,c,s);return}if(!("id"in c)&&typeof c.method=="string"){let g=c;o.size===0?i.push(g):o.forEach(_=>Sr(_,g))}}}),await Bo(r,t),{request:(f,h)=>{let c=d.nextId;return d.nextId+=1,br(r,t,h===void 0?{jsonrpc:"2.0",id:c,method:f}:{jsonrpc:"2.0",id:c,method:f,params:h})},notify:(f,h)=>{let c=h===void 0?{jsonrpc:"2.0",method:f}:{jsonrpc:"2.0",method:f,params:h};ce({provider:"codex-app-server",captureKind:"outgoing",rawText:JSON.stringify(c),rawValue:{message:c}}),r.send(JSON.stringify(c))},onNotification:f=>{o.add(f),i.splice(0).forEach(h=>Sr(f,h))},onRequest:f=>{s.add(f)},onClose:f=>{if(d.closeError!==void 0){vr(f,d.closeError);return}a.add(f)},close:()=>{clearInterval(u),r.close()}}}function Jo(e){return"id"in e&&("result"in e||"error"in e)?"response":"id"in e&&typeof e.method=="string"?"request":"notification"}function jo(e){let n=String(e);try{let r=JSON.parse(n);if(!V(r))throw new Error("codex app-server sent non-object JSON-RPC message");return r}catch(r){ae("codex.app_server_frame_malformed",{purpose:"codex.app_server",message:r instanceof Error?r.message:String(r),payload:n.slice(0,512),payloadChars:n.length});return}}function Sr(e,n){try{e(n)}catch(r){ae("codex.notification_callback_failed",{purpose:"codex.app_server",method:n.method,message:r instanceof Error?r.message:String(r)})}}function vr(e,n){try{e(n)}catch(r){ae("codex.close_callback_failed",{purpose:"codex.app_server",message:r instanceof Error?r.message:String(r)})}}async function Vo(e,n,r=2e3){let t=Date.now()+r,o;for(;Date.now()<=t;){let s=n(e);try{return await qo(s),s}catch(i){o=i instanceof Error?i:new Error(String(i)),Fo(s)}}throw o??new Error("websocket open failed")}function Fo(e){try{e.close()}catch{}}async function Go(e,n,r){try{if(r.size===0){e.send(JSON.stringify({jsonrpc:"2.0",id:n.id,error:{code:-32601,message:`unhandled Codex app-server request: ${n.method}`}}));return}for(let t of r){let o=await t(n);if(o!==void 0){e.send(JSON.stringify({jsonrpc:"2.0",id:n.id,result:o}));return}}e.send(JSON.stringify({jsonrpc:"2.0",id:n.id,error:{code:-32601,message:`unhandled Codex app-server request: ${n.method}`}}))}catch(t){e.send(JSON.stringify({jsonrpc:"2.0",id:n.id,error:{code:-32e3,message:t instanceof Error?t.message:String(t)}}))}}async function Bo(e,n){let r=await br(e,n,{jsonrpc:"2.0",id:"initialize",method:"initialize",params:{clientInfo:{name:"kandan-local-codex-runner",version:"0.0.1"},capabilities:{experimentalApi:!0}}});if("error"in r)throw new Error(`codex initialize failed: ${r.error.message}`);let t={jsonrpc:"2.0",method:"initialized"};ce({provider:"codex-app-server",captureKind:"outgoing",rawText:JSON.stringify(t),rawValue:{message:t}}),e.send(JSON.stringify(t))}function br(e,n,r){return e.readyState!==WebSocket.OPEN?Promise.reject(new Error("codex app-server websocket is not open")):new Promise((t,o)=>{n.set(r.id,{resolve:t,reject:o}),ce({provider:"codex-app-server",captureKind:"request",rawText:JSON.stringify(r),rawValue:{message:r}}),e.send(JSON.stringify(r))})}function qo(e){return new Promise((n,r)=>{e.addEventListener("open",()=>n(),{once:!0}),e.addEventListener("error",()=>r(new Error("websocket open failed")),{once:!0})})}function Cr(e){let n=e.channelSession;return{...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{reasoningEffort:n.reasoningEffort},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:kr(n.approvalPolicy,n.sandbox),...n.sandbox===void 0?{}:{sandbox:n.sandbox}}}function Or(e){let n=e.channelSession;return{cwd:e.cwd,...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{effort:n.reasoningEffort},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:kr(n.approvalPolicy,n.sandbox),...n.sandbox===void 0?{}:{sandboxPolicy:Wo(n.sandbox,e.cwd)}}}function kr(e,n){switch(e){case void 0:case"default":return"on-request";case"never":return n==="danger-full-access"?"never":"on-request";case"on-request":case"on-failure":return e;default:throw new Error(`unsupported Codex approval policy: ${e}`)}}function Wo(e,n){switch(e){case"danger-full-access":return{type:"dangerFullAccess"};case"read-only":return{type:"readOnly",access:{type:"fullAccess"},networkAccess:!1};case"workspace-write":return{type:"workspaceWrite",writableRoots:[n],readOnlyAccess:{type:"fullAccess"},networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1};default:throw new Error(`unsupported Codex sandbox mode: ${e}`)}}var nn={mcpAuthFileContents:"LINZUMI_CLOUD_MCP_AUTH_JSON",llmProxyToken:"LINZUMI_CLOUD_LLM_PROXY_TOKEN"};function Rr(e){let n;try{n=JSON.parse(Buffer.from(e,"base64").toString("utf8"))}catch{throw new Error("invalid guest cloud turn config payload (not base64 JSON)")}if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("invalid guest cloud turn config payload");let r=n;for(let[t,o]of[["codexVersion",r.codexVersion],["sandbox",r.sandbox],["approvalPolicy",r.approvalPolicy],["kandanUrl",r.kandanUrl],["cwd",r.cwd]])if(typeof o!="string"||o==="")throw new Error(`invalid guest cloud turn config payload (${t} missing)`);if(!Array.isArray(r.input))throw new Error("invalid guest cloud turn config payload (input)");if(typeof r.appServerPort!="number"||!Number.isInteger(r.appServerPort))throw new Error("invalid guest cloud turn config payload (appServerPort)");return r}var Z="/home/agent",zo=`${Z}/.linzumi-provisioned`;var rn="/dev/shm/linzumi",Oi=`${rn}/codex`,ki=`${rn}/mcp-auth.json`;var Ri=`${rn}/codex.env`;var Ni=`${Z}/cloud-supervisor.mjs`,Pr=`${Z}/mcp-server.mjs`,tn=`${Z}/.secrets`,on=`${tn}/mcp-auth.json`,Oe=`${Z}/.codex`,Ir=`${Oe}/linzumi-thread-map.json`;var Yo=3e4,Qo=200;function es(e){return e.replace(/\bsmk_[A-Za-z0-9._-]+/g,"smk_[REDACTED]").replace(/\b(sk|lz|tok|bearer)[-_][A-Za-z0-9._-]{8,}/gi,"$1_[REDACTED]")}function ue(e){process.stdout.write(`${JSON.stringify(e)}
|
|
13
|
+
`)}function ke(e,n,r){ue({phase:"exit",ok:e,reason:es(n),turnMs:r})}function ns(e){return{id:e.id,name:e.name,baseUrl:e.baseUrl,envKey:e.envKey,wireApi:e.wireApi,...e.httpHeaders===void 0?{}:{httpHeaders:{...e.httpHeaders}},...e.envHttpHeaders===void 0?{}:{envHttpHeaders:{...e.envHttpHeaders}}}}function rs(e){if(e.sandbox!=="danger-full-access")throw new Error(`guest cloud turn requires sandbox "danger-full-access", got ${JSON.stringify(e.sandbox)}`);if(e.approvalPolicy!=="never")throw new Error(`guest cloud turn requires approvalPolicy "never", got ${JSON.stringify(e.approvalPolicy)}`)}function ts(e,n=Oe){let r=_r({command:"node",argsPrefix:[Pr],kandanUrl:e.kandanUrl,authFilePath:on,ownerUsername:e.ownerUsername,operatingMode:"text",cwd:e.cwd,threadId:e.threadId,agentSession:!0});return wr(`ws://127.0.0.1:${e.appServerPort}`,{model:e.model,reasoningEffort:e.reasoningEffort,mcpServers:[r],...e.modelProvider===void 0?{}:{modelProvider:ns(e.modelProvider)},env:{CODEX_HOME:n,...Nr(e)}})}function Nr(e){let n=process.env[nn.llmProxyToken];return e.modelProvider===void 0||n===void 0||n===""?{}:{[e.modelProvider.envKey]:n}}function os(e,n){let r=process.env[nn.mcpAuthFileContents];if(r===void 0||r==="")throw new Error("guest cloud turn missing MCP auth-cache (LINZUMI_CLOUD_MCP_AUTH_JSON)");sn(e,{recursive:!0,mode:448}),Ar(e,448),Tr(n,r,{mode:384}),Ar(n,384)}function ss(e){try{Ko(e,{recursive:!0,force:!0})}catch{}}var is=64;function Mr(e){try{let n=JSON.parse(Zo(e,"utf8"));if(typeof n!="object"||n===null||Array.isArray(n))return{};let r={};for(let[t,o]of Object.entries(n))typeof o=="string"&&o!==""&&(r[t]=o);return r}catch{return{}}}function as(e,n,r){try{let t=Mr(e);delete t[n];let o=Object.entries(t),s=o.slice(Math.max(0,o.length-(is-1)));s.push([n,r]),sn(Xo(e),{recursive:!0}),Tr(e,JSON.stringify(Object.fromEntries(s)))}catch{}}var ds=new Set(["turn/completed","turn/failed","turn/aborted"]);function ls(e){if(e==="item/commandExecution/requestApproval"||e==="item/fileChange/requestApproval")return{decision:"approved"}}async function cs(e,n,r){for(;;){if(r.exitCode!==null&&r.exitCode!==void 0)throw new Error(`codex app-server exited before it accepted a connection (code ${r.exitCode})`);try{return await Er(e)}catch(t){if(Date.now()>=n)throw t;await new Promise(o=>setTimeout(o,Qo))}}}async function us(e,n={}){let r=n.now??Date.now,t=n.secretsDir??tn,o=n.mcpAuthPath??on,s=n.codexHome??Oe,i=n.threadMapPath??Ir,a=r();rs(e);let d,l=()=>{try{d?.pid!==void 0&&d.kill("SIGINT")}catch{}};try{os(t,o);let u=ts(e,s),p=`ws://127.0.0.1:${e.appServerPort}`;n.spawnCodex===void 0&&sn(s,{recursive:!0,mode:448}),d=n.spawnCodex?n.spawnCodex(u):Ho("codex",u,{cwd:e.cwd,env:{PATH:process.env.PATH??"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",...process.env.HOME===void 0?{}:{HOME:process.env.HOME},CODEX_HOME:s,...Nr(e)},stdio:["ignore","ignore","inherit"],detached:!1});let y=await cs(p,a+Yo,d);try{y.onRequest?.(_=>ls(_.method));let f=e.codexThreadId,h;if(f!==void 0&&f!==""){let _=Mr(i)[f];_!==void 0&&("error"in await y.request("thread/resume",{threadId:_,...Cr({cwd:e.cwd,channelSession:{model:e.model,reasoningEffort:e.reasoningEffort,approvalPolicy:e.approvalPolicy,sandbox:e.sandbox}})})||(h=_))}if(h===void 0){let _=await y.request("thread/start",{cwd:e.cwd,serviceName:"kandan-cloud-agent",personality:"pragmatic",approvalPolicy:e.approvalPolicy,...e.model===void 0?{}:{model:e.model},...e.sandbox===void 0?{}:{sandbox:e.sandbox}});if("error"in _)throw new Error(`thread/start failed: ${_.error.message}`);let E=Qe(Ce(Ce(_.result)?.thread)?.id);if(E===void 0)throw new Error("thread/start response did not include thread.id");h=E,f!==void 0&&f!==""&&as(i,f,h),ue({phase:"thread",mode:"started"})}else ue({phase:"thread",mode:"resumed"});let c=new Promise((_,E)=>{y.onNotification(b=>{if(ue({phase:"notification",method:b.method}),!ds.has(b.method))return;let N=b.method==="turn/completed";_({ok:N,reason:b.method==="turn/completed"?"turn completed":`turn terminal: ${b.method}`,turnMs:r()-a})}),y.onClose?.(b=>E(new Error(`codex connection closed before a turn terminal: ${b?.message??"connection closed"}`))),d?.once("exit",b=>E(new Error(`codex app-server process exited mid-turn (code ${b})`)))}),g=await y.request("turn/start",{threadId:h,input:e.input,...Or({cwd:e.cwd,channelSession:{model:e.model,reasoningEffort:e.reasoningEffort,approvalPolicy:e.approvalPolicy,sandbox:e.sandbox}})});if("error"in g)throw new Error(`turn/start failed: ${g.error.message}`);return await c}finally{y.close()}}finally{l(),ss(t)}}async function Lr(e=process.argv){let n=e[2];if(n==="--selftest")return ue({phase:"selftest",ok:!0,node:process.version}),0;if(n===void 0||n==="")return ke(!1,"missing turn config argv[2]",0),1;let r;try{r=Rr(n)}catch(t){return ke(!1,`config decode failed: ${t instanceof Error?t.message:String(t)}`,0),1}try{let t=await us(r);return ke(t.ok,t.reason,t.turnMs),t.ok?0:1}catch(t){return ke(!1,t instanceof Error?t.message:String(t),0),1}}Lr(process.argv).then(e=>{process.exitCode=e}).catch(e=>{process.stdout.write(`${JSON.stringify({phase:"exit",ok:!1,reason:e instanceof Error?e.message:String(e),turnMs:0})}
|
|
14
|
+
`),process.exitCode=1});
|