@vibelet/cli 0.1.2 → 0.1.3
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/index.cjs +47 -47
- package/package.json +18 -1
package/dist/index.cjs
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
"use strict";var Kc=Object.create;var Zi=Object.defineProperty;var Xc=Object.getOwnPropertyDescriptor;var Zc=Object.getOwnPropertyNames;var Qc=Object.getPrototypeOf,eu=Object.prototype.hasOwnProperty;var m=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tu=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Zc(e))!eu.call(t,i)&&i!==n&&Zi(t,i,{get:()=>e[i],enumerable:!(r=Xc(e,i))||r.enumerable});return t};var ze=(t,e,n)=>(n=t!=null?Kc(Qc(t)):{},tu(e||!t||!t.__esModule?Zi(n,"default",{value:t,enumerable:!0}):n,t));var le=m((Dg,ts)=>{"use strict";var Qi=["nodebuffer","arraybuffer","fragments"],es=typeof Blob<"u";es&&Qi.push("blob");ts.exports={BINARY_TYPES:Qi,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:es,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var xt=m((Hg,an)=>{"use strict";var{EMPTY_BUFFER:nu}=le(),nr=Buffer[Symbol.species];function ru(t,e){if(t.length===0)return nu;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let i=0;i<t.length;i++){let s=t[i];n.set(s,r),r+=s.length}return r<e?new nr(n.buffer,n.byteOffset,r):n}function ns(t,e,n,r,i){for(let s=0;s<i;s++)n[r+s]=t[s]^e[s&3]}function rs(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function iu(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function rr(t){if(rr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new nr(t):ArrayBuffer.isView(t)?e=new nr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),rr.readOnly=!1),e}an.exports={concat:ru,mask:ns,toArrayBuffer:iu,toBuffer:rr,unmask:rs};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");an.exports.mask=function(e,n,r,i,s){s<48?ns(e,n,r,i,s):t.mask(e,n,r,i,s)},an.exports.unmask=function(e,n){e.length<32?rs(e,n):t.unmask(e,n)}}catch{}});var os=m((Fg,ss)=>{"use strict";var is=Symbol("kDone"),ir=Symbol("kRun"),sr=class{constructor(e){this[is]=()=>{this.pending--,this[ir]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[ir]()}[ir](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[is])}}};ss.exports=sr});var At=m((Ug,us)=>{"use strict";var Et=require("zlib"),as=xt(),su=os(),{kStatusCode:ls}=le(),ou=Buffer[Symbol.species],au=Buffer.from([0,0,255,255]),cn=Symbol("permessage-deflate"),ce=Symbol("total-length"),$e=Symbol("callback"),ge=Symbol("buffers"),Ve=Symbol("error"),ln,or=class{constructor(e,n,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!n,this._deflate=null,this._inflate=null,this.params=null,!ln){let i=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ln=new su(i)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[$e];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(i=>!(n.serverNoContextTakeover===!1&&i.server_no_context_takeover||i.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>i.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!i.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let i=n[r];if(i.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(i=i[0],r==="client_max_window_bits"){if(i!==!0){let s=+i;if(!Number.isInteger(s)||s<8||s>15)throw new TypeError(`Invalid value for parameter "${r}": ${i}`);i=s}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${i}`)}else if(r==="server_max_window_bits"){let s=+i;if(!Number.isInteger(s)||s<8||s>15)throw new TypeError(`Invalid value for parameter "${r}": ${i}`);i=s}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(i!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${i}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=i})}),e}decompress(e,n,r){ln.add(i=>{this._decompress(e,n,(s,o)=>{i(),r(s,o)})})}compress(e,n,r){ln.add(i=>{this._compress(e,n,(s,o)=>{i(),r(s,o)})})}_decompress(e,n,r){let i=this._isServer?"client":"server";if(!this._inflate){let s=`${i}_max_window_bits`,o=typeof this.params[s]!="number"?Et.Z_DEFAULT_WINDOWBITS:this.params[s];this._inflate=Et.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[cn]=this,this._inflate[ce]=0,this._inflate[ge]=[],this._inflate.on("error",cu),this._inflate.on("data",cs)}this._inflate[$e]=r,this._inflate.write(e),n&&this._inflate.write(au),this._inflate.flush(()=>{let s=this._inflate[Ve];if(s){this._inflate.close(),this._inflate=null,r(s);return}let o=as.concat(this._inflate[ge],this._inflate[ce]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[ce]=0,this._inflate[ge]=[],n&&this.params[`${i}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let i=this._isServer?"server":"client";if(!this._deflate){let s=`${i}_max_window_bits`,o=typeof this.params[s]!="number"?Et.Z_DEFAULT_WINDOWBITS:this.params[s];this._deflate=Et.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[ce]=0,this._deflate[ge]=[],this._deflate.on("data",lu)}this._deflate[$e]=r,this._deflate.write(e),this._deflate.flush(Et.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let s=as.concat(this._deflate[ge],this._deflate[ce]);n&&(s=new ou(s.buffer,s.byteOffset,s.length-4)),this._deflate[$e]=null,this._deflate[ce]=0,this._deflate[ge]=[],n&&this.params[`${i}_no_context_takeover`]&&this._deflate.reset(),r(null,s)})}};us.exports=or;function lu(t){this[ge].push(t),this[ce]+=t.length}function cs(t){if(this[ce]+=t.length,this[cn]._maxPayload<1||this[ce]<=this[cn]._maxPayload){this[ge].push(t);return}this[Ve]=new RangeError("Max payload size exceeded"),this[Ve].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Ve][ls]=1009,this.removeListener("data",cs),this.reset()}function cu(t){if(this[cn]._inflate=null,this[Ve]){this[$e](this[Ve]);return}t[ls]=1007,this[$e](t)}});var Ye=m((qg,un)=>{"use strict";var{isUtf8:ds}=require("buffer"),{hasBlob:uu}=le(),du=[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 fu(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function ar(t){let e=t.length,n=0;for(;n<e;)if((t[n]&128)===0)n++;else if((t[n]&224)===192){if(n+1===e||(t[n+1]&192)!==128||(t[n]&254)===192)return!1;n+=2}else if((t[n]&240)===224){if(n+2>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||t[n]===224&&(t[n+1]&224)===128||t[n]===237&&(t[n+1]&224)===160)return!1;n+=3}else if((t[n]&248)===240){if(n+3>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||(t[n+3]&192)!==128||t[n]===240&&(t[n+1]&240)===128||t[n]===244&&t[n+1]>143||t[n]>244)return!1;n+=4}else return!1;return!0}function hu(t){return uu&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}un.exports={isBlob:hu,isValidStatusCode:fu,isValidUTF8:ar,tokenChars:du};if(ds)un.exports.isValidUTF8=function(t){return t.length<24?ar(t):ds(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");un.exports.isValidUTF8=function(e){return e.length<32?ar(e):t(e)}}catch{}});var fr=m((Wg,_s)=>{"use strict";var{Writable:pu}=require("stream"),fs=At(),{BINARY_TYPES:gu,EMPTY_BUFFER:hs,kStatusCode:mu,kWebSocket:yu}=le(),{concat:lr,toArrayBuffer:_u,unmask:Su}=xt(),{isValidStatusCode:vu,isValidUTF8:ps}=Ye(),dn=Buffer[Symbol.species],V=0,gs=1,ms=2,ys=3,cr=4,ur=5,fn=6,dr=class extends pu{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||gu[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[yu]=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=V}_write(e,n,r){if(this._opcode===8&&this._state==V)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new dn(r.buffer,r.byteOffset+e,r.length-e),new dn(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],i=n.length-e;e>=r.length?n.set(this._buffers.shift(),i):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),i),this._buffers[0]=new dn(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case V:this.getInfo(e);break;case gs:this.getPayloadLength16(e);break;case ms:this.getPayloadLength64(e);break;case ys:this.getMask();break;case cr:this.getData(e);break;case ur:case fn:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[0]&48)!==0){let i=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(i);return}let r=(n[0]&64)===64;if(r&&!this._extensions[fs.extensionName]){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(!this._fragmented){let i=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._compressed=r}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let i=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(i);return}if(r){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let i=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(i);return}}else{let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(i);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let i=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(i);return}}else if(this._masked){let i=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(i);return}this._payloadLength===126?this._state=gs:this._payloadLength===127?this._state=ms:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let n=this.consume(8),r=n.readUInt32BE(0);if(r>Math.pow(2,21)-1){let i=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(i);return}this._payloadLength=r*Math.pow(2,32)+n.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=ys:this._state=cr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=cr}getData(e){let n=hs;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}n=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Su(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=ur,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[fs.extensionName].decompress(e,this._fin,(i,s)=>{if(i)return n(i);if(s.length){if(this._messageLength+=s.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(o);return}this._fragments.push(s)}this.dataMessage(n),this._state===V&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=V;return}let n=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let i;this._binaryType==="nodebuffer"?i=lr(r,n):this._binaryType==="arraybuffer"?i=_u(lr(r,n)):this._binaryType==="blob"?i=new Blob(r):i=r,this._allowSynchronousEvents?(this.emit("message",i,!0),this._state=V):(this._state=fn,setImmediate(()=>{this.emit("message",i,!0),this._state=V,this.startLoop(e)}))}else{let i=lr(r,n);if(!this._skipUTF8Validation&&!ps(i)){let s=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(s);return}this._state===ur||this._allowSynchronousEvents?(this.emit("message",i,!1),this._state=V):(this._state=fn,setImmediate(()=>{this.emit("message",i,!1),this._state=V,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,hs),this.end();else{let r=e.readUInt16BE(0);if(!vu(r)){let s=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(s);return}let i=new dn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!ps(i)){let s=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(s);return}this._loop=!1,this.emit("conclude",r,i),this.end()}this._state=V;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=V):(this._state=fn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=V,this.startLoop(n)}))}createError(e,n,r,i,s){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=s,o[mu]=i,o}};_s.exports=dr});var gr=m((Gg,ws)=>{"use strict";var{Duplex:jg}=require("stream"),{randomFillSync:wu}=require("crypto"),Ss=At(),{EMPTY_BUFFER:bu,kWebSocket:Iu,NOOP:xu}=le(),{isBlob:Je,isValidStatusCode:Eu}=Ye(),{mask:vs,toBuffer:Re}=xt(),Y=Symbol("kByteLength"),Au=Buffer.alloc(4),hn=8*1024,Pe,Ke=hn,ee=0,Cu=1,Tu=2,hr=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=ee,this.onerror=xu,this[Iu]=void 0}static frame(e,n){let r,i=!1,s=2,o=!1;n.mask&&(r=n.maskBuffer||Au,n.generateMask?n.generateMask(r):(Ke===hn&&(Pe===void 0&&(Pe=Buffer.alloc(hn)),wu(Pe,0,hn),Ke=0),r[0]=Pe[Ke++],r[1]=Pe[Ke++],r[2]=Pe[Ke++],r[3]=Pe[Ke++]),o=(r[0]|r[1]|r[2]|r[3])===0,s=6);let a;typeof e=="string"?(!n.mask||o)&&n[Y]!==void 0?a=n[Y]:(e=Buffer.from(e),a=e.length):(a=e.length,i=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(s+=8,l=127):a>125&&(s+=2,l=126);let c=Buffer.allocUnsafe(i?a+s:s);return c[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),n.mask?(c[1]|=128,c[s-4]=r[0],c[s-3]=r[1],c[s-2]=r[2],c[s-1]=r[3],o?[c,e]:i?(vs(e,r,c,s,a),[c]):(vs(e,r,e,0,a),[c,e])):[c,e]}close(e,n,r,i){let s;if(e===void 0)s=bu;else{if(typeof e!="number"||!Eu(e))throw new TypeError("First argument must be a valid error code number");if(n===void 0||!n.length)s=Buffer.allocUnsafe(2),s.writeUInt16BE(e,0);else{let a=Buffer.byteLength(n);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");s=Buffer.allocUnsafe(2+a),s.writeUInt16BE(e,0),typeof n=="string"?s.write(n,2):s.set(n,2)}}let o={[Y]:s.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==ee?this.enqueue([this.dispatch,s,!1,o,i]):this.sendFrame(t.frame(s,o),i)}ping(e,n,r){let i,s;if(typeof e=="string"?(i=Buffer.byteLength(e),s=!1):Je(e)?(i=e.size,s=!1):(e=Re(e),i=e.length,s=Re.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Y]:i,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:s,rsv1:!1};Je(e)?this._state!==ee?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ee?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let i,s;if(typeof e=="string"?(i=Buffer.byteLength(e),s=!1):Je(e)?(i=e.size,s=!1):(e=Re(e),i=e.length,s=Re.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Y]:i,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:s,rsv1:!1};Je(e)?this._state!==ee?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ee?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let i=this._extensions[Ss.extensionName],s=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):Je(e)?(a=e.size,l=!1):(e=Re(e),a=e.length,l=Re.readOnly),this._firstFragment?(this._firstFragment=!1,o&&i&&i.params[i._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=i._threshold),this._compress=o):(o=!1,s=0),n.fin&&(this._firstFragment=!0);let c={[Y]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:s,readOnly:l,rsv1:o};Je(e)?this._state!==ee?this.enqueue([this.getBlobData,e,this._compress,c,r]):this.getBlobData(e,this._compress,c,r):this._state!==ee?this.enqueue([this.dispatch,e,this._compress,c,r]):this.dispatch(e,this._compress,c,r)}getBlobData(e,n,r,i){this._bufferedBytes+=r[Y],this._state=Tu,e.arrayBuffer().then(s=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(pr,this,a,i);return}this._bufferedBytes-=r[Y];let o=Re(s);n?this.dispatch(o,n,r,i):(this._state=ee,this.sendFrame(t.frame(o,r),i),this.dequeue())}).catch(s=>{process.nextTick(ku,this,s,i)})}dispatch(e,n,r,i){if(!n){this.sendFrame(t.frame(e,r),i);return}let s=this._extensions[Ss.extensionName];this._bufferedBytes+=r[Y],this._state=Cu,s.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");pr(this,l,i);return}this._bufferedBytes-=r[Y],this._state=ee,r.readOnly=!1,this.sendFrame(t.frame(a,r),i),this.dequeue()})}dequeue(){for(;this._state===ee&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Y],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Y],this._queue.push(e)}sendFrame(e,n){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],n),this._socket.uncork()):this._socket.write(e[0],n)}};ws.exports=hr;function pr(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let i=t._queue[r],s=i[i.length-1];typeof s=="function"&&s(e)}}function ku(t,e,n){pr(t,e,n),t.onerror(e)}});var Rs=m((zg,ks)=>{"use strict";var{kForOnEventAttribute:Ct,kListener:mr}=le(),bs=Symbol("kCode"),Is=Symbol("kData"),xs=Symbol("kError"),Es=Symbol("kMessage"),As=Symbol("kReason"),Xe=Symbol("kTarget"),Cs=Symbol("kType"),Ts=Symbol("kWasClean"),ue=class{constructor(e){this[Xe]=null,this[Cs]=e}get target(){return this[Xe]}get type(){return this[Cs]}};Object.defineProperty(ue.prototype,"target",{enumerable:!0});Object.defineProperty(ue.prototype,"type",{enumerable:!0});var Le=class extends ue{constructor(e,n={}){super(e),this[bs]=n.code===void 0?0:n.code,this[As]=n.reason===void 0?"":n.reason,this[Ts]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[bs]}get reason(){return this[As]}get wasClean(){return this[Ts]}};Object.defineProperty(Le.prototype,"code",{enumerable:!0});Object.defineProperty(Le.prototype,"reason",{enumerable:!0});Object.defineProperty(Le.prototype,"wasClean",{enumerable:!0});var Ze=class extends ue{constructor(e,n={}){super(e),this[xs]=n.error===void 0?null:n.error,this[Es]=n.message===void 0?"":n.message}get error(){return this[xs]}get message(){return this[Es]}};Object.defineProperty(Ze.prototype,"error",{enumerable:!0});Object.defineProperty(Ze.prototype,"message",{enumerable:!0});var Tt=class extends ue{constructor(e,n={}){super(e),this[Is]=n.data===void 0?null:n.data}get data(){return this[Is]}};Object.defineProperty(Tt.prototype,"data",{enumerable:!0});var Ru={addEventListener(t,e,n={}){for(let i of this.listeners(t))if(!n[Ct]&&i[mr]===e&&!i[Ct])return;let r;if(t==="message")r=function(s,o){let a=new Tt("message",{data:o?s:s.toString()});a[Xe]=this,pn(e,this,a)};else if(t==="close")r=function(s,o){let a=new Le("close",{code:s,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[Xe]=this,pn(e,this,a)};else if(t==="error")r=function(s){let o=new Ze("error",{error:s,message:s.message});o[Xe]=this,pn(e,this,o)};else if(t==="open")r=function(){let s=new ue("open");s[Xe]=this,pn(e,this,s)};else return;r[Ct]=!!n[Ct],r[mr]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[mr]===e&&!n[Ct]){this.removeListener(t,n);break}}};ks.exports={CloseEvent:Le,ErrorEvent:Ze,Event:ue,EventTarget:Ru,MessageEvent:Tt};function pn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var yr=m(($g,Ps)=>{"use strict";var{tokenChars:kt}=Ye();function se(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Pu(t){let e=Object.create(null),n=Object.create(null),r=!1,i=!1,s=!1,o,a,l=-1,c=-1,u=-1,d=0;for(;d<t.length;d++)if(c=t.charCodeAt(d),o===void 0)if(u===-1&&kt[c]===1)l===-1&&(l=d);else if(d!==0&&(c===32||c===9))u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let h=t.slice(l,u);c===44?(se(e,h,n),n=Object.create(null)):o=h,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===void 0)if(u===-1&&kt[c]===1)l===-1&&(l=d);else if(c===32||c===9)u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d),se(n,t.slice(l,u),!0),c===44&&(se(e,o,n),n=Object.create(null),o=void 0),l=u=-1}else if(c===61&&l!==-1&&u===-1)a=t.slice(l,d),l=u=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(i){if(kt[c]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:r||(r=!0),i=!1}else if(s)if(kt[c]===1)l===-1&&(l=d);else if(c===34&&l!==-1)s=!1,u=d;else if(c===92)i=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(c===34&&t.charCodeAt(d-1)===61)s=!0;else if(u===-1&&kt[c]===1)l===-1&&(l=d);else if(l!==-1&&(c===32||c===9))u===-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let h=t.slice(l,u);r&&(h=h.replace(/\\/g,""),r=!1),se(n,a,h),c===44&&(se(e,o,n),n=Object.create(null),o=void 0),a=void 0,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(l===-1||s||c===32||c===9)throw new SyntaxError("Unexpected end of input");u===-1&&(u=d);let f=t.slice(l,u);return o===void 0?se(e,f,n):(a===void 0?se(n,f,!0):r?se(n,a,f.replace(/\\/g,"")):se(n,a,f),se(e,o,n)),e}function Lu(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(i=>{let s=r[i];return Array.isArray(s)||(s=[s]),s.map(o=>o===!0?i:`${i}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Ps.exports={format:Lu,parse:Pu}});var _n=m((Jg,js)=>{"use strict";var Nu=require("events"),Ou=require("https"),Mu=require("http"),Os=require("net"),Bu=require("tls"),{randomBytes:Du,createHash:Hu}=require("crypto"),{Duplex:Vg,Readable:Yg}=require("stream"),{URL:_r}=require("url"),me=At(),Fu=fr(),Uu=gr(),{isBlob:qu}=Ye(),{BINARY_TYPES:Ls,CLOSE_TIMEOUT:Wu,EMPTY_BUFFER:gn,GUID:ju,kForOnEventAttribute:Sr,kListener:Gu,kStatusCode:zu,kWebSocket:N,NOOP:Ms}=le(),{EventTarget:{addEventListener:$u,removeEventListener:Vu}}=Rs(),{format:Yu,parse:Ju}=yr(),{toBuffer:Ku}=xt(),Bs=Symbol("kAborted"),vr=[8,13],de=["CONNECTING","OPEN","CLOSING","CLOSED"],Xu=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,E=class t extends Nu{constructor(e,n,r){super(),this._binaryType=Ls[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=gn,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),Ds(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Ls.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}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(e,n,r){let i=new Fu({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),s=new Uu(e,this._extensions,r.generateMask);this._receiver=i,this._sender=s,this._socket=e,i[N]=this,s[N]=this,e[N]=this,i.on("conclude",ed),i.on("drain",td),i.on("error",nd),i.on("message",rd),i.on("ping",id),i.on("pong",sd),s.onerror=od,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",Us),e.on("data",yn),e.on("end",qs),e.on("error",Ws),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[me.extensionName]&&this._extensions[me.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,n){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Fs(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){wr(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||gn,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){wr(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||gn,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){wr(this,e,r);return}let i={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[me.extensionName]||(i.compress=!1),this._sender.send(e||gn,i,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(E,"CONNECTING",{enumerable:!0,value:de.indexOf("CONNECTING")});Object.defineProperty(E.prototype,"CONNECTING",{enumerable:!0,value:de.indexOf("CONNECTING")});Object.defineProperty(E,"OPEN",{enumerable:!0,value:de.indexOf("OPEN")});Object.defineProperty(E.prototype,"OPEN",{enumerable:!0,value:de.indexOf("OPEN")});Object.defineProperty(E,"CLOSING",{enumerable:!0,value:de.indexOf("CLOSING")});Object.defineProperty(E.prototype,"CLOSING",{enumerable:!0,value:de.indexOf("CLOSING")});Object.defineProperty(E,"CLOSED",{enumerable:!0,value:de.indexOf("CLOSED")});Object.defineProperty(E.prototype,"CLOSED",{enumerable:!0,value:de.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(E.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(E.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Sr])return e[Gu];return null},set(e){for(let n of this.listeners(t))if(n[Sr]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[Sr]:!0})}})});E.prototype.addEventListener=$u;E.prototype.removeEventListener=Vu;js.exports=E;function Ds(t,e,n,r){let i={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Wu,protocolVersion:vr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=i.autoPong,t._closeTimeout=i.closeTimeout,!vr.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${vr.join(", ")})`);let s;if(e instanceof _r)s=e;else try{s=new _r(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}s.protocol==="http:"?s.protocol="ws:":s.protocol==="https:"&&(s.protocol="wss:"),t._url=s.href;let o=s.protocol==="wss:",a=s.protocol==="ws+unix:",l;if(s.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!s.pathname?l="The URL's pathname is empty":s.hash&&(l="The URL contains a fragment identifier"),l){let p=new SyntaxError(l);if(t._redirects===0)throw p;mn(t,p);return}let c=o?443:80,u=Du(16).toString("base64"),d=o?Ou.request:Mu.request,f=new Set,h;if(i.createConnection=i.createConnection||(o?Qu:Zu),i.defaultPort=i.defaultPort||c,i.port=s.port||c,i.host=s.hostname.startsWith("[")?s.hostname.slice(1,-1):s.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":u,Connection:"Upgrade",Upgrade:"websocket"},i.path=s.pathname+s.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(h=new me(i.perMessageDeflate!==!0?i.perMessageDeflate:{},!1,i.maxPayload),i.headers["Sec-WebSocket-Extensions"]=Yu({[me.extensionName]:h.offer()})),n.length){for(let p of n){if(typeof p!="string"||!Xu.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}i.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(s.username||s.password)&&(i.auth=`${s.username}:${s.password}`),a){let p=i.path.split(":");i.socketPath=p[0],i.path=p[1]}let g;if(i.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?i.socketPath:s.host;let p=r&&r.headers;if(r={...r,headers:{}},p)for(let[y,_]of Object.entries(p))r.headers[y.toLowerCase()]=_}else if(t.listenerCount("redirect")===0){let p=a?t._originalIpc?i.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:s.host===t._originalHostOrSocketPath;(!p||t._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,p||delete i.headers.host,i.auth=void 0)}i.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),g=t._req=d(i),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(i);i.timeout&&g.on("timeout",()=>{z(t,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[Bs]||(g=t._req=null,mn(t,p))}),g.on("response",p=>{let y=p.headers.location,_=p.statusCode;if(y&&i.followRedirects&&_>=300&&_<400){if(++t._redirects>i.maxRedirects){z(t,g,"Maximum redirects exceeded");return}g.abort();let G;try{G=new _r(y,e)}catch{let C=new SyntaxError(`Invalid URL: ${y}`);mn(t,C);return}Ds(t,G,n,r)}else t.emit("unexpected-response",g,p)||z(t,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,y,_)=>{if(t.emit("upgrade",p),t.readyState!==E.CONNECTING)return;g=t._req=null;let G=p.headers.upgrade;if(G===void 0||G.toLowerCase()!=="websocket"){z(t,y,"Invalid Upgrade header");return}let re=Hu("sha1").update(u+ju).digest("base64");if(p.headers["sec-websocket-accept"]!==re){z(t,y,"Invalid Sec-WebSocket-Accept header");return}let C=p.headers["sec-websocket-protocol"],L;if(C!==void 0?f.size?f.has(C)||(L="Server sent an invalid subprotocol"):L="Server sent a subprotocol but none was requested":f.size&&(L="Server sent no subprotocol"),L){z(t,y,L);return}C&&(t._protocol=C);let $=p.headers["sec-websocket-extensions"];if($!==void 0){if(!h){z(t,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ie;try{ie=Ju($)}catch{z(t,y,"Invalid Sec-WebSocket-Extensions header");return}let Ge=Object.keys(ie);if(Ge.length!==1||Ge[0]!==me.extensionName){z(t,y,"Server indicated an extension that was not requested");return}try{h.accept(ie[me.extensionName])}catch{z(t,y,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[me.extensionName]=h}t.setSocket(y,_,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation})}),i.finishRequest?i.finishRequest(g,t):g.end()}function mn(t,e){t._readyState=E.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function Zu(t){return t.path=t.socketPath,Os.connect(t)}function Qu(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=Os.isIP(t.host)?"":t.host),Bu.connect(t)}function z(t,e,n){t._readyState=E.CLOSING;let r=new Error(n);Error.captureStackTrace(r,z),e.setHeader?(e[Bs]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(mn,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function wr(t,e,n){if(e){let r=qu(e)?e.size:Ku(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${de[t.readyState]})`);process.nextTick(n,r)}}function ed(t,e){let n=this[N];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[N]!==void 0&&(n._socket.removeListener("data",yn),process.nextTick(Hs,n._socket),t===1005?n.close():n.close(t,e))}function td(){let t=this[N];t.isPaused||t._socket.resume()}function nd(t){let e=this[N];e._socket[N]!==void 0&&(e._socket.removeListener("data",yn),process.nextTick(Hs,e._socket),e.close(t[zu])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function Ns(){this[N].emitClose()}function rd(t,e){this[N].emit("message",t,e)}function id(t){let e=this[N];e._autoPong&&e.pong(t,!this._isServer,Ms),e.emit("ping",t)}function sd(t){this[N].emit("pong",t)}function Hs(t){t.resume()}function od(t){let e=this[N];e.readyState!==E.CLOSED&&(e.readyState===E.OPEN&&(e._readyState=E.CLOSING,Fs(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Fs(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Us(){let t=this[N];if(this.removeListener("close",Us),this.removeListener("data",yn),this.removeListener("end",qs),t._readyState=E.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[N]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Ns),t._receiver.on("finish",Ns))}function yn(t){this[N]._receiver.write(t)||this.pause()}function qs(){let t=this[N];t._readyState=E.CLOSING,t._receiver.end(),this.end()}function Ws(){let t=this[N];this.removeListener("error",Ws),this.on("error",Ms),t&&(t._readyState=E.CLOSING,this.destroy())}});var Vs=m((Xg,$s)=>{"use strict";var Kg=_n(),{Duplex:ad}=require("stream");function Gs(t){t.emit("close")}function ld(){!this.destroyed&&this._writableState.finished&&this.destroy()}function zs(t){this.removeListener("error",zs),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function cd(t,e){let n=!0,r=new ad({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(s,o){let a=!o&&r._readableState.objectMode?s.toString():s;r.push(a)||t.pause()}),t.once("error",function(s){r.destroyed||(n=!1,r.destroy(s))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(i,s){if(t.readyState===t.CLOSED){s(i),process.nextTick(Gs,r);return}let o=!1;t.once("error",function(l){o=!0,s(l)}),t.once("close",function(){o||s(i),process.nextTick(Gs,r)}),n&&t.terminate()},r._final=function(i){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(i)});return}t._socket!==null&&(t._socket._writableState.finished?(i(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){i()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(i,s,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(i,s,o)});return}t.send(i,o)},r.on("end",ld),r.on("error",zs),r}$s.exports=cd});var Js=m((Zg,Ys)=>{"use strict";var{tokenChars:ud}=Ye();function dd(t){let e=new Set,n=-1,r=-1,i=0;for(i;i<t.length;i++){let o=t.charCodeAt(i);if(r===-1&&ud[o]===1)n===-1&&(n=i);else if(i!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=i);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${i}`);r===-1&&(r=i);let a=t.slice(n,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${i}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let s=t.slice(n,i);if(e.has(s))throw new SyntaxError(`The "${s}" subprotocol is duplicated`);return e.add(s),e}Ys.exports={parse:dd}});var no=m((em,to)=>{"use strict";var fd=require("events"),Sn=require("http"),{Duplex:Qg}=require("stream"),{createHash:hd}=require("crypto"),Ks=yr(),Ne=At(),pd=Js(),gd=_n(),{CLOSE_TIMEOUT:md,GUID:yd,kWebSocket:_d}=le(),Sd=/^[+/0-9A-Za-z]{22}==$/,Xs=0,Zs=1,eo=2,br=class extends fd{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:md,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:gd,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=Sn.createServer((r,i)=>{let s=Sn.STATUS_CODES[426];i.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"}),i.end(s)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=vd(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(i,s,o)=>{this.handleUpgrade(i,s,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Xs}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===eo){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Rt,this);return}if(e&&this.once("close",e),this._state!==Zs)if(this._state=Zs,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(Rt,this):process.nextTick(Rt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Rt(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,i){n.on("error",Qs);let s=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Oe(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Oe(this,e,n,400,"Invalid Upgrade header");return}if(s===void 0||!Sd.test(s)){Oe(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Oe(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Pt(n,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=pd.parse(l)}catch{Oe(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let u=e.headers["sec-websocket-extensions"],d={};if(this.options.perMessageDeflate&&u!==void 0){let f=new Ne(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=Ks.parse(u);h[Ne.extensionName]&&(f.accept(h[Ne.extensionName]),d[Ne.extensionName]=f)}catch{Oe(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(h,g,p,y)=>{if(!h)return Pt(n,g||401,p,y);this.completeUpgrade(d,s,c,e,n,r,i)});return}if(!this.options.verifyClient(f))return Pt(n,401)}this.completeUpgrade(d,s,c,e,n,r,i)}completeUpgrade(e,n,r,i,s,o,a){if(!s.readable||!s.writable)return s.destroy();if(s[_d])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Xs)return Pt(s,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${hd("sha1").update(n+yd).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(r.size){let d=this.options.handleProtocols?this.options.handleProtocols(r,i):r.values().next().value;d&&(c.push(`Sec-WebSocket-Protocol: ${d}`),u._protocol=d)}if(e[Ne.extensionName]){let d=e[Ne.extensionName].params,f=Ks.format({[Ne.extensionName]:[d]});c.push(`Sec-WebSocket-Extensions: ${f}`),u._extensions=e}this.emit("headers",c,i),s.write(c.concat(`\r
|
|
1
|
+
"use strict";var iu=Object.create;var ai=Object.defineProperty;var ou=Object.getOwnPropertyDescriptor;var au=Object.getOwnPropertyNames;var lu=Object.getPrototypeOf,cu=Object.prototype.hasOwnProperty;var m=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var uu=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of au(e))!cu.call(t,s)&&s!==n&&ai(t,s,{get:()=>e[s],enumerable:!(r=ou(e,s))||r.enumerable});return t};var Ve=(t,e,n)=>(n=t!=null?iu(lu(t)):{},uu(e||!t||!t.__esModule?ai(n,"default",{value:t,enumerable:!0}):n,t));var ce=m((Kg,ui)=>{"use strict";var li=["nodebuffer","arraybuffer","fragments"],ci=typeof Blob<"u";ci&&li.push("blob");ui.exports={BINARY_TYPES:li,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:ci,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var At=m((Xg,un)=>{"use strict";var{EMPTY_BUFFER:du}=ce(),dr=Buffer[Symbol.species];function fu(t,e){if(t.length===0)return du;if(t.length===1)return t[0];let n=Buffer.allocUnsafe(e),r=0;for(let s=0;s<t.length;s++){let i=t[s];n.set(i,r),r+=i.length}return r<e?new dr(n.buffer,n.byteOffset,r):n}function di(t,e,n,r,s){for(let i=0;i<s;i++)n[r+i]=t[i]^e[i&3]}function fi(t,e){for(let n=0;n<t.length;n++)t[n]^=e[n&3]}function hu(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function fr(t){if(fr.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new dr(t):ArrayBuffer.isView(t)?e=new dr(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),fr.readOnly=!1),e}un.exports={concat:fu,mask:di,toArrayBuffer:hu,toBuffer:fr,unmask:fi};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");un.exports.mask=function(e,n,r,s,i){i<48?di(e,n,r,s,i):t.mask(e,n,r,s,i)},un.exports.unmask=function(e,n){e.length<32?fi(e,n):t.unmask(e,n)}}catch{}});var gi=m((Zg,pi)=>{"use strict";var hi=Symbol("kDone"),hr=Symbol("kRun"),pr=class{constructor(e){this[hi]=()=>{this.pending--,this[hr]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[hr]()}[hr](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[hi])}}};pi.exports=pr});var Ct=m((Qg,_i)=>{"use strict";var kt=require("zlib"),mi=At(),pu=gi(),{kStatusCode:yi}=ce(),gu=Buffer[Symbol.species],mu=Buffer.from([0,0,255,255]),fn=Symbol("permessage-deflate"),ue=Symbol("total-length"),Ye=Symbol("callback"),ge=Symbol("buffers"),Je=Symbol("error"),dn,gr=class{constructor(e,n,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!n,this._deflate=null,this._inflate=null,this.params=null,!dn){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;dn=new pu(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[Ye];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let n=this._options,r=e.find(s=>!(n.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(n.serverMaxWindowBits===!1||typeof n.serverMaxWindowBits=="number"&&n.serverMaxWindowBits>s.server_max_window_bits)||typeof n.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!r)throw new Error("None of the extension offers can be accepted");return n.serverNoContextTakeover&&(r.server_no_context_takeover=!0),n.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof n.serverMaxWindowBits=="number"&&(r.server_max_window_bits=n.serverMaxWindowBits),typeof n.clientMaxWindowBits=="number"?r.client_max_window_bits=n.clientMaxWindowBits:(r.client_max_window_bits===!0||n.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}acceptAsClient(e){let n=e[0];if(this._options.clientNoContextTakeover===!1&&n.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!n.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(n.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&n.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return n}normalizeParams(e){return e.forEach(n=>{Object.keys(n).forEach(r=>{let s=n[r];if(s.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(s=s[0],r==="client_max_window_bits"){if(s!==!0){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else if(r==="server_max_window_bits"){let i=+s;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${s}`);s=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${s}`)}else throw new Error(`Unknown parameter "${r}"`);n[r]=s})}),e}decompress(e,n,r){dn.add(s=>{this._decompress(e,n,(i,o)=>{s(),r(i,o)})})}compress(e,n,r){dn.add(s=>{this._compress(e,n,(i,o)=>{s(),r(i,o)})})}_decompress(e,n,r){let s=this._isServer?"client":"server";if(!this._inflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?kt.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=kt.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[fn]=this,this._inflate[ue]=0,this._inflate[ge]=[],this._inflate.on("error",Su),this._inflate.on("data",Si)}this._inflate[Ye]=r,this._inflate.write(e),n&&this._inflate.write(mu),this._inflate.flush(()=>{let i=this._inflate[Je];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=mi.concat(this._inflate[ge],this._inflate[ue]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[ue]=0,this._inflate[ge]=[],n&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,n,r){let s=this._isServer?"server":"client";if(!this._deflate){let i=`${s}_max_window_bits`,o=typeof this.params[i]!="number"?kt.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=kt.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[ue]=0,this._deflate[ge]=[],this._deflate.on("data",yu)}this._deflate[Ye]=r,this._deflate.write(e),this._deflate.flush(kt.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=mi.concat(this._deflate[ge],this._deflate[ue]);n&&(i=new gu(i.buffer,i.byteOffset,i.length-4)),this._deflate[Ye]=null,this._deflate[ue]=0,this._deflate[ge]=[],n&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};_i.exports=gr;function yu(t){this[ge].push(t),this[ue]+=t.length}function Si(t){if(this[ue]+=t.length,this[fn]._maxPayload<1||this[ue]<=this[fn]._maxPayload){this[ge].push(t);return}this[Je]=new RangeError("Max payload size exceeded"),this[Je].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Je][yi]=1009,this.removeListener("data",Si),this.reset()}function Su(t){if(this[fn]._inflate=null,this[Je]){this[Ye](this[Je]);return}t[yi]=1007,this[Ye](t)}});var Ke=m((em,hn)=>{"use strict";var{isUtf8:vi}=require("buffer"),{hasBlob:_u}=ce(),vu=[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 wu(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function mr(t){let e=t.length,n=0;for(;n<e;)if((t[n]&128)===0)n++;else if((t[n]&224)===192){if(n+1===e||(t[n+1]&192)!==128||(t[n]&254)===192)return!1;n+=2}else if((t[n]&240)===224){if(n+2>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||t[n]===224&&(t[n+1]&224)===128||t[n]===237&&(t[n+1]&224)===160)return!1;n+=3}else if((t[n]&248)===240){if(n+3>=e||(t[n+1]&192)!==128||(t[n+2]&192)!==128||(t[n+3]&192)!==128||t[n]===240&&(t[n+1]&240)===128||t[n]===244&&t[n+1]>143||t[n]>244)return!1;n+=4}else return!1;return!0}function bu(t){return _u&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}hn.exports={isBlob:bu,isValidStatusCode:wu,isValidUTF8:mr,tokenChars:vu};if(vi)hn.exports.isValidUTF8=function(t){return t.length<24?mr(t):vi(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");hn.exports.isValidUTF8=function(e){return e.length<32?mr(e):t(e)}}catch{}});var wr=m((tm,Ai)=>{"use strict";var{Writable:Iu}=require("stream"),wi=Ct(),{BINARY_TYPES:xu,EMPTY_BUFFER:bi,kStatusCode:Eu,kWebSocket:Tu}=ce(),{concat:yr,toArrayBuffer:Au,unmask:ku}=At(),{isValidStatusCode:Cu,isValidUTF8:Ii}=Ke(),pn=Buffer[Symbol.species],Y=0,xi=1,Ei=2,Ti=3,Sr=4,_r=5,gn=6,vr=class extends Iu{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||xu[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Tu]=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=Y}_write(e,n,r){if(this._opcode===8&&this._state==Y)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new pn(r.buffer,r.byteOffset+e,r.length-e),new pn(r.buffer,r.byteOffset,e)}let n=Buffer.allocUnsafe(e);do{let r=this._buffers[0],s=n.length-e;e>=r.length?n.set(this._buffers.shift(),s):(n.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new pn(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return n}startLoop(e){this._loop=!0;do switch(this._state){case Y:this.getInfo(e);break;case xi:this.getPayloadLength16(e);break;case Ei:this.getPayloadLength64(e);break;case Ti:this.getMask();break;case Sr:this.getData(e);break;case _r:case gn:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let n=this.consume(2);if((n[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let r=(n[0]&64)===64;if(r&&!this._extensions[wi.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(n[0]&128)===128,this._opcode=n[0]&15,this._payloadLength=n[1]&127,this._opcode===0){if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=r}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(r){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(n[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=xi:this._payloadLength===127?this._state=Ei:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let n=this.consume(8),r=n.readUInt32BE(0);if(r>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=r*Math.pow(2,32)+n.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let n=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(n);return}this._masked?this._state=Ti:this._state=Sr}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Sr}getData(e){let n=bi;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}n=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&ku(n,this._mask)}if(this._opcode>7){this.controlMessage(n,e);return}if(this._compressed){this._state=_r,this.decompress(n,e);return}n.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(n)),this.dataMessage(e)}decompress(e,n){this._extensions[wi.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return n(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");n(o);return}this._fragments.push(i)}this.dataMessage(n),this._state===Y&&this.startLoop(n)})}dataMessage(e){if(!this._fin){this._state=Y;return}let n=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=yr(r,n):this._binaryType==="arraybuffer"?s=Au(yr(r,n)):this._binaryType==="blob"?s=new Blob(r):s=r,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=Y):(this._state=gn,setImmediate(()=>{this.emit("message",s,!0),this._state=Y,this.startLoop(e)}))}else{let s=yr(r,n);if(!this._skipUTF8Validation&&!Ii(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===_r||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=Y):(this._state=gn,setImmediate(()=>{this.emit("message",s,!1),this._state=Y,this.startLoop(e)}))}}controlMessage(e,n){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,bi),this.end();else{let r=e.readUInt16BE(0);if(!Cu(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");n(i);return}let s=new pn(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Ii(s)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");n(i);return}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=Y;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Y):(this._state=gn,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Y,this.startLoop(n)}))}createError(e,n,r,s,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${n}`:n);return Error.captureStackTrace(o,this.createError),o.code=i,o[Eu]=s,o}};Ai.exports=vr});var xr=m((rm,Ri)=>{"use strict";var{Duplex:nm}=require("stream"),{randomFillSync:Ru}=require("crypto"),ki=Ct(),{EMPTY_BUFFER:Pu,kWebSocket:Lu,NOOP:Mu}=ce(),{isBlob:Xe,isValidStatusCode:Nu}=Ke(),{mask:Ci,toBuffer:Pe}=At(),J=Symbol("kByteLength"),Ou=Buffer.alloc(4),mn=8*1024,Le,Ze=mn,ee=0,Bu=1,Du=2,br=class t{constructor(e,n,r){this._extensions=n||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=ee,this.onerror=Mu,this[Lu]=void 0}static frame(e,n){let r,s=!1,i=2,o=!1;n.mask&&(r=n.maskBuffer||Ou,n.generateMask?n.generateMask(r):(Ze===mn&&(Le===void 0&&(Le=Buffer.alloc(mn)),Ru(Le,0,mn),Ze=0),r[0]=Le[Ze++],r[1]=Le[Ze++],r[2]=Le[Ze++],r[3]=Le[Ze++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let a;typeof e=="string"?(!n.mask||o)&&n[J]!==void 0?a=n[J]:(e=Buffer.from(e),a=e.length):(a=e.length,s=n.mask&&n.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(s?a+i:i);return c[0]=n.fin?n.opcode|128:n.opcode,n.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),n.mask?(c[1]|=128,c[i-4]=r[0],c[i-3]=r[1],c[i-2]=r[2],c[i-1]=r[3],o?[c,e]:s?(Ci(e,r,c,i,a),[c]):(Ci(e,r,e,0,a),[c,e])):[c,e]}close(e,n,r,s){let i;if(e===void 0)i=Pu;else{if(typeof e!="number"||!Nu(e))throw new TypeError("First argument must be a valid error code number");if(n===void 0||!n.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(n);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof n=="string"?i.write(n,2):i.set(n,2)}}let o={[J]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==ee?this.enqueue([this.dispatch,i,!1,o,s]):this.sendFrame(t.frame(i,o),s)}ping(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Xe(e)?(s=e.size,i=!1):(e=Pe(e),s=e.length,i=Pe.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[J]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Xe(e)?this._state!==ee?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ee?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}pong(e,n,r){let s,i;if(typeof e=="string"?(s=Buffer.byteLength(e),i=!1):Xe(e)?(s=e.size,i=!1):(e=Pe(e),s=e.length,i=Pe.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[J]:s,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Xe(e)?this._state!==ee?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==ee?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(t.frame(e,o),r)}send(e,n,r){let s=this._extensions[ki.extensionName],i=n.binary?2:1,o=n.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):Xe(e)?(a=e.size,l=!1):(e=Pe(e),a=e.length,l=Pe.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=s._threshold),this._compress=o):(o=!1,i=0),n.fin&&(this._firstFragment=!0);let c={[J]:a,fin:n.fin,generateMask:this._generateMask,mask:n.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};Xe(e)?this._state!==ee?this.enqueue([this.getBlobData,e,this._compress,c,r]):this.getBlobData(e,this._compress,c,r):this._state!==ee?this.enqueue([this.dispatch,e,this._compress,c,r]):this.dispatch(e,this._compress,c,r)}getBlobData(e,n,r,s){this._bufferedBytes+=r[J],this._state=Du,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Ir,this,a,s);return}this._bufferedBytes-=r[J];let o=Pe(i);n?this.dispatch(o,n,r,s):(this._state=ee,this.sendFrame(t.frame(o,r),s),this.dequeue())}).catch(i=>{process.nextTick(Hu,this,i,s)})}dispatch(e,n,r,s){if(!n){this.sendFrame(t.frame(e,r),s);return}let i=this._extensions[ki.extensionName];this._bufferedBytes+=r[J],this._state=Bu,i.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Ir(this,l,s);return}this._bufferedBytes-=r[J],this._state=ee,r.readOnly=!1,this.sendFrame(t.frame(a,r),s),this.dequeue()})}dequeue(){for(;this._state===ee&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][J],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][J],this._queue.push(e)}sendFrame(e,n){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],n),this._socket.uncork()):this._socket.write(e[0],n)}};Ri.exports=br;function Ir(t,e,n){typeof n=="function"&&n(e);for(let r=0;r<t._queue.length;r++){let s=t._queue[r],i=s[s.length-1];typeof i=="function"&&i(e)}}function Hu(t,e,n){Ir(t,e,n),t.onerror(e)}});var Fi=m((sm,Hi)=>{"use strict";var{kForOnEventAttribute:Rt,kListener:Er}=ce(),Pi=Symbol("kCode"),Li=Symbol("kData"),Mi=Symbol("kError"),Ni=Symbol("kMessage"),Oi=Symbol("kReason"),Qe=Symbol("kTarget"),Bi=Symbol("kType"),Di=Symbol("kWasClean"),de=class{constructor(e){this[Qe]=null,this[Bi]=e}get target(){return this[Qe]}get type(){return this[Bi]}};Object.defineProperty(de.prototype,"target",{enumerable:!0});Object.defineProperty(de.prototype,"type",{enumerable:!0});var Me=class extends de{constructor(e,n={}){super(e),this[Pi]=n.code===void 0?0:n.code,this[Oi]=n.reason===void 0?"":n.reason,this[Di]=n.wasClean===void 0?!1:n.wasClean}get code(){return this[Pi]}get reason(){return this[Oi]}get wasClean(){return this[Di]}};Object.defineProperty(Me.prototype,"code",{enumerable:!0});Object.defineProperty(Me.prototype,"reason",{enumerable:!0});Object.defineProperty(Me.prototype,"wasClean",{enumerable:!0});var et=class extends de{constructor(e,n={}){super(e),this[Mi]=n.error===void 0?null:n.error,this[Ni]=n.message===void 0?"":n.message}get error(){return this[Mi]}get message(){return this[Ni]}};Object.defineProperty(et.prototype,"error",{enumerable:!0});Object.defineProperty(et.prototype,"message",{enumerable:!0});var Pt=class extends de{constructor(e,n={}){super(e),this[Li]=n.data===void 0?null:n.data}get data(){return this[Li]}};Object.defineProperty(Pt.prototype,"data",{enumerable:!0});var Fu={addEventListener(t,e,n={}){for(let s of this.listeners(t))if(!n[Rt]&&s[Er]===e&&!s[Rt])return;let r;if(t==="message")r=function(i,o){let a=new Pt("message",{data:o?i:i.toString()});a[Qe]=this,yn(e,this,a)};else if(t==="close")r=function(i,o){let a=new Me("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[Qe]=this,yn(e,this,a)};else if(t==="error")r=function(i){let o=new et("error",{error:i,message:i.message});o[Qe]=this,yn(e,this,o)};else if(t==="open")r=function(){let i=new de("open");i[Qe]=this,yn(e,this,i)};else return;r[Rt]=!!n[Rt],r[Er]=e,n.once?this.once(t,r):this.on(t,r)},removeEventListener(t,e){for(let n of this.listeners(t))if(n[Er]===e&&!n[Rt]){this.removeListener(t,n);break}}};Hi.exports={CloseEvent:Me,ErrorEvent:et,Event:de,EventTarget:Fu,MessageEvent:Pt};function yn(t,e,n){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,n):t.call(e,n)}});var Tr=m((im,Ui)=>{"use strict";var{tokenChars:Lt}=Ke();function ie(t,e,n){t[e]===void 0?t[e]=[n]:t[e].push(n)}function Uu(t){let e=Object.create(null),n=Object.create(null),r=!1,s=!1,i=!1,o,a,l=-1,c=-1,u=-1,d=0;for(;d<t.length;d++)if(c=t.charCodeAt(d),o===void 0)if(u===-1&&Lt[c]===1)l===-1&&(l=d);else if(d!==0&&(c===32||c===9))u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let h=t.slice(l,u);c===44?(ie(e,h,n),n=Object.create(null)):o=h,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===void 0)if(u===-1&&Lt[c]===1)l===-1&&(l=d);else if(c===32||c===9)u===-1&&l!==-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d),ie(n,t.slice(l,u),!0),c===44&&(ie(e,o,n),n=Object.create(null),o=void 0),l=u=-1}else if(c===61&&l!==-1&&u===-1)a=t.slice(l,d),l=u=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(s){if(Lt[c]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1?l=d:r||(r=!0),s=!1}else if(i)if(Lt[c]===1)l===-1&&(l=d);else if(c===34&&l!==-1)i=!1,u=d;else if(c===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(c===34&&t.charCodeAt(d-1)===61)i=!0;else if(u===-1&&Lt[c]===1)l===-1&&(l=d);else if(l!==-1&&(c===32||c===9))u===-1&&(u=d);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${d}`);u===-1&&(u=d);let h=t.slice(l,u);r&&(h=h.replace(/\\/g,""),r=!1),ie(n,a,h),c===44&&(ie(e,o,n),n=Object.create(null),o=void 0),a=void 0,l=u=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");u===-1&&(u=d);let f=t.slice(l,u);return o===void 0?ie(e,f,n):(a===void 0?ie(n,f,!0):r?ie(n,a,f.replace(/\\/g,"")):ie(n,a,f),ie(e,o,n)),e}function qu(t){return Object.keys(t).map(e=>{let n=t[e];return Array.isArray(n)||(n=[n]),n.map(r=>[e].concat(Object.keys(r).map(s=>{let i=r[s];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Ui.exports={format:qu,parse:Uu}});var wn=m((lm,Zi)=>{"use strict";var Wu=require("events"),ju=require("https"),Gu=require("http"),ji=require("net"),$u=require("tls"),{randomBytes:zu,createHash:Vu}=require("crypto"),{Duplex:om,Readable:am}=require("stream"),{URL:Ar}=require("url"),me=Ct(),Yu=wr(),Ju=xr(),{isBlob:Ku}=Ke(),{BINARY_TYPES:qi,CLOSE_TIMEOUT:Xu,EMPTY_BUFFER:Sn,GUID:Zu,kForOnEventAttribute:kr,kListener:Qu,kStatusCode:ed,kWebSocket:N,NOOP:Gi}=ce(),{EventTarget:{addEventListener:td,removeEventListener:nd}}=Fi(),{format:rd,parse:sd}=Tr(),{toBuffer:id}=At(),$i=Symbol("kAborted"),Cr=[8,13],fe=["CONNECTING","OPEN","CLOSING","CLOSED"],od=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,E=class t extends Wu{constructor(e,n,r){super(),this._binaryType=qi[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Sn,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n=="object"&&n!==null?(r=n,n=[]):n=[n]),zi(this,e,n,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){qi.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}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(e,n,r){let s=new Yu({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new Ju(e,this._extensions,r.generateMask);this._receiver=s,this._sender=i,this._socket=e,s[N]=this,i[N]=this,e[N]=this,s.on("conclude",cd),s.on("drain",ud),s.on("error",dd),s.on("message",fd),s.on("ping",hd),s.on("pong",pd),i.onerror=gd,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),n.length>0&&e.unshift(n),e.on("close",Ji),e.on("data",vn),e.on("end",Ki),e.on("error",Xi),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[me.extensionName]&&this._extensions[me.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,n){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){$(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,n,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Yi(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Rr(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(e||Sn,n,r)}pong(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=n=void 0):typeof n=="function"&&(r=n,n=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Rr(this,e,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(e||Sn,n,r)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,n,r){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof n=="function"&&(r=n,n={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Rr(this,e,r);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[me.extensionName]||(s.compress=!1),this._sender.send(e||Sn,s,r)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){$(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(E,"CONNECTING",{enumerable:!0,value:fe.indexOf("CONNECTING")});Object.defineProperty(E.prototype,"CONNECTING",{enumerable:!0,value:fe.indexOf("CONNECTING")});Object.defineProperty(E,"OPEN",{enumerable:!0,value:fe.indexOf("OPEN")});Object.defineProperty(E.prototype,"OPEN",{enumerable:!0,value:fe.indexOf("OPEN")});Object.defineProperty(E,"CLOSING",{enumerable:!0,value:fe.indexOf("CLOSING")});Object.defineProperty(E.prototype,"CLOSING",{enumerable:!0,value:fe.indexOf("CLOSING")});Object.defineProperty(E,"CLOSED",{enumerable:!0,value:fe.indexOf("CLOSED")});Object.defineProperty(E.prototype,"CLOSED",{enumerable:!0,value:fe.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(E.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(E.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[kr])return e[Qu];return null},set(e){for(let n of this.listeners(t))if(n[kr]){this.removeListener(t,n);break}typeof e=="function"&&this.addEventListener(t,e,{[kr]:!0})}})});E.prototype.addEventListener=td;E.prototype.removeEventListener=nd;Zi.exports=E;function zi(t,e,n,r){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Xu,protocolVersion:Cr[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!Cr.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Cr.join(", ")})`);let i;if(e instanceof Ar)i=e;else try{i=new Ar(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),t._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let p=new SyntaxError(l);if(t._redirects===0)throw p;_n(t,p);return}let c=o?443:80,u=zu(16).toString("base64"),d=o?ju.request:Gu.request,f=new Set,h;if(s.createConnection=s.createConnection||(o?ld:ad),s.defaultPort=s.defaultPort||c,s.port=i.port||c,s.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":u,Connection:"Upgrade",Upgrade:"websocket"},s.path=i.pathname+i.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(h=new me(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=rd({[me.extensionName]:h.offer()})),n.length){for(let p of n){if(typeof p!="string"||!od.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}s.headers["Sec-WebSocket-Protocol"]=n.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(i.username||i.password)&&(s.auth=`${i.username}:${i.password}`),a){let p=s.path.split(":");s.socketPath=p[0],s.path=p[1]}let g;if(s.followRedirects){if(t._redirects===0){t._originalIpc=a,t._originalSecure=o,t._originalHostOrSocketPath=a?s.socketPath:i.host;let p=r&&r.headers;if(r={...r,headers:{}},p)for(let[y,S]of Object.entries(p))r.headers[y.toLowerCase()]=S}else if(t.listenerCount("redirect")===0){let p=a?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:i.host===t._originalHostOrSocketPath;(!p||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,p||delete s.headers.host,s.auth=void 0)}s.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),g=t._req=d(s),t._redirects&&t.emit("redirect",t.url,g)}else g=t._req=d(s);s.timeout&&g.on("timeout",()=>{$(t,g,"Opening handshake has timed out")}),g.on("error",p=>{g===null||g[$i]||(g=t._req=null,_n(t,p))}),g.on("response",p=>{let y=p.headers.location,S=p.statusCode;if(y&&s.followRedirects&&S>=300&&S<400){if(++t._redirects>s.maxRedirects){$(t,g,"Maximum redirects exceeded");return}g.abort();let G;try{G=new Ar(y,e)}catch{let A=new SyntaxError(`Invalid URL: ${y}`);_n(t,A);return}zi(t,G,n,r)}else t.emit("unexpected-response",g,p)||$(t,g,`Unexpected server response: ${p.statusCode}`)}),g.on("upgrade",(p,y,S)=>{if(t.emit("upgrade",p),t.readyState!==E.CONNECTING)return;g=t._req=null;let G=p.headers.upgrade;if(G===void 0||G.toLowerCase()!=="websocket"){$(t,y,"Invalid Upgrade header");return}let re=Vu("sha1").update(u+Zu).digest("base64");if(p.headers["sec-websocket-accept"]!==re){$(t,y,"Invalid Sec-WebSocket-Accept header");return}let A=p.headers["sec-websocket-protocol"],M;if(A!==void 0?f.size?f.has(A)||(M="Server sent an invalid subprotocol"):M="Server sent a subprotocol but none was requested":f.size&&(M="Server sent no subprotocol"),M){$(t,y,M);return}A&&(t._protocol=A);let V=p.headers["sec-websocket-extensions"];if(V!==void 0){if(!h){$(t,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let se;try{se=sd(V)}catch{$(t,y,"Invalid Sec-WebSocket-Extensions header");return}let ze=Object.keys(se);if(ze.length!==1||ze[0]!==me.extensionName){$(t,y,"Server indicated an extension that was not requested");return}try{h.accept(se[me.extensionName])}catch{$(t,y,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[me.extensionName]=h}t.setSocket(y,S,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(g,t):g.end()}function _n(t,e){t._readyState=E.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function ad(t){return t.path=t.socketPath,ji.connect(t)}function ld(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=ji.isIP(t.host)?"":t.host),$u.connect(t)}function $(t,e,n){t._readyState=E.CLOSING;let r=new Error(n);Error.captureStackTrace(r,$),e.setHeader?(e[$i]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(_n,t,r)):(e.destroy(r),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Rr(t,e,n){if(e){let r=Ku(e)?e.size:id(e).length;t._socket?t._sender._bufferedBytes+=r:t._bufferedAmount+=r}if(n){let r=new Error(`WebSocket is not open: readyState ${t.readyState} (${fe[t.readyState]})`);process.nextTick(n,r)}}function cd(t,e){let n=this[N];n._closeFrameReceived=!0,n._closeMessage=e,n._closeCode=t,n._socket[N]!==void 0&&(n._socket.removeListener("data",vn),process.nextTick(Vi,n._socket),t===1005?n.close():n.close(t,e))}function ud(){let t=this[N];t.isPaused||t._socket.resume()}function dd(t){let e=this[N];e._socket[N]!==void 0&&(e._socket.removeListener("data",vn),process.nextTick(Vi,e._socket),e.close(t[ed])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function Wi(){this[N].emitClose()}function fd(t,e){this[N].emit("message",t,e)}function hd(t){let e=this[N];e._autoPong&&e.pong(t,!this._isServer,Gi),e.emit("ping",t)}function pd(t){this[N].emit("pong",t)}function Vi(t){t.resume()}function gd(t){let e=this[N];e.readyState!==E.CLOSED&&(e.readyState===E.OPEN&&(e._readyState=E.CLOSING,Yi(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Yi(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function Ji(){let t=this[N];if(this.removeListener("close",Ji),this.removeListener("data",vn),this.removeListener("end",Ki),t._readyState=E.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[N]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Wi),t._receiver.on("finish",Wi))}function vn(t){this[N]._receiver.write(t)||this.pause()}function Ki(){let t=this[N];t._readyState=E.CLOSING,t._receiver.end(),this.end()}function Xi(){let t=this[N];this.removeListener("error",Xi),this.on("error",Gi),t&&(t._readyState=E.CLOSING,this.destroy())}});var no=m((um,to)=>{"use strict";var cm=wn(),{Duplex:md}=require("stream");function Qi(t){t.emit("close")}function yd(){!this.destroyed&&this._writableState.finished&&this.destroy()}function eo(t){this.removeListener("error",eo),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Sd(t,e){let n=!0,r=new md({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(i,o){let a=!o&&r._readableState.objectMode?i.toString():i;r.push(a)||t.pause()}),t.once("error",function(i){r.destroyed||(n=!1,r.destroy(i))}),t.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(s,i){if(t.readyState===t.CLOSED){i(s),process.nextTick(Qi,r);return}let o=!1;t.once("error",function(l){o=!0,i(l)}),t.once("close",function(){o||i(s),process.nextTick(Qi,r)}),n&&t.terminate()},r._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){r._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),r._readableState.endEmitted&&r.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},r._read=function(){t.isPaused&&t.resume()},r._write=function(s,i,o){if(t.readyState===t.CONNECTING){t.once("open",function(){r._write(s,i,o)});return}t.send(s,o)},r.on("end",yd),r.on("error",eo),r}to.exports=Sd});var so=m((dm,ro)=>{"use strict";var{tokenChars:_d}=Ke();function vd(t){let e=new Set,n=-1,r=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(r===-1&&_d[o]===1)n===-1&&(n=s);else if(s!==0&&(o===32||o===9))r===-1&&n!==-1&&(r=s);else if(o===44){if(n===-1)throw new SyntaxError(`Unexpected character at index ${s}`);r===-1&&(r=s);let a=t.slice(n,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),n=r=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(n===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=t.slice(n,s);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}ro.exports={parse:vd}});var fo=m((hm,uo)=>{"use strict";var wd=require("events"),bn=require("http"),{Duplex:fm}=require("stream"),{createHash:bd}=require("crypto"),io=Tr(),Ne=Ct(),Id=so(),xd=wn(),{CLOSE_TIMEOUT:Ed,GUID:Td,kWebSocket:Ad}=ce(),kd=/^[+/0-9A-Za-z]{22}==$/,oo=0,ao=1,co=2,Pr=class extends wd{constructor(e,n){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Ed,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:xd,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=bn.createServer((r,s)=>{let i=bn.STATUS_CODES[426];s.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),s.end(i)}),this._server.listen(e.port,e.host,e.backlog,n)):e.server&&(this._server=e.server),this._server){let r=this.emit.bind(this,"connection");this._removeListeners=Cd(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,i,o)=>{this.handleUpgrade(s,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=oo}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===co){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Mt,this);return}if(e&&this.once("close",e),this._state!==ao)if(this._state=ao,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(Mt,this):process.nextTick(Mt,this);else{let n=this._server;this._removeListeners(),this._removeListeners=this._server=null,n.close(()=>{Mt(this)})}}shouldHandle(e){if(this.options.path){let n=e.url.indexOf("?");if((n!==-1?e.url.slice(0,n):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,n,r,s){n.on("error",lo);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Oe(this,e,n,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Oe(this,e,n,400,"Invalid Upgrade header");return}if(i===void 0||!kd.test(i)){Oe(this,e,n,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Oe(this,e,n,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Nt(n,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Id.parse(l)}catch{Oe(this,e,n,400,"Invalid Sec-WebSocket-Protocol header");return}let u=e.headers["sec-websocket-extensions"],d={};if(this.options.perMessageDeflate&&u!==void 0){let f=new Ne(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=io.parse(u);h[Ne.extensionName]&&(f.accept(h[Ne.extensionName]),d[Ne.extensionName]=f)}catch{Oe(this,e,n,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(f,(h,g,p,y)=>{if(!h)return Nt(n,g||401,p,y);this.completeUpgrade(d,i,c,e,n,r,s)});return}if(!this.options.verifyClient(f))return Nt(n,401)}this.completeUpgrade(d,i,c,e,n,r,s)}completeUpgrade(e,n,r,s,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Ad])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>oo)return Nt(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${bd("sha1").update(n+Td).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(r.size){let d=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;d&&(c.push(`Sec-WebSocket-Protocol: ${d}`),u._protocol=d)}if(e[Ne.extensionName]){let d=e[Ne.extensionName].params,f=io.format({[Ne.extensionName]:[d]});c.push(`Sec-WebSocket-Extensions: ${f}`),u._extensions=e}this.emit("headers",c,s),i.write(c.concat(`\r
|
|
2
2
|
`).join(`\r
|
|
3
|
-
`)),
|
|
4
|
-
`+Object.keys(r).map(
|
|
3
|
+
`)),i.removeListener("error",lo),u.setSocket(i,o,{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(Mt,this)})),a(u,s)}};uo.exports=Pr;function Cd(t,e){for(let n of Object.keys(e))t.on(n,e[n]);return function(){for(let r of Object.keys(e))t.removeListener(r,e[r])}}function Mt(t){t._state=co,t.emit("close")}function lo(){this.destroy()}function Nt(t,e,n,r){n=n||bn.STATUS_CODES[e],r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(n),...r},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${bn.STATUS_CODES[e]}\r
|
|
4
|
+
`+Object.keys(r).map(s=>`${s}: ${r[s]}`).join(`\r
|
|
5
5
|
`)+`\r
|
|
6
6
|
\r
|
|
7
|
-
`+n)}function Oe(t,e,n,r,i
|
|
8
|
-
]))+`;
|
|
9
|
-
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),t.put(n,13)}};
|
|
10
|
-
Suggested mode is: `+
|
|
7
|
+
`+n)}function Oe(t,e,n,r,s,i){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,Oe),t.emit("wsClientError",o,n,e)}else Nt(n,r,s,i)}});var Mr=m((gm,ho)=>{ho.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var ye=m(Be=>{var Nr,Nd=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];Be.getSymbolSize=function(e){if(!e)throw new Error('"version" cannot be null or undefined');if(e<1||e>40)throw new Error('"version" should be in range from 1 to 40');return e*4+17};Be.getSymbolTotalCodewords=function(e){return Nd[e]};Be.getBCHDigit=function(t){let e=0;for(;t!==0;)e++,t>>>=1;return e};Be.setToSJISFunction=function(e){if(typeof e!="function")throw new Error('"toSJISFunc" is not a valid function.');Nr=e};Be.isKanjiModeEnabled=function(){return typeof Nr<"u"};Be.toSJIS=function(e){return Nr(e)}});var In=m(K=>{K.L={bit:1};K.M={bit:0};K.Q={bit:3};K.H={bit:2};function Od(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return K.L;case"m":case"medium":return K.M;case"q":case"quartile":return K.Q;case"h":case"high":return K.H;default:throw new Error("Unknown EC Level: "+t)}}K.isValid=function(e){return e&&typeof e.bit<"u"&&e.bit>=0&&e.bit<4};K.from=function(e,n){if(K.isValid(e))return e;try{return Od(e)}catch{return n}}});var mo=m((Sm,go)=>{function po(){this.buffer=[],this.length=0}po.prototype={get:function(t){let e=Math.floor(t/8);return(this.buffer[e]>>>7-t%8&1)===1},put:function(t,e){for(let n=0;n<e;n++)this.putBit((t>>>e-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){let e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}};go.exports=po});var So=m((_m,yo)=>{function Ot(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}Ot.prototype.set=function(t,e,n,r){let s=t*this.size+e;this.data[s]=n,r&&(this.reservedBit[s]=!0)};Ot.prototype.get=function(t,e){return this.data[t*this.size+e]};Ot.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n};Ot.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]};yo.exports=Ot});var _o=m(xn=>{var Bd=ye().getSymbolSize;xn.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=Bd(e),s=r===145?26:Math.ceil((r-13)/(2*n-2))*2,i=[r-7];for(let o=1;o<n-1;o++)i[o]=i[o-1]-s;return i.push(6),i.reverse()};xn.getPositions=function(e){let n=[],r=xn.getRowColCoords(e),s=r.length;for(let i=0;i<s;i++)for(let o=0;o<s;o++)i===0&&o===0||i===0&&o===s-1||i===s-1&&o===0||n.push([r[i],r[o]]);return n}});var bo=m(wo=>{var Dd=ye().getSymbolSize,vo=7;wo.getPositions=function(e){let n=Dd(e);return[[0,0],[n-vo,0],[0,n-vo]]}});var Io=m(x=>{x.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var De={N1:3,N2:3,N3:40,N4:10};x.isValid=function(e){return e!=null&&e!==""&&!isNaN(e)&&e>=0&&e<=7};x.from=function(e){return x.isValid(e)?parseInt(e,10):void 0};x.getPenaltyN1=function(e){let n=e.size,r=0,s=0,i=0,o=null,a=null;for(let l=0;l<n;l++){s=i=0,o=a=null;for(let c=0;c<n;c++){let u=e.get(l,c);u===o?s++:(s>=5&&(r+=De.N1+(s-5)),o=u,s=1),u=e.get(c,l),u===a?i++:(i>=5&&(r+=De.N1+(i-5)),a=u,i=1)}s>=5&&(r+=De.N1+(s-5)),i>=5&&(r+=De.N1+(i-5))}return r};x.getPenaltyN2=function(e){let n=e.size,r=0;for(let s=0;s<n-1;s++)for(let i=0;i<n-1;i++){let o=e.get(s,i)+e.get(s,i+1)+e.get(s+1,i)+e.get(s+1,i+1);(o===4||o===0)&&r++}return r*De.N2};x.getPenaltyN3=function(e){let n=e.size,r=0,s=0,i=0;for(let o=0;o<n;o++){s=i=0;for(let a=0;a<n;a++)s=s<<1&2047|e.get(o,a),a>=10&&(s===1488||s===93)&&r++,i=i<<1&2047|e.get(a,o),a>=10&&(i===1488||i===93)&&r++}return r*De.N3};x.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let i=0;i<r;i++)n+=e.data[i];return Math.abs(Math.ceil(n*100/r/5)-10)*De.N4};function Hd(t,e,n){switch(t){case x.Patterns.PATTERN000:return(e+n)%2===0;case x.Patterns.PATTERN001:return e%2===0;case x.Patterns.PATTERN010:return n%3===0;case x.Patterns.PATTERN011:return(e+n)%3===0;case x.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2===0;case x.Patterns.PATTERN101:return e*n%2+e*n%3===0;case x.Patterns.PATTERN110:return(e*n%2+e*n%3)%2===0;case x.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2===0;default:throw new Error("bad maskPattern:"+t)}}x.applyMask=function(e,n){let r=n.size;for(let s=0;s<r;s++)for(let i=0;i<r;i++)n.isReserved(i,s)||n.xor(i,s,Hd(e,i,s))};x.getBestMask=function(e,n){let r=Object.keys(x.Patterns).length,s=0,i=1/0;for(let o=0;o<r;o++){n(o),x.applyMask(o,e);let a=x.getPenaltyN1(e)+x.getPenaltyN2(e)+x.getPenaltyN3(e)+x.getPenaltyN4(e);x.applyMask(o,e),a<i&&(i=a,s=o)}return s}});var Br=m(Or=>{var Se=In(),En=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],Tn=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];Or.getBlocksCount=function(e,n){switch(n){case Se.L:return En[(e-1)*4+0];case Se.M:return En[(e-1)*4+1];case Se.Q:return En[(e-1)*4+2];case Se.H:return En[(e-1)*4+3];default:return}};Or.getTotalCodewordsCount=function(e,n){switch(n){case Se.L:return Tn[(e-1)*4+0];case Se.M:return Tn[(e-1)*4+1];case Se.Q:return Tn[(e-1)*4+2];case Se.H:return Tn[(e-1)*4+3];default:return}}});var xo=m(kn=>{var Bt=new Uint8Array(512),An=new Uint8Array(256);(function(){let e=1;for(let n=0;n<255;n++)Bt[n]=e,An[e]=n,e<<=1,e&256&&(e^=285);for(let n=255;n<512;n++)Bt[n]=Bt[n-255]})();kn.log=function(e){if(e<1)throw new Error("log("+e+")");return An[e]};kn.exp=function(e){return Bt[e]};kn.mul=function(e,n){return e===0||n===0?0:Bt[An[e]+An[n]]}});var Eo=m(Dt=>{var Dr=xo();Dt.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let s=0;s<e.length;s++)for(let i=0;i<n.length;i++)r[s+i]^=Dr.mul(e[s],n[i]);return r};Dt.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let s=r[0];for(let o=0;o<n.length;o++)r[o]^=Dr.mul(n[o],s);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r};Dt.generateECPolynomial=function(e){let n=new Uint8Array([1]);for(let r=0;r<e;r++)n=Dt.mul(n,new Uint8Array([1,Dr.exp(r)]));return n}});var ko=m((Tm,Ao)=>{var To=Eo();function Hr(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}Hr.prototype.initialize=function(e){this.degree=e,this.genPoly=To.generateECPolynomial(this.degree)};Hr.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");let n=new Uint8Array(e.length+this.degree);n.set(e);let r=To.mod(n,this.genPoly),s=this.degree-r.length;if(s>0){let i=new Uint8Array(this.degree);return i.set(r,s),i}return r};Ao.exports=Hr});var Fr=m(Co=>{Co.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}});var Ur=m(he=>{var Ro="[0-9]+",Fd="[A-Z $%*+\\-./:]+",Ht="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";Ht=Ht.replace(/u/g,"\\u");var Ud="(?:(?![A-Z0-9 $%*+\\-./:]|"+Ht+`)(?:.|[\r
|
|
8
|
+
]))+`;he.KANJI=new RegExp(Ht,"g");he.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");he.BYTE=new RegExp(Ud,"g");he.NUMERIC=new RegExp(Ro,"g");he.ALPHANUMERIC=new RegExp(Fd,"g");var qd=new RegExp("^"+Ht+"$"),Wd=new RegExp("^"+Ro+"$"),jd=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");he.testKanji=function(e){return qd.test(e)};he.testNumeric=function(e){return Wd.test(e)};he.testAlphanumeric=function(e){return jd.test(e)}});var _e=m(R=>{var Gd=Fr(),qr=Ur();R.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]};R.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]};R.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]};R.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]};R.MIXED={bit:-1};R.getCharCountIndicator=function(e,n){if(!e.ccBits)throw new Error("Invalid mode: "+e);if(!Gd.isValid(n))throw new Error("Invalid version: "+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]};R.getBestModeForData=function(e){return qr.testNumeric(e)?R.NUMERIC:qr.testAlphanumeric(e)?R.ALPHANUMERIC:qr.testKanji(e)?R.KANJI:R.BYTE};R.toString=function(e){if(e&&e.id)return e.id;throw new Error("Invalid mode")};R.isValid=function(e){return e&&e.bit&&e.ccBits};function $d(t){if(typeof t!="string")throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return R.NUMERIC;case"alphanumeric":return R.ALPHANUMERIC;case"kanji":return R.KANJI;case"byte":return R.BYTE;default:throw new Error("Unknown mode: "+t)}}R.from=function(e,n){if(R.isValid(e))return e;try{return $d(e)}catch{return n}}});var Oo=m(He=>{var Cn=ye(),zd=Br(),Po=In(),ve=_e(),Wr=Fr(),Mo=7973,Lo=Cn.getBCHDigit(Mo);function Vd(t,e,n){for(let r=1;r<=40;r++)if(e<=He.getCapacity(r,n,t))return r}function No(t,e){return ve.getCharCountIndicator(t,e)+4}function Yd(t,e){let n=0;return t.forEach(function(r){let s=No(r.mode,e);n+=s+r.getBitsLength()}),n}function Jd(t,e){for(let n=1;n<=40;n++)if(Yd(t,n)<=He.getCapacity(n,e,ve.MIXED))return n}He.from=function(e,n){return Wr.isValid(e)?parseInt(e,10):n};He.getCapacity=function(e,n,r){if(!Wr.isValid(e))throw new Error("Invalid QR Code version");typeof r>"u"&&(r=ve.BYTE);let s=Cn.getSymbolTotalCodewords(e),i=zd.getTotalCodewordsCount(e,n),o=(s-i)*8;if(r===ve.MIXED)return o;let a=o-No(r,e);switch(r){case ve.NUMERIC:return Math.floor(a/10*3);case ve.ALPHANUMERIC:return Math.floor(a/11*2);case ve.KANJI:return Math.floor(a/13);case ve.BYTE:default:return Math.floor(a/8)}};He.getBestVersionForData=function(e,n){let r,s=Po.from(n,Po.M);if(Array.isArray(e)){if(e.length>1)return Jd(e,s);if(e.length===0)return 1;r=e[0]}else r=e;return Vd(r.mode,r.getLength(),s)};He.getEncodedBits=function(e){if(!Wr.isValid(e)||e<7)throw new Error("Invalid QR Code version");let n=e<<12;for(;Cn.getBCHDigit(n)-Lo>=0;)n^=Mo<<Cn.getBCHDigit(n)-Lo;return e<<12|n}});var Fo=m(Ho=>{var jr=ye(),Do=1335,Kd=21522,Bo=jr.getBCHDigit(Do);Ho.getEncodedBits=function(e,n){let r=e.bit<<3|n,s=r<<10;for(;jr.getBCHDigit(s)-Bo>=0;)s^=Do<<jr.getBCHDigit(s)-Bo;return(r<<10|s)^Kd}});var qo=m((Lm,Uo)=>{var Xd=_e();function tt(t){this.mode=Xd.NUMERIC,this.data=t.toString()}tt.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)};tt.prototype.getLength=function(){return this.data.length};tt.prototype.getBitsLength=function(){return tt.getBitsLength(this.data.length)};tt.prototype.write=function(e){let n,r,s;for(n=0;n+3<=this.data.length;n+=3)r=this.data.substr(n,3),s=parseInt(r,10),e.put(s,10);let i=this.data.length-n;i>0&&(r=this.data.substr(n),s=parseInt(r,10),e.put(s,i*3+1))};Uo.exports=tt});var jo=m((Mm,Wo)=>{var Zd=_e(),Gr=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function nt(t){this.mode=Zd.ALPHANUMERIC,this.data=t}nt.getBitsLength=function(e){return 11*Math.floor(e/2)+6*(e%2)};nt.prototype.getLength=function(){return this.data.length};nt.prototype.getBitsLength=function(){return nt.getBitsLength(this.data.length)};nt.prototype.write=function(e){let n;for(n=0;n+2<=this.data.length;n+=2){let r=Gr.indexOf(this.data[n])*45;r+=Gr.indexOf(this.data[n+1]),e.put(r,11)}this.data.length%2&&e.put(Gr.indexOf(this.data[n]),6)};Wo.exports=nt});var $o=m((Nm,Go)=>{var Qd=_e();function rt(t){this.mode=Qd.BYTE,typeof t=="string"?this.data=new TextEncoder().encode(t):this.data=new Uint8Array(t)}rt.getBitsLength=function(e){return e*8};rt.prototype.getLength=function(){return this.data.length};rt.prototype.getBitsLength=function(){return rt.getBitsLength(this.data.length)};rt.prototype.write=function(t){for(let e=0,n=this.data.length;e<n;e++)t.put(this.data[e],8)};Go.exports=rt});var Vo=m((Om,zo)=>{var ef=_e(),tf=ye();function st(t){this.mode=ef.KANJI,this.data=t}st.getBitsLength=function(e){return e*13};st.prototype.getLength=function(){return this.data.length};st.prototype.getBitsLength=function(){return st.getBitsLength(this.data.length)};st.prototype.write=function(t){let e;for(e=0;e<this.data.length;e++){let n=tf.toSJIS(this.data[e]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw new Error("Invalid SJIS character: "+this.data[e]+`
|
|
9
|
+
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),t.put(n,13)}};zo.exports=st});var Yo=m((Bm,$r)=>{"use strict";var Ft={single_source_shortest_paths:function(t,e,n){var r={},s={};s[e]=0;var i=Ft.PriorityQueue.make();i.push(e,0);for(var o,a,l,c,u,d,f,h,g;!i.empty();){o=i.pop(),a=o.value,c=o.cost,u=t[a]||{};for(l in u)u.hasOwnProperty(l)&&(d=u[l],f=c+d,h=s[l],g=typeof s[l]>"u",(g||h>f)&&(s[l]=f,i.push(l,f),r[l]=a))}if(typeof n<"u"&&typeof s[n]>"u"){var p=["Could not find a path from ",e," to ",n,"."].join("");throw new Error(p)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],r=e,s;r;)n.push(r),s=t[r],r=t[r];return n.reverse(),n},find_path:function(t,e,n){var r=Ft.single_source_shortest_paths(t,e,n);return Ft.extract_shortest_path_from_predecessor_list(r,n)},PriorityQueue:{make:function(t){var e=Ft.PriorityQueue,n={},r;t=t||{};for(r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);return n.queue=[],n.sorter=t.sorter||e.default_sorter,n},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var n={value:t,cost:e};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};typeof $r<"u"&&($r.exports=Ft)});var na=m(it=>{var I=_e(),Xo=qo(),Zo=jo(),Qo=$o(),ea=Vo(),Ut=Ur(),Rn=ye(),nf=Yo();function Jo(t){return unescape(encodeURIComponent(t)).length}function qt(t,e,n){let r=[],s;for(;(s=t.exec(n))!==null;)r.push({data:s[0],index:s.index,mode:e,length:s[0].length});return r}function ta(t){let e=qt(Ut.NUMERIC,I.NUMERIC,t),n=qt(Ut.ALPHANUMERIC,I.ALPHANUMERIC,t),r,s;return Rn.isKanjiModeEnabled()?(r=qt(Ut.BYTE,I.BYTE,t),s=qt(Ut.KANJI,I.KANJI,t)):(r=qt(Ut.BYTE_KANJI,I.BYTE,t),s=[]),e.concat(n,r,s).sort(function(o,a){return o.index-a.index}).map(function(o){return{data:o.data,mode:o.mode,length:o.length}})}function zr(t,e){switch(e){case I.NUMERIC:return Xo.getBitsLength(t);case I.ALPHANUMERIC:return Zo.getBitsLength(t);case I.KANJI:return ea.getBitsLength(t);case I.BYTE:return Qo.getBitsLength(t)}}function rf(t){return t.reduce(function(e,n){let r=e.length-1>=0?e[e.length-1]:null;return r&&r.mode===n.mode?(e[e.length-1].data+=n.data,e):(e.push(n),e)},[])}function sf(t){let e=[];for(let n=0;n<t.length;n++){let r=t[n];switch(r.mode){case I.NUMERIC:e.push([r,{data:r.data,mode:I.ALPHANUMERIC,length:r.length},{data:r.data,mode:I.BYTE,length:r.length}]);break;case I.ALPHANUMERIC:e.push([r,{data:r.data,mode:I.BYTE,length:r.length}]);break;case I.KANJI:e.push([r,{data:r.data,mode:I.BYTE,length:Jo(r.data)}]);break;case I.BYTE:e.push([{data:r.data,mode:I.BYTE,length:Jo(r.data)}])}}return e}function of(t,e){let n={},r={start:{}},s=["start"];for(let i=0;i<t.length;i++){let o=t[i],a=[];for(let l=0;l<o.length;l++){let c=o[l],u=""+i+l;a.push(u),n[u]={node:c,lastCount:0},r[u]={};for(let d=0;d<s.length;d++){let f=s[d];n[f]&&n[f].node.mode===c.mode?(r[f][u]=zr(n[f].lastCount+c.length,c.mode)-zr(n[f].lastCount,c.mode),n[f].lastCount+=c.length):(n[f]&&(n[f].lastCount=c.length),r[f][u]=zr(c.length,c.mode)+4+I.getCharCountIndicator(c.mode,e))}}s=a}for(let i=0;i<s.length;i++)r[s[i]].end=0;return{map:r,table:n}}function Ko(t,e){let n,r=I.getBestModeForData(t);if(n=I.from(e,r),n!==I.BYTE&&n.bit<r.bit)throw new Error('"'+t+'" cannot be encoded with mode '+I.toString(n)+`.
|
|
10
|
+
Suggested mode is: `+I.toString(r));switch(n===I.KANJI&&!Rn.isKanjiModeEnabled()&&(n=I.BYTE),n){case I.NUMERIC:return new Xo(t);case I.ALPHANUMERIC:return new Zo(t);case I.KANJI:return new ea(t);case I.BYTE:return new Qo(t)}}it.fromArray=function(e){return e.reduce(function(n,r){return typeof r=="string"?n.push(Ko(r,null)):r.data&&n.push(Ko(r.data,r.mode)),n},[])};it.fromString=function(e,n){let r=ta(e,Rn.isKanjiModeEnabled()),s=sf(r),i=of(s,n),o=nf.find_path(i.map,"start","end"),a=[];for(let l=1;l<o.length-1;l++)a.push(i.table[o[l]].node);return it.fromArray(rf(a))};it.rawSplit=function(e){return it.fromArray(ta(e,Rn.isKanjiModeEnabled()))}});var Zr=m(ra=>{var Ln=ye(),Vr=In(),af=mo(),lf=So(),cf=_o(),uf=bo(),Kr=Io(),Xr=Br(),df=ko(),Pn=Oo(),ff=Fo(),hf=_e(),Yr=na();function pf(t,e){let n=t.size,r=uf.getPositions(e);for(let s=0;s<r.length;s++){let i=r[s][0],o=r[s][1];for(let a=-1;a<=7;a++)if(!(i+a<=-1||n<=i+a))for(let l=-1;l<=7;l++)o+l<=-1||n<=o+l||(a>=0&&a<=6&&(l===0||l===6)||l>=0&&l<=6&&(a===0||a===6)||a>=2&&a<=4&&l>=2&&l<=4?t.set(i+a,o+l,!0,!0):t.set(i+a,o+l,!1,!0))}}function gf(t){let e=t.size;for(let n=8;n<e-8;n++){let r=n%2===0;t.set(n,6,r,!0),t.set(6,n,r,!0)}}function mf(t,e){let n=cf.getPositions(e);for(let r=0;r<n.length;r++){let s=n[r][0],i=n[r][1];for(let o=-2;o<=2;o++)for(let a=-2;a<=2;a++)o===-2||o===2||a===-2||a===2||o===0&&a===0?t.set(s+o,i+a,!0,!0):t.set(s+o,i+a,!1,!0)}}function yf(t,e){let n=t.size,r=Pn.getEncodedBits(e),s,i,o;for(let a=0;a<18;a++)s=Math.floor(a/3),i=a%3+n-8-3,o=(r>>a&1)===1,t.set(s,i,o,!0),t.set(i,s,o,!0)}function Jr(t,e,n){let r=t.size,s=ff.getEncodedBits(e,n),i,o;for(i=0;i<15;i++)o=(s>>i&1)===1,i<6?t.set(i,8,o,!0):i<8?t.set(i+1,8,o,!0):t.set(r-15+i,8,o,!0),i<8?t.set(8,r-i-1,o,!0):i<9?t.set(8,15-i-1+1,o,!0):t.set(8,15-i-1,o,!0);t.set(r-8,8,1,!0)}function Sf(t,e){let n=t.size,r=-1,s=n-1,i=7,o=0;for(let a=n-1;a>0;a-=2)for(a===6&&a--;;){for(let l=0;l<2;l++)if(!t.isReserved(s,a-l)){let c=!1;o<e.length&&(c=(e[o]>>>i&1)===1),t.set(s,a-l,c),i--,i===-1&&(o++,i=7)}if(s+=r,s<0||n<=s){s-=r,r=-r;break}}}function _f(t,e,n){let r=new af;n.forEach(function(l){r.put(l.mode.bit,4),r.put(l.getLength(),hf.getCharCountIndicator(l.mode,t)),l.write(r)});let s=Ln.getSymbolTotalCodewords(t),i=Xr.getTotalCodewordsCount(t,e),o=(s-i)*8;for(r.getLengthInBits()+4<=o&&r.put(0,4);r.getLengthInBits()%8!==0;)r.putBit(0);let a=(o-r.getLengthInBits())/8;for(let l=0;l<a;l++)r.put(l%2?17:236,8);return vf(r,t,e)}function vf(t,e,n){let r=Ln.getSymbolTotalCodewords(e),s=Xr.getTotalCodewordsCount(e,n),i=r-s,o=Xr.getBlocksCount(e,n),a=r%o,l=o-a,c=Math.floor(r/o),u=Math.floor(i/o),d=u+1,f=c-u,h=new df(f),g=0,p=new Array(o),y=new Array(o),S=0,G=new Uint8Array(t.buffer);for(let se=0;se<o;se++){let ze=se<l?u:d;p[se]=G.slice(g,g+ze),y[se]=h.encode(p[se]),g+=ze,S=Math.max(S,ze)}let re=new Uint8Array(r),A=0,M,V;for(M=0;M<S;M++)for(V=0;V<o;V++)M<p[V].length&&(re[A++]=p[V][M]);for(M=0;M<f;M++)for(V=0;V<o;V++)re[A++]=y[V][M];return re}function wf(t,e,n,r){let s;if(Array.isArray(t))s=Yr.fromArray(t);else if(typeof t=="string"){let c=e;if(!c){let u=Yr.rawSplit(t);c=Pn.getBestVersionForData(u,n)}s=Yr.fromString(t,c||40)}else throw new Error("Invalid data");let i=Pn.getBestVersionForData(s,n);if(!i)throw new Error("The amount of data is too big to be stored in a QR Code");if(!e)e=i;else if(e<i)throw new Error(`
|
|
11
11
|
The chosen QR Code version cannot contain this amount of data.
|
|
12
|
-
Minimum version required to store current data is: `+
|
|
13
|
-
`);let o=uf(e,n,i),a=kn.getSymbolSize(e),l=new Zd(a);return sf(l,e),of(l),af(l,e),Ur(l,n,0),e>=7&&lf(l,e),cf(l,o),isNaN(r)&&(r=qr.getBestMask(l,Ur.bind(null,l,n))),qr.applyMask(r,l),Ur(l,n,r),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:r,segments:i}}Yo.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let r=Hr.M,i,s;return typeof n<"u"&&(r=Hr.from(n.errorCorrectionLevel,Hr.M),i=Tn.from(n.version),s=qr.from(n.maskPattern),n.toSJISFunc&&kn.setToSJISFunction(n.toSJISFunc)),ff(e,i,r,s)}});var Gr=m((Am,Ko)=>{"use strict";var hf=require("util"),Jo=require("stream"),te=Ko.exports=function(){Jo.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};hf.inherits(te,Jo);te.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit("drain"))}.bind(this))};te.prototype.write=function(t,e){if(!this.writable)return this.emit("error",new Error("Stream not writable")),!1;let n;return Buffer.isBuffer(t)?n=t:n=Buffer.from(t,e||this._encoding),this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused};te.prototype.end=function(t,e){t&&this.write(t,e),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))};te.prototype.destroySoon=te.prototype.end;te.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};te.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};te.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];e.length>t.length?(this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length))):(this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e))};te.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);for(;e<t.length;){let i=this._buffers[n++],s=Math.min(i.length,t.length-e);i.copy(r,e,0,s),e+=s,s!==i.length&&(this._buffers[--n]=i.slice(s))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,r)};te.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}this._buffers&&!this.writable&&this._end()}catch(t){this.emit("error",t)}}});var $r=m(zr=>{"use strict";var we=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];zr.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,s=(t-r)/8,o=(e-i)/8;for(let a=0;a<we.length;a++){let l=we[a],c=s*l.x.length,u=o*l.y.length;for(let d=0;d<l.x.length&&l.x[d]<r;d++)c++;for(let d=0;d<l.y.length&&l.y[d]<i;d++)u++;c>0&&u>0&&n.push({width:c,height:u,index:a})}return n};zr.getInterlaceIterator=function(t){return function(e,n,r){let i=e%we[r].x.length,s=(e-i)/we[r].x.length*8+we[r].x[i],o=n%we[r].y.length,a=(n-o)/we[r].y.length*8+we[r].y[o];return s*4+a*t*4}}});var Vr=m((Tm,Xo)=>{"use strict";Xo.exports=function(e,n,r){let i=e+n-r,s=Math.abs(i-e),o=Math.abs(i-n),a=Math.abs(i-r);return s<=o&&s<=a?e:o<=a?n:r}});var Yr=m((km,Qo)=>{"use strict";var pf=$r(),gf=Vr();function Zo(t,e,n){let r=t*e;return n!==8&&(r=Math.ceil(r/(8/n))),r}var it=Qo.exports=function(t,e){let n=t.width,r=t.height,i=t.interlace,s=t.bpp,o=t.depth;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let a=pf.getImagePasses(n,r);for(let l=0;l<a.length;l++)this._images.push({byteWidth:Zo(a[l].width,s,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:Zo(n,s,o),height:r,lineIndex:0});o===8?this._xComparison=s:o===16?this._xComparison=s*2:this._xComparison=1};it.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};it.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let s=0;s<n;s++){let o=t[1+s],a=s>i?e[s-r]:0;e[s]=o+a}};it.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let s=t[1+i],o=r?r[i]:0;e[i]=s+o}};it.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=s?s[o]:0,c=o>i?e[o-r]:0,u=Math.floor((c+l)/2);e[o]=a+u}};it.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=s?s[o]:0,c=o>i?e[o-r]:0,u=o>i&&s?s[o-r]:0,d=gf(c,l,u);e[o]=a+d}};it.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(e===0)n=t.slice(1,i+1);else switch(n=Buffer.alloc(i),e){case 1:this._unFilterType1(t,n,i);break;case 2:this._unFilterType2(t,n,i);break;case 3:this._unFilterType3(t,n,i);break;case 4:this._unFilterType4(t,n,i);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var na=m((Rm,ta)=>{"use strict";var mf=require("util"),ea=Gr(),yf=Yr(),_f=ta.exports=function(t){ea.call(this);let e=[],n=this;this._filter=new yf(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};mf.inherits(_f,ea)});var st=m((Pm,ra)=>{"use strict";ra.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var Xr=m((Lm,ia)=>{"use strict";var Jr=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)e&1?e=3988292384^e>>>1:e=e>>>1;Jr[t]=e}})();var Kr=ia.exports=function(){this._crc=-1};Kr.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Jr[(this._crc^t[e])&255]^this._crc>>>8;return!0};Kr.prototype.crc32=function(){return this._crc^-1};Kr.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Jr[(e^t[n])&255]^e>>>8;return e^-1}});var Zr=m((Nm,sa)=>{"use strict";var P=st(),Sf=Xr(),O=sa.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[P.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[P.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[P.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[P.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[P.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[P.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};O.prototype.start=function(){this.read(P.PNG_SIGNATURE.length,this._parseSignature.bind(this))};O.prototype._parseSignature=function(t){let e=P.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(new Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};O.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let s=4;s<8;s++)r+=String.fromCharCode(t[s]);let i=!!(t[4]&32);if(!this._hasIHDR&&n!==P.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new Sf,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!i){this.error(new Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};O.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};O.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};O.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(new Error("Crc error - "+e+" - "+n));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))};O.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};O.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],s=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(new Error("Unsupported bit depth "+r));return}if(!(i in P.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(s!==0){this.error(new Error("Unsupported compression method"));return}if(o!==0){this.error(new Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=i;let l=P.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:!!a,palette:!!(i&P.COLORTYPE_PALETTE),color:!!(i&P.COLORTYPE_COLOR),alpha:!!(i&P.COLORTYPE_ALPHA),bpp:l,colorType:i}),this._handleChunkEnd()};O.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};O.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};O.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};O.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===P.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}this._colorType===P.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===P.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};O.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};O.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/P.GAMMA_DIVISION),this._handleChunkEnd()};O.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};O.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===P.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw new Error("Expected palette not found");this.inflateData(e);let n=t-e.length;n>0?this._handleIDAT(n):this._handleChunkEnd()};O.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};O.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var Qr=m(aa=>{"use strict";var oa=$r(),vf=[function(){},function(t,e,n,r){if(r===e.length)throw new Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw new Error("Ran out of data");let i=e[r];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],wf=[function(){},function(t,e,n,r){let i=e[0];t[n]=i,t[n+1]=i,t[n+2]=i,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function bf(t,e){let n=[],r=0;function i(){if(r===t.length)throw new Error("Ran out of data");let s=t[r];r++;let o,a,l,c,u,d,f,h;switch(e){default:throw new Error("unrecognised depth");case 16:f=t[r],r++,n.push((s<<8)+f);break;case 4:f=s&15,h=s>>4,n.push(h,f);break;case 2:u=s&3,d=s>>2&3,f=s>>4&3,h=s>>6&3,n.push(h,f,d,u);break;case 1:o=s&1,a=s>>1&1,l=s>>2&1,c=s>>3&1,u=s>>4&1,d=s>>5&1,f=s>>6&1,h=s>>7&1,n.push(h,f,d,u,c,l,a,o);break}}return{get:function(s){for(;n.length<s;)i();let o=n.slice(0,s);return n=n.slice(s),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw new Error("extra data found")}}}function If(t,e,n,r,i,s){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++)for(let u=0;u<o;u++){let d=n(u,c,l);vf[r](e,i,d,s),s+=r}return s}function xf(t,e,n,r,i,s){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++){for(let u=0;u<o;u++){let d=i.get(r),f=n(u,c,l);wf[r](e,d,f,s)}i.resetAfterLine()}}aa.dataToBitMap=function(t,e){let n=e.width,r=e.height,i=e.depth,s=e.bpp,o=e.interlace,a;i!==8&&(a=bf(t,i));let l;i<=8?l=Buffer.alloc(n*r*4):l=new Uint16Array(n*r*4);let c=Math.pow(2,i)-1,u=0,d,f;if(o)d=oa.getImagePasses(n,r),f=oa.getInterlaceIterator(n,r);else{let h=0;f=function(){let g=h;return h+=4,g},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)i===8?u=If(d[h],l,f,s,t,u):xf(d[h],l,f,s,a,c);if(i===8){if(u!==t.length)throw new Error("extra data found")}else a.end();return l}});var ei=m((Mm,la)=>{"use strict";function Ef(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=i[t[s]];if(!l)throw new Error("index "+t[s]+" not in palette");for(let c=0;c<4;c++)e[s+c]=l[c];s+=4}}function Af(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=!1;if(i.length===1?i[0]===t[s]&&(l=!0):i[0]===t[s]&&i[1]===t[s+1]&&i[2]===t[s+2]&&(l=!0),l)for(let c=0;c<4;c++)e[s+c]=0;s+=4}}function Cf(t,e,n,r,i){let s=255,o=Math.pow(2,i)-1,a=0;for(let l=0;l<r;l++)for(let c=0;c<n;c++){for(let u=0;u<4;u++)e[a+u]=Math.floor(t[a+u]*s/o+.5);a+=4}}la.exports=function(t,e){let n=e.depth,r=e.width,i=e.height,s=e.colorType,o=e.transColor,a=e.palette,l=t;return s===3?Ef(t,l,r,i,a):(o&&Af(t,l,r,i,o),n!==8&&(n===16&&(l=Buffer.alloc(r*i*4)),Cf(t,l,r,i,n))),l}});var da=m((Bm,ua)=>{"use strict";var Tf=require("util"),ti=require("zlib"),ca=Gr(),kf=na(),Rf=Zr(),Pf=Qr(),Lf=ei(),oe=ua.exports=function(t){ca.call(this),this._parser=new Rf(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=t,this.writable=!0,this._parser.start()};Tf.inherits(oe,ca);oe.prototype._handleError=function(t){this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0};oe.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=ti.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,ti.Z_MIN_CHUNK);this._inflate=ti.createInflate({chunkSize:r});let i=n,s=this.emit.bind(this,"error");this._inflate.on("error",function(a){i&&s(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){i&&(a.length>i&&(a=a.slice(0,i)),i-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};oe.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new kf(this._bitmapInfo)};oe.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};oe.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};oe.prototype._simpleTransparency=function(){this._metaData.alpha=!0};oe.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};oe.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};oe.prototype._complete=function(t){if(this.errord)return;let e;try{let n=Pf.dataToBitMap(t,this._bitmapInfo);e=Lf(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var ha=m((Dm,fa)=>{"use strict";var K=st();fa.exports=function(t,e,n,r){let i=[K.COLORTYPE_COLOR_ALPHA,K.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=(function(){let p=new ArrayBuffer(2);return new DataView(p).setInt16(0,256,!0),new Int16Array(p)[0]!==256})();if(r.bitDepth===8||r.bitDepth===16&&g)return t}let s=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=K.COLORTYPE_TO_BPP_MAP[r.inputColorType];a===4&&!r.inputHasAlpha&&(a=3);let l=K.COLORTYPE_TO_BPP_MAP[r.colorType];r.bitDepth===16&&(o=65535,l*=2);let c=Buffer.alloc(e*n*l),u=0,d=0,f=r.bgColor||{};f.red===void 0&&(f.red=o),f.green===void 0&&(f.green=o),f.blue===void 0&&(f.blue=o);function h(){let g,p,y,_=o;switch(r.inputColorType){case K.COLORTYPE_COLOR_ALPHA:_=s[u+3],g=s[u],p=s[u+1],y=s[u+2];break;case K.COLORTYPE_COLOR:g=s[u],p=s[u+1],y=s[u+2];break;case K.COLORTYPE_ALPHA:_=s[u+1],g=s[u],p=g,y=g;break;case K.COLORTYPE_GRAYSCALE:g=s[u],p=g,y=g;break;default:throw new Error("input color type:"+r.inputColorType+" is not supported at present")}return r.inputHasAlpha&&(i||(_/=o,g=Math.min(Math.max(Math.round((1-_)*f.red+_*g),0),o),p=Math.min(Math.max(Math.round((1-_)*f.green+_*p),0),o),y=Math.min(Math.max(Math.round((1-_)*f.blue+_*y),0),o))),{red:g,green:p,blue:y,alpha:_}}for(let g=0;g<n;g++)for(let p=0;p<e;p++){let y=h(s,u);switch(r.colorType){case K.COLORTYPE_COLOR_ALPHA:case K.COLORTYPE_COLOR:r.bitDepth===8?(c[d]=y.red,c[d+1]=y.green,c[d+2]=y.blue,i&&(c[d+3]=y.alpha)):(c.writeUInt16BE(y.red,d),c.writeUInt16BE(y.green,d+2),c.writeUInt16BE(y.blue,d+4),i&&c.writeUInt16BE(y.alpha,d+6));break;case K.COLORTYPE_ALPHA:case K.COLORTYPE_GRAYSCALE:{let _=(y.red+y.green+y.blue)/3;r.bitDepth===8?(c[d]=_,i&&(c[d+1]=y.alpha)):(c.writeUInt16BE(_,d),i&&c.writeUInt16BE(y.alpha,d+2));break}default:throw new Error("unrecognised color Type "+r.colorType)}u+=a,d+=l}return c}});var ma=m((Hm,ga)=>{"use strict";var pa=Vr();function Nf(t,e,n,r,i){for(let s=0;s<n;s++)r[i+s]=t[e+s]}function Of(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++)r+=Math.abs(t[s]);return r}function Mf(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,l=t[e+o]-a;r[i+o]=l}}function Bf(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=t[e+s]-o;i+=Math.abs(a)}return i}function Df(t,e,n,r,i){for(let s=0;s<n;s++){let o=e>0?t[e+s-n]:0,a=t[e+s]-o;r[i+s]=a}}function Hf(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++){let o=e>0?t[s-n]:0,a=t[s]-o;r+=Math.abs(a)}return r}function Ff(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,l=e>0?t[e+o-n]:0,c=t[e+o]-(a+l>>1);r[i+o]=c}}function Uf(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,l=t[e+s]-(o+a>>1);i+=Math.abs(l)}return i}function qf(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,l=e>0?t[e+o-n]:0,c=e>0&&o>=s?t[e+o-(n+s)]:0,u=t[e+o]-pa(a,l,c);r[i+o]=u}}function Wf(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,l=e>0&&s>=r?t[e+s-(n+r)]:0,c=t[e+s]-pa(o,a,l);i+=Math.abs(c)}return i}var jf={0:Nf,1:Mf,2:Df,3:Ff,4:qf},Gf={0:Of,1:Bf,2:Hf,3:Uf,4:Wf};ga.exports=function(t,e,n,r,i){let s;if(!("filterType"in r)||r.filterType===-1)s=[0,1,2,3,4];else if(typeof r.filterType=="number")s=[r.filterType];else throw new Error("unrecognised filter types");r.bitDepth===16&&(i*=2);let o=e*i,a=0,l=0,c=Buffer.alloc((o+1)*n),u=s[0];for(let d=0;d<n;d++){if(s.length>1){let f=1/0;for(let h=0;h<s.length;h++){let g=Gf[s[h]](t,l,o,i);g<f&&(u=s[h],f=g)}}c[a]=u,a++,jf[u](t,l,o,c,a,i),a+=o,l+=o}return c}});var ni=m((Fm,ya)=>{"use strict";var H=st(),zf=Xr(),$f=ha(),Vf=ma(),Yf=require("zlib"),be=ya.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32*1024,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||Yf.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:H.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:H.COLORTYPE_COLOR_ALPHA,[H.COLORTYPE_GRAYSCALE,H.COLORTYPE_COLOR,H.COLORTYPE_COLOR_ALPHA,H.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([H.COLORTYPE_GRAYSCALE,H.COLORTYPE_COLOR,H.COLORTYPE_COLOR_ALPHA,H.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw new Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw new Error("option bit depth:"+t.bitDepth+" is not supported at present")};be.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};be.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};be.prototype.filterData=function(t,e,n){let r=$f(t,e,n,this._options),i=H.COLORTYPE_TO_BPP_MAP[this._options.colorType];return Vf(r,e,n,this._options,i)};be.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e&&e.copy(r,8),r.writeInt32BE(zf.crc32(r.slice(4,r.length-4)),r.length-4),r};be.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*H.GAMMA_DIVISION),0),this._packChunk(H.TYPE_gAMA,e)};be.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(H.TYPE_IHDR,n)};be.prototype.packIDAT=function(t){return this._packChunk(H.TYPE_IDAT,t)};be.prototype.packIEND=function(){return this._packChunk(H.TYPE_IEND,null)}});var wa=m((Um,va)=>{"use strict";var Jf=require("util"),_a=require("stream"),Kf=st(),Xf=ni(),Sa=va.exports=function(t){_a.call(this);let e=t||{};this._packer=new Xf(e),this._deflate=this._packer.createDeflate(),this.readable=!0};Jf.inherits(Sa,_a);Sa.prototype.pack=function(t,e,n,r){this.emit("data",Buffer.from(Kf.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r&&this.emit("data",this._packer.packGAMA(r));let i=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(s){this.emit("data",this._packer.packIDAT(s))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var Ca=m((Ft,Aa)=>{"use strict";var ba=require("assert").ok,ot=require("zlib"),Zf=require("util"),Ia=require("buffer").kMaxLength;function He(t){if(!(this instanceof He))return new He(t);t&&t.chunkSize<ot.Z_MIN_CHUNK&&(t.chunkSize=ot.Z_MIN_CHUNK),ot.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null&&(this._maxLength=t.maxLength)}function Qf(t){return new He(t)}function xa(t,e){e&&process.nextTick(e),t._handle&&(t._handle.close(),t._handle=null)}He.prototype._processChunk=function(t,e,n){if(typeof n=="function")return ot.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,s=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],c=0,u;this.on("error",function(g){u=g});function d(g,p){if(r._hadError)return;let y=s-p;if(ba(y>=0,"have should not go down"),y>0){let _=r._buffer.slice(r._offset,r._offset+y);if(r._offset+=y,_.length>o&&(_=_.slice(0,o)),l.push(_),c+=_.length,o-=_.length,o===0)return!1}return(p===0||r._offset>=r._chunkSize)&&(s=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize)),p===0?(a+=i-g,i=g,!0):!1}ba(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,i,this._buffer,this._offset,s),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw u;if(c>=Ia)throw xa(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+Ia.toString(16)+" bytes");let h=Buffer.concat(l,c);return xa(this),h};Zf.inherits(He,ot.Inflate);function eh(t,e){if(typeof e=="string"&&(e=Buffer.from(e)),!(e instanceof Buffer))throw new TypeError("Not a string or buffer");let n=t._finishFlushFlag;return n==null&&(n=ot.Z_FINISH),t._processChunk(e,n)}function Ea(t,e){return eh(new He(e),t)}Aa.exports=Ft=Ea;Ft.Inflate=He;Ft.createInflate=Qf;Ft.inflateSync=Ea});var ri=m((qm,ka)=>{"use strict";var Ta=ka.exports=function(t){this._buffer=t,this._reads=[]};Ta.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Ta.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length))}else break}if(this._reads.length>0)return new Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)return new Error("unrecognised content at end of stream")}});var Pa=m(Ra=>{"use strict";var th=ri(),nh=Yr();Ra.process=function(t,e){let n=[],r=new th(t);return new nh(e,{read:r.read.bind(r),write:function(s){n.push(s)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Ma=m((jm,Oa)=>{"use strict";var La=!0,Na=require("zlib"),rh=Ca();Na.deflateSync||(La=!1);var ih=ri(),sh=Pa(),oh=Zr(),ah=Qr(),lh=ei();Oa.exports=function(t,e){if(!La)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(C){n=C}let i;function s(C){i=C}function o(C){i.transColor=C}function a(C){i.palette=C}function l(){i.alpha=!0}let c;function u(C){c=C}let d=[];function f(C){d.push(C)}let h=new ih(t);if(new oh(e,{read:h.read.bind(h),error:r,metadata:s,gamma:u,palette:a,transColor:o,inflateData:f,simpleTransparency:l}).start(),h.process(),n)throw n;let p=Buffer.concat(d);d.length=0;let y;if(i.interlace)y=Na.inflateSync(p);else{let L=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;y=rh(p,{chunkSize:L,maxLength:L})}if(p=null,!y||!y.length)throw new Error("bad png - invalid inflate data response");let _=sh.process(y,i);p=null;let G=ah.dataToBitMap(_,i);_=null;let re=lh(G,i);return i.data=re,i.gamma=c||0,i}});var Fa=m((Gm,Ha)=>{"use strict";var Ba=!0,Da=require("zlib");Da.deflateSync||(Ba=!1);var ch=st(),uh=ni();Ha.exports=function(t,e){if(!Ba)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n=e||{},r=new uh(n),i=[];i.push(Buffer.from(ch.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma&&i.push(r.packGAMA(t.gamma));let s=r.filterData(t.data,t.width,t.height),o=Da.deflateSync(s,r.getDeflateOptions());if(s=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return i.push(r.packIDAT(o)),i.push(r.packIEND()),Buffer.concat(i)}});var Ua=m(ii=>{"use strict";var dh=Ma(),fh=Fa();ii.read=function(t,e){return dh(t,e||{})};ii.write=function(t,e){return fh(t,e)}});var ja=m(Wa=>{"use strict";var hh=require("util"),qa=require("stream"),ph=da(),gh=wa(),mh=Ua(),U=Wa.PNG=function(t){qa.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new ph(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new gh(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};hh.inherits(U,qa);U.sync=mh;U.prototype.pack=function(){return!this.data||!this.data.length?(this.emit("error","No data provided"),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)};U.prototype.parse=function(t,e){if(e){let n,r;n=function(i){this.removeListener("error",r),this.data=i,e(null,this)}.bind(this),r=function(i){this.removeListener("parsed",n),e(i,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};U.prototype.write=function(t){return this._parser.write(t),!0};U.prototype.end=function(t){this._parser.end(t)};U.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};U.prototype._gamma=function(t){this.gamma=t};U.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};U.bitblt=function(t,e,n,r,i,s,o,a){if(n|=0,r|=0,i|=0,s|=0,o|=0,a|=0,n>t.width||r>t.height||n+i>t.width||r+s>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+i>e.width||a+s>e.height)throw new Error("bitblt writing outside image");for(let l=0;l<s;l++)t.data.copy(e.data,(a+l)*e.width+o<<2,(r+l)*t.width+n<<2,(r+l)*t.width+n+i<<2)};U.prototype.bitblt=function(t,e,n,r,i,s,o){return U.bitblt(this,t,e,n,r,i,s,o),this};U.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let i=0;i<3;i++){let s=t.data[r+i]/255;s=Math.pow(s,1/2.2/t.gamma),t.data[r+i]=Math.round(s*255)}}t.gamma=0}};U.prototype.adjustGamma=function(){U.adjustGamma(this)}});var Ut=m(Fe=>{function Ga(t){if(typeof t=="number"&&(t=t.toString()),typeof t!="string")throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+t);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(r){return[r,r]}))),e.length===6&&e.push("F","F");let n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:"#"+e.slice(0,6).join("")}}Fe.getOptions=function(e){e||(e={}),e.color||(e.color={});let n=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:Ga(e.color.dark||"#000000ff"),light:Ga(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}};Fe.getScale=function(e,n){return n.width&&n.width>=e+n.margin*2?n.width/(e+n.margin*2):n.scale};Fe.getImageWidth=function(e,n){let r=Fe.getScale(e,n);return Math.floor((e+n.margin*2)*r)};Fe.qrToImageData=function(e,n,r){let i=n.modules.size,s=n.modules.data,o=Fe.getScale(i,r),a=Math.floor((i+r.margin*2)*o),l=r.margin*o,c=[r.color.light,r.color.dark];for(let u=0;u<a;u++)for(let d=0;d<a;d++){let f=(u*a+d)*4,h=r.color.light;if(u>=l&&d>=l&&u<a-l&&d<a-l){let g=Math.floor((u-l)/o),p=Math.floor((d-l)/o);h=c[s[g*i+p]?1:0]}e[f++]=h.r,e[f++]=h.g,e[f++]=h.b,e[f]=h.a}}});var za=m(ae=>{var yh=require("fs"),_h=ja().PNG,si=Ut();ae.render=function(e,n){let r=si.getOptions(n),i=r.rendererOpts,s=si.getImageWidth(e.modules.size,r);i.width=s,i.height=s;let o=new _h(i);return si.qrToImageData(o.data,e,r),o};ae.renderToDataURL=function(e,n,r){typeof r>"u"&&(r=n,n=void 0),ae.renderToBuffer(e,n,function(i,s){i&&r(i);let o="data:image/png;base64,";o+=s.toString("base64"),r(null,o)})};ae.renderToBuffer=function(e,n,r){typeof r>"u"&&(r=n,n=void 0);let i=ae.render(e,n),s=[];i.on("error",r),i.on("data",function(o){s.push(o)}),i.on("end",function(){r(null,Buffer.concat(s))}),i.pack()};ae.renderToFile=function(e,n,r,i){typeof i>"u"&&(i=r,r=void 0);let s=!1,o=(...l)=>{s||(s=!0,i.apply(null,l))},a=yh.createWriteStream(e);a.on("error",o),a.on("close",o),ae.renderToFileStream(a,n,r)};ae.renderToFileStream=function(e,n,r){ae.render(n,r).pack().pipe(e)}});var $a=m(Rn=>{var Sh=Ut(),vh={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},wh={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function bh(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}Rn.render=function(t,e,n){let r=Sh.getOptions(e),i=vh;(r.color.dark.hex==="#ffffff"||r.color.light.hex==="#000000")&&(i=wh);let s=t.modules.size,o=t.modules.data,a="",l=Array(s+r.margin*2+1).join(i.WW);l=Array(r.margin/2+1).join(l+`
|
|
14
|
-
`);let c=Array(r.margin+1).join(
|
|
15
|
-
`}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};
|
|
16
|
-
`;for(let u=0;u<r;++u){a+=o;for(let d=0;d<r;d++)a+=
|
|
12
|
+
Minimum version required to store current data is: `+i+`.
|
|
13
|
+
`);let o=_f(e,n,s),a=Ln.getSymbolSize(e),l=new lf(a);return pf(l,e),gf(l),mf(l,e),Jr(l,n,0),e>=7&&yf(l,e),Sf(l,o),isNaN(r)&&(r=Kr.getBestMask(l,Jr.bind(null,l,n))),Kr.applyMask(r,l),Jr(l,n,r),{modules:l,version:e,errorCorrectionLevel:n,maskPattern:r,segments:s}}ra.create=function(e,n){if(typeof e>"u"||e==="")throw new Error("No input text");let r=Vr.M,s,i;return typeof n<"u"&&(r=Vr.from(n.errorCorrectionLevel,Vr.M),s=Pn.from(n.version),i=Kr.from(n.maskPattern),n.toSJISFunc&&Ln.setToSJISFunction(n.toSJISFunc)),wf(e,s,r,i)}});var Qr=m((Fm,ia)=>{"use strict";var bf=require("util"),sa=require("stream"),te=ia.exports=function(){sa.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};bf.inherits(te,sa);te.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit("drain"))}.bind(this))};te.prototype.write=function(t,e){if(!this.writable)return this.emit("error",new Error("Stream not writable")),!1;let n;return Buffer.isBuffer(t)?n=t:n=Buffer.from(t,e||this._encoding),this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused};te.prototype.end=function(t,e){t&&this.write(t,e),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))};te.prototype.destroySoon=te.prototype.end;te.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};te.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};te.prototype._processReadAllowingLess=function(t){this._reads.shift();let e=this._buffers[0];e.length>t.length?(this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length))):(this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e))};te.prototype._processRead=function(t){this._reads.shift();let e=0,n=0,r=Buffer.alloc(t.length);for(;e<t.length;){let s=this._buffers[n++],i=Math.min(s.length,t.length-e);s.copy(r,e,0,i),e+=i,i!==s.length&&(this._buffers[--n]=s.slice(i))}n>0&&this._buffers.splice(0,n),this._buffered-=t.length,t.func.call(this,r)};te.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else if(this._buffered>=t.length)this._processRead(t);else break}this._buffers&&!this.writable&&this._end()}catch(t){this.emit("error",t)}}});var ts=m(es=>{"use strict";var we=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];es.getImagePasses=function(t,e){let n=[],r=t%8,s=e%8,i=(t-r)/8,o=(e-s)/8;for(let a=0;a<we.length;a++){let l=we[a],c=i*l.x.length,u=o*l.y.length;for(let d=0;d<l.x.length&&l.x[d]<r;d++)c++;for(let d=0;d<l.y.length&&l.y[d]<s;d++)u++;c>0&&u>0&&n.push({width:c,height:u,index:a})}return n};es.getInterlaceIterator=function(t){return function(e,n,r){let s=e%we[r].x.length,i=(e-s)/we[r].x.length*8+we[r].x[s],o=n%we[r].y.length,a=(n-o)/we[r].y.length*8+we[r].y[o];return i*4+a*t*4}}});var ns=m((qm,oa)=>{"use strict";oa.exports=function(e,n,r){let s=e+n-r,i=Math.abs(s-e),o=Math.abs(s-n),a=Math.abs(s-r);return i<=o&&i<=a?e:o<=a?n:r}});var rs=m((Wm,la)=>{"use strict";var If=ts(),xf=ns();function aa(t,e,n){let r=t*e;return n!==8&&(r=Math.ceil(r/(8/n))),r}var ot=la.exports=function(t,e){let n=t.width,r=t.height,s=t.interlace,i=t.bpp,o=t.depth;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],s){let a=If.getImagePasses(n,r);for(let l=0;l<a.length;l++)this._images.push({byteWidth:aa(a[l].width,i,o),height:a[l].height,lineIndex:0})}else this._images.push({byteWidth:aa(n,i,o),height:r,lineIndex:0});o===8?this._xComparison=i:o===16?this._xComparison=i*2:this._xComparison=1};ot.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};ot.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,s=r-1;for(let i=0;i<n;i++){let o=t[1+i],a=i>s?e[i-r]:0;e[i]=o+a}};ot.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let s=0;s<n;s++){let i=t[1+s],o=r?r[s]:0;e[s]=i+o}};ot.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,c=o>s?e[o-r]:0,u=Math.floor((c+l)/2);e[o]=a+u}};ot.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,s=r-1,i=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],l=i?i[o]:0,c=o>s?e[o-r]:0,u=o>s&&i?i[o-r]:0,d=xf(c,l,u);e[o]=a+d}};ot.prototype._reverseFilterLine=function(t){let e=t[0],n,r=this._images[this._imageIndex],s=r.byteWidth;if(e===0)n=t.slice(1,s+1);else switch(n=Buffer.alloc(s),e){case 1:this._unFilterType1(t,n,s);break;case 2:this._unFilterType2(t,n,s);break;case 3:this._unFilterType3(t,n,s);break;case 4:this._unFilterType4(t,n,s);break;default:throw new Error("Unrecognised filter type - "+e)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var da=m((jm,ua)=>{"use strict";var Ef=require("util"),ca=Qr(),Tf=rs(),Af=ua.exports=function(t){ca.call(this);let e=[],n=this;this._filter=new Tf(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};Ef.inherits(Af,ca)});var at=m((Gm,fa)=>{"use strict";fa.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var os=m(($m,ha)=>{"use strict";var ss=[];(function(){for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)e&1?e=3988292384^e>>>1:e=e>>>1;ss[t]=e}})();var is=ha.exports=function(){this._crc=-1};is.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=ss[(this._crc^t[e])&255]^this._crc>>>8;return!0};is.prototype.crc32=function(){return this._crc^-1};is.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=ss[(e^t[n])&255]^e>>>8;return e^-1}});var as=m((zm,pa)=>{"use strict";var P=at(),kf=os(),O=pa.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[P.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[P.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[P.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[P.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[P.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[P.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};O.prototype.start=function(){this.read(P.PNG_SIGNATURE.length,this._parseSignature.bind(this))};O.prototype._parseSignature=function(t){let e=P.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(new Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};O.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let i=4;i<8;i++)r+=String.fromCharCode(t[i]);let s=!!(t[4]&32);if(!this._hasIHDR&&n!==P.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new kf,this._crc.write(Buffer.from(r)),this._chunks[n])return this._chunks[n](e);if(!s){this.error(new Error("Unsupported critical chunk type "+r));return}this.read(e+4,this._skipChunk.bind(this))};O.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};O.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};O.prototype._parseChunkEnd=function(t){let e=t.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==e){this.error(new Error("Crc error - "+e+" - "+n));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))};O.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};O.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],s=t[9],i=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(new Error("Unsupported bit depth "+r));return}if(!(s in P.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(i!==0){this.error(new Error("Unsupported compression method"));return}if(o!==0){this.error(new Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=s;let l=P.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:!!a,palette:!!(s&P.COLORTYPE_PALETTE),color:!!(s&P.COLORTYPE_COLOR),alpha:!!(s&P.COLORTYPE_ALPHA),bpp:l,colorType:s}),this._handleChunkEnd()};O.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};O.prototype._parsePLTE=function(t){this._crc.write(t);let e=Math.floor(t.length/3);for(let n=0;n<e;n++)this._palette.push([t[n*3],t[n*3+1],t[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};O.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};O.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===P.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}this._colorType===P.COLORTYPE_GRAYSCALE&&this.transColor([t.readUInt16BE(0)]),this._colorType===P.COLORTYPE_COLOR&&this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]),this._handleChunkEnd()};O.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};O.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/P.GAMMA_DIVISION),this._handleChunkEnd()};O.prototype._handleIDAT=function(t){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-t,this._parseIDAT.bind(this,t))};O.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===P.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw new Error("Expected palette not found");this.inflateData(e);let n=t-e.length;n>0?this._handleIDAT(n):this._handleChunkEnd()};O.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};O.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var ls=m(ma=>{"use strict";var ga=ts(),Cf=[function(){},function(t,e,n,r){if(r===e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=255},function(t,e,n,r){if(r+1>=e.length)throw new Error("Ran out of data");let s=e[r];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=e[r+1]},function(t,e,n,r){if(r+2>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=255},function(t,e,n,r){if(r+3>=e.length)throw new Error("Ran out of data");t[n]=e[r],t[n+1]=e[r+1],t[n+2]=e[r+2],t[n+3]=e[r+3]}],Rf=[function(){},function(t,e,n,r){let s=e[0];t[n]=s,t[n+1]=s,t[n+2]=s,t[n+3]=r},function(t,e,n){let r=e[0];t[n]=r,t[n+1]=r,t[n+2]=r,t[n+3]=e[1]},function(t,e,n,r){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=r},function(t,e,n){t[n]=e[0],t[n+1]=e[1],t[n+2]=e[2],t[n+3]=e[3]}];function Pf(t,e){let n=[],r=0;function s(){if(r===t.length)throw new Error("Ran out of data");let i=t[r];r++;let o,a,l,c,u,d,f,h;switch(e){default:throw new Error("unrecognised depth");case 16:f=t[r],r++,n.push((i<<8)+f);break;case 4:f=i&15,h=i>>4,n.push(h,f);break;case 2:u=i&3,d=i>>2&3,f=i>>4&3,h=i>>6&3,n.push(h,f,d,u);break;case 1:o=i&1,a=i>>1&1,l=i>>2&1,c=i>>3&1,u=i>>4&1,d=i>>5&1,f=i>>6&1,h=i>>7&1,n.push(h,f,d,u,c,l,a,o);break}}return{get:function(i){for(;n.length<i;)s();let o=n.slice(0,i);return n=n.slice(i),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw new Error("extra data found")}}}function Lf(t,e,n,r,s,i){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++)for(let u=0;u<o;u++){let d=n(u,c,l);Cf[r](e,s,d,i),i+=r}return i}function Mf(t,e,n,r,s,i){let o=t.width,a=t.height,l=t.index;for(let c=0;c<a;c++){for(let u=0;u<o;u++){let d=s.get(r),f=n(u,c,l);Rf[r](e,d,f,i)}s.resetAfterLine()}}ma.dataToBitMap=function(t,e){let n=e.width,r=e.height,s=e.depth,i=e.bpp,o=e.interlace,a;s!==8&&(a=Pf(t,s));let l;s<=8?l=Buffer.alloc(n*r*4):l=new Uint16Array(n*r*4);let c=Math.pow(2,s)-1,u=0,d,f;if(o)d=ga.getImagePasses(n,r),f=ga.getInterlaceIterator(n,r);else{let h=0;f=function(){let g=h;return h+=4,g},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)s===8?u=Lf(d[h],l,f,i,t,u):Mf(d[h],l,f,i,a,c);if(s===8){if(u!==t.length)throw new Error("extra data found")}else a.end();return l}});var cs=m((Ym,ya)=>{"use strict";function Nf(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=s[t[i]];if(!l)throw new Error("index "+t[i]+" not in palette");for(let c=0;c<4;c++)e[i+c]=l[c];i+=4}}function Of(t,e,n,r,s){let i=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let l=!1;if(s.length===1?s[0]===t[i]&&(l=!0):s[0]===t[i]&&s[1]===t[i+1]&&s[2]===t[i+2]&&(l=!0),l)for(let c=0;c<4;c++)e[i+c]=0;i+=4}}function Bf(t,e,n,r,s){let i=255,o=Math.pow(2,s)-1,a=0;for(let l=0;l<r;l++)for(let c=0;c<n;c++){for(let u=0;u<4;u++)e[a+u]=Math.floor(t[a+u]*i/o+.5);a+=4}}ya.exports=function(t,e){let n=e.depth,r=e.width,s=e.height,i=e.colorType,o=e.transColor,a=e.palette,l=t;return i===3?Nf(t,l,r,s,a):(o&&Of(t,l,r,s,o),n!==8&&(n===16&&(l=Buffer.alloc(r*s*4)),Bf(t,l,r,s,n))),l}});var va=m((Jm,_a)=>{"use strict";var Df=require("util"),us=require("zlib"),Sa=Qr(),Hf=da(),Ff=as(),Uf=ls(),qf=cs(),oe=_a.exports=function(t){Sa.call(this),this._parser=new Ff(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=t,this.writable=!0,this._parser.start()};Df.inherits(oe,Sa);oe.prototype._handleError=function(t){this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0};oe.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=us.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let n=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,r=Math.max(n,us.Z_MIN_CHUNK);this._inflate=us.createInflate({chunkSize:r});let s=n,i=this.emit.bind(this,"error");this._inflate.on("error",function(a){s&&i(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){s&&(a.length>s&&(a=a.slice(0,s)),s-=a.length,o(a))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};oe.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new Hf(this._bitmapInfo)};oe.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};oe.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};oe.prototype._simpleTransparency=function(){this._metaData.alpha=!0};oe.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};oe.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};oe.prototype._complete=function(t){if(this.errord)return;let e;try{let n=Uf.dataToBitMap(t,this._bitmapInfo);e=qf(n,this._bitmapInfo),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var ba=m((Km,wa)=>{"use strict";var X=at();wa.exports=function(t,e,n,r){let s=[X.COLORTYPE_COLOR_ALPHA,X.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let g=(function(){let p=new ArrayBuffer(2);return new DataView(p).setInt16(0,256,!0),new Int16Array(p)[0]!==256})();if(r.bitDepth===8||r.bitDepth===16&&g)return t}let i=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=X.COLORTYPE_TO_BPP_MAP[r.inputColorType];a===4&&!r.inputHasAlpha&&(a=3);let l=X.COLORTYPE_TO_BPP_MAP[r.colorType];r.bitDepth===16&&(o=65535,l*=2);let c=Buffer.alloc(e*n*l),u=0,d=0,f=r.bgColor||{};f.red===void 0&&(f.red=o),f.green===void 0&&(f.green=o),f.blue===void 0&&(f.blue=o);function h(){let g,p,y,S=o;switch(r.inputColorType){case X.COLORTYPE_COLOR_ALPHA:S=i[u+3],g=i[u],p=i[u+1],y=i[u+2];break;case X.COLORTYPE_COLOR:g=i[u],p=i[u+1],y=i[u+2];break;case X.COLORTYPE_ALPHA:S=i[u+1],g=i[u],p=g,y=g;break;case X.COLORTYPE_GRAYSCALE:g=i[u],p=g,y=g;break;default:throw new Error("input color type:"+r.inputColorType+" is not supported at present")}return r.inputHasAlpha&&(s||(S/=o,g=Math.min(Math.max(Math.round((1-S)*f.red+S*g),0),o),p=Math.min(Math.max(Math.round((1-S)*f.green+S*p),0),o),y=Math.min(Math.max(Math.round((1-S)*f.blue+S*y),0),o))),{red:g,green:p,blue:y,alpha:S}}for(let g=0;g<n;g++)for(let p=0;p<e;p++){let y=h(i,u);switch(r.colorType){case X.COLORTYPE_COLOR_ALPHA:case X.COLORTYPE_COLOR:r.bitDepth===8?(c[d]=y.red,c[d+1]=y.green,c[d+2]=y.blue,s&&(c[d+3]=y.alpha)):(c.writeUInt16BE(y.red,d),c.writeUInt16BE(y.green,d+2),c.writeUInt16BE(y.blue,d+4),s&&c.writeUInt16BE(y.alpha,d+6));break;case X.COLORTYPE_ALPHA:case X.COLORTYPE_GRAYSCALE:{let S=(y.red+y.green+y.blue)/3;r.bitDepth===8?(c[d]=S,s&&(c[d+1]=y.alpha)):(c.writeUInt16BE(S,d),s&&c.writeUInt16BE(y.alpha,d+2));break}default:throw new Error("unrecognised color Type "+r.colorType)}u+=a,d+=l}return c}});var Ea=m((Xm,xa)=>{"use strict";var Ia=ns();function Wf(t,e,n,r,s){for(let i=0;i<n;i++)r[s+i]=t[e+i]}function jf(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++)r+=Math.abs(t[i]);return r}function Gf(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=t[e+o]-a;r[s+o]=l}}function $f(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=t[e+i]-o;s+=Math.abs(a)}return s}function zf(t,e,n,r,s){for(let i=0;i<n;i++){let o=e>0?t[e+i-n]:0,a=t[e+i]-o;r[s+i]=a}}function Vf(t,e,n){let r=0,s=e+n;for(let i=e;i<s;i++){let o=e>0?t[i-n]:0,a=t[i]-o;r+=Math.abs(a)}return r}function Yf(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,c=t[e+o]-(a+l>>1);r[s+o]=c}}function Jf(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=t[e+i]-(o+a>>1);s+=Math.abs(l)}return s}function Kf(t,e,n,r,s,i){for(let o=0;o<n;o++){let a=o>=i?t[e+o-i]:0,l=e>0?t[e+o-n]:0,c=e>0&&o>=i?t[e+o-(n+i)]:0,u=t[e+o]-Ia(a,l,c);r[s+o]=u}}function Xf(t,e,n,r){let s=0;for(let i=0;i<n;i++){let o=i>=r?t[e+i-r]:0,a=e>0?t[e+i-n]:0,l=e>0&&i>=r?t[e+i-(n+r)]:0,c=t[e+i]-Ia(o,a,l);s+=Math.abs(c)}return s}var Zf={0:Wf,1:Gf,2:zf,3:Yf,4:Kf},Qf={0:jf,1:$f,2:Vf,3:Jf,4:Xf};xa.exports=function(t,e,n,r,s){let i;if(!("filterType"in r)||r.filterType===-1)i=[0,1,2,3,4];else if(typeof r.filterType=="number")i=[r.filterType];else throw new Error("unrecognised filter types");r.bitDepth===16&&(s*=2);let o=e*s,a=0,l=0,c=Buffer.alloc((o+1)*n),u=i[0];for(let d=0;d<n;d++){if(i.length>1){let f=1/0;for(let h=0;h<i.length;h++){let g=Qf[i[h]](t,l,o,s);g<f&&(u=i[h],f=g)}}c[a]=u,a++,Zf[u](t,l,o,c,a,s),a+=o,l+=o}return c}});var ds=m((Zm,Ta)=>{"use strict";var H=at(),eh=os(),th=ba(),nh=Ea(),rh=require("zlib"),be=Ta.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32*1024,t.deflateLevel=t.deflateLevel!=null?t.deflateLevel:9,t.deflateStrategy=t.deflateStrategy!=null?t.deflateStrategy:3,t.inputHasAlpha=t.inputHasAlpha!=null?t.inputHasAlpha:!0,t.deflateFactory=t.deflateFactory||rh.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType=="number"?t.colorType:H.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType=="number"?t.inputColorType:H.COLORTYPE_COLOR_ALPHA,[H.COLORTYPE_GRAYSCALE,H.COLORTYPE_COLOR,H.COLORTYPE_COLOR_ALPHA,H.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw new Error("option color type:"+t.colorType+" is not supported at present");if([H.COLORTYPE_GRAYSCALE,H.COLORTYPE_COLOR,H.COLORTYPE_COLOR_ALPHA,H.COLORTYPE_ALPHA].indexOf(t.inputColorType)===-1)throw new Error("option input color type:"+t.inputColorType+" is not supported at present");if(t.bitDepth!==8&&t.bitDepth!==16)throw new Error("option bit depth:"+t.bitDepth+" is not supported at present")};be.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};be.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};be.prototype.filterData=function(t,e,n){let r=th(t,e,n,this._options),s=H.COLORTYPE_TO_BPP_MAP[this._options.colorType];return nh(r,e,n,this._options,s)};be.prototype._packChunk=function(t,e){let n=e?e.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(t,4),e&&e.copy(r,8),r.writeInt32BE(eh.crc32(r.slice(4,r.length-4)),r.length-4),r};be.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*H.GAMMA_DIVISION),0),this._packChunk(H.TYPE_gAMA,e)};be.prototype.packIHDR=function(t,e){let n=Buffer.alloc(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(H.TYPE_IHDR,n)};be.prototype.packIDAT=function(t){return this._packChunk(H.TYPE_IDAT,t)};be.prototype.packIEND=function(){return this._packChunk(H.TYPE_IEND,null)}});var Ra=m((Qm,Ca)=>{"use strict";var sh=require("util"),Aa=require("stream"),ih=at(),oh=ds(),ka=Ca.exports=function(t){Aa.call(this);let e=t||{};this._packer=new oh(e),this._deflate=this._packer.createDeflate(),this.readable=!0};sh.inherits(ka,Aa);ka.prototype.pack=function(t,e,n,r){this.emit("data",Buffer.from(ih.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,n)),r&&this.emit("data",this._packer.packGAMA(r));let s=this._packer.filterData(t,e,n);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(i){this.emit("data",this._packer.packIDAT(i))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(s)}});var Ba=m((Wt,Oa)=>{"use strict";var Pa=require("assert").ok,lt=require("zlib"),ah=require("util"),La=require("buffer").kMaxLength;function Fe(t){if(!(this instanceof Fe))return new Fe(t);t&&t.chunkSize<lt.Z_MIN_CHUNK&&(t.chunkSize=lt.Z_MIN_CHUNK),lt.Inflate.call(this,t),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,t&&t.maxLength!=null&&(this._maxLength=t.maxLength)}function lh(t){return new Fe(t)}function Ma(t,e){e&&process.nextTick(e),t._handle&&(t._handle.close(),t._handle=null)}Fe.prototype._processChunk=function(t,e,n){if(typeof n=="function")return lt.Inflate._processChunk.call(this,t,e,n);let r=this,s=t&&t.length,i=this._chunkSize-this._offset,o=this._maxLength,a=0,l=[],c=0,u;this.on("error",function(g){u=g});function d(g,p){if(r._hadError)return;let y=i-p;if(Pa(y>=0,"have should not go down"),y>0){let S=r._buffer.slice(r._offset,r._offset+y);if(r._offset+=y,S.length>o&&(S=S.slice(0,o)),l.push(S),c+=S.length,o-=S.length,o===0)return!1}return(p===0||r._offset>=r._chunkSize)&&(i=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize)),p===0?(a+=s-g,s=g,!0):!1}Pa(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,s,this._buffer,this._offset,i),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw u;if(c>=La)throw Ma(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+La.toString(16)+" bytes");let h=Buffer.concat(l,c);return Ma(this),h};ah.inherits(Fe,lt.Inflate);function ch(t,e){if(typeof e=="string"&&(e=Buffer.from(e)),!(e instanceof Buffer))throw new TypeError("Not a string or buffer");let n=t._finishFlushFlag;return n==null&&(n=lt.Z_FINISH),t._processChunk(e,n)}function Na(t,e){return ch(new Fe(e),t)}Oa.exports=Wt=Na;Wt.Inflate=Fe;Wt.createInflate=lh;Wt.inflateSync=Na});var fs=m((ey,Ha)=>{"use strict";var Da=Ha.exports=function(t){this._buffer=t,this._reads=[]};Da.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Da.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let t=this._reads[0];if(this._buffer.length&&(this._buffer.length>=t.length||t.allowLess)){this._reads.shift();let e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length))}else break}if(this._reads.length>0)return new Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)return new Error("unrecognised content at end of stream")}});var Ua=m(Fa=>{"use strict";var uh=fs(),dh=rs();Fa.process=function(t,e){let n=[],r=new uh(t);return new dh(e,{read:r.read.bind(r),write:function(i){n.push(i)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Ga=m((ny,ja)=>{"use strict";var qa=!0,Wa=require("zlib"),fh=Ba();Wa.deflateSync||(qa=!1);var hh=fs(),ph=Ua(),gh=as(),mh=ls(),yh=cs();ja.exports=function(t,e){if(!qa)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n;function r(A){n=A}let s;function i(A){s=A}function o(A){s.transColor=A}function a(A){s.palette=A}function l(){s.alpha=!0}let c;function u(A){c=A}let d=[];function f(A){d.push(A)}let h=new hh(t);if(new gh(e,{read:h.read.bind(h),error:r,metadata:i,gamma:u,palette:a,transColor:o,inflateData:f,simpleTransparency:l}).start(),h.process(),n)throw n;let p=Buffer.concat(d);d.length=0;let y;if(s.interlace)y=Wa.inflateSync(p);else{let M=((s.width*s.bpp*s.depth+7>>3)+1)*s.height;y=fh(p,{chunkSize:M,maxLength:M})}if(p=null,!y||!y.length)throw new Error("bad png - invalid inflate data response");let S=ph.process(y,s);p=null;let G=mh.dataToBitMap(S,s);S=null;let re=yh(G,s);return s.data=re,s.gamma=c||0,s}});var Ya=m((ry,Va)=>{"use strict";var $a=!0,za=require("zlib");za.deflateSync||($a=!1);var Sh=at(),_h=ds();Va.exports=function(t,e){if(!$a)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let n=e||{},r=new _h(n),s=[];s.push(Buffer.from(Sh.PNG_SIGNATURE)),s.push(r.packIHDR(t.width,t.height)),t.gamma&&s.push(r.packGAMA(t.gamma));let i=r.filterData(t.data,t.width,t.height),o=za.deflateSync(i,r.getDeflateOptions());if(i=null,!o||!o.length)throw new Error("bad png - invalid compressed data response");return s.push(r.packIDAT(o)),s.push(r.packIEND()),Buffer.concat(s)}});var Ja=m(hs=>{"use strict";var vh=Ga(),wh=Ya();hs.read=function(t,e){return vh(t,e||{})};hs.write=function(t,e){return wh(t,e)}});var Za=m(Xa=>{"use strict";var bh=require("util"),Ka=require("stream"),Ih=va(),xh=Ra(),Eh=Ja(),U=Xa.PNG=function(t){Ka.call(this),t=t||{},this.width=t.width|0,this.height=t.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,t.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new Ih(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(e){this.data=e,this.emit("parsed",e)}.bind(this)),this._packer=new xh(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};bh.inherits(U,Ka);U.sync=Eh;U.prototype.pack=function(){return!this.data||!this.data.length?(this.emit("error","No data provided"),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)};U.prototype.parse=function(t,e){if(e){let n,r;n=function(s){this.removeListener("error",r),this.data=s,e(null,this)}.bind(this),r=function(s){this.removeListener("parsed",n),e(s,null)}.bind(this),this.once("parsed",n),this.once("error",r)}return this.end(t),this};U.prototype.write=function(t){return this._parser.write(t),!0};U.prototype.end=function(t){this._parser.end(t)};U.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};U.prototype._gamma=function(t){this.gamma=t};U.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};U.bitblt=function(t,e,n,r,s,i,o,a){if(n|=0,r|=0,s|=0,i|=0,o|=0,a|=0,n>t.width||r>t.height||n+s>t.width||r+i>t.height)throw new Error("bitblt reading outside image");if(o>e.width||a>e.height||o+s>e.width||a+i>e.height)throw new Error("bitblt writing outside image");for(let l=0;l<i;l++)t.data.copy(e.data,(a+l)*e.width+o<<2,(r+l)*t.width+n<<2,(r+l)*t.width+n+s<<2)};U.prototype.bitblt=function(t,e,n,r,s,i,o){return U.bitblt(this,t,e,n,r,s,i,o),this};U.adjustGamma=function(t){if(t.gamma){for(let e=0;e<t.height;e++)for(let n=0;n<t.width;n++){let r=t.width*e+n<<2;for(let s=0;s<3;s++){let i=t.data[r+s]/255;i=Math.pow(i,1/2.2/t.gamma),t.data[r+s]=Math.round(i*255)}}t.gamma=0}};U.prototype.adjustGamma=function(){U.adjustGamma(this)}});var jt=m(Ue=>{function Qa(t){if(typeof t=="number"&&(t=t.toString()),typeof t!="string")throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||e.length===5||e.length>8)throw new Error("Invalid hex color: "+t);(e.length===3||e.length===4)&&(e=Array.prototype.concat.apply([],e.map(function(r){return[r,r]}))),e.length===6&&e.push("F","F");let n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:"#"+e.slice(0,6).join("")}}Ue.getOptions=function(e){e||(e={}),e.color||(e.color={});let n=typeof e.margin>"u"||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,s=e.scale||4;return{width:r,scale:r?4:s,margin:n,color:{dark:Qa(e.color.dark||"#000000ff"),light:Qa(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}};Ue.getScale=function(e,n){return n.width&&n.width>=e+n.margin*2?n.width/(e+n.margin*2):n.scale};Ue.getImageWidth=function(e,n){let r=Ue.getScale(e,n);return Math.floor((e+n.margin*2)*r)};Ue.qrToImageData=function(e,n,r){let s=n.modules.size,i=n.modules.data,o=Ue.getScale(s,r),a=Math.floor((s+r.margin*2)*o),l=r.margin*o,c=[r.color.light,r.color.dark];for(let u=0;u<a;u++)for(let d=0;d<a;d++){let f=(u*a+d)*4,h=r.color.light;if(u>=l&&d>=l&&u<a-l&&d<a-l){let g=Math.floor((u-l)/o),p=Math.floor((d-l)/o);h=c[i[g*s+p]?1:0]}e[f++]=h.r,e[f++]=h.g,e[f++]=h.b,e[f]=h.a}}});var el=m(ae=>{var Th=require("fs"),Ah=Za().PNG,ps=jt();ae.render=function(e,n){let r=ps.getOptions(n),s=r.rendererOpts,i=ps.getImageWidth(e.modules.size,r);s.width=i,s.height=i;let o=new Ah(s);return ps.qrToImageData(o.data,e,r),o};ae.renderToDataURL=function(e,n,r){typeof r>"u"&&(r=n,n=void 0),ae.renderToBuffer(e,n,function(s,i){s&&r(s);let o="data:image/png;base64,";o+=i.toString("base64"),r(null,o)})};ae.renderToBuffer=function(e,n,r){typeof r>"u"&&(r=n,n=void 0);let s=ae.render(e,n),i=[];s.on("error",r),s.on("data",function(o){i.push(o)}),s.on("end",function(){r(null,Buffer.concat(i))}),s.pack()};ae.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=!1,o=(...l)=>{i||(i=!0,s.apply(null,l))},a=Th.createWriteStream(e);a.on("error",o),a.on("close",o),ae.renderToFileStream(a,n,r)};ae.renderToFileStream=function(e,n,r){ae.render(n,r).pack().pipe(e)}});var tl=m(Mn=>{var kh=jt(),Ch={WW:" ",WB:"\u2584",BB:"\u2588",BW:"\u2580"},Rh={BB:" ",BW:"\u2584",WW:"\u2588",WB:"\u2580"};function Ph(t,e,n){return t&&e?n.BB:t&&!e?n.BW:!t&&e?n.WB:n.WW}Mn.render=function(t,e,n){let r=kh.getOptions(e),s=Ch;(r.color.dark.hex==="#ffffff"||r.color.light.hex==="#000000")&&(s=Rh);let i=t.modules.size,o=t.modules.data,a="",l=Array(i+r.margin*2+1).join(s.WW);l=Array(r.margin/2+1).join(l+`
|
|
14
|
+
`);let c=Array(r.margin+1).join(s.WW);a+=l;for(let u=0;u<i;u+=2){a+=c;for(let d=0;d<i;d++){let f=o[u*i+d],h=o[(u+1)*i+d];a+=Ph(f,h,s)}a+=c+`
|
|
15
|
+
`}return a+=l.slice(0,-1),typeof n=="function"&&n(null,a),a};Mn.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),o=Mn.render(n,r);i.writeFile(e,o,s)}});var rl=m(nl=>{nl.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i="\x1B[40m \x1B[0m",o="\x1B[47m \x1B[0m",a="",l=Array(r+3).join(o),c=Array(2).join(o);a+=l+`
|
|
16
|
+
`;for(let u=0;u<r;++u){a+=o;for(let d=0;d<r;d++)a+=s[u*r+d]?i:o;a+=c+`
|
|
17
17
|
`}return a+=l+`
|
|
18
|
-
`,typeof n=="function"&&n(null,a),a}});var
|
|
19
|
-
`+o,d=o;for(let f=-1;f<r+1;f+=2){for(let h=-1;h<r;h++)d+=c[
|
|
20
|
-
`;return typeof r=="function"&&r(null,f),f}});var
|
|
21
|
-
`)
|
|
22
|
-
`)
|
|
23
|
-
`):process.
|
|
24
|
-
`),
|
|
25
|
-
|
|
26
|
-
`;Vt(ct,{maxBytes:S.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,Dn.appendFileSync)(ct,n)}catch{}}}},v=new yi;var Ee=require("fs"),Nl=require("os"),Yt=require("path"),Ol=require("crypto"),_i="claude-hook:",Jt="x-vibelet-claude-hook-secret",Kt={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function cp(t,e){return`#!/usr/bin/env node
|
|
18
|
+
`,typeof n=="function"&&n(null,a),a}});var al=m(ol=>{var Lh="\x1B[47m",Mh="\x1B[40m",gs="\x1B[37m",ms="\x1B[30m",qe="\x1B[0m",Nh=Lh+ms,Oh=Mh+gs,Bh=function(t,e,n){return{"00":qe+" "+t,"01":qe+e+"\u2584"+t,"02":qe+n+"\u2584"+t,10:qe+e+"\u2580"+t,11:" ",12:"\u2584",20:qe+n+"\u2580"+t,21:"\u2580",22:"\u2588"}},sl=function(t,e,n,r){let s=e+1;if(n>=s||r>=s||r<-1||n<-1)return"0";if(n>=e||r>=e||r<0||n<0)return"1";let i=r*e+n;return t[i]?"2":"1"},il=function(t,e,n,r){return sl(t,e,n,r)+sl(t,e,n,r+1)};ol.render=function(t,e,n){let r=t.modules.size,s=t.modules.data,i=!!(e&&e.inverse),o=e&&e.inverse?Oh:Nh,c=Bh(o,i?ms:gs,i?gs:ms),u=qe+`
|
|
19
|
+
`+o,d=o;for(let f=-1;f<r+1;f+=2){for(let h=-1;h<r;h++)d+=c[il(s,r,h,f)];d+=c[il(s,r,r,f)]+u}return d+=qe,typeof n=="function"&&n(null,d),d}});var cl=m(ll=>{var Dh=rl(),Hh=al();ll.render=function(t,e,n){return e&&e.small?Hh.render(t,e,n):Dh.render(t,e,n)}});var Ss=m(dl=>{var Fh=jt();function ul(t,e){let n=t.a/255,r=e+'="'+t.hex+'"';return n<1?r+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':r}function ys(t,e,n){let r=t+e;return typeof n<"u"&&(r+=" "+n),r}function Uh(t,e,n){let r="",s=0,i=!1,o=0;for(let a=0;a<t.length;a++){let l=Math.floor(a%e),c=Math.floor(a/e);!l&&!i&&(i=!0),t[a]?(o++,a>0&&l>0&&t[a-1]||(r+=i?ys("M",l+n,.5+c+n):ys("m",s,0),s=0,i=!1),l+1<e&&t[a+1]||(r+=ys("h",o),o=0)):s++}return r}dl.render=function(e,n,r){let s=Fh.getOptions(n),i=e.modules.size,o=e.modules.data,a=i+s.margin*2,l=s.color.light.a?"<path "+ul(s.color.light,"fill")+' d="M0 0h'+a+"v"+a+'H0z"/>':"",c="<path "+ul(s.color.dark,"stroke")+' d="'+Uh(o,i,s.margin)+'"/>',u='viewBox="0 0 '+a+" "+a+'"',f='<svg xmlns="http://www.w3.org/2000/svg" '+(s.width?'width="'+s.width+'" height="'+s.width+'" ':"")+u+' shape-rendering="crispEdges">'+l+c+`</svg>
|
|
20
|
+
`;return typeof r=="function"&&r(null,f),f}});var fl=m(Nn=>{var qh=Ss();Nn.render=qh.render;Nn.renderToFile=function(e,n,r,s){typeof s>"u"&&(s=r,r=void 0);let i=require("fs"),a='<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'+Nn.render(n,r);i.writeFile(e,a,s)}});var hl=m(On=>{var _s=jt();function Wh(t,e,n){t.clearRect(0,0,e.width,e.height),e.style||(e.style={}),e.height=n,e.width=n,e.style.height=n+"px",e.style.width=n+"px"}function jh(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}On.render=function(e,n,r){let s=r,i=n;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),n||(i=jh()),s=_s.getOptions(s);let o=_s.getImageWidth(e.modules.size,s),a=i.getContext("2d"),l=a.createImageData(o,o);return _s.qrToImageData(l.data,e,s),Wh(a,i,o),a.putImageData(l,0,0),i};On.renderToDataURL=function(e,n,r){let s=r;typeof s>"u"&&(!n||!n.getContext)&&(s=n,n=void 0),s||(s={});let i=On.render(e,n,s),o=s.type||"image/png",a=s.rendererOpts||{};return i.toDataURL(o,a.quality)}});var gl=m(Gt=>{var Gh=Mr(),vs=Zr(),pl=hl(),$h=Ss();function ws(t,e,n,r,s){let i=[].slice.call(arguments,1),o=i.length,a=typeof i[o-1]=="function";if(!a&&!Gh())throw new Error("Callback required as last argument");if(a){if(o<2)throw new Error("Too few arguments provided");o===2?(s=n,n=e,e=r=void 0):o===3&&(e.getContext&&typeof s>"u"?(s=r,r=void 0):(s=r,r=n,n=e,e=void 0))}else{if(o<1)throw new Error("Too few arguments provided");return o===1?(n=e,e=r=void 0):o===2&&!e.getContext&&(r=n,n=e,e=void 0),new Promise(function(l,c){try{let u=vs.create(n,r);l(t(u,e,r))}catch(u){c(u)}})}try{let l=vs.create(n,r);s(null,t(l,e,r))}catch(l){s(l)}}Gt.create=vs.create;Gt.toCanvas=ws.bind(null,pl.render);Gt.toDataURL=ws.bind(null,pl.renderToDataURL);Gt.toString=ws.bind(null,function(t,e,n){return $h.render(t,n)})});var _l=m(Ie=>{var ml=Mr(),bs=Zr(),zh=el(),yl=tl(),Vh=cl(),Sl=fl();function $t(t,e,n){if(typeof t>"u")throw new Error("String required as first argument");if(typeof n>"u"&&(n=e,e={}),typeof n!="function")if(ml())e=n||{},n=null;else throw new Error("Callback required as last argument");return{opts:e,cb:n}}function Yh(t){return t.slice((t.lastIndexOf(".")-1>>>0)+2).toLowerCase()}function Bn(t){switch(t){case"svg":return Sl;case"txt":case"utf8":return yl;case"png":case"image/png":default:return zh}}function Jh(t){switch(t){case"svg":return Sl;case"terminal":return Vh;case"utf8":default:return yl}}function zt(t,e,n){if(!n.cb)return new Promise(function(r,s){try{let i=bs.create(e,n.opts);return t(i,n.opts,function(o,a){return o?s(o):r(a)})}catch(i){s(i)}});try{let r=bs.create(e,n.opts);return t(r,n.opts,n.cb)}catch(r){n.cb(r)}}Ie.create=bs.create;Ie.toCanvas=gl().toCanvas;Ie.toString=function(e,n,r){let s=$t(e,n,r),i=s.opts?s.opts.type:void 0,o=Jh(i);return zt(o.render,e,s)};Ie.toDataURL=function(e,n,r){let s=$t(e,n,r),i=Bn(s.opts.type);return zt(i.renderToDataURL,e,s)};Ie.toBuffer=function(e,n,r){let s=$t(e,n,r),i=Bn(s.opts.type);return zt(i.renderToBuffer,e,s)};Ie.toFile=function(e,n,r,s){if(typeof e!="string"||!(typeof n=="string"||typeof n=="object"))throw new Error("Invalid argument");if(arguments.length<3&&!ml())throw new Error("Too few arguments provided");let i=$t(n,r,s),o=i.opts.type||Yh(e),l=Bn(o).renderToFile.bind(null,e);return zt(l,n,i)};Ie.toFileStream=function(e,n,r){if(arguments.length<2)throw new Error("Too few arguments provided");let s=$t(n,r,e.emit.bind(e,"error")),o=Bn("png").renderToFileStream.bind(null,e);zt(o,n,s)}});var wl=m((yy,vl)=>{vl.exports=_l()});var Zc=require("http");var Rd=Ve(no(),1),Pd=Ve(wr(),1),Ld=Ve(xr(),1),Md=Ve(wn(),1),Lr=Ve(fo(),1);var Ge=require("fs/promises"),cr=require("path"),Qc=require("os"),eu=Ve(wl(),1);var dt=require("child_process"),Nl=require("fs"),q=require("path"),Kt=require("os");var jn=require("fs");var bl=require("os"),z=require("path"),Vt=(0,z.join)((0,bl.homedir)(),".vibelet"),Dn=(0,z.join)(Vt,"logs"),Is=(0,z.join)(Vt,"data"),Kh=(0,z.join)(Vt,"runtime"),Sy=(0,z.join)(Kh,"current"),Il=(0,z.join)(Vt,"identity.json"),xl=(0,z.join)(Vt,"pairings.json"),El=(0,z.join)(Is,"push-subscriptions.json"),Hn=(0,z.join)(Is,"sessions.json"),ct=(0,z.join)(Is,"audit.jsonl"),Fn=(0,z.join)(Dn,"daemon.stdout.log"),Un=(0,z.join)(Dn,"daemon.stderr.log");var qn={stdout:!1,stderr:!1};function Tl(t){if(!t||typeof t!="object")return!1;let e=typeof t.code=="string"?t.code:"";return e==="EIO"||e==="EPIPE"}function Xh(t){return!t.destroyed&&t.writable!==!1}function Al(t,e){if(qn[t])return!1;let n=t==="stderr"?process.stderr:process.stdout;if(!Xh(n))return qn[t]=!0,!1;try{return n.write(e,r=>{Tl(r)&&(qn[t]=!0)}),!0}catch(r){return Tl(r)&&(qn[t]=!0),!1}}function Yt(t){return Al("stdout",t)}function Wn(t){return Al("stderr",t)}var kl={debug:10,info:20,warn:30,error:40},Zh=process.env.VIBE_LOG_LEVEL||"info";function Qh(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}var Rl=!Qh();if(Rl)try{(0,jn.mkdirSync)(Dn,{recursive:!0})}catch{}function Cl(t,e,n){if(kl[t]<kl[Zh])return;let r={level:t,ts:new Date().toISOString(),msg:n,...e},s=JSON.stringify(r);if(t==="error"||t==="warn"?Wn(s+`
|
|
21
|
+
`):Yt(s+`
|
|
22
|
+
`),Rl){let i=t==="error"||t==="warn"?Un:Fn;try{(0,jn.appendFileSync)(i,s+`
|
|
23
|
+
`)}catch{}}}function Pl(t={}){function e(n,r,s){typeof r=="string"?Cl(n,t,r):Cl(n,{...t,...r},s)}return{debug:(n,r)=>e("debug",n,r),info:(n,r)=>e("info",n,r),warn:(n,r)=>e("warn",n,r),error:(n,r)=>e("error",n,r),child:n=>Pl({...t,...n})}}var L=Pl({module:"daemon"});var ep=["fnm_multishells"],tp=6e4,np=L.child({module:"config"});function xe(t){return ep.some(e=>t.includes(e))}function Es(){return[process.env.SHELL,"/bin/zsh","/bin/bash","/bin/sh"].filter(t=>!!t).filter((t,e,n)=>n.indexOf(t)===e)}var ut=null;function Ol(){if(ut&&!xe(ut.PATH??""))return ut;for(let t of Es())try{let e=(0,dt.execFileSync)(t,["-ilc","env"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),n={};for(let r of e.split(`
|
|
24
|
+
`)){let s=r.indexOf("=");s>0&&(n[r.slice(0,s)]=r.slice(s+1))}return xe(n.PATH??"")?ut=null:ut=n,n}catch{}return ut={},{}}function rp(t=Ol()){let e=(0,Kt.homedir)(),n=t.PNPM_HOME||process.env.PNPM_HOME||(0,q.join)(e,"Library","pnpm"),r=t.PATH||process.env.PATH||"",s=["/usr/local/bin","/opt/homebrew/bin","/usr/bin","/bin",(0,q.join)(e,".npm-global","bin"),(0,q.join)(e,".local","bin"),(0,q.join)(e,".claude","bin"),n],i=r.split(q.delimiter).filter(Boolean),o=new Set(i);for(let a of s)o.has(a)||(i.push(a),o.add(a));return i.join(q.delimiter)}function xs(t,e){let n=process.env[t];if(!n)return e;let r=Number(n);return Number.isFinite(r)&&r>0?Math.floor(r):e}function Ll(t,e){let n=process.env[t];if(n==null||n==="")return e;let r=Number(n);return Number.isFinite(r)&&r>=0?Math.floor(r):e}function Gn(){let t=Ol(),e={};for(let[n,r]of Object.entries(process.env))typeof r=="string"&&(e[n]=r);for(let[n,r]of Object.entries(t))typeof r=="string"&&(e[n]=r);return e.PATH=rp(t),e.HOME||(e.HOME=(0,Kt.homedir)()),delete e.CLAUDE_CODE_ENTRYPOINT,delete e.CLAUDECODE,e}function Jt(t,e=3e3){try{return(0,dt.execFileSync)(t,["--version"],{timeout:e,stdio:"pipe",encoding:"utf-8",env:Gn()}).trim()||null}catch{return null}}function sp(t){for(let e of Es())try{let n=(0,dt.execFileSync)(e,["-ilc",`command -v ${t}`],{timeout:5e3,stdio:["pipe","pipe","pipe"],encoding:"utf-8"}).trim();if(n)return n}catch{}}function ip(){let t=(0,Kt.homedir)();return[(0,q.join)(t,".local","bin","claude"),(0,q.join)(t,".claude","bin","claude"),"/usr/local/bin/claude","/opt/homebrew/bin/claude",(0,q.join)(t,".npm-global","bin","claude")]}function op(){for(let t of ip())if(Jt(t))return t;try{let t=(0,dt.execFileSync)("/usr/bin/which",["claude"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Gn()}).trim();if(t&&!t.includes("cmux")&&Jt(t))return t}catch{}}function ap(){let t=(0,Kt.homedir)(),e=[process.env.PNPM_HOME,(0,q.join)(t,"Library","pnpm")].filter(n=>!!n);return["/usr/local/bin/codex","/opt/homebrew/bin/codex",(0,q.join)(t,".npm-global","bin","codex"),(0,q.join)(t,".local","bin","codex"),...e.map(n=>(0,q.join)(n,"codex"))]}function lp(){let t;for(let n of ap())if(Jt(n)){if(!xe(n))return n;t=n}try{let n=(0,dt.execFileSync)("/usr/bin/which",["codex"],{timeout:3e3,stdio:"pipe",encoding:"utf-8",env:Gn()}).trim();if(n&&Jt(n)){if(!xe(n))return n;t=t??n}}catch{}let e=sp("codex");if(e&&Jt(e)){if(!xe(e))return e;t=t??e}return t}function Bl(t,e){let n=null,r=0;return()=>{let s=e==="claude"?"CLAUDE_PATH":"CODEX_PATH";if(process.env[s])return process.env[s];let i=Date.now();return(!n||i-r>tp||!(0,Nl.existsSync)(n)||xe(n))&&(n=t()??e,r=i,np.info({name:e,path:n,transient:xe(n)},"binary resolved")),n}}var cp=Bl(op,"claude"),up=Bl(lp,"codex");function dp(){let t={},e=process.argv.slice(2);for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith("--")&&n+1<e.length){let s=r.slice(2);t[s]=e[++n]}}return t}var Ml=dp();function fp(t,e){return{command:Es()[0]??"/bin/zsh",args:["-lc",`command -v ${t} >/dev/null 2>&1 && exec ${t} "$@"`,"--",...e]}}var _={port:Number(process.env.VIBE_PORT)||9876,legacyToken:process.env.VIBE_TOKEN||"",canonicalHost:Ml.host||process.env.VIBELET_CANONICAL_HOST||process.env.VIBELET_HOST||"",fallbackHosts:Ml["fallback-hosts"]||process.env.VIBELET_FALLBACK_HOSTS||"",relayUrl:process.env.VIBELET_RELAY_URL||"",idleTimeoutMs:Ll("VIBE_IDLE_TIMEOUT_MS",1800*1e3),turnStallTimeoutMs:Ll("VIBE_TURN_STALL_TIMEOUT_MS",300*1e3),auditMaxBytes:xs("VIBE_AUDIT_MAX_BYTES",8*1024*1024),daemonLogMaxBytes:xs("VIBE_DAEMON_LOG_MAX_BYTES",16*1024*1024),storageHousekeepingIntervalMs:xs("VIBE_STORAGE_HOUSEKEEPING_INTERVAL_MS",300*1e3),get claudePath(){return cp()},get codexPath(){return up()},isTransientPath:xe,execViaLoginShell:fp,buildSanitizedEnv:Gn};var Xs=require("crypto"),Lc=require("fs/promises");var $l=require("child_process"),zl=require("fs");var $n=require("fs"),Fl=require("path");var j=require("fs");function hp(t,e,n,r){let s=Math.max(0,e-n),i=Math.floor(e*.75);return Math.max(0,Math.min(t,s,r??i))}function Xt(t,e){if(!(0,j.existsSync)(t))return{path:t,existed:!1,trimmed:!1,beforeBytes:0,afterBytes:0,reclaimedBytes:0};let r=(0,j.statSync)(t).size,s=Math.max(0,e.incomingBytes??0);if(e.maxBytes<=0||r+s<=e.maxBytes)return{path:t,existed:!0,trimmed:!1,beforeBytes:r,afterBytes:r,reclaimedBytes:0};let i=hp(r,e.maxBytes,s,e.retainBytes),o=(0,j.openSync)(t,"r+");try{let a=Buffer.alloc(0);if(i>0){let l=Buffer.alloc(i);(0,j.readSync)(o,l,0,i,r-i);let c=0;if(r>i){let u=l.indexOf(10);u>=0&&u+1<l.length&&(c=u+1)}a=l.subarray(c)}return(0,j.ftruncateSync)(o,0),a.length>0&&(0,j.writeSync)(o,a,0,a.length,0),{path:t,existed:!0,trimmed:!0,beforeBytes:r,afterBytes:a.length,reclaimedBytes:r-a.length}}finally{(0,j.closeSync)(o)}}function Dl(t){let e=[Xt(t.auditPath,{maxBytes:t.auditMaxBytes}),Xt(t.stdoutLogPath,{maxBytes:t.logMaxBytes}),Xt(t.stderrLogPath,{maxBytes:t.logMaxBytes})];return{files:e,trimmedFiles:e.filter(n=>n.trimmed).length,reclaimedBytes:e.reduce((n,r)=>n+r.reclaimedBytes,0)}}var Hl=!1,pp=new Set(["ts","event","source","appEvent","level"]);function gp(){return process.env.VIBE_TEST==="1"||process.argv.includes("--test")}function mp(t={}){let e={};for(let[n,r]of Object.entries(t))pp.has(n)||(e[n]=r);return e}function yp(t,e,n={},r){return{ts:r??new Date().toISOString(),event:"app.log",source:"app",appEvent:t,level:e,...mp(n)}}function Sp(){Hl||((0,$n.mkdirSync)((0,Fl.dirname)(ct),{recursive:!0}),Hl=!0)}var Ts=class{emit(e,n={}){this.write({ts:new Date().toISOString(),event:e,...n})}emitApp(e,n,r={},s){this.write(yp(e,n,r,s))}write(e){if(!gp()){Sp();try{let n=JSON.stringify(e)+`
|
|
25
|
+
`;Xt(ct,{maxBytes:_.auditMaxBytes,incomingBytes:Buffer.byteLength(n)}),(0,$n.appendFileSync)(ct,n)}catch{}}}},v=new Ts;var Ee=require("fs"),Ul=require("os"),Zt=require("path"),ql=require("crypto"),As="claude-hook:",Qt="x-vibelet-claude-hook-secret",en={continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse"}};function _p(t,e){return`#!/usr/bin/env node
|
|
27
26
|
const http = require('http');
|
|
28
27
|
const chunks = [];
|
|
29
28
|
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
@@ -37,16 +36,16 @@ process.stdin.on('end', () => {
|
|
|
37
36
|
headers: {
|
|
38
37
|
'Content-Type': 'application/json',
|
|
39
38
|
'Content-Length': body.length,
|
|
40
|
-
'${
|
|
39
|
+
'${Qt}': ${JSON.stringify(e)}
|
|
41
40
|
}
|
|
42
41
|
}, (res) => { res.resume(); });
|
|
43
42
|
req.on('error', () => {});
|
|
44
43
|
req.end(body);
|
|
45
44
|
});
|
|
46
45
|
process.stdin.resume();
|
|
47
|
-
`}function
|
|
46
|
+
`}function vp(t,e){return`#!/usr/bin/env node
|
|
48
47
|
const http = require('http');
|
|
49
|
-
const fallback = ${JSON.stringify(JSON.stringify(
|
|
48
|
+
const fallback = ${JSON.stringify(JSON.stringify(en))};
|
|
50
49
|
const chunks = [];
|
|
51
50
|
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
52
51
|
process.stdin.on('end', () => {
|
|
@@ -59,7 +58,7 @@ process.stdin.on('end', () => {
|
|
|
59
58
|
headers: {
|
|
60
59
|
'Content-Type': 'application/json',
|
|
61
60
|
'Content-Length': body.length,
|
|
62
|
-
'${
|
|
61
|
+
'${Qt}': ${JSON.stringify(e)}
|
|
63
62
|
}
|
|
64
63
|
}, (res) => {
|
|
65
64
|
const responseChunks = [];
|
|
@@ -80,28 +79,29 @@ process.stdin.on('end', () => {
|
|
|
80
79
|
req.end(body);
|
|
81
80
|
});
|
|
82
81
|
process.stdin.resume();
|
|
83
|
-
`}function
|
|
84
|
-
`)}function
|
|
85
|
-
`):""}function
|
|
86
|
-
`);this.buffer=
|
|
87
|
-
`),!0}setApprovalMode(e){this.approvalMode=e,Z.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),Z.info({sessionId:this.sessionId},"interrupted"))}stop(){if(!this.proc)return;this.proc.kill("SIGTERM");let e=this.proc;setTimeout(()=>{e.killed||e.kill("SIGKILL")},5e3).unref(),this.proc=null,
|
|
88
|
-
`);this.buffer=u.pop();for(let d of u)if(d.trim())try{this.handleRaw(JSON.parse(d))}catch{
|
|
89
|
-
`),!0}interrupt(){this.rpc("turn/interrupt",{threadId:this.threadId}).catch(()=>{})}setApprovalMode(e){this.approvalMode=e,
|
|
90
|
-
`),setTimeout(()=>{this.pending.has(r)&&(this.pending.delete(r),
|
|
82
|
+
`}function Wl(t,e){let n=(0,Zt.join)((0,Ul.tmpdir)(),`vibelet-claude-hooks-${process.pid}-${(0,ql.randomUUID)()}`);(0,Ee.mkdirSync)(n,{recursive:!0});let r=(0,Zt.join)(n,"settings.json"),s=(0,Zt.join)(n,"session_hook_forwarder.cjs"),i=(0,Zt.join)(n,"permission_hook_forwarder.cjs");return(0,Ee.writeFileSync)(s,_p(t,e),"utf8"),(0,Ee.writeFileSync)(i,vp(t,e),"utf8"),(0,Ee.writeFileSync)(r,JSON.stringify({hooks:{SessionStart:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(s)}`}]}],PreToolUse:[{matcher:"*",hooks:[{type:"command",command:`${JSON.stringify(process.execPath)} ${JSON.stringify(i)}`}]}]}},null,2),"utf8"),{secret:e,dirPath:n,settingsPath:r,sessionScriptPath:s,permissionScriptPath:i}}function zn(t){if(t)try{(0,Ee.rmSync)(t.dirPath,{recursive:!0,force:!0})}catch{}}var Z=L.child({module:"claude"}),Vl="claude-permission-denial:",wp=/\u001B\[[0-?]*[ -/]*[@-~]/g;function bp(){return process.env.VIBE_TEST!=="1"&&!process.argv.includes("--test")}function ks(t){bp()&&Wn(`\x1B[33m\u26A1 [Vibelet] ${t}\x1B[0m
|
|
83
|
+
`)}function Ip(t){return Array.isArray(t)?t.map(e=>!e||typeof e!="object"?"":typeof e.text=="string"?e.text:typeof e.content=="string"?e.content:"").filter(Boolean).join(`
|
|
84
|
+
`):""}function xp(t){return Array.isArray(t)&&t.length>0&&t.every(e=>e&&typeof e=="object"&&e.type==="tool_reference")}function Ep(t){if(typeof t=="string")return t;let e=Ip(t);return e||(xp(t)?"":JSON.stringify(t))}function Tp(t){return/requested permissions|haven't granted/i.test(t)}function jl(t){return t.replace(wp,"").replace(/\s+/g," ").trim()}function Ap(t){let e=t.toLowerCase();return e==="error"||e==="failed"||e==="unknown error"}function kp(t){return/\brate limit\b/i.test(t)||/\busage limit\b/i.test(t)||/\bquota\b/i.test(t)||/\btoo many requests\b/i.test(t)||/\bcredit balance\b/i.test(t)||/\bcredits? remaining\b/i.test(t)||/\bmax(?:imum)? usage\b/i.test(t)}function Cp(t){return t.toLowerCase().startsWith("claude ")?t:`Claude usage limit reached. ${t}`}function Gl(t){let e=jl(t.resultText??""),n=(t.stderrLines??[]).map(jl).filter(Boolean).slice(-3),r=[e,...n].find(i=>!!i&&kp(i));if(r)return Cp(r);let s=[e,...n].find(i=>!!i&&!Ap(i));return s?t.exitCode!=null&&s!==e?`Claude exited with code ${t.exitCode}: ${s}`:s:t.exitCode!=null?`Claude exited with code ${t.exitCode}`:"Claude returned an error result."}function Vn(t){return t.startsWith(Vl)}var tn=class{proc=null;handler=null;sessionId="";buffer="";cwd="";approvalMode;sawFinalResult=!1;interrupted=!1;exitHandler=null;lastStderr=[];pendingPermissionDescriptions=new Map;emittedToolCallIds=new Set;hookPort=null;hookSecret=null;hookFiles=null;buildClaudeEnv(){let e=_.buildSanitizedEnv();for(let n of Object.keys(e))n.startsWith("CMUX_")&&delete e[n];return e}async start(e,n,r){return this.cwd=e,this.approvalMode=r,n&&(this.sessionId=n),this.sessionId||(this.sessionId=`pending_${Date.now()}`),Z.info({sessionId:this.sessionId,cwd:e},"session initialized"),v.emit("driver.spawn",{agent:"claude",sessionId:this.sessionId,cwd:e}),this.sessionId}configureHookBridge(e,n){this.hookPort=e,this.hookSecret=n}sendPrompt(e){let n=["-p",e,"--output-format","stream-json","--verbose","--include-partial-messages"];this.sessionId&&!this.sessionId.startsWith("pending_")&&n.push("--resume",this.sessionId),zn(this.hookFiles),this.hookFiles=null,this.approvalMode!=="acceptEdits"&&this.approvalMode!=="autoApprove"&&this.hookPort&&this.hookSecret&&(this.hookFiles=Wl(this.hookPort,this.hookSecret),n.push("--settings",this.hookFiles.settingsPath)),this.approvalMode==="acceptEdits"&&n.push("--permission-mode","acceptEdits"),this.approvalMode==="autoApprove"&&n.push("--dangerously-skip-permissions");let r=this.sessionId.startsWith("pending_")?"(new)":`(resume ${this.sessionId.slice(0,8)})`;Z.info({sessionId:this.sessionId,label:r,promptPreview:e.slice(0,50)},"running claude"),ks(`New message: ${e.slice(0,60)}`),this.sawFinalResult=!1,this.interrupted=!1,this.lastStderr=[],this.pendingPermissionDescriptions.clear(),this.emittedToolCallIds.clear(),this.proc=(0,$l.spawn)(_.claudePath,n,{cwd:this.cwd||void 0,stdio:["ignore","pipe","pipe"],env:this.buildClaudeEnv()}),this.proc.on("error",s=>{let i=s.message;s.code==="ENOENT"&&this.cwd&&!(0,zl.existsSync)(this.cwd)&&(i=`Working directory does not exist: ${this.cwd}`),Z.error({sessionId:this.sessionId,error:i,cwd:this.cwd},"spawn error"),v.emit("driver.error",{agent:"claude",sessionId:this.sessionId,error:i}),this.handler?.({type:"error",sessionId:this.sessionId,message:i})}),this.buffer="",this.proc.stdout.on("data",s=>{this.buffer+=s.toString();let i=this.buffer.split(`
|
|
85
|
+
`);this.buffer=i.pop();for(let o of i)if(o.trim())try{this.handleRaw(JSON.parse(o))}catch{Z.warn({sessionId:this.sessionId,linePreview:o.slice(0,100)},"failed to parse stdout line")}}),this.proc.stderr.on("data",s=>{let i=s.toString().trim();i&&(Z.debug({sessionId:this.sessionId,stderr:i},"stderr"),this.lastStderr.push(i),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",(s,i)=>{Z.info({sessionId:this.sessionId,exitCode:s,signal:i},"process exited");let o=this.interrupted;this.proc=null,zn(this.hookFiles),this.hookFiles=null,this.interrupted=!1,o&&!this.sawFinalResult?this.handler?.({type:"session.interrupted",sessionId:this.sessionId}):s&&s!==0&&!this.sawFinalResult&&(Z.error({sessionId:this.sessionId,exitCode:s,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.handler?.({type:"error",sessionId:this.sessionId,message:Gl({stderrLines:this.lastStderr,exitCode:s})})),this.exitHandler?.(s)})}respondApproval(e,n){if(Z.info({sessionId:this.sessionId,requestId:e,approved:n},"approval response"),!this.proc?.stdin?.writable)return Z.error({sessionId:this.sessionId},"cannot send approval: stdin not writable"),!1;let r=JSON.stringify({type:"control_response",request_id:e,permission_granted:n});return this.proc.stdin.write(r+`
|
|
86
|
+
`),!0}setApprovalMode(e){this.approvalMode=e,Z.info({sessionId:this.sessionId,approvalMode:e},"approval mode updated")}interrupt(){this.proc&&!this.proc.killed&&(this.interrupted=!0,this.proc.kill("SIGTERM"),Z.info({sessionId:this.sessionId},"interrupted"))}stop(){if(!this.proc)return;this.proc.kill("SIGTERM");let e=this.proc;setTimeout(()=>{e.killed||e.kill("SIGKILL")},5e3).unref(),this.proc=null,zn(this.hookFiles),this.hookFiles=null}onMessage(e){this.handler=e}onExit(e){this.exitHandler=e}handleRaw(e){let n=e.type;if(n==="system"&&e.subtype==="init"){let r=e.session_id??"";r&&r!==this.sessionId&&(Z.info({oldSessionId:this.sessionId,newSessionId:r},"session ID resolved"),v.emit("driver.init",{agent:"claude",sessionId:r}),this.sessionId=r);return}if(this.handler)switch(n){case"assistant":{let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)s.type==="tool_use"&&this.handler({type:"tool.call",sessionId:this.sessionId,toolName:s.name,input:s.input??{},toolCallId:s.id});break}case"user":{let r=e.message?.content;if(!Array.isArray(r))break;for(let s of r)if(s.type==="tool_result"){let i=Ep(s.content);if(!i)continue;if(s.is_error===!0&&typeof s.tool_use_id=="string"&&Tp(i)){this.pendingPermissionDescriptions.set(s.tool_use_id,i);continue}this.handler({type:"tool.result",sessionId:this.sessionId,toolCallId:s.tool_use_id,output:i})}break}case"control_request":{let r=e.request;r?.subtype==="can_use_tool"&&(v.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:r.tool_name}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:e.request_id,toolName:r.tool_name??"unknown",input:r.input??{},description:r.description??r.title??""}));break}case"stream_event":{let r=e.event;r?.type==="content_block_delta"&&r?.delta?.type==="text_delta"&&r?.delta?.text&&this.handler({type:"text.delta",sessionId:this.sessionId,content:r.delta.text});break}case"result":{this.sawFinalResult=!0;let r=typeof e.result=="string"?e.result:"";if(e.is_error){ks("Claude failed."),this.handler({type:"error",sessionId:this.sessionId,message:Gl({resultText:r,stderrLines:this.lastStderr})});break}let s=Array.isArray(e.permission_denials)?e.permission_denials:[];if(s.length>0){let a=s[0]??{},l=typeof a.tool_use_id=="string"?a.tool_use_id:`missing_${Date.now()}`,c=typeof a.tool_name=="string"?a.tool_name:"unknown",u=a.tool_input&&typeof a.tool_input=="object"?a.tool_input:{},d=this.pendingPermissionDescriptions.get(l)??`Claude requested permissions to use ${c}.`;v.emit("approval.request",{agent:"claude",sessionId:this.sessionId,toolName:c}),this.handler({type:"approval.request",sessionId:this.sessionId,requestId:`${Vl}${l}`,toolName:c,input:u,description:d})}this.pendingPermissionDescriptions.clear();let i=e.total_cost_usd,o=e.usage?{inputTokens:e.usage.input_tokens,outputTokens:e.usage.output_tokens}:void 0;ks("Claude finished. Run `claude --continue` to continue on desktop."),v.emit("session.done",{agent:"claude",sessionId:this.sessionId,cost:i,usage:o}),this.handler({type:"session.done",sessionId:this.sessionId,cost:i,usage:o});break}}}};var Xl=require("child_process"),Zl=require("fs");var Cs=class{counters=new Map;timers=new Map;gauges=new Map;startTime=Date.now();logInterval=null;increment(e,n={}){this.counters.has(e)||this.counters.set(e,[]);let r=this.counters.get(e),s=JSON.stringify(n),i=r.find(o=>JSON.stringify(o.labels)===s);i?i.value++:r.push({value:1,labels:n})}gauge(e,n){this.gauges.set(e,n)}startTimer(e){let n=performance.now();return()=>{let r=Math.round(performance.now()-n),s=this.timers.get(e)??{count:0,totalMs:0,minMs:1/0,maxMs:0,lastMs:0};return s.count++,s.totalMs+=r,s.minMs=Math.min(s.minMs,r),s.maxMs=Math.max(s.maxMs,r),s.lastMs=r,this.timers.set(e,s),r}}snapshot(){let e={};for(let[s,i]of this.counters)e[s]=i.map(o=>({...o}));let n={};for(let[s,i]of this.timers)n[s]={...i,minMs:i.minMs===1/0?0:i.minMs};let r={};for(let[s,i]of this.gauges)r[s]=i;return{uptimeMs:Date.now()-this.startTime,counters:e,timers:n,gauges:r}}startPeriodicLog(e=6e4){this.logInterval||(this.logInterval=setInterval(()=>{let n=this.snapshot();L.info({metrics:n},"periodic metrics snapshot")},e),this.logInterval.unref())}stopPeriodicLog(){this.logInterval&&(clearInterval(this.logInterval),this.logInterval=null)}},b=new Cs;var Yl=require("node:fs"),Rs=require("node:path"),Rp="@vibelet/cli";function Pp(t){try{let e=JSON.parse((0,Yl.readFileSync)(t,"utf8"));if(e.name===Rp&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function Lp(){return"0.1.3"}var ft=Lp();var T=L.child({module:"codex"});function Q(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function C(t){return typeof t=="string"&&t.trim().length>0?t.trim():null}function Mp(t){let e=C(t);return e?e.replace(/[^a-z0-9]/gi,"").toLowerCase():null}function Ps(t){return t?C(t.itemId)??C(t.id)??C(t.callId)??C(t.call_id):null}function Ls(t,e){let n={};for(let[r,s]of Object.entries(t))e.includes(r)||(n[r]=s);return n}function Ql(t){return/\bapprove\b|\ballow\b|\baccept\b|\byes\b|\bcontinue\b|\bproceed\b|\brun\b|\bapply\b/i.test(t)}function ec(t){return/\bdeny\b|\breject\b|\bdecline\b|\bno\b|\bcancel\b|\babort\b|\bstop\b/i.test(t)}function Np(t){if(!Array.isArray(t))return null;for(let e of t){let n=Q(e);if(!n)continue;let r=C(n.id),s=Array.isArray(n.options)?n.options.map(l=>Q(l)).filter(l=>!!l):[];if(!r||s.length===0)continue;let i=s.map(l=>C(l.label)).filter(l=>!!l);if(i.length<2)continue;let o=i.find(l=>Ql(l))??i[0],a=i.find(l=>ec(l))??i[i.length-1];if(!(!o||!a||o===a))return{questionId:r,approveLabel:o,denyLabel:a}}return null}function Op(t){if(!Array.isArray(t)||t.length===0)return!1;let e=t.map(s=>Q(s)).filter(s=>!!s).flatMap(s=>(Array.isArray(s.options)?s.options:[]).map(o=>Q(o)).filter(o=>!!o).map(o=>C(o.label)).filter(o=>!!o)),n=e.some(s=>Ql(s)),r=e.some(s=>ec(s));return n&&r}function Jl(t){let e=Mp(t.type??t.itemType);if(e==="commandexecution")return{toolName:"Bash",input:Ls(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="filechange")return{toolName:"Patch",input:Ls(t,["id","itemId","type","itemType","stdout","stderr","exitCode","exit_code","status","success","error"])};if(e==="mcptoolcall"){let n=C(t.server),r=C(t.tool)??C(t.name);return r?{toolName:n?`mcp__${n}__${r}`:r,input:Q(t.arguments)??Q(t.input)??{}}:null}return null}function Bp(t){if(!Array.isArray(t))return"";for(let e of t){let n=Q(e);if(!n)continue;let r=C(n.question)??C(n.header);if(r)return r}return""}function Kl(t,e){return t==="autoApprove"?{approvalPolicy:"never",sandbox:"danger-full-access",sandboxPolicy:{type:"dangerFullAccess"}}:{approvalPolicy:"on-request",sandbox:"workspace-write",sandboxPolicy:{type:"workspaceWrite",writableRoots:[e],readOnlyAccess:{type:"fullAccess"},networkAccess:!0,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1}}}var Yn=class{proc=null;handler=null;exitHandler=null;buffer="";rpcId=0;pending=new Map;threadId="";lastStderr=[];approvalRequests=new Map;toolContextByCallId=new Map;approvalMode;cwd="";async start(e,n,r){this.approvalMode=r,this.cwd=e,this.approvalRequests.clear(),this.toolContextByCallId.clear();let s=_.codexPath,i,o=this.buildSpawnArgs();if(_.isTransientPath(s)){let c=_.execViaLoginShell("codex",o);i=c.command,o=c.args,T.info({spawnCmd:i,argsPreview:o.slice(0,2)},"spawning via login shell")}else i=s,T.info({spawnCmd:i,args:o},"spawning");v.emit("driver.spawn",{agent:"codex",cwd:e,resumeSessionId:n}),this.lastStderr=[],this.proc=(0,Xl.spawn)(i,o,{cwd:e||void 0,stdio:["pipe","pipe","pipe"],env:_.buildSanitizedEnv()}),this.proc.on("error",c=>{let u=c.message;c.code==="ENOENT"&&e&&!(0,Zl.existsSync)(e)&&(u=`Working directory does not exist: ${e}`),T.error({error:u,cwd:e},"spawn error"),v.emit("driver.error",{agent:"codex",error:u})}),this.proc.stdout.on("data",c=>{this.buffer+=c.toString();let u=this.buffer.split(`
|
|
87
|
+
`);this.buffer=u.pop();for(let d of u)if(d.trim())try{this.handleRaw(JSON.parse(d))}catch{T.warn({linePreview:d.slice(0,200)},"failed to parse stdout line")}}),this.proc.stderr.on("data",c=>{let u=c.toString().trim();u&&(T.debug({stderr:u},"stderr"),this.lastStderr.push(u),this.lastStderr.length>10&&this.lastStderr.shift())}),this.proc.on("exit",c=>{T.info({threadId:this.threadId,exitCode:c},"process exited"),c&&c!==0&&T.error({threadId:this.threadId,exitCode:c,lastStderr:this.lastStderr.slice(-3)},"abnormal exit"),this.proc=null,this.approvalRequests.clear(),this.toolContextByCallId.clear();for(let[,{reject:u}]of this.pending)u(new Error(`Codex process exited with code ${c}`));this.pending.clear(),this.exitHandler?.(c),c&&this.handler&&this.threadId&&this.handler({type:"error",sessionId:this.threadId,message:`Codex process exited with code ${c}`})});let a=b.startTimer("rpc.duration");await this.rpc("initialize",{clientInfo:{name:"@vibelet/cli",version:ft},capabilities:{experimentalApi:!0}}),a(),this.rpcNotify("initialized",{});let l=Kl(this.approvalMode,e);if(n){let c=await this.rpc("thread/resume",{threadId:n,approvalPolicy:l.approvalPolicy,sandbox:l.sandbox,persistExtendedHistory:!0});this.threadId=c?.thread?.id??n,T.info({threadId:this.threadId},"thread resumed"),v.emit("driver.init",{agent:"codex",sessionId:this.threadId})}else{let c=await this.rpc("thread/start",{cwd:e,approvalPolicy:l.approvalPolicy,sandbox:l.sandbox,experimentalRawEvents:!0,persistExtendedHistory:!0});this.threadId=c?.thread?.id??c?.threadId??"",T.info({threadId:this.threadId},"thread created"),v.emit("driver.init",{agent:"codex",sessionId:this.threadId})}return this.threadId}buildSpawnArgs(){return["app-server","--listen","stdio://"]}sendPrompt(e){let n=Kl(this.approvalMode,this.cwd||process.cwd());T.info({threadId:this.threadId,promptPreview:e.slice(0,50)},"turn/start"),this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}],approvalPolicy:n.approvalPolicy,sandboxPolicy:n.sandboxPolicy}).then(r=>T.debug({resultPreview:JSON.stringify(r).slice(0,200)},"turn/start result")).catch(r=>{T.error({threadId:this.threadId,error:r.message},"sendPrompt error"),this.handler?.({type:"error",sessionId:this.threadId,message:r.message})})}respondApproval(e,n){if(!this.proc?.stdin?.writable)return!1;let r=this.approvalRequests.get(e),s=r?.rpcId??Number(e);if(!Number.isFinite(s))return!1;let i;if(!r)i=n?{decision:"approve"}:{decision:"deny",reason:"User denied from Vibelet"};else{switch(r.kind){case"command-execution":case"file-change":i={decision:n?"accept":"decline"};break;case"request-user-input-approval":i={answers:{[r.questionId]:{answers:[n?r.approveLabel:r.denyLabel]}}};break;case"exec-command-legacy":case"apply-patch-legacy":i={decision:n?"approved":"denied"};break;default:i={decision:n?"accept":"decline"};break}this.approvalRequests.delete(e)}return T.info({threadId:this.threadId,rpcId:s,approved:n},"approval response"),this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:s,result:i})+`
|
|
88
|
+
`),!0}interrupt(){this.rpc("turn/interrupt",{threadId:this.threadId}).catch(()=>{})}setApprovalMode(e){this.approvalMode=e,T.info({approvalMode:e},"approval mode updated (takes effect on restart)")}stop(){if(!this.proc)return;this.proc.kill("SIGTERM");let e=this.proc;setTimeout(()=>{e.killed||e.kill("SIGKILL")},5e3).unref(),this.proc=null,this.approvalRequests.clear(),this.toolContextByCallId.clear();for(let[,{reject:n}]of this.pending)n(new Error("Process stopped"));this.pending.clear()}onMessage(e){this.handler=e}onExit(e){this.exitHandler=e}rpc(e,n){let r=++this.rpcId,s=b.startTimer("rpc.duration");return new Promise((i,o)=>{if(this.pending.set(r,{resolve:a=>{s(),i(a)},reject:a=>{s(),o(a)}}),!this.proc?.stdin?.writable){this.pending.delete(r),s(),o(new Error("Process not available"));return}this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,id:r,params:n})+`
|
|
89
|
+
`),setTimeout(()=>{this.pending.has(r)&&(this.pending.delete(r),T.error({method:e,rpcId:r,threadId:this.threadId},"RPC timeout"),s(),o(new Error(`RPC timeout: ${e}`)))},3e4).unref()})}rpcNotify(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",method:e,params:n})+`
|
|
91
90
|
`)}writeServerRequestError(e,n){this.proc?.stdin?.writable&&this.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:e,error:{code:-32601,message:n}})+`
|
|
92
|
-
`)}resolveToolContext(e){let n=Q(e?.item)??e??null,r=
|
|
93
|
-
`)){let n=
|
|
94
|
-
`).find(r=>r.startsWith("n"))?.slice(1).trim()??""}async function
|
|
95
|
-
`).filter(r=>r.startsWith("n")).map(r=>r.slice(1).trim()).filter(r=>r.endsWith(".jsonl")?r.includes("/.claude/projects/")||r.includes("/.codex/sessions/"):!1);return[...new Set(n)]}async function
|
|
96
|
-
`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let r=Number(n[1]),
|
|
97
|
-
`,n);i===-1&&(i=t.length);let s=t.substring(n,i);n=i+1,!(s.length===0||s.trim().length===0)&&(yield s,r+=1)}}var Ri=512*1024;async function uc(t,e){if(e<=Ri)return(0,M.readFile)(t,"utf-8");let n=await(0,M.open)(t,"r");try{let r=Buffer.alloc(Ri),{bytesRead:i}=await n.read(r,0,Ri,0);return r.toString("utf-8",0,i)}finally{await n.close()}}function Di(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>!e||typeof e!="object"?"":typeof e.text=="string"?e.text:typeof e.content=="string"?e.content:"").join(""):""}function dc(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?Di(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function Hi(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>!e||typeof e!="object"||e.type!=="text"?"":typeof e.text=="string"?e.text:"").join(""):""}var lg=["<task-notification>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","<system-reminder>","<environment_context>","# AGENTS.md instructions for "];function cg(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?lg.some(r=>n.startsWith(r)):!1}function Fi(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=Hi(t.message.content);return cg(t,e)?"":e}function fc(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function hc(t,e="scanner"){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[e],runtime:ki()}}function ht(t,e){let n=(0,T.basename)(e,".jsonl");return t==="claude"?n||null:n.match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i)?.[1]??null}async function ug(t,e){let n=await uc(t,e),r=cc(n,64),i="",s="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(!i&&typeof u.cwd=="string"&&(i=u.cwd),!s&&typeof u.sessionId=="string"&&(s=u.sessionId),o||(o=qe([u.customTitle,u.summary])),!l){let d=Fi(u),f=qe([],d);f&&(a=d,l=f)}if(i&&(o||l))break}return i?{sessionId:s||ht("claude",t)||(0,T.basename)(t,".jsonl"),cwd:i,title:o??l??qe([],a)}:null}async function dg(t,e){let n=await uc(t,e),r=cc(n,96),i="",s="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(i||(i=u.payload?.cwd??u.cwd??""),s||(s=u.payload?.id??u.id??""),o||(o=qe([u.payload?.title,u.title])),!l){let d=dc(u),f=d&&!fc(d)?qe([],d):void 0;f&&(a=d,l=f)}if(i&&(o||l))break}return i?{sessionId:s||ht("codex",t)||(0,T.basename)(t,".jsonl"),cwd:i,title:o??l??qe([],a)}:null}async function Qt(t,e){let n=await(0,M.stat)(t).catch(()=>null);if(!n)return null;try{let r=n.size;if(e==="claude"){let s=await ug(t,r);return s?{sessionId:s.sessionId,agent:e,cwd:s.cwd,title:s.title,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}let i=await dg(t,r);return i?{sessionId:i.sessionId,agent:e,cwd:i.cwd,title:i.title,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function rc(t){let e=(0,T.join)((0,he.homedir)(),".claude","projects");try{let n;t?n=[Ni(t)]:n=(await(0,M.readdir)(e,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name);let r=[];for(let o of n){let a=(0,T.join)(e,o),l=await(0,M.readdir)(a).catch(()=>[]);for(let c of l)c.endsWith(".jsonl")&&r.push((0,T.join)(a,c))}return(await zn(r,Gn,o=>Qt(o,"claude"))).filter(o=>o!==null).map(o=>hc(o)).sort((o,a)=>a.lastActivityAt.localeCompare(o.lastActivityAt))}catch(n){return Ce.warn({error:String(n)},"failed to list claude sessions"),[]}}async function ic(t){let e=(0,T.join)((0,he.homedir)(),".codex","sessions");try{let n=await(0,M.readdir)(e).catch(()=>[]),r=[];for(let o of n){let a=(0,T.join)(e,o),l=await(0,M.readdir)(a).catch(()=>[]);for(let c of l){let u=(0,T.join)(a,c),d=await(0,M.readdir)(u).catch(()=>[]);for(let f of d){let h=(0,T.join)(u,f),g=await(0,M.readdir)(h).catch(()=>[]);for(let p of g)p.endsWith(".jsonl")&&r.push((0,T.join)(h,p))}}}return(await zn(r,Gn,o=>Qt(o,"codex"))).filter(o=>o!==null).filter(o=>!t||o.cwd===t).map(o=>hc(o)).sort((o,a)=>a.lastActivityAt.localeCompare(o.lastActivityAt))}catch(n){return Ce.warn({error:String(n)},"failed to list codex sessions"),[]}}async function en(t,e){let r=`list:${(0,he.homedir)()}:${t??"all"}:${e??""}`,i=Pi.get(r);if(i)return i;let s;if(t==="claude")s=await rc(e);else if(t==="codex")s=await ic(e);else{let[o,a]=await Promise.all([rc(e),ic(e)]);s=[...o,...a].sort((l,c)=>c.lastActivityAt.localeCompare(l.lastActivityAt))}return Pi.set(r,s),s}async function nc(t,e){let r=`search:${(0,he.homedir)()}:${t}:${e??"all"}`,i=Li.get(r);if(i)return i;let s=new Set,o=t.toLowerCase();async function a(){let c=(0,T.join)((0,he.homedir)(),".claude","projects");try{let u=await(0,M.readdir)(c,{withFileTypes:!0}),d=[];for(let h of u){if(!h.isDirectory())continue;let g=(0,T.join)(c,h.name),p=await(0,M.readdir)(g).catch(()=>[]);for(let y of p)y.endsWith(".jsonl")&&d.push((0,T.join)(g,y))}let f=await zn(d,Gn,h=>sc(h,o,"claude"));for(let h of f)h&&s.add(h)}catch(u){Ce.warn({error:String(u)},"failed to search claude files")}}async function l(){let c=(0,T.join)((0,he.homedir)(),".codex","sessions");try{let u=[];async function d(h){let g=await(0,M.readdir)(h,{withFileTypes:!0}).catch(()=>[]);for(let p of g){let y=(0,T.join)(h,p.name);p.isDirectory()?await d(y):p.name.endsWith(".jsonl")&&u.push(y)}}await d(c);let f=await zn(u,Gn,h=>sc(h,o,"codex"));for(let h of f)h&&s.add(h)}catch(u){Ce.warn({error:String(u)},"failed to search codex files")}}return e==="claude"?await a():e==="codex"?await l():await Promise.all([a(),l()]),Li.set(r,s),s}async function sc(t,e,n){let r=(0,Oi.createReadStream)(t,{encoding:"utf-8"}),i=(0,Mi.createInterface)({input:r,crlfDelay:1/0}),s=n==="claude"?fg:hg,o="",a=!1;try{for await(let l of i){if(!l.trim())continue;let c;try{c=JSON.parse(l)}catch{continue}if(o||(n==="claude"?typeof c.sessionId=="string"&&(o=c.sessionId):o=c.payload?.id??c.id??""),!a){let u=s(c);u&&u.toLowerCase().includes(e)&&(a=!0)}if(o&&a)break}}finally{i.close(),r.destroy()}return a?o||ht(n,t):null}function fg(t){return t?.type==="user"&&t.message?.role==="user"?Fi(t):t?.type==="assistant"&&t.message?.role==="assistant"?Hi(t.message.content):""}function hg(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return Di(t.payload.content)}let e=dc(t);return e||""}async function oc(t,e){let n=(0,Oi.createReadStream)(t,{encoding:"utf-8"}),r=(0,Mi.createInterface)({input:n,crlfDelay:1/0});try{for await(let i of r){if(!i.trim())continue;let s;try{s=JSON.parse(i)}catch{continue}if(e(s))break}}finally{r.close(),n.destroy()}}async function tn(t,e,n){let r=[];if(e==="claude"){let i=(0,T.join)((0,he.homedir)(),".claude","projects");try{let s=n?[Ni(n)]:[],o=await(0,M.readdir)(i).catch(()=>[]),a=n?[...s,...o.filter(l=>l!==Ni(n))]:o;for(let l of a){let c=(0,T.join)(i,l,`${t}.jsonl`);try{if(await oc(c,u=>{if(u.type==="user"&&u.message?.role==="user"){let d=Fi(u);d&&r.push({role:"user",content:d})}else if(u.type==="assistant"&&u.message?.role==="assistant"){let d=Hi(u.message.content);d&&r.push({role:"assistant",content:d})}}),r.length>0)break}catch(u){u.code!=="ENOENT"&&Ce.warn({error:String(u)},"failed to read claude session file")}}}catch(s){Ce.warn({error:String(s)},"failed to read claude session history")}}else if(e==="codex"){let i=(0,T.join)((0,he.homedir)(),".codex","sessions");try{let s=await pc(i,t);s&&await oc(s,o=>{if(o.type!=="response_item"||o.payload?.type!=="message")return;let a=o.payload.role;if(a!=="user"&&a!=="assistant")return;let l=Di(o.payload.content);l&&(a==="user"&&fc(l)||r.push({role:a,content:l}))})}catch(s){Ce.warn({error:String(s)},"failed to read codex session history")}}return r}async function pc(t,e){try{let n=await(0,M.readdir)(t,{withFileTypes:!0});for(let r of n){let i=(0,T.join)(t,r.name);if(r.isDirectory()){let s=await pc(i,e);if(s)return s}else if(r.name.includes(e)&&r.name.endsWith(".jsonl"))return i}}catch(n){Ce.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var gt=require("fs"),yc=require("path");var pg=500,gc=200;function gg(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=gc?e:e.slice(-gc)}function mg(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)typeof n!="string"||n.length===0||e.includes(n)||e.push(n);return e}function mc(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:gg(t.acceptedClientMessageIds)}}function yg(t){if(Array.isArray(t))return{records:t.map(mc),deletedSessionIds:[]};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(mc):[],deletedSessionIds:mg(e.deletedSessionIds)}}return{records:[],deletedSessionIds:[]}}var $n=class{records;deletedSessionIds;debounceTimer=null;constructor(){let e=this.loadFromDisk();this.records=e.records,this.deletedSessionIds=new Set(e.deletedSessionIds)}getAll(){return this.records}getDeletedSessionIds(){return[...this.deletedSessionIds]}find(e){return this.records.find(n=>n.sessionId===e)}isDeleted(e){return this.deletedSessionIds.has(e)}upsert(e){this.deletedSessionIds.delete(e.sessionId);let n=this.records.findIndex(r=>r.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}remove(e){this.records=this.records.filter(n=>n.sessionId!==e),this.deletedSessionIds.add(e),this.scheduleSave()}flushSync(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.saveToDisk()}scheduleSave(){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.saveToDisk()},pg)}loadFromDisk(){try{let e=(0,gt.readFileSync)(Bn,"utf-8");return yg(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[]}}saveToDisk(){(0,gt.mkdirSync)((0,yc.dirname)(Bn),{recursive:!0}),(0,gt.writeFileSync)(Bn,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds]},null,2))}};var _c=require("path"),Sc=require("os");function Vn(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,_c.join)((0,Sc.homedir)(),t.slice(2)):t}var nn=B.child({module:"push"}),_g="https://exp.host/--/api/v2/push/send",mt=new Set;function Ui(t){mt.add(t),nn.info({token:t,total:mt.size},"push token registered")}function qi(t){mt.delete(t),nn.info({token:t,total:mt.size},"push token unregistered")}async function vc(t,e,n){if(mt.size===0)return;let r=[...mt].map(i=>({to:i,sound:"default",title:t,body:e,data:n}));try{let i=await fetch(_g,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});i.ok?nn.debug({count:r.length},"push sent"):nn.error({status:i.status,statusText:i.statusText},"push send failed")}catch(i){nn.error({error:String(i)},"push send error")}}var w=B.child({module:"manager"}),Sg="Done.",wc=180,Jn=200;function Yn(...t){let e=[];for(let n of t)if(n?.length)for(let r of n)!r||e.includes(r)||(e.push(r),e.length>Jn&&e.splice(0,e.length-Jn));return e}function Te(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,approvalMode:t.approvalMode,acceptedClientMessageIds:Yn(t.acceptedClientMessageIds),title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,managed:t.managed}}function bc(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&Fn(e)}function vg(t){return t.startsWith(_i)}function Ic(t){return t?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}}:{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Denied from Vibelet"}}}var Kn=class{constructor(e=vc){this.pushSender=e;this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new $n;idleSweepInterval=null;startIdleSweep(){S.idleTimeoutMs<=0||(this.idleSweepInterval=setInterval(()=>this.sweepIdleSessions(),6e4),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=Date.now(),n=S.idleTimeoutMs;if(n<=0)return;let r=3600*1e3;for(let[i,s]of this.sessions){if(!s.active&&!s.driver){if(s.clients.size===0){let a=e-s.lastActivityTs;a>=r&&(w.info({sessionId:s.sessionId,inactiveMs:a},"removing inactive session from memory"),I.increment("session.cleanup",{reason:"inactive"}),this.unregisterClaudeHookSession(s),this.sessions.delete(i))}continue}if(!s.active||!s.driver||s.isResponding)continue;let o=e-s.lastActivityTs;o<n||(w.info({sessionId:s.sessionId,agent:s.agent,idleMs:o,timeoutMs:n},"stopping idle driver"),I.increment("driver.idle_timeout",{agent:s.agent}),v.emit("driver.idle_timeout",{sessionId:s.sessionId,agent:s.agent,idleMs:o}),s.driver.stop(),s.active=!1,s.driver=null,this.updateGauges(),this.touchSession(s.sessionId))}}bindDriverLifecycle(e,n,r,i){e.driver?.onMessage(s=>{if(w.debug({agent:n,context:r,msgType:s.type,sessionId:e.sessionId},"driver message received"),s.type!=="response"&&s.sessionId&&s.sessionId!==e.sessionId&&!this.sessions.has(s.sessionId)){let o=e.sessionId;w.info({oldSessionId:o,newSessionId:s.sessionId},"session ID updated"),this.store.remove(o),this.sessions.delete(o),e.sessionId=s.sessionId,this.sessions.set(s.sessionId,e),this.store.upsert(Te(e)),i&&this.reply(i,`id_update_${Date.now()}`,!0,{sessionId:s.sessionId,oldSessionId:o})}(s.type==="session.done"||s.type==="session.interrupted")&&(e.isResponding=!1,(s.type==="session.interrupted"||!bc(e))&&(e.pendingApproval=void 0)),s.type==="approval.request"&&(e.pendingApproval={requestId:s.requestId,toolName:s.toolName,input:s.input,description:s.description}),n==="claude"&&s.type==="approval.request"&&Fn(s.requestId)&&(e.lastUserMessage?e.syntheticApprovalRetries[s.requestId]={message:e.lastUserMessage,toolName:s.toolName}:w.warn({sessionId:e.sessionId,requestId:s.requestId},"missing lastUserMessage for synthetic approval retry")),this.touchSession(e.sessionId,s.type!=="text.delta"),this.broadcast(e.sessionId,s)}),e.driver?.onExit?.(s=>{w.info({agent:n,context:r,exitCode:s,sessionId:e.sessionId},"driver exited"),v.emit("driver.exit",{sessionId:e.sessionId,agent:n,exitCode:s}),I.increment("driver.exit",{agent:n,abnormal:s&&s!==0?"true":"false"});let o=s===0&&bc(e);this.resolvePendingClaudeHookApprovals(e),e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",o||(e.pendingApproval=void 0),this.updateGauges(),this.touchSession(e.sessionId)})}configureDriverBeforeStart(e,n,r){if(e!=="claude"||!(n instanceof Xt))return;let i=r??(0,Wi.randomUUID)().replace(/-/g,"");return n.configureHookBridge(S.port,i),i}registerClaudeHookSession(e){e.agent!=="claude"||!e.claudeHookSecret||this.claudeHookSessions.set(e.claudeHookSecret,e)}unregisterClaudeHookSession(e){if(e.agent!=="claude"||!e.claudeHookSecret)return;this.claudeHookSessions.get(e.claudeHookSecret)===e&&this.claudeHookSessions.delete(e.claudeHookSecret)}resolvePendingClaudeHookApprovals(e,n=Kt){for(let r of e.pendingClaudeHookApprovals.values())r.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&vg(e.pendingApproval.requestId)&&(e.pendingApproval=void 0)}resolveClaudeHookSession(e){if(!e)return;let n=e.trim();if(n)return this.claudeHookSessions.get(n)}handleClaudeSessionStartHook(e,n){let r=this.resolveClaudeHookSession(e);return r?(this.touchSession(r.sessionId),!0):(w.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let r=this.resolveClaudeHookSession(e);if(!r||r.agent!=="claude"||!r.active)return w.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),Kt;if(r.approvalMode==="autoApprove")return Ic(!0);let s=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!s)return Kt;let o=n.tool_input??n.toolInput,a=o&&typeof o=="object"&&!Array.isArray(o)?o:{},l=typeof n.tool_use_id=="string"?n.tool_use_id:typeof n.toolUseId=="string"?n.toolUseId:"",c=`${_i}${l.trim()||(0,Wi.randomUUID)()}`,u=r.pendingClaudeHookApprovals.get(c);if(u)return u.promise;let d=`Claude requested permissions to use ${s}.`,f,h=new Promise(g=>{f=g});return r.pendingClaudeHookApprovals.set(c,{requestId:c,promise:h,resolve:g=>{r.pendingClaudeHookApprovals.delete(c),f(g)}}),r.pendingApproval={requestId:c,toolName:s,input:a,description:d},v.emit("approval.request",{agent:"claude",sessionId:r.sessionId,toolName:s}),this.touchSession(r.sessionId),this.broadcast(r.sessionId,{type:"approval.request",sessionId:r.sessionId,requestId:c,toolName:s,input:a,description:d}),h}async resolveReconnectSession(e,n,r){if(this.isDeletedSession(e))return;let i=new Date().toISOString(),s=r?.agent,o=r?.cwd??"",a=r?.approvalMode,l=r?.title??"",c=r?.createdAt??i,u=r?.lastActivityAt??i,d=Yn(r?.acceptedClientMessageIds),f=r?"memory":"client",h=this.store.find(e);if(h)s=h.agent,o=h.cwd||o,a=h.approvalMode??a,l=h.title||l,c=h.createdAt||c,u=h.lastActivityAt||u,d=Yn(h.acceptedClientMessageIds,d),f="record";else if(!r){let p=(await en(n??s)).find(y=>y.sessionId===e);p&&(s=p.agent,o=p.cwd||o,l=p.title??l,c=p.createdAt,u=p.lastActivityAt,f="scanner")}if(!s&&n&&(s=n,f=r?"memory":"client"),!!s)return{agent:s,cwd:o,approvalMode:a,title:l,createdAt:c,lastActivityAt:u,acceptedClientMessageIds:d,source:f,managed:r?.managed??h?.managed}}resendPendingApproval(e,n){if(!e.pendingApproval||n.readyState!==1)return;let{requestId:r,toolName:i,input:s,description:o}=e.pendingApproval;w.info({sessionId:e.sessionId,requestId:r,toolName:i},"resending pending approval to reconnected client");let a={type:"approval.request",sessionId:e.sessionId,requestId:r,toolName:i,input:s,description:o};n.send(JSON.stringify(a))}buildPushBody(e){let n=e.replace(/\s+/g," ").trim();return n?n.length<=wc?n:`${n.slice(0,Math.max(1,wc-3)).trimEnd()}...`:Sg}currentPartialReplyText(e){return e?.isResponding&&e.currentReplyText.trim()?e.currentReplyText:void 0}touchSession(e,n=!0){let r=new Date().toISOString(),i=this.sessions.get(e);if(i){i.lastActivityAt=r,i.lastActivityTs=Date.now(),n&&this.store.upsert(Te(i));return}let s=this.store.find(e);s&&this.store.upsert({...s,lastActivityAt:r})}updateGauges(){let e=0;for(let n of this.sessions.values())n.active&&e++;I.gauge("session.active",e)}activeSessionSnapshots(){let e=[];for(let n of this.sessions.values())n.sessionId.startsWith("pending_")||n.active&&e.push({sessionId:n.sessionId,agent:n.agent,cwd:n.cwd,title:n.title,createdAt:n.createdAt,lastActivityAt:n.lastActivityAt,...n.pendingApproval?{needsAttention:!0}:{},...n.isResponding?{isResponding:!0}:{},managed:n.managed});return e}getDeletedSessionIds(){return new Set(this.store.getDeletedSessionIds())}isDeletedSession(e){return this.store.isDeleted(e)}async listRecentSessionsForContinue(e,n){return en(e,n)}async handle(e,n){switch(w.debug({action:n.action},"handling client message"),n.action){case"session.create":await this.createSession(e,n.id,n.agent,n.cwd,n.approvalMode,n.continueSession);break;case"session.resume":await this.resumeSession(e,n.id,n.sessionId,n.agent);break;case"session.send":await this.sendMessage(e,n.id,n.sessionId,n.message,n.agent,n.clientMessageId);break;case"session.approve":await this.approve(e,n.id,n.sessionId,n.requestId,n.approved);break;case"session.setApprovalMode":await this.setApprovalMode(e,n.id,n.sessionId,n.approvalMode);break;case"session.interrupt":this.interrupt(e,n.id,n.sessionId);break;case"session.stop":this.stopSession(e,n.id,n.sessionId);break;case"session.delete":this.deleteSession(e,n.id,n.sessionId);break;case"session.history":await this.sendHistory(e,n.id,n.sessionId,n.agent);break;case"reconnect.snapshot":await this.sendReconnectSnapshot(e,n.id,n.agent,n.cwd,n.search,n.activeSessionId,n.activeAgent);break;case"sessions.list":await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor);break}}removeClient(e){for(let n of this.sessions.values())n.clients.delete(e)}shutdown(){this.stopIdleSweep();for(let e of this.sessions.values()){try{this.resolvePendingClaudeHookApprovals(e),e.driver?.stop()}catch(n){w.error({sessionId:e.sessionId,agent:e.agent,error:String(n)},"failed to stop session on shutdown")}e.active=!1,e.driver=null,e.clients.clear(),this.unregisterClaudeHookSession(e)}this.claudeHookSessions.clear(),this.store.flushSync()}getActiveSessionCount(){let e=0;for(let n of this.sessions.values())n.active&&e++;return e}prewarmCaches(){jn({limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()}).catch(()=>{})}getDriverCounts(){let e={};for(let n of this.sessions.values())n.active&&(e[n.agent]=(e[n.agent]??0)+1);return e}async createSession(e,n,r,i,s,o){i=Vn(i),w.info({agent:r,cwd:i,approvalMode:s,continueSession:o},"creating session");try{if(!(await(0,xc.stat)(i)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${i}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${i}`);return}if(o)try{let l=(await this.listRecentSessionsForContinue(r,i)).find(c=>!this.isDeletedSession(c.sessionId));if(l)return w.info({sessionId:l.sessionId,cwd:i},"continue mode: resuming last session"),this.resumeSession(e,n,l.sessionId,r,i,s);w.info("continue mode: no previous sessions found, creating new")}catch(a){w.warn({error:String(a)},"continue mode: error finding sessions, creating new")}try{let a=I.startTimer("driver.spawn"),l=this.createDriver(r),c=this.configureDriverBeforeStart(r,l),u=await l.start(i,void 0,s),d=a();w.info({sessionId:u,agent:r,spawnMs:d},"session created"),I.increment("session.create",{agent:r}),v.emit("session.create",{sessionId:u,agent:r,cwd:i,approvalMode:s});let f={sessionId:u,agent:r,cwd:i,approvalMode:s,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],syntheticApprovalRetries:{},managed:!0,claudeHookSecret:c,pendingClaudeHookApprovals:new Map};this.sessions.set(u,f),this.registerClaudeHookSession(f),this.store.upsert(Te(f)),this.updateGauges(),Bi(),Ai(),this.bindDriverLifecycle(f,r,"",e),this.reply(e,n,!0,{sessionId:u})}catch(a){w.error({agent:r,cwd:i,error:String(a)},"createSession error"),this.reply(e,n,!1,void 0,String(a))}}async resumeSession(e,n,r,i,s,o){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let a=this.sessions.get(r);if(a&&a.active){a.clients.add(e),this.touchSession(a.sessionId);let f=await tn(r,i,a.cwd),h=this.currentPartialReplyText(a);if(f.length>0||h||a.approvalMode){let g={type:"session.history",sessionId:r,messages:f,isResponding:a.isResponding||void 0,partialReplyText:h,approvalMode:a.approvalMode};e.send(JSON.stringify(g))}this.resendPendingApproval(a,e),this.reply(e,n,!0,{sessionId:r});return}let l=this.store.find(r),c=s||l?.cwd||"",u=o??l?.approvalMode,d=l?.title??"Resumed session";try{let f=I.startTimer("driver.spawn"),h=this.createDriver(i),g=this.configureDriverBeforeStart(i,h),p=await h.start(c,r,u),y=f();w.info({sessionId:p,agent:i,spawnMs:y},"session resumed"),I.increment("session.resume",{agent:i}),v.emit("session.resume",{sessionId:p,agent:i,cwd:c});let _={sessionId:p,agent:i,cwd:c,approvalMode:u,driver:h,clients:new Set([e]),title:d,createdAt:l?.createdAt??new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:l?.acceptedClientMessageIds??[],syntheticApprovalRetries:{},managed:l?.managed,claudeHookSecret:g,pendingClaudeHookApprovals:new Map};this.sessions.set(p,_),this.registerClaudeHookSession(_),this.store.upsert(Te(_)),this.updateGauges(),this.bindDriverLifecycle(_,i," (resumed)",e);let G=await tn(r,i,c);if(G.length>0){w.info({sessionId:r,historyCount:G.length},"sending history messages");let re={type:"session.history",sessionId:p,messages:G,approvalMode:u};e.send(JSON.stringify(re))}this.reply(e,n,!0,{sessionId:p})}catch(f){this.reply(e,n,!1,void 0,String(f))}}hasAcceptedClientMessage(e,n){return e.acceptedClientMessageIds.includes(n)}rememberAcceptedClientMessage(e,n){this.hasAcceptedClientMessage(e,n)||(e.acceptedClientMessageIds.push(n),e.acceptedClientMessageIds.length>Jn&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-Jn))}async sendMessage(e,n,r,i,s,o){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let a=this.sessions.get(r);if(!a||!a.driver){let l=await this.resolveReconnectSession(r,s,a);if(!l){w.warn({sessionId:r},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}w.info({sessionId:r,agent:l.agent,source:l.source},"auto-reconnecting session"),I.increment("session.reconnect",{agent:l.agent,source:l.source}),v.emit("session.reconnect",{sessionId:r,agent:l.agent,source:l.source});try{let c=this.createDriver(l.agent),u=this.configureDriverBeforeStart(l.agent,c,a?.claudeHookSecret);await c.start(l.cwd,r,l.approvalMode),a?(a.approvalMode=l.approvalMode,a.driver=c,a.active=!0,a.clients.add(e),a.lastActivityAt=l.lastActivityAt,a.lastActivityTs=Date.now(),a.isResponding=!1,a.currentReplyText="",a.acceptedClientMessageIds=Yn(a.acceptedClientMessageIds,l.acceptedClientMessageIds),a.syntheticApprovalRetries=a.syntheticApprovalRetries??{},a.claudeHookSecret=u??a.claudeHookSecret,a.pendingClaudeHookApprovals=a.pendingClaudeHookApprovals??new Map):(a={sessionId:r,agent:l.agent,cwd:l.cwd,approvalMode:l.approvalMode,driver:c,clients:new Set([e]),title:l.title,createdAt:l.createdAt,lastActivityAt:l.lastActivityAt,active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:l.acceptedClientMessageIds,syntheticApprovalRetries:{},managed:l.managed,claudeHookSecret:u,pendingClaudeHookApprovals:new Map},this.sessions.set(r,a)),this.registerClaudeHookSession(a),this.bindDriverLifecycle(a,l.agent," (reconnected)"),this.store.upsert(Te(a)),this.updateGauges()}catch(c){this.reply(e,n,!1,void 0,`Failed to reconnect: ${c}`);return}}if(a.clients.add(e),o&&this.hasAcceptedClientMessage(a,o)){this.reply(e,n,!0,{sessionId:r,clientMessageId:o,duplicate:!0});return}if(w.info({sessionId:r,clients:a.clients.size,hasDriver:!!a.driver,active:a.active},"sending message"),v.emit("session.send",{sessionId:r,agent:a.agent,messagePreview:i.slice(0,100)}),dt(a.title)){let l=xi(i,50);l&&l!==a.title&&(a.title=l),this.store.upsert(Te(a))}o&&this.rememberAcceptedClientMessage(a,o),this.touchSession(a.sessionId),a.isResponding=!0,a.currentReplyText="",a.lastUserMessage=i,a.driver.sendPrompt(i),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0)}async sendReconnectSnapshot(e,n,r,i,s,o,a){try{let l=this.getDeletedSessionIds(),c;try{c=await jn({agent:r,cwd:i,search:s,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:l})}catch(d){w.warn({error:String(d)},"failed to build reconnect snapshot session list"),c={sessions:[],nextCursor:void 0}}let u;if(o&&!l.has(o)){let d=a??c.sessions.find(g=>g.sessionId===o)?.agent,f=this.sessions.get(o),h=await this.resolveReconnectSession(o,d,f);if(h){let g=await tn(o,h.agent,f?.cwd??h.cwd);u={sessionId:o,agent:h.agent,messages:g,isResponding:f?.isResponding||void 0,partialReplyText:this.currentPartialReplyText(f),approvalMode:f?.approvalMode??h.approvalMode,...f?.pendingApproval?{pendingApproval:f.pendingApproval}:{}}}}I.increment("reconnect.snapshot",{activeSession:u?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:c.sessions,nextCursor:c.nextCursor,...u?{activeSession:u}:{}}})}catch(l){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(l)}`)}}async approve(e,n,r,i,s){let o=this.sessions.get(r),a=o?.pendingClaudeHookApprovals.get(i);if(o&&a){o.pendingApproval=void 0,v.emit("approval.response",{sessionId:r,requestId:i,approved:s}),this.touchSession(o.sessionId),a.resolve(Ic(s)),o.isResponding=!0,this.reply(e,n,!0);return}o&&(o.pendingApproval=void 0);let l=o?.syntheticApprovalRetries[i];if(o&&l&&Fn(i)){delete o.syntheticApprovalRetries[i],v.emit("approval.response",{sessionId:r,requestId:i,approved:s}),this.touchSession(o.sessionId),this.reply(e,n,!0),s&&await this.retrySyntheticClaudeApproval(o,l);return}if(!o?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(v.emit("approval.response",{sessionId:r,requestId:i,approved:s}),this.touchSession(o.sessionId),!o.driver.respondApproval(i,s)){this.reply(e,n,!1,void 0,"Agent process is not running. Send a new message to continue.");return}o.isResponding=!0,this.reply(e,n,!0)}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let r=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",i=this.createDriver(e.agent),s=this.configureDriverBeforeStart(e.agent,i,e.claudeHookSecret);await i.start(e.cwd,e.sessionId,r),e.driver=i,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.claudeHookSecret=s??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval retry)"),this.store.upsert(Te(e)),this.updateGauges(),this.touchSession(e.sessionId),w.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:r},"retrying Claude turn after synthetic approval"),i.sendPrompt(n.message)}catch(r){e.driver=null,e.active=!1,e.isResponding=!1,this.updateGauges(),this.touchSession(e.sessionId),w.error({sessionId:e.sessionId,error:String(r)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(r)}`})}}async setApprovalMode(e,n,r,i){let s=this.sessions.get(r);if(!s){let a=this.store.find(r);a?(a.approvalMode=i,this.store.upsert(a),w.info({sessionId:r,agent:a.agent,newMode:i},"approval mode changed (inactive session)")):w.info({sessionId:r,newMode:i},"approval mode changed (untracked session)"),this.reply(e,n,!0,{approvalMode:i});return}let o=s.approvalMode;if(s.approvalMode=i,this.store.upsert(Te(s)),w.info({sessionId:r,agent:s.agent,oldMode:o,newMode:i},"approval mode changed"),s.driver&&(s.driver.setApprovalMode(i),s.agent==="codex"&&s.active&&o!==i))try{s.driver.stop();let a=this.createDriver("codex");await a.start(s.cwd,s.sessionId,i),s.driver=a,this.bindDriverLifecycle(s,"codex"," (mode change)"),w.info({sessionId:r},"codex driver restarted with new approval mode")}catch(a){w.error({sessionId:r,error:String(a)},"failed to restart codex after approval mode change"),s.driver=null,s.active=!1,this.updateGauges()}this.reply(e,n,!0,{approvalMode:i})}interrupt(e,n,r){let i=this.sessions.get(r);if(!i?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}v.emit("session.interrupt",{sessionId:r,agent:i.agent}),i.driver.interrupt(),this.reply(e,n,!0)}stopSession(e,n,r){let i=this.sessions.get(r);if(!i){this.reply(e,n,!1,void 0,"Session not found");return}w.info({sessionId:r,agent:i.agent},"stopping session"),v.emit("session.stop",{sessionId:r,agent:i.agent}),this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),i.active=!1,i.driver=null,this.updateGauges(),this.touchSession(i.sessionId),this.reply(e,n,!0)}deleteSession(e,n,r){let i=this.sessions.get(r);i&&(w.info({sessionId:r,agent:i.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(i),i.driver?.stop(),this.unregisterClaudeHookSession(i),this.sessions.delete(r)),v.emit("session.delete",{sessionId:r}),this.store.remove(r),this.updateGauges(),Bi(),Ai(),this.reply(e,n,!0)}async sendHistory(e,n,r,i){let s=this.sessions.get(r);if(!s&&this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}s&&s.clients.add(e);let o=s?.cwd??this.store.find(r)?.cwd??"",a=await tn(r,i,o);w.info({sessionId:r,historyCount:a.length,isResponding:s?.isResponding,approvalMode:s?.approvalMode},"sending history");let l={type:"session.history",sessionId:r,messages:a,isResponding:s?.isResponding||void 0,partialReplyText:this.currentPartialReplyText(s),approvalMode:s?.approvalMode};e.send(JSON.stringify(l)),s&&this.resendPendingApproval(s,e),this.reply(e,n,!0)}async listSessions(e,n,r,i,s,o=50,a){try{let l=await jn({agent:r,cwd:i,search:s,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()});this.reply(e,n,!0,l)}catch(l){this.reply(e,n,!1,void 0,String(l))}}createDriver(e){switch(e){case"claude":return new Xt;case"codex":return new Un;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let r=this.sessions.get(e);if(!r){w.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let i=JSON.stringify(n),s=r.clients.size,o=0,a=0;for(let l of r.clients)l.readyState===1?(l.send(i),o++):a++;if(a>0&&I.increment("broadcast.fail"),n.type!=="text.delta"&&w.debug({sessionId:e,msgType:n.type,sent:o,total:s},"broadcast"),n.type==="text.delta"){r.currentReplyText+=n.content;return}if(n.type==="session.done"){let l=r.title||e,c=this.buildPushBody(r.currentReplyText);r.currentReplyText="",this.pushSender(l,c,{sessionId:e,agent:r.agent});return}n.type==="session.interrupted"&&(r.currentReplyText="")}reply(e,n,r,i,s){if(e.readyState!==1)return;let o={type:"response",id:n,ok:r,data:i,error:s};e.send(JSON.stringify(o))}};function ji(t,e){t.action==="push.register"?e.registerToken(t.pushToken):e.unregisterToken(t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Ec=require("child_process");function wg(t,e){return(0,Ec.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function bg(t){let e=t.split(`
|
|
98
|
-
`).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function Ac(t,e=wg){let n;try{n=bg(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(r=>{try{let i=e("ps",["-p",String(r),"-o","command="]);return i?{pid:r,command:i}:{pid:r}}catch{return{pid:r}}})}var yt=require("fs"),Gi=require("os"),Tc=require("crypto"),kc=require("path");function Rc(t){return(0,Tc.randomBytes)(t).toString("base64url")}function Ig(){return`d_${Rc(12)}`}function xg(){return(0,Gi.hostname)()}function Eg(){let t=(0,Gi.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function Ag(t){return{daemonId:Ig(),daemonSecret:Rc(32),displayName:xg(),canonicalHost:Eg(),port:t,createdAt:new Date().toISOString()}}function Cc(t,e){(0,yt.mkdirSync)((0,kc.dirname)(e),{recursive:!0}),(0,yt.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
99
|
-
|
|
100
|
-
`,"utf8")}var Xn=class{constructor(e=Cl){this.pairingsPath=e;this.records=Cg(e)}records;windows=new Map;list(){return this.records.slice()}pairedCount(){return this.records.filter(e=>!e.revokedAt).length}openWindow(e=5*6e4){let n=`pair_${zi(8)}`,r=zi(24),i=new Date(Date.now()+e).toISOString(),s={pairingId:n,pairNonce:r,expiresAt:i};return this.windows.set(r,s),s}consumeWindow(e){let n=this.windows.get(e);return!n||(this.windows.delete(e),new Date(n.expiresAt).getTime()<Date.now())?null:n}issuePairToken(e,n){let r=new Date().toISOString(),i=zi(32),s={deviceId:e,deviceName:n,tokenHash:$i(i),createdAt:r,lastSeenAt:r,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=s:this.records.unshift(s),rn(this.pairingsPath,this.records),i}validatePairToken(e,n,r=!0){let i=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!i)return!1;let s=$i(n);return Lc(i.tokenHash,s)?(r&&(i.lastSeenAt=new Date().toISOString(),rn(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let r=$i(e),i=this.records.find(s=>!s.revokedAt&&Lc(s.tokenHash,r));return i?(n&&(i.lastSeenAt=new Date().toISOString(),rn(this.pairingsPath,this.records)),i):null}revoke(e){let n=this.records.find(r=>r.deviceId===e&&!r.revokedAt);return n?(n.revokedAt=new Date().toISOString(),rn(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),rn(this.pairingsPath,this.records)}};function vt(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function Tg(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function Oc(t,e){return Tg(t)??e}function kg(t,e){return!!(t&&e&&t===e)}function Vi(t,e,n,r=!0){return t?kg(t,e)?!0:!!n(t,r):!1}var Bc=require("child_process");function Yi(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function Dc(t){if(!Yi(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function Rg(t){if(!Yi(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function Pg(t){if(!Yi(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function Ji(t){return!!t&&!Rg(t)&&!Pg(t)}function wt(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function Hc(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function Lg(t){let e=[],n=[];for(let r of Object.values(t))if(r)for(let i of r)i.internal||i.family!=="IPv4"||Ji(i.address)&&(Dc(i.address)?e.push(i.address):n.push(i.address));return[...e,...n]}function Mc(t){let e=JSON.parse(t),n=wt(e.Self?.DNSName),r=(e.Self?.TailscaleIPs??[]).map(o=>wt(o)).filter(o=>!!o).filter(o=>Dc(o)&&Ji(o)),i=r[0]??n,s=[...n&&n!==i?[n]:[],...r.filter(o=>o!==i)];return{canonicalHost:i,fallbackHosts:s}}function Fc(t=Bc.execFileSync){let e=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(Boolean);for(let n of e)try{let r=t("tailscale",["--socket",n,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Mc(r)}catch{}try{let n=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Mc(n)}catch{return{fallbackHosts:[]}}}function Uc(t){let e=wt(t.canonicalHost),n=wt(t.configuredCanonicalHost)||wt(t.tailscaleCanonicalHost)||e||"localhost",r=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...Lg(t.interfaces)].map(i=>wt(i)).filter(i=>!!i).filter(i=>Ji(i)).filter((i,s,o)=>i!==n&&o.indexOf(i)===s);return{canonicalHost:n,fallbackHosts:r}}function qc(t){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("utf8");if(Array.isArray(t))return Buffer.concat(t).toString("utf8");if(t instanceof ArrayBuffer)return Buffer.from(t).toString("utf8");if(ArrayBuffer.isView(t)){let e=t;return Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8")}return String(t)}var W=B.child({module:"daemon"}),sn=B.child({module:"ws"}),pe=new Kn,F=Pc(S.port),ke=new Xn,Qn=new Set,Zn=new WeakSet,Wc=!1,$c=Date.now(),bt=null;function It(){let t=Fc();return Uc({canonicalHost:F.canonicalHost,configuredCanonicalHost:S.canonicalHost,configuredFallbackHosts:Hc(S.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,Gc.networkInterfaces)()})}async function Ki(t){let e=[];for await(let r of t)e.push(Buffer.isBuffer(r)?r:Buffer.from(r));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function D(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function Vc(){let t=ke.openWindow(),e=It(),n=e.canonicalHost,r=F.port,i=e.fallbackHosts.length>0?e.fallbackHosts:void 0;if(S.relayUrl)try{let s=new URL(S.relayUrl);n=s.hostname,r=s.port?Number(s.port):s.protocol==="https:"?443:80,i=[e.canonicalHost,...i??[]].filter(Boolean)}catch{W.warn({relayUrl:S.relayUrl},"invalid VIBELET_RELAY_URL, ignoring")}return{type:"vibelet-pair",daemonId:F.daemonId,displayName:F.displayName,canonicalHost:n,fallbackHosts:i,port:r,pairNonce:t.pairNonce,expiresAt:t.expiresAt}}async function Ng(t){let e=await(0,We.readdir)(t),n=[];for(let r of e){if(r.startsWith("."))continue;let i=await(0,We.stat)((0,er.join)(t,r)).catch(()=>null);i&&n.push({name:r,isDirectory:i.isDirectory()})}return n.sort((r,i)=>r.isDirectory!==i.isDirectory?r.isDirectory?-1:1:r.name.localeCompare(i.name)),{entries:n}}var on=(0,jc.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${S.port}`);if(n.pathname==="/health"){let i=It(),s={status:"ok",version:ut,daemonId:F.daemonId,displayName:F.displayName,canonicalHost:i.canonicalHost,uptimeSeconds:Math.round((Date.now()-$c)/1e3),activeSessions:pe.getActiveSessionCount(),pairedDevices:ke.pairedCount(),wsClients:ne.clients.size,drivers:pe.getDriverCounts(),metrics:I.snapshot()};S.relayUrl&&(s.relayUrl=S.relayUrl),D(e,200,s);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!vt(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}D(e,200,Vc());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!vt(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}ke.reset(),D(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!vt(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}D(e,200,{status:"stopping"}),setTimeout(()=>je("HTTP /shutdown request"),50);return}if(t.method==="POST"&&n.pathname==="/hook/claude/session-start"){if(!vt(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}try{let i=await Ki(t),s=t.headers[Jt],o=Array.isArray(s)?s[0]:s;pe.handleClaudeSessionStartHook(o,i),D(e,200,{ok:!0})}catch(i){D(e,400,{error:String(i)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!vt(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}try{let i=await Ki(t),s=t.headers[Jt],o=Array.isArray(s)?s[0]:s,a=await pe.handleClaudePermissionHook(o,i);D(e,200,a)}catch(i){D(e,400,{error:String(i)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let i=await Ki(t);if(i.daemonId!==F.daemonId||typeof i.pairNonce!="string"||typeof i.deviceId!="string"||typeof i.deviceName!="string"){D(e,400,{error:"invalid_pair_request"});return}if(!ke.consumeWindow(i.pairNonce)){D(e,401,{error:"pair_window_expired"});return}let o=ke.issuePairToken(i.deviceId,i.deviceName),a=It();D(e,200,{daemonId:F.daemonId,displayName:F.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:F.port,deviceId:i.deviceId,pairToken:o})}catch(i){D(e,400,{error:String(i)})}return}let r=Oc(t.headers.authorization,n.searchParams.get("token"));if(!Vi(r,S.legacyToken,(i,s)=>ke.validateAnyPairToken(i,s),!1)){e.writeHead(401),e.end("Unauthorized");return}if(n.pathname==="/file"){let i=n.searchParams.get("path");if(!i){e.writeHead(400),e.end("Missing path parameter");return}try{let s=Vn(i);if(!(await(0,We.stat)(s)).isFile()){e.writeHead(404),e.end("Not a file");return}let a=(0,er.extname)(s).toLowerCase(),c={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".pdf":"application/pdf"}[a]||"application/octet-stream",u=await(0,We.readFile)(s);e.writeHead(200,{"Content-Type":c,"Content-Length":u.length}),e.end(u)}catch{e.writeHead(404),e.end("File not found")}return}e.writeHead(200),e.end(`Vibelet Daemon v${ut}`)}),ne=new Ir.default({server:on});on.on("connection",t=>{Qn.add(t),t.on("close",()=>{Qn.delete(t)})});ne.on("connection",(t,e)=>{let r=new URL(e.url??"/",`http://localhost:${S.port}`).searchParams.get("token");if(Vi(r,S.legacyToken,(i,s)=>ke.validateAnyPairToken(i,s)))Zn.add(t),I.increment("ws.auth.success",{mode:"query_token"}),pe.prewarmCaches();else if(r){I.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}sn.info({clients:ne.clients.size},"client connected"),I.increment("ws.connect"),I.gauge("ws.clients",ne.clients.size),v.emit("ws.connect",{clients:ne.clients.size,authMode:Zn.has(t)?"query_token":"pending"}),t.on("message",async i=>{try{let s=JSON.parse(qc(i));if(!s||typeof s.action!="string"){t.send(JSON.stringify({type:"error",sessionId:"",message:'Invalid message: missing or non-string "action" field'}));return}if(s.action==="ping"){t.send(JSON.stringify({type:"pong"}));return}let o=s;if(!Zn.has(t)){if(o.action==="auth.hello"&&o.daemonId===F.daemonId&&ke.validatePairToken(o.deviceId,o.pairToken)){Zn.add(t),I.increment("ws.auth.success",{mode:"auth_hello"}),pe.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:F.daemonId,displayName:F.displayName}}));return}if(o.action==="auth.hello"){I.increment("ws.auth.failure",{mode:"auth_hello"}),t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:"auth_failed"})),t.close(4001,"Unauthorized");return}I.increment("ws.auth.failure",{mode:"missing"}),t.send(JSON.stringify({type:"error",sessionId:"",message:"Authentication required"})),t.close(4001,"Unauthorized");return}if(o.action==="log.report"){for(let a of o.entries)v.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?W.error:a.level==="warn"?W.warn:W.info).call(W,{event:a.event,...a.data},`[app] ${a.event}`);t.send(JSON.stringify({type:"response",id:o.id,ok:!0}));return}if(o.action==="dirs.list"){try{let a=await Ng(o.path);t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:a}))}catch(a){t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:String(a)}))}return}if(s.action==="push.register"){ji(s,{registerToken:Ui,unregisterToken:qi,respond:a=>t.send(JSON.stringify(a))});return}if(s.action==="push.unregister"){ji(s,{registerToken:Ui,unregisterToken:qi,respond:a=>t.send(JSON.stringify(a))});return}await pe.handle(t,o)}catch(s){sn.error({error:String(s)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(s)}))}}),t.on("close",i=>{sn.info({clients:ne.clients.size,code:i},"client disconnected"),I.increment("ws.disconnect"),I.increment("ws.disconnect.code",{code:String(i)}),I.gauge("ws.clients",ne.clients.size),v.emit("ws.disconnect",{clients:ne.clients.size,code:i}),pe.removeClient(t)}),t.on("error",i=>{sn.error({error:i.message},"websocket error")})});function Xi(){for(let t of Qn)try{t.destroy()}catch{}Qn.clear()}function Yc(){let t=Rl({auditPath:ct,stdoutLogPath:Tl,stderrLogPath:kl,auditMaxBytes:S.auditMaxBytes,logMaxBytes:S.daemonLogMaxBytes});t.trimmedFiles>0&&W.info({trimmedFiles:t.trimmedFiles,reclaimedBytes:t.reclaimedBytes,files:t.files.filter(e=>e.trimmed).map(e=>({path:e.path,beforeBytes:e.beforeBytes,afterBytes:e.afterBytes}))},"trimmed vibelet storage")}function Og(){bt||(bt=setInterval(Yc,S.storageHousekeepingIntervalMs),bt.unref())}function Mg(){bt&&(clearInterval(bt),bt=null)}function je(t,e=0){if(!Wc){Wc=!0,W.info({reason:t,exitCode:e},"shutting down"),v.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-$c)/1e3)}),I.stopPeriodicLog(),Mg(),pe.shutdown();for(let n of ne.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}ne.close(n=>{n&&W.error({error:String(n)},"websocket close error")}),on.close(n=>{if(n){W.error({error:String(n)},"http close error"),Xi(),process.exit(1);return}Xi(),process.exit(e)}),setTimeout(()=>{W.error("force exiting after shutdown timeout"),Xi(),process.exit(e||1)},3e3).unref()}}ne.on("error",t=>{sn.error({error:t.message},"wss error")});on.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Ac(S.port).filter(n=>n.pid!==process.pid);W.error({port:S.port,occupants:e},"port is already in use. Stop the existing process or use VIBE_PORT=<port> to specify another port")}else W.error({error:String(t)},"server error");je(`httpServer error: ${t.code??t.message}`,1)});process.once("SIGINT",()=>je("SIGINT"));process.once("SIGTERM",()=>je("SIGTERM"));process.once("SIGHUP",()=>je("SIGHUP"));process.once("SIGTTIN",()=>je("SIGTTIN"));process.once("SIGTSTP",()=>je("SIGTSTP"));process.on("uncaughtException",t=>{W.error({error:String(t),stack:t.stack},"uncaughtException"),v.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{W.error({reason:String(t)},"unhandledRejection"),v.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});on.listen(S.port,async()=>{Yc(),v.emit("daemon.start",{port:S.port}),I.startPeriodicLog(),Og(),W.info({port:S.port,daemonId:F.daemonId,displayName:F.displayName,canonicalHost:It().canonicalHost,fallbackHosts:It().fallbackHosts,claudePath:S.claudePath,codexPath:S.codexPath,auditMaxBytes:S.auditMaxBytes,daemonLogMaxBytes:S.daemonLogMaxBytes,storageHousekeepingIntervalMs:S.storageHousekeepingIntervalMs},"daemon started");let t=It(),e=Vc();process.stdout.write(`
|
|
91
|
+
`)}resolveToolContext(e){let n=Q(e?.item)??e??null,r=Ps(n);if(!r)return null;let s=n?Jl(n):null;if(s)return this.toolContextByCallId.set(r,s),{callId:r,toolContext:s};let i=this.toolContextByCallId.get(r);return i?{callId:r,toolContext:i}:null}createFallbackInput(e,n){return e?Ls(e,["threadId","turnId",...n]):{}}queueApprovalRequest(e,n,r){if(this.approvalRequests.set(e,n),v.emit("approval.request",{agent:"codex",sessionId:this.threadId,toolName:n.toolName}),!this.handler){T.warn({threadId:this.threadId,requestId:e,toolName:n.toolName},"approval request received without handler"),this.respondApproval(e,!1)||this.writeServerRequestError(n.rpcId,"Approval handler unavailable");return}this.handler({type:"approval.request",sessionId:this.threadId,requestId:e,toolName:n.toolName,input:n.input,description:r})}handleServerRequest(e,n,r){let s=String(n),i=this.resolveToolContext(r);if(e==="item/commandExecution/requestApproval"){this.queueApprovalRequest(s,{kind:"command-execution",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},C(r?.reason)??C(r?.description)??"");return}if(e==="item/fileChange/requestApproval"){this.queueApprovalRequest(s,{kind:"file-change",responseKind:"v2",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","reason","description"])},C(r?.reason)??C(r?.description)??"");return}if(e==="item/tool/requestUserInput"){let o=r?.questions;if(!Op(o)){T.warn({threadId:this.threadId,rpcId:n},"unsupported requestUserInput request"),this.writeServerRequestError(n,"Unsupported interactive request from Codex");return}let a=Np(o);if(!a){this.writeServerRequestError(n,"Malformed requestUserInput approval request");return}this.queueApprovalRequest(s,{kind:"request-user-input-approval",rpcId:n,questionId:a.questionId,approveLabel:a.approveLabel,denyLabel:a.denyLabel,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,["itemId","questions"])},Bp(o));return}if(e==="execCommandApproval"){this.queueApprovalRequest(s,{kind:"exec-command-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Bash",input:i?.toolContext.input??this.createFallbackInput(r,[])},C(r?.reason)??C(r?.description)??"");return}if(e==="applyPatchApproval"){this.queueApprovalRequest(s,{kind:"apply-patch-legacy",rpcId:n,toolName:i?.toolContext.toolName??"Patch",input:i?.toolContext.input??this.createFallbackInput(r,[])},C(r?.reason)??C(r?.description)??"");return}if(e==="item/permissions/requestApproval"){T.warn({threadId:this.threadId,rpcId:n},"unsupported permissions approval request"),this.writeServerRequestError(n,"Unsupported permissions approval request");return}T.warn({threadId:this.threadId,rpcId:n,method:e},"unsupported server request"),this.writeServerRequestError(n,`Unsupported server request: ${e}`)}handleRaw(e){if(T.debug({method:e.method??"(response)",rpcId:e.id??"-"},"handleRaw"),e.id!=null&&!e.method&&this.pending.has(e.id)){let s=this.pending.get(e.id);this.pending.delete(e.id),e.error?s.reject(new Error(e.error.message??"RPC error")):s.resolve(e.result);return}let n=typeof e.method=="string"?e.method:void 0,r=Q(e.params);if(n&&e.id!=null){this.handleServerRequest(n,e.id,r??void 0);return}switch(n&&T.debug({method:n,paramsPreview:JSON.stringify(r??{}).slice(0,300)},"notification"),n){case"item/agentMessage/delta":{let s=r?.text??r?.delta??r?.content??"";s&&this.handler?this.handler({type:"text.delta",sessionId:this.threadId,content:s}):s||T.debug({paramsKeys:Object.keys(r??{})},"agentMessage/delta with empty text");break}case"item/commandExecution/outputDelta":r?.output&&this.handler&&this.handler({type:"tool.result",sessionId:this.threadId,toolCallId:r.itemId??"",output:String(r.output)});break;case"item/started":{let s=Q(r?.item),i=Ps(s),o=s?Jl(s):null;i&&o&&(this.toolContextByCallId.set(i,o),this.handler&&this.handler({type:"tool.call",sessionId:this.threadId,toolName:o.toolName,input:o.input,toolCallId:i}));break}case"item/completed":{let s=Q(r?.item)??r,i=Ps(s);i&&this.toolContextByCallId.delete(i);break}case"turn/completed":{let s=Q(r?.usage),i=s?{inputTokens:Number(s.input_tokens??s.inputTokens??0),outputTokens:Number(s.output_tokens??s.outputTokens??0)}:void 0;T.info({threadId:this.threadId},"turn completed"),v.emit("session.done",{agent:"codex",sessionId:this.threadId,usage:i}),this.handler&&this.handler({type:"session.done",sessionId:this.threadId,usage:i});break}default:n&&T.debug({method:n},"unhandled notification");break}}};var B=require("fs/promises"),js=require("fs"),Gs=require("readline"),k=require("path"),pe=require("os");var Dp=new Set(["New session","Resumed session","Untitled session"]),Hp=["<environment_context>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","# AGENTS.md instructions for "];function Fp(t){return t.replace(/\s+/g," ").trim()}function Jn(t){return typeof t!="string"?void 0:Fp(t)||void 0}function tc(t){let e=Jn(t);return e?/^[0-9a-f]{8,}$/i.test(e)||/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)||/^agent-[a-z0-9_-]{6,}$/i.test(e):!1}function ht(t){let e=Jn(t);return!e||Dp.has(e)||tc(e)}function Up(t){for(let e of t.replace(/\r/g,"").split(`
|
|
92
|
+
`)){let n=Jn(e);if(n&&!qp(n)&&!Wp(n))return n}}function qp(t){return Hp.some(e=>t.startsWith(e))}function Wp(t){let e=t.replace(/^['"`]+/,"").replace(/['"`\\]+$/,"").trim();return!!(!e||/^(\/|~\/|\.\/|\.\.\/)/.test(e)||/^[A-Za-z]:\\/.test(e))}function jp(t){for(let e=0;e<t.length;e+=1){let n=t[e];if(n==="\u3002"||n==="\uFF01"||n==="\uFF1F"||n==="\uFF1B")return e+1;if(n==="."||n==="!"||n==="?"||n===";"){let r=t[e+1];if(!r||/\s/.test(r))return e+1}}return-1}function Ms(t,e=80){if(typeof t!="string")return;let n=Up(t);if(!n)return;let r=jp(n),i=(r>0?n.slice(0,r):n).replace(/[。!?;.!?;]+$/gu,"").trim();if(!(!i||tc(i)))return i.length<=e?i:`${i.slice(0,Math.max(1,e-3)).trimEnd()}...`}function We(t,e){for(let n of t){let r=Jn(n);if(!(!r||ht(r)))return r}return Ms(e)}var rc=require("child_process"),pt=require("fs/promises"),Te=require("path"),Ns=require("os"),sc=require("util");var Gp=(0,sc.promisify)(rc.execFile),$p=15e3,nn=null;function Os(){nn=null}function zp(t){return t.replace(/^['"]|['"]$/g,"")}function Vp(t){return(t.match(/"[^"]*"|'[^']*'|\S+/g)??[]).map(zp)}function Bs(t){let e=Vp(t);for(let n=0;n<e.length;n+=1){let r=e[n],s=(0,Te.basename)(r);if(s==="claude"||s==="codex")return{agent:s,args:e.slice(n+1)}}return null}function Yp(t,e){let n=Bs(e);if(!n||n.agent!==t)return null;let{args:r}=n;if(t==="claude"){for(let s=0;s<r.length;s+=1){let i=r[s];if((i==="--resume"||i==="--session-id")&&r[s+1]&&!r[s+1].startsWith("-"))return r[s+1];if(i.startsWith("--resume="))return i.slice(9);if(i.startsWith("--session-id="))return i.slice(13)}return null}if(r[0]!=="resume")return null;for(let s=1;s<r.length;s+=1){let i=r[s];if(!i.startsWith("-"))return i}return null}function Kn(t){switch(t){case"high":return 3;case"medium":return 2;default:return 1}}function Jp(t,e){return t==="claude"?e.includes("/.claude/projects/")&&!e.includes("/subagents/"):e.includes("/.codex/sessions/")}function Kp(t,e){let n=Bs(e);return!n||n.agent!==t?!1:n.args.includes("--continue")||n.args.includes("-c")}function Xp(t){let e=Yp(t.agent,t.command);if(e)return{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:e,confidence:"high"};let n=[...new Set(t.sessionFiles)].filter(s=>Jp(t.agent,s));if(n.length!==1)return null;let r=gt(t.agent,n[0]);return r?{agent:t.agent,pid:t.pid,cwd:t.cwd,command:t.command,sessionId:r,confidence:"medium",sessionFilePath:n[0]}:null}function Zp(t,e){let n=t,r=e;return(Kn(e.confidence)>Kn(t.confidence)||Kn(e.confidence)===Kn(t.confidence)&&e.pid<t.pid)&&(n=e,r=t),{...n,cwd:n.cwd||r.cwd,title:n.title??r.title,sessionFilePath:n.sessionFilePath??r.sessionFilePath}}function Qp(t){let e=new Map;for(let n of t){let r=`${n.agent}:${n.sessionId}`,s=e.get(r);e.set(r,s?Zp(s,n):n)}return[...e.values()]}async function Ds(t,e){try{let{stdout:n}=await Gp(t,e,{maxBuffer:8388608});return n}catch{return""}}async function nc(t){if(!t.sessionFilePath)return t;let e=await rn(t.sessionFilePath,t.agent);return e?{...t,cwd:t.cwd||e.cwd,title:t.title??e.title}:null}async function eg(t){return(await Ds("lsof",["-a","-p",String(t),"-d","cwd","-Fn"])).split(`
|
|
93
|
+
`).find(r=>r.startsWith("n"))?.slice(1).trim()??""}async function tg(t){let n=(await Ds("lsof",["-p",String(t),"-Fn"])).split(`
|
|
94
|
+
`).filter(r=>r.startsWith("n")).map(r=>r.slice(1).trim()).filter(r=>r.endsWith(".jsonl")?r.includes("/.claude/projects/")||r.includes("/.codex/sessions/"):!1);return[...new Set(n)]}async function ng(){return(await Ds("pgrep",["-fal","(^|/)(claude|codex)( |$)|claude app-server|codex app-server"])).split(`
|
|
95
|
+
`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=e.match(/^(\d+)\s+(.*)$/);if(!n)return null;let r=Number(n[1]),s=n[2],i=Bs(s);return!Number.isFinite(r)||!i?null:{pid:r,command:s,agent:i.agent}}).filter(e=>!!e)}async function rg(){let t=await ng();return Promise.all(t.map(async e=>({pid:e.pid,agent:e.agent,command:e.command,cwd:await eg(e.pid),sessionFiles:await tg(e.pid)})))}function sg(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function ig(t,e){if(!e)return null;try{if(t==="claude"){let o=(0,Te.join)((0,Ns.homedir)(),".claude","projects",sg(e)),l=(await(0,pt.readdir)(o).catch(()=>[])).filter(f=>f.endsWith(".jsonl"));if(l.length===0)return null;let c=null;if(await Promise.all(l.map(async f=>{let h=await(0,pt.stat)((0,Te.join)(o,f)).catch(()=>null);h&&(!c||h.mtimeMs>c.mtimeMs)&&(c={name:f,mtimeMs:h.mtimeMs})})),!c)return null;let u=(0,Te.join)(o,c.name),d=gt(t,u);return d?{sessionId:d,filePath:u}:null}let n=(0,Te.join)((0,Ns.homedir)(),".codex","sessions"),r=null;async function s(o){let a=await(0,pt.readdir)(o,{withFileTypes:!0}).catch(()=>[]);for(let l of a){let c=(0,Te.join)(o,l.name);if(l.isDirectory())await s(c);else if(l.name.endsWith(".jsonl")){let u=await(0,pt.stat)(c).catch(()=>null);if(!u||r&&u.mtimeMs<=r.mtimeMs)continue;let d=await rn(c,t);if(!d||d.cwd!==e)continue;r={path:c,mtimeMs:u.mtimeMs,sessionId:d.sessionId}}}}await s(n);let i=r;return i?{sessionId:i.sessionId,filePath:i.path}:null}catch{return null}}async function ic(){if(nn&&Date.now()<nn.expiresAt)return nn.value;let t=await rg(),e=await Promise.all(t.map(async r=>{let s=Xp(r);if(s)return nc(s);if(Kp(r.agent,r.command))return null;let i=await ig(r.agent,r.cwd);return i?nc({agent:r.agent,pid:r.pid,cwd:r.cwd,command:r.command,sessionId:i.sessionId,confidence:"low",sessionFilePath:i.filePath}):null})),n=Qp(e.filter(r=>r!==null));return nn={value:n,expiresAt:Date.now()+$p},n}var ac=L.child({module:"inventory"}),mt={daemonActive:3,externalRunning:2,idle:1},oc={high:3,medium:2,low:1};function lc(t,e){return e.lastActivityAt.localeCompare(t.lastActivityAt)||t.sessionId.localeCompare(e.sessionId)}function og(t,e){let n=t.runtime.needsAttention?1:0;return(e.runtime.needsAttention?1:0)-n||mt[e.runtime.state]-mt[t.runtime.state]||lc(t,e)}function ag(t,e){return mt[e.state]>mt[t.state]?e:mt[e.state]<mt[t.state]?t:oc[e.confidence]>oc[t.confidence]?e:t}function lg(t,e){return t?e?t.localeCompare(e)<=0?t:e:t:e}function cg(t,e){return t?e?t.localeCompare(e)>=0?t:e:t:e}function ug(t,e){return e?t?!(ht(e)&&!ht(t)):!0:!1}function Hs(t="high",e="resumeSession"){return{state:"idle",confidence:t,resumeMode:e}}function dg(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["record"],runtime:Hs(),managed:t.managed}}function fg(t,e){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:e,lastActivityAt:e,sources:["process"],runtime:{state:"externalRunning",confidence:t.confidence,resumeMode:"resumeSession",pid:t.pid,command:t.command}}}function hg(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:["daemon"],runtime:{state:"daemonActive",confidence:"high",resumeMode:"reuseDriver",needsAttention:t.needsAttention||void 0,isResponding:t.isResponding||void 0},managed:t.managed}}function pg(t,e){for(let n of e){let r=`${n.agent}:${n.sessionId}`,s=t.get(r);if(!s){t.set(r,{...n,sources:[...n.sources],runtime:{...n.runtime}});continue}let i=ug(s.title,n.title)?n.title:s.title,o=n.cwd||s.cwd,a=ag(s.runtime,n.runtime),l=s.sources.slice();for(let f of n.sources)l.includes(f)||l.push(f);let c=n.sources.includes("process"),u=s.sources.includes("process")&&!s.sources.includes("daemon"),d=c?s.lastActivityAt:u?n.lastActivityAt:cg(s.lastActivityAt,n.lastActivityAt);t.set(r,{...s,cwd:o,title:i,createdAt:lg(s.createdAt,n.createdAt),lastActivityAt:d,sources:l,runtime:a,managed:s.managed||n.managed})}}function gg(...t){let e=new Map;for(let n of t)pg(e,n);return[...e.values()]}function mg(t,e,n,r,s){let i=r?.toLowerCase(),o=t.filter(a=>{if(e&&a.agent!==e||n&&a.cwd!==n)return!1;if(i){let l=(a.title??"").toLowerCase(),c=(a.cwd??"").toLowerCase(),u=l.includes(i)||c.includes(i),d=s?.has(a.sessionId)??!1;if(!u&&!d)return!1}return!0});return r&&ac.info({total:t.length,filtered:o.length,search:r,contentMatchIds:s?.size??0},"filter applied"),o}function yg(t,e){if(!e)return 0;let n=0,r=t.length;for(;n<r;){let s=n+r>>1,i=t[s];(e.lastActivityAt.localeCompare(i.lastActivityAt)||i.sessionId.localeCompare(e.sessionId))>0?r=s:n=s+1}if(n>0){let s=t[n-1];if(s.lastActivityAt===e.lastActivityAt&&s.sessionId===e.sessionId)return n}return 0}function Sg(t,e,n,r,s,i,o){let a=i?1/0:Math.max(1,e||50),l=gg(t.sessionRecords.map(dg),t.scannedSessions,t.runningSessions.map(S=>fg(S,t.scannedAt)),t.activeSessions.map(hg)),c=t.deletedSessionIds?.size?l.filter(S=>!t.deletedSessionIds?.has(S.sessionId)):l,u=mg(c,r,s,i,o),d=u.filter(S=>S.runtime.state!=="idle"||S.managed).sort(og),f=u.filter(S=>S.runtime.state==="idle"&&!S.managed).sort(lc),h=yg(f,n),g=f.slice(h,h+a),y=h+g.length<f.length&&g.length>0?{lastActivityAt:g[g.length-1].lastActivityAt,sessionId:g[g.length-1].sessionId}:void 0;return{sessions:n?g:[...d,...g],nextCursor:y}}async function Xn(t){let e=new Date().toISOString(),[n,r,s]=await Promise.all([sn(t.agent,t.cwd),ic(),t.search?cc(t.search,t.agent):Promise.resolve(void 0)]);return t.search&&ac.info({search:t.search,contentMatches:s?.size??0,scanned:n.length,records:t.sessionRecords.length,active:t.activeSessions.length},"search results"),Sg({activeSessions:t.activeSessions,sessionRecords:t.sessionRecords,scannedSessions:n,runningSessions:r,scannedAt:e,deletedSessionIds:t.deletedSessionIds},t.limit,t.cursor,t.agent,t.cwd,t.search,s)}var Ae=L.child({module:"scanner"});function pc(t){let e=new Map;return{get(n){let r=e.get(n);if(r){if(Date.now()>r.expiresAt){e.delete(n);return}return r.value}},set(n,r){e.set(n,{value:r,expiresAt:Date.now()+t})},clear(){e.clear()}}}var gc=3e4,Us=pc(gc),qs=pc(gc),Zn=8;function $s(){Us.clear(),qs.clear()}function Ws(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}async function Qn(t,e,n){if(t.length===0)return[];let r=Math.max(1,Math.min(e,t.length)),s=new Array(t.length),i=0;return await Promise.all(Array.from({length:r},async()=>{for(;;){let o=i;if(i+=1,o>=t.length)return;s[o]=await n(t[o],o)}})),s}function*mc(t,e){let n=0,r=0;for(;n<t.length&&r<e;){let s=t.indexOf(`
|
|
96
|
+
`,n);s===-1&&(s=t.length);let i=t.substring(n,s);n=s+1,!(i.length===0||i.trim().length===0)&&(yield i,r+=1)}}var Fs=512*1024;async function yc(t,e){if(e<=Fs)return(0,B.readFile)(t,"utf-8");let n=await(0,B.open)(t,"r");try{let r=Buffer.alloc(Fs),{bytesRead:s}=await n.read(r,0,Fs,0);return r.toString("utf-8",0,s)}finally{await n.close()}}function zs(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>!e||typeof e!="object"?"":typeof e.text=="string"?e.text:typeof e.content=="string"?e.content:"").join(""):""}function Sc(t){return t?.type==="response_item"&&t.payload?.type==="message"&&t.payload.role==="user"?zs(t.payload.content):t?.type==="event_msg"&&t.payload?.type==="user_message"&&typeof t.payload.message=="string"?t.payload.message:""}function Vs(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>!e||typeof e!="object"||e.type!=="text"?"":typeof e.text=="string"?e.text:"").join(""):""}var _g=["<task-notification>","<local-command-caveat>","<local-command-stdout>","<local-command-stderr>","<command-name>","<command-message>","<command-args>","<system-reminder>","<environment_context>","# AGENTS.md instructions for "];function vg(t,e){if(t?.isMeta===!0)return!0;let n=e.trim();return n?_g.some(r=>n.startsWith(r)):!1}function Ys(t){if(t?.type!=="user"||t.message?.role!=="user")return"";let e=Vs(t.message.content);return vg(t,e)?"":e}function _c(t){let e=t.trim();return e.startsWith("# AGENTS.md instructions for ")||e.startsWith("<environment_context>")}function vc(t,e="scanner"){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,sources:[e],runtime:Hs()}}function gt(t,e){let n=(0,k.basename)(e,".jsonl");return t==="claude"?n||null:n.match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i)?.[1]??null}async function wg(t,e){let n=await yc(t,e),r=mc(n,64),s="",i="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(!s&&typeof u.cwd=="string"&&(s=u.cwd),!i&&typeof u.sessionId=="string"&&(i=u.sessionId),o||(o=We([u.customTitle,u.summary])),!l){let d=Ys(u),f=We([],d);f&&(a=d,l=f)}if(s&&(o||l))break}return s?{sessionId:i||gt("claude",t)||(0,k.basename)(t,".jsonl"),cwd:s,title:o??l??We([],a)}:null}async function bg(t,e){let n=await yc(t,e),r=mc(n,96),s="",i="",o,a,l;for(let c of r){let u;try{u=JSON.parse(c)}catch{continue}if(s||(s=u.payload?.cwd??u.cwd??""),i||(i=u.payload?.id??u.id??""),o||(o=We([u.payload?.title,u.title])),!l){let d=Sc(u),f=d&&!_c(d)?We([],d):void 0;f&&(a=d,l=f)}if(s&&(o||l))break}return s?{sessionId:i||gt("codex",t)||(0,k.basename)(t,".jsonl"),cwd:s,title:o??l??We([],a)}:null}async function rn(t,e){let n=await(0,B.stat)(t).catch(()=>null);if(!n)return null;try{let r=n.size;if(e==="claude"){let i=await wg(t,r);return i?{sessionId:i.sessionId,agent:e,cwd:i.cwd,title:i.title,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}let s=await bg(t,r);return s?{sessionId:s.sessionId,agent:e,cwd:s.cwd,title:s.title,createdAt:new Date(n.birthtimeMs).toISOString(),lastActivityAt:new Date(n.mtimeMs).toISOString(),filePath:t}:null}catch{return null}}async function uc(t){let e=(0,k.join)((0,pe.homedir)(),".claude","projects");try{let n;t?n=[Ws(t)]:n=(await(0,B.readdir)(e,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name);let r=[];for(let o of n){let a=(0,k.join)(e,o),l=await(0,B.readdir)(a).catch(()=>[]);for(let c of l)c.endsWith(".jsonl")&&r.push((0,k.join)(a,c))}return(await Qn(r,Zn,o=>rn(o,"claude"))).filter(o=>o!==null).map(o=>vc(o)).sort((o,a)=>a.lastActivityAt.localeCompare(o.lastActivityAt))}catch(n){return Ae.warn({error:String(n)},"failed to list claude sessions"),[]}}async function dc(t){let e=(0,k.join)((0,pe.homedir)(),".codex","sessions");try{let n=await(0,B.readdir)(e).catch(()=>[]),r=[];for(let o of n){let a=(0,k.join)(e,o),l=await(0,B.readdir)(a).catch(()=>[]);for(let c of l){let u=(0,k.join)(a,c),d=await(0,B.readdir)(u).catch(()=>[]);for(let f of d){let h=(0,k.join)(u,f),g=await(0,B.readdir)(h).catch(()=>[]);for(let p of g)p.endsWith(".jsonl")&&r.push((0,k.join)(h,p))}}}return(await Qn(r,Zn,o=>rn(o,"codex"))).filter(o=>o!==null).filter(o=>!t||o.cwd===t).map(o=>vc(o)).sort((o,a)=>a.lastActivityAt.localeCompare(o.lastActivityAt))}catch(n){return Ae.warn({error:String(n)},"failed to list codex sessions"),[]}}async function sn(t,e){let r=`list:${(0,pe.homedir)()}:${t??"all"}:${e??""}`,s=Us.get(r);if(s)return s;let i;if(t==="claude")i=await uc(e);else if(t==="codex")i=await dc(e);else{let[o,a]=await Promise.all([uc(e),dc(e)]);i=[...o,...a].sort((l,c)=>c.lastActivityAt.localeCompare(l.lastActivityAt))}return Us.set(r,i),i}async function cc(t,e){let r=`search:${(0,pe.homedir)()}:${t}:${e??"all"}`,s=qs.get(r);if(s)return s;let i=new Set,o=t.toLowerCase();async function a(){let c=(0,k.join)((0,pe.homedir)(),".claude","projects");try{let u=await(0,B.readdir)(c,{withFileTypes:!0}),d=[];for(let h of u){if(!h.isDirectory())continue;let g=(0,k.join)(c,h.name),p=await(0,B.readdir)(g).catch(()=>[]);for(let y of p)y.endsWith(".jsonl")&&d.push((0,k.join)(g,y))}let f=await Qn(d,Zn,h=>fc(h,o,"claude"));for(let h of f)h&&i.add(h)}catch(u){Ae.warn({error:String(u)},"failed to search claude files")}}async function l(){let c=(0,k.join)((0,pe.homedir)(),".codex","sessions");try{let u=[];async function d(h){let g=await(0,B.readdir)(h,{withFileTypes:!0}).catch(()=>[]);for(let p of g){let y=(0,k.join)(h,p.name);p.isDirectory()?await d(y):p.name.endsWith(".jsonl")&&u.push(y)}}await d(c);let f=await Qn(u,Zn,h=>fc(h,o,"codex"));for(let h of f)h&&i.add(h)}catch(u){Ae.warn({error:String(u)},"failed to search codex files")}}return e==="claude"?await a():e==="codex"?await l():await Promise.all([a(),l()]),qs.set(r,i),i}async function fc(t,e,n){let r=(0,js.createReadStream)(t,{encoding:"utf-8"}),s=(0,Gs.createInterface)({input:r,crlfDelay:1/0}),i=n==="claude"?Ig:xg,o="",a=!1;try{for await(let l of s){if(!l.trim())continue;let c;try{c=JSON.parse(l)}catch{continue}if(o||(n==="claude"?typeof c.sessionId=="string"&&(o=c.sessionId):o=c.payload?.id??c.id??""),!a){let u=i(c);u&&u.toLowerCase().includes(e)&&(a=!0)}if(o&&a)break}}finally{s.close(),r.destroy()}return a?o||gt(n,t):null}function Ig(t){return t?.type==="user"&&t.message?.role==="user"?Ys(t):t?.type==="assistant"&&t.message?.role==="assistant"?Vs(t.message.content):""}function xg(t){if(t?.type==="response_item"&&t.payload?.type==="message"){let n=t.payload.role;if(n==="user"||n==="assistant")return zs(t.payload.content)}let e=Sc(t);return e||""}async function hc(t,e){let n=(0,js.createReadStream)(t,{encoding:"utf-8"}),r=(0,Gs.createInterface)({input:n,crlfDelay:1/0});try{for await(let s of r){if(!s.trim())continue;let i;try{i=JSON.parse(s)}catch{continue}if(e(i))break}}finally{r.close(),n.destroy()}}async function on(t,e,n){let r=[];if(e==="claude"){let s=(0,k.join)((0,pe.homedir)(),".claude","projects");try{let i=n?[Ws(n)]:[],o=await(0,B.readdir)(s).catch(()=>[]),a=n?[...i,...o.filter(l=>l!==Ws(n))]:o;for(let l of a){let c=(0,k.join)(s,l,`${t}.jsonl`);try{if(await hc(c,u=>{if(u.type==="user"&&u.message?.role==="user"){let d=Ys(u);d&&r.push({role:"user",content:d})}else if(u.type==="assistant"&&u.message?.role==="assistant"){let d=Vs(u.message.content);d&&r.push({role:"assistant",content:d})}}),r.length>0)break}catch(u){u.code!=="ENOENT"&&Ae.warn({error:String(u)},"failed to read claude session file")}}}catch(i){Ae.warn({error:String(i)},"failed to read claude session history")}}else if(e==="codex"){let s=(0,k.join)((0,pe.homedir)(),".codex","sessions");try{let i=await wc(s,t);i&&await hc(i,o=>{if(o.type!=="response_item"||o.payload?.type!=="message")return;let a=o.payload.role;if(a!=="user"&&a!=="assistant")return;let l=zs(o.payload.content);l&&(a==="user"&&_c(l)||r.push({role:a,content:l}))})}catch(i){Ae.warn({error:String(i)},"failed to read codex session history")}}return r}async function wc(t,e){try{let n=await(0,B.readdir)(t,{withFileTypes:!0});for(let r of n){let s=(0,k.join)(t,r.name);if(r.isDirectory()){let i=await wc(s,e);if(i)return i}else if(r.name.includes(e)&&r.name.endsWith(".jsonl"))return s}}catch(n){Ae.warn({error:String(n)},"failed to walk codex sessions dir")}return null}var yt=require("fs"),xc=require("path");var Eg=500,bc=200;function Tg(t){if(!Array.isArray(t))return[];let e=t.filter(n=>typeof n=="string"&&n.length>0);return e.length<=bc?e:e.slice(-bc)}function Ag(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)typeof n!="string"||n.length===0||e.includes(n)||e.push(n);return e}function Ic(t){return{...t,lastActivityAt:t.lastActivityAt??t.createdAt,acceptedClientMessageIds:Tg(t.acceptedClientMessageIds)}}function kg(t){if(Array.isArray(t))return{records:t.map(Ic),deletedSessionIds:[]};if(t&&typeof t=="object"){let e=t;return{records:Array.isArray(e.records)?e.records.map(Ic):[],deletedSessionIds:Ag(e.deletedSessionIds)}}return{records:[],deletedSessionIds:[]}}var er=class{records;deletedSessionIds;debounceTimer=null;constructor(){let e=this.loadFromDisk();this.records=e.records,this.deletedSessionIds=new Set(e.deletedSessionIds)}getAll(){return this.records}getDeletedSessionIds(){return[...this.deletedSessionIds]}find(e){return this.records.find(n=>n.sessionId===e)}isDeleted(e){return this.deletedSessionIds.has(e)}upsert(e){this.deletedSessionIds.delete(e.sessionId);let n=this.records.findIndex(r=>r.sessionId===e.sessionId);n>=0?this.records[n]=e:this.records.unshift(e),this.scheduleSave()}remove(e){this.records=this.records.filter(n=>n.sessionId!==e),this.deletedSessionIds.add(e),this.scheduleSave()}flushSync(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.saveToDisk()}scheduleSave(){this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.saveToDisk()},Eg)}loadFromDisk(){try{let e=(0,yt.readFileSync)(Hn,"utf-8");return kg(JSON.parse(e))}catch{}return{records:[],deletedSessionIds:[]}}saveToDisk(){(0,yt.mkdirSync)((0,xc.dirname)(Hn),{recursive:!0}),(0,yt.writeFileSync)(Hn,JSON.stringify({records:this.records,deletedSessionIds:[...this.deletedSessionIds]},null,2))}};var Ec=require("path"),Tc=require("os");function tr(t){return t=t.replace(/^~/,"~"),t.startsWith("~/")||t==="~"?(0,Ec.join)((0,Tc.homedir)(),t.slice(2)):t}var St=require("fs"),Ac=require("path");function Cg(t){return!!(t&&typeof t=="object"&&typeof t.deviceId=="string"&&typeof t.pushToken=="string"&&t.platform==="expo"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"&&(typeof t.lastSentAt=="string"||typeof t.lastSentAt>"u"))}function Rg(t){try{let e=(0,St.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(Cg):[]}catch{return[]}}function nr(t,e){(0,St.mkdirSync)((0,Ac.dirname)(t),{recursive:!0}),(0,St.writeFileSync)(t,JSON.stringify(e,null,2)+`
|
|
97
|
+
`,"utf8")}var rr=class{constructor(e=El){this.pushSubscriptionsPath=e;this.records=Rg(e)}records;list(){return this.records.map(e=>({...e}))}listTokens(){return this.records.map(e=>e.pushToken)}count(){return this.records.length}register(e,n){let r=new Date().toISOString(),s=this.records.find(o=>o.deviceId===e),i={deviceId:e,pushToken:n,platform:"expo",createdAt:s?.createdAt??r,updatedAt:r,...s?.lastSentAt?{lastSentAt:s.lastSentAt}:{}};this.records=[i,...this.records.filter(o=>o.deviceId!==e&&o.pushToken!==n)],nr(this.pushSubscriptionsPath,this.records)}unregister(e,n){let r=this.records.filter(s=>!(s.deviceId===e&&s.pushToken===n));return r.length===this.records.length?!1:(this.records=r,nr(this.pushSubscriptionsPath,this.records),!0)}markSent(e){if(e.length===0)return;let n=new Set(e),r=new Date().toISOString(),s=!1;for(let i of this.records)n.has(i.pushToken)&&(i.lastSentAt=r,s=!0);s&&nr(this.pushSubscriptionsPath,this.records)}reset(){this.records=[],nr(this.pushSubscriptionsPath,this.records)}};var je=L.child({module:"push"}),Pg="https://exp.host/--/api/v2/push/send",_t=new rr;function Lg(t,e){if(!Array.isArray(t.data))return{successfulTokens:[],ticketErrors:[]};let n=[],r=[];for(let[s,i]of t.data.entries()){let o=e[s];if(!(!o||!i||typeof i!="object")){if(i.status==="ok"){n.push(o);continue}r.push({token:o,ticket:i})}}return{successfulTokens:n,ticketErrors:r}}function Js(t,e){_t.register(t,e),je.info({deviceId:t,token:e,total:_t.count()},"push token registered")}function Ks(t,e){let n=_t.unregister(t,e);je.info({deviceId:t,token:e,total:_t.count(),removed:n},"push token unregistered")}async function kc(t,e,n){let r=_t.listTokens();if(r.length===0)return;let s=r.map(i=>({to:i,sound:"default",title:t,body:e,data:n}));try{let i=await fetch(Pg,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok)je.error({status:i.status,statusText:i.statusText},"push send failed");else{let o=await i.json().catch(()=>null);if(!o){je.error({count:s.length},"push send returned unreadable response");return}let{successfulTokens:a,ticketErrors:l}=Lg(o,r);for(let{token:c,ticket:u}of l)je.error({token:c,message:u.message,details:u.details,ticketStatus:u.status},"push ticket rejected");a.length>0&&(je.debug({count:a.length},"push sent"),_t.markSent(a))}}catch(i){je.error({error:String(i)},"push send error")}}var w=L.child({module:"manager"}),Mg="Done.",Cc=180,ir=200;function sr(...t){let e=[];for(let n of t)if(n?.length)for(let r of n)!r||e.includes(r)||(e.push(r),e.length>ir&&e.splice(0,e.length-ir));return e}function ke(t){return{sessionId:t.sessionId,agent:t.agent,cwd:t.cwd,approvalMode:t.approvalMode,acceptedClientMessageIds:sr(t.acceptedClientMessageIds),title:t.title,createdAt:t.createdAt,lastActivityAt:t.lastActivityAt,managed:t.managed}}function Rc(t){let e=t.pendingApproval?.requestId;return typeof e=="string"&&Vn(e)}function Ng(t){return t.startsWith(As)}function Pc(t){return t?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow"}}:{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Denied from Vibelet"}}}var or=class{constructor(e=kc){this.pushSender=e;this.startIdleSweep()}sessions=new Map;claudeHookSessions=new Map;store=new er;idleSweepInterval=null;startIdleSweep(){_.idleTimeoutMs<=0&&_.turnStallTimeoutMs<=0||(this.idleSweepInterval=setInterval(()=>this.sweepIdleSessions(),6e4),this.idleSweepInterval.unref())}stopIdleSweep(){this.idleSweepInterval&&(clearInterval(this.idleSweepInterval),this.idleSweepInterval=null)}sweepIdleSessions(){let e=Date.now(),n=_.idleTimeoutMs,r=_.turnStallTimeoutMs;if(n<=0&&r<=0)return;let s=3600*1e3;for(let[i,o]of this.sessions){if(!o.active&&!o.driver){if(o.clients.size===0){let l=e-o.lastActivityTs;l>=s&&(w.info({sessionId:o.sessionId,inactiveMs:l},"removing inactive session from memory"),b.increment("session.cleanup",{reason:"inactive"}),this.unregisterClaudeHookSession(o),this.sessions.delete(i))}continue}if(!o.active||!o.driver)continue;let a=e-o.lastActivityTs;if(o.isResponding){if(r<=0||o.pendingApproval||a<r)continue;w.warn({sessionId:o.sessionId,agent:o.agent,inactiveMs:a,turnStallTimeoutMs:r},"stopping stalled driver"),b.increment("driver.stall_timeout",{agent:o.agent}),v.emit("driver.stall_timeout",{sessionId:o.sessionId,agent:o.agent,idleMs:a}),o.isResponding=!1,o.currentReplyText="",this.broadcast(o.sessionId,{type:"error",sessionId:o.sessionId,message:`Agent stopped responding for over ${Math.ceil(r/1e3)}s. Send a new message to continue.`}),o.driver.stop(),o.active=!1,o.driver=null,this.updateGauges(),this.touchSession(o.sessionId);continue}n<=0||a<n||(w.info({sessionId:o.sessionId,agent:o.agent,idleMs:a,timeoutMs:n},"stopping idle driver"),b.increment("driver.idle_timeout",{agent:o.agent}),v.emit("driver.idle_timeout",{sessionId:o.sessionId,agent:o.agent,idleMs:a}),o.driver.stop(),o.active=!1,o.driver=null,this.updateGauges(),this.touchSession(o.sessionId))}}bindDriverLifecycle(e,n,r,s){e.driver?.onMessage(i=>{if(w.debug({agent:n,context:r,msgType:i.type,sessionId:e.sessionId},"driver message received"),i.type!=="response"&&i.sessionId&&i.sessionId!==e.sessionId&&!this.sessions.has(i.sessionId)){let o=e.sessionId;w.info({oldSessionId:o,newSessionId:i.sessionId},"session ID updated"),this.store.remove(o),this.sessions.delete(o),e.sessionId=i.sessionId,this.sessions.set(i.sessionId,e),this.store.upsert(ke(e)),s&&this.reply(s,`id_update_${Date.now()}`,!0,{sessionId:i.sessionId,oldSessionId:o})}(i.type==="session.done"||i.type==="session.interrupted")&&(e.isResponding=!1,(i.type==="session.interrupted"||!Rc(e))&&(e.pendingApproval=void 0)),i.type==="approval.request"&&(e.isResponding=!1,e.pendingApproval={requestId:i.requestId,toolName:i.toolName,input:i.input,description:i.description}),n==="claude"&&i.type==="approval.request"&&Vn(i.requestId)&&(e.lastUserMessage?e.syntheticApprovalRetries[i.requestId]={message:e.lastUserMessage,toolName:i.toolName}:w.warn({sessionId:e.sessionId,requestId:i.requestId},"missing lastUserMessage for synthetic approval retry")),this.touchSession(e.sessionId,i.type!=="text.delta"),this.broadcast(e.sessionId,i)}),e.driver?.onExit?.(i=>{w.info({agent:n,context:r,exitCode:i,sessionId:e.sessionId},"driver exited"),v.emit("driver.exit",{sessionId:e.sessionId,agent:n,exitCode:i}),b.increment("driver.exit",{agent:n,abnormal:i&&i!==0?"true":"false"});let o=i===0&&Rc(e);this.resolvePendingClaudeHookApprovals(e),e.active=!1,e.driver=null,e.isResponding=!1,e.currentReplyText="",o||(e.pendingApproval=void 0),this.updateGauges(),this.touchSession(e.sessionId)})}configureDriverBeforeStart(e,n,r){if(e!=="claude"||!(n instanceof tn))return;let s=r??(0,Xs.randomUUID)().replace(/-/g,"");return n.configureHookBridge(_.port,s),s}registerClaudeHookSession(e){e.agent!=="claude"||!e.claudeHookSecret||this.claudeHookSessions.set(e.claudeHookSecret,e)}unregisterClaudeHookSession(e){if(e.agent!=="claude"||!e.claudeHookSecret)return;this.claudeHookSessions.get(e.claudeHookSecret)===e&&this.claudeHookSessions.delete(e.claudeHookSecret)}resolvePendingClaudeHookApprovals(e,n=en){for(let r of e.pendingClaudeHookApprovals.values())r.resolve(n);e.pendingClaudeHookApprovals.clear(),e.pendingApproval&&Ng(e.pendingApproval.requestId)&&(e.pendingApproval=void 0)}resolveClaudeHookSession(e){if(!e)return;let n=e.trim();if(n)return this.claudeHookSessions.get(n)}handleClaudeSessionStartHook(e,n){let r=this.resolveClaudeHookSession(e);return r?(this.touchSession(r.sessionId),!0):(w.warn({secretPresent:!!e},"received Claude session-start hook for unknown session"),!1)}async handleClaudePermissionHook(e,n){let r=this.resolveClaudeHookSession(e);if(!r||r.agent!=="claude"||!r.active)return w.warn({secretPresent:!!e},"received Claude permission hook for unknown or inactive session"),en;if(r.approvalMode==="autoApprove")return Pc(!0);let i=(typeof n.tool_name=="string"?n.tool_name:typeof n.toolName=="string"?n.toolName:"").trim();if(!i)return en;let o=n.tool_input??n.toolInput,a=o&&typeof o=="object"&&!Array.isArray(o)?o:{},l=typeof n.tool_use_id=="string"?n.tool_use_id:typeof n.toolUseId=="string"?n.toolUseId:"",c=`${As}${l.trim()||(0,Xs.randomUUID)()}`,u=r.pendingClaudeHookApprovals.get(c);if(u)return u.promise;let d=`Claude requested permissions to use ${i}.`,f,h=new Promise(g=>{f=g});return r.pendingClaudeHookApprovals.set(c,{requestId:c,promise:h,resolve:g=>{r.pendingClaudeHookApprovals.delete(c),f(g)}}),r.pendingApproval={requestId:c,toolName:i,input:a,description:d},v.emit("approval.request",{agent:"claude",sessionId:r.sessionId,toolName:i}),this.touchSession(r.sessionId),this.broadcast(r.sessionId,{type:"approval.request",sessionId:r.sessionId,requestId:c,toolName:i,input:a,description:d}),h}async resolveReconnectSession(e,n,r){if(this.isDeletedSession(e))return;let s=new Date().toISOString(),i=r?.agent,o=r?.cwd??"",a=r?.approvalMode,l=r?.title??"",c=r?.createdAt??s,u=r?.lastActivityAt??s,d=sr(r?.acceptedClientMessageIds),f=r?"memory":"client",h=this.store.find(e);if(h)i=h.agent,o=h.cwd||o,a=h.approvalMode??a,l=h.title||l,c=h.createdAt||c,u=h.lastActivityAt||u,d=sr(h.acceptedClientMessageIds,d),f="record";else if(!r){let p=(await sn(n??i)).find(y=>y.sessionId===e);p&&(i=p.agent,o=p.cwd||o,l=p.title??l,c=p.createdAt,u=p.lastActivityAt,f="scanner")}if(!i&&n&&(i=n,f=r?"memory":"client"),!!i)return{agent:i,cwd:o,approvalMode:a,title:l,createdAt:c,lastActivityAt:u,acceptedClientMessageIds:d,source:f,managed:r?.managed??h?.managed}}resendPendingApproval(e,n){if(!e.pendingApproval||n.readyState!==1)return;let{requestId:r,toolName:s,input:i,description:o}=e.pendingApproval;w.info({sessionId:e.sessionId,requestId:r,toolName:s},"resending pending approval to reconnected client");let a={type:"approval.request",sessionId:e.sessionId,requestId:r,toolName:s,input:i,description:o};n.send(JSON.stringify(a))}buildPushBody(e){let n=e.replace(/\s+/g," ").trim();return n?n.length<=Cc?n:`${n.slice(0,Math.max(1,Cc-3)).trimEnd()}...`:Mg}currentPartialReplyText(e){return e?.isResponding&&e.currentReplyText.trim()?e.currentReplyText:void 0}touchSession(e,n=!0){let r=new Date().toISOString(),s=this.sessions.get(e);if(s){s.lastActivityAt=r,s.lastActivityTs=Date.now(),n&&this.store.upsert(ke(s));return}let i=this.store.find(e);i&&this.store.upsert({...i,lastActivityAt:r})}updateGauges(){let e=0;for(let n of this.sessions.values())n.active&&e++;b.gauge("session.active",e)}activeSessionSnapshots(){let e=[];for(let n of this.sessions.values())n.sessionId.startsWith("pending_")||n.active&&e.push({sessionId:n.sessionId,agent:n.agent,cwd:n.cwd,title:n.title,createdAt:n.createdAt,lastActivityAt:n.lastActivityAt,...n.pendingApproval?{needsAttention:!0}:{},...n.isResponding?{isResponding:!0}:{},managed:n.managed});return e}getDeletedSessionIds(){return new Set(this.store.getDeletedSessionIds())}isDeletedSession(e){return this.store.isDeleted(e)}async listRecentSessionsForContinue(e,n){return sn(e,n)}async handle(e,n){switch(w.debug({action:n.action},"handling client message"),n.action){case"session.create":await this.createSession(e,n.id,n.agent,n.cwd,n.approvalMode,n.continueSession);break;case"session.resume":await this.resumeSession(e,n.id,n.sessionId,n.agent);break;case"session.send":await this.sendMessage(e,n.id,n.sessionId,n.message,n.agent,n.clientMessageId);break;case"session.approve":await this.approve(e,n.id,n.sessionId,n.requestId,n.approved);break;case"session.setApprovalMode":await this.setApprovalMode(e,n.id,n.sessionId,n.approvalMode);break;case"session.interrupt":this.interrupt(e,n.id,n.sessionId);break;case"session.stop":this.stopSession(e,n.id,n.sessionId);break;case"session.delete":this.deleteSession(e,n.id,n.sessionId);break;case"session.history":await this.sendHistory(e,n.id,n.sessionId,n.agent);break;case"reconnect.snapshot":await this.sendReconnectSnapshot(e,n.id,n.agent,n.cwd,n.search,n.activeSessionId,n.activeAgent);break;case"sessions.list":await this.listSessions(e,n.id,n.agent,n.cwd,n.search,n.limit,n.cursor);break}}removeClient(e){for(let n of this.sessions.values())n.clients.delete(e)}shutdown(){this.stopIdleSweep();for(let e of this.sessions.values()){try{this.resolvePendingClaudeHookApprovals(e),e.driver?.stop()}catch(n){w.error({sessionId:e.sessionId,agent:e.agent,error:String(n)},"failed to stop session on shutdown")}e.active=!1,e.driver=null,e.clients.clear(),this.unregisterClaudeHookSession(e)}this.claudeHookSessions.clear(),this.store.flushSync()}getActiveSessionCount(){let e=0;for(let n of this.sessions.values())n.active&&e++;return e}prewarmCaches(){Xn({limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()}).catch(()=>{})}getDriverCounts(){let e={};for(let n of this.sessions.values())n.active&&(e[n.agent]=(e[n.agent]??0)+1);return e}async createSession(e,n,r,s,i,o){s=tr(s),w.info({agent:r,cwd:s,approvalMode:i,continueSession:o},"creating session");try{if(!(await(0,Lc.stat)(s)).isDirectory()){this.reply(e,n,!1,void 0,`Path is not a directory: ${s}`);return}}catch{this.reply(e,n,!1,void 0,`Directory does not exist: ${s}`);return}if(o)try{let l=(await this.listRecentSessionsForContinue(r,s)).find(c=>!this.isDeletedSession(c.sessionId));if(l)return w.info({sessionId:l.sessionId,cwd:s},"continue mode: resuming last session"),this.resumeSession(e,n,l.sessionId,r,s,i);w.info("continue mode: no previous sessions found, creating new")}catch(a){w.warn({error:String(a)},"continue mode: error finding sessions, creating new")}try{let a=b.startTimer("driver.spawn"),l=this.createDriver(r),c=this.configureDriverBeforeStart(r,l),u=await l.start(s,void 0,i),d=a();w.info({sessionId:u,agent:r,spawnMs:d},"session created"),b.increment("session.create",{agent:r}),v.emit("session.create",{sessionId:u,agent:r,cwd:s,approvalMode:i});let f={sessionId:u,agent:r,cwd:s,approvalMode:i,driver:l,clients:new Set([e]),title:"New session",createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:[],syntheticApprovalRetries:{},managed:!0,claudeHookSecret:c,pendingClaudeHookApprovals:new Map};this.sessions.set(u,f),this.registerClaudeHookSession(f),this.store.upsert(ke(f)),this.updateGauges(),$s(),Os(),this.bindDriverLifecycle(f,r,"",e),this.reply(e,n,!0,{sessionId:u})}catch(a){w.error({agent:r,cwd:s,error:String(a)},"createSession error"),this.reply(e,n,!1,void 0,String(a))}}async resumeSession(e,n,r,s,i,o){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let a=this.sessions.get(r);if(a&&a.active){a.clients.add(e),this.touchSession(a.sessionId);let f=await on(r,s,a.cwd),h=this.currentPartialReplyText(a);if(f.length>0||h||a.approvalMode){let g={type:"session.history",sessionId:r,messages:f,isResponding:a.isResponding||void 0,partialReplyText:h,approvalMode:a.approvalMode};e.send(JSON.stringify(g))}this.resendPendingApproval(a,e),this.reply(e,n,!0,{sessionId:r});return}let l=this.store.find(r),c=i||l?.cwd||"",u=o??l?.approvalMode,d=l?.title??"Resumed session";try{let f=b.startTimer("driver.spawn"),h=this.createDriver(s),g=this.configureDriverBeforeStart(s,h),p=await h.start(c,r,u),y=f();w.info({sessionId:p,agent:s,spawnMs:y},"session resumed"),b.increment("session.resume",{agent:s}),v.emit("session.resume",{sessionId:p,agent:s,cwd:c});let S={sessionId:p,agent:s,cwd:c,approvalMode:u,driver:h,clients:new Set([e]),title:d,createdAt:l?.createdAt??new Date().toISOString(),lastActivityAt:new Date().toISOString(),active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:l?.acceptedClientMessageIds??[],syntheticApprovalRetries:{},managed:l?.managed,claudeHookSecret:g,pendingClaudeHookApprovals:new Map};this.sessions.set(p,S),this.registerClaudeHookSession(S),this.store.upsert(ke(S)),this.updateGauges(),this.bindDriverLifecycle(S,s," (resumed)",e);let G=await on(r,s,c);if(G.length>0){w.info({sessionId:r,historyCount:G.length},"sending history messages");let re={type:"session.history",sessionId:p,messages:G,approvalMode:u};e.send(JSON.stringify(re))}this.reply(e,n,!0,{sessionId:p})}catch(f){this.reply(e,n,!1,void 0,String(f))}}hasAcceptedClientMessage(e,n){return e.acceptedClientMessageIds.includes(n)}rememberAcceptedClientMessage(e,n){this.hasAcceptedClientMessage(e,n)||(e.acceptedClientMessageIds.push(n),e.acceptedClientMessageIds.length>ir&&e.acceptedClientMessageIds.splice(0,e.acceptedClientMessageIds.length-ir))}async sendMessage(e,n,r,s,i,o){if(this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}let a=this.sessions.get(r);if(!a||!a.driver){let l=await this.resolveReconnectSession(r,i,a);if(!l){w.warn({sessionId:r},"session not found in records or scanner"),this.reply(e,n,!1,void 0,"Session not found");return}w.info({sessionId:r,agent:l.agent,source:l.source},"auto-reconnecting session"),b.increment("session.reconnect",{agent:l.agent,source:l.source}),v.emit("session.reconnect",{sessionId:r,agent:l.agent,source:l.source});try{let c=this.createDriver(l.agent),u=this.configureDriverBeforeStart(l.agent,c,a?.claudeHookSecret);await c.start(l.cwd,r,l.approvalMode),a?(a.approvalMode=l.approvalMode,a.driver=c,a.active=!0,a.clients.add(e),a.lastActivityAt=l.lastActivityAt,a.lastActivityTs=Date.now(),a.isResponding=!1,a.currentReplyText="",a.acceptedClientMessageIds=sr(a.acceptedClientMessageIds,l.acceptedClientMessageIds),a.syntheticApprovalRetries=a.syntheticApprovalRetries??{},a.claudeHookSecret=u??a.claudeHookSecret,a.pendingClaudeHookApprovals=a.pendingClaudeHookApprovals??new Map):(a={sessionId:r,agent:l.agent,cwd:l.cwd,approvalMode:l.approvalMode,driver:c,clients:new Set([e]),title:l.title,createdAt:l.createdAt,lastActivityAt:l.lastActivityAt,active:!0,lastActivityTs:Date.now(),isResponding:!1,currentReplyText:"",acceptedClientMessageIds:l.acceptedClientMessageIds,syntheticApprovalRetries:{},managed:l.managed,claudeHookSecret:u,pendingClaudeHookApprovals:new Map},this.sessions.set(r,a)),this.registerClaudeHookSession(a),this.bindDriverLifecycle(a,l.agent," (reconnected)"),this.store.upsert(ke(a)),this.updateGauges()}catch(c){this.reply(e,n,!1,void 0,`Failed to reconnect: ${c}`);return}}if(a.clients.add(e),o&&this.hasAcceptedClientMessage(a,o)){this.reply(e,n,!0,{sessionId:r,clientMessageId:o,duplicate:!0});return}if(w.info({sessionId:r,clients:a.clients.size,hasDriver:!!a.driver,active:a.active},"sending message"),v.emit("session.send",{sessionId:r,agent:a.agent,messagePreview:s.slice(0,100)}),ht(a.title)){let l=Ms(s,50);l&&l!==a.title&&(a.title=l),this.store.upsert(ke(a))}o&&this.rememberAcceptedClientMessage(a,o),this.touchSession(a.sessionId),a.isResponding=!0,a.currentReplyText="",a.lastUserMessage=s,a.driver.sendPrompt(s),this.reply(e,n,!0,o?{sessionId:r,clientMessageId:o}:void 0)}async sendReconnectSnapshot(e,n,r,s,i,o,a){try{let l=this.getDeletedSessionIds(),c;try{c=await Xn({agent:r,cwd:s,search:i,limit:50,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:l})}catch(d){w.warn({error:String(d)},"failed to build reconnect snapshot session list"),c={sessions:[],nextCursor:void 0}}let u;if(o&&!l.has(o)){let d=a??c.sessions.find(g=>g.sessionId===o)?.agent,f=this.sessions.get(o),h=await this.resolveReconnectSession(o,d,f);if(h){let g=await on(o,h.agent,f?.cwd??h.cwd);u={sessionId:o,agent:h.agent,messages:g,isResponding:f?.isResponding||void 0,partialReplyText:this.currentPartialReplyText(f),approvalMode:f?.approvalMode??h.approvalMode,...f?.pendingApproval?{pendingApproval:f.pendingApproval}:{}}}}b.increment("reconnect.snapshot",{activeSession:u?"true":"false"}),this.reply(e,n,!0,{snapshot:{sessions:c.sessions,nextCursor:c.nextCursor,...u?{activeSession:u}:{}}})}catch(l){this.reply(e,n,!1,void 0,`Failed to build reconnect snapshot: ${String(l)}`)}}async approve(e,n,r,s,i){let o=this.sessions.get(r),a=o?.pendingClaudeHookApprovals.get(s);if(o&&a){o.pendingApproval=void 0,v.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),a.resolve(Pc(i)),o.isResponding=!0,this.reply(e,n,!0);return}o&&(o.pendingApproval=void 0);let l=o?.syntheticApprovalRetries[s];if(o&&l&&Vn(s)){delete o.syntheticApprovalRetries[s],v.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),this.reply(e,n,!0),i&&await this.retrySyntheticClaudeApproval(o,l);return}if(!o?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}if(v.emit("approval.response",{sessionId:r,requestId:s,approved:i}),this.touchSession(o.sessionId),!o.driver.respondApproval(s,i)){this.reply(e,n,!1,void 0,"Agent process is not running. Send a new message to continue.");return}o.isResponding=!0,this.reply(e,n,!0)}async retrySyntheticClaudeApproval(e,n){if(e.agent==="claude")try{e.driver&&e.driver.stop();let r=["Write","Edit","NotebookEdit"].includes(n.toolName)?"acceptEdits":"autoApprove",s=this.createDriver(e.agent),i=this.configureDriverBeforeStart(e.agent,s,e.claudeHookSecret);await s.start(e.cwd,e.sessionId,r),e.driver=s,e.active=!0,e.isResponding=!0,e.currentReplyText="",e.lastUserMessage=n.message,e.claudeHookSecret=i??e.claudeHookSecret,e.pendingClaudeHookApprovals=e.pendingClaudeHookApprovals??new Map,this.registerClaudeHookSession(e),this.bindDriverLifecycle(e,e.agent," (approval retry)"),this.store.upsert(ke(e)),this.updateGauges(),this.touchSession(e.sessionId),w.info({sessionId:e.sessionId,toolName:n.toolName,retryApprovalMode:r},"retrying Claude turn after synthetic approval"),s.sendPrompt(n.message)}catch(r){e.driver=null,e.active=!1,e.isResponding=!1,this.updateGauges(),this.touchSession(e.sessionId),w.error({sessionId:e.sessionId,error:String(r)},"failed to retry Claude turn after approval"),this.broadcast(e.sessionId,{type:"error",sessionId:e.sessionId,message:`Failed to continue after approval: ${String(r)}`})}}async setApprovalMode(e,n,r,s){let i=this.sessions.get(r);if(!i){let a=this.store.find(r);a?(a.approvalMode=s,this.store.upsert(a),w.info({sessionId:r,agent:a.agent,newMode:s},"approval mode changed (inactive session)")):w.info({sessionId:r,newMode:s},"approval mode changed (untracked session)"),this.reply(e,n,!0,{approvalMode:s});return}let o=i.approvalMode;if(i.approvalMode=s,this.store.upsert(ke(i)),w.info({sessionId:r,agent:i.agent,oldMode:o,newMode:s},"approval mode changed"),i.driver&&(i.driver.setApprovalMode(s),i.agent==="codex"&&i.active&&o!==s))try{i.driver.stop();let a=this.createDriver("codex");await a.start(i.cwd,i.sessionId,s),i.driver=a,this.bindDriverLifecycle(i,"codex"," (mode change)"),w.info({sessionId:r},"codex driver restarted with new approval mode")}catch(a){w.error({sessionId:r,error:String(a)},"failed to restart codex after approval mode change"),i.driver=null,i.active=!1,this.updateGauges()}this.reply(e,n,!0,{approvalMode:s})}interrupt(e,n,r){let s=this.sessions.get(r);if(!s?.driver){this.reply(e,n,!1,void 0,"Session not found or inactive");return}v.emit("session.interrupt",{sessionId:r,agent:s.agent}),s.driver.interrupt(),this.reply(e,n,!0)}stopSession(e,n,r){let s=this.sessions.get(r);if(!s){this.reply(e,n,!1,void 0,"Session not found");return}w.info({sessionId:r,agent:s.agent},"stopping session"),v.emit("session.stop",{sessionId:r,agent:s.agent}),this.resolvePendingClaudeHookApprovals(s),s.driver?.stop(),s.active=!1,s.driver=null,this.updateGauges(),this.touchSession(s.sessionId),this.reply(e,n,!0)}deleteSession(e,n,r){let s=this.sessions.get(r);s&&(w.info({sessionId:r,agent:s.agent},"deleting session"),this.resolvePendingClaudeHookApprovals(s),s.driver?.stop(),this.unregisterClaudeHookSession(s),this.sessions.delete(r)),v.emit("session.delete",{sessionId:r}),this.store.remove(r),this.updateGauges(),$s(),Os(),this.reply(e,n,!0)}async sendHistory(e,n,r,s){let i=this.sessions.get(r);if(!i&&this.isDeletedSession(r)){this.reply(e,n,!1,void 0,"Session not found");return}i&&i.clients.add(e);let o=i?.cwd??this.store.find(r)?.cwd??"",a=await on(r,s,o);w.info({sessionId:r,historyCount:a.length,isResponding:i?.isResponding,approvalMode:i?.approvalMode},"sending history");let l={type:"session.history",sessionId:r,messages:a,isResponding:i?.isResponding||void 0,partialReplyText:this.currentPartialReplyText(i),approvalMode:i?.approvalMode};e.send(JSON.stringify(l)),i&&this.resendPendingApproval(i,e),this.reply(e,n,!0)}async listSessions(e,n,r,s,i,o=50,a){try{let l=await Xn({agent:r,cwd:s,search:i,limit:o,cursor:a,activeSessions:this.activeSessionSnapshots(),sessionRecords:this.store.getAll(),deletedSessionIds:this.getDeletedSessionIds()});this.reply(e,n,!0,l)}catch(l){this.reply(e,n,!1,void 0,String(l))}}createDriver(e){switch(e){case"claude":return new tn;case"codex":return new Yn;default:throw new Error(`Unknown agent: ${e}`)}}broadcast(e,n){let r=this.sessions.get(e);if(!r){w.warn({sessionId:e,msgType:n.type},"broadcast target session not found");return}let s=JSON.stringify(n),i=r.clients.size,o=0,a=0;for(let l of r.clients)l.readyState===1?(l.send(s),o++):a++;if(a>0&&b.increment("broadcast.fail"),n.type!=="text.delta"&&w.debug({sessionId:e,msgType:n.type,sent:o,total:i},"broadcast"),n.type==="text.delta"){r.currentReplyText+=n.content;return}if(n.type==="session.done"){let l=r.title||e,c=this.buildPushBody(r.currentReplyText);r.currentReplyText="",this.pushSender(l,c,{sessionId:e,agent:r.agent});return}n.type==="session.interrupted"&&(r.currentReplyText="")}reply(e,n,r,s,i){if(e.readyState!==1)return;let o={type:"response",id:n,ok:r,data:s,error:i};e.send(JSON.stringify(o))}};function Zs(t,e){if(!e.deviceId){e.respond({type:"response",id:t.id,ok:!1,error:"device_auth_required"});return}t.action==="push.register"?e.registerToken(e.deviceId,t.pushToken):e.unregisterToken(e.deviceId,t.pushToken),e.respond({type:"response",id:t.id,ok:!0})}var Mc=require("child_process");function Og(t,e){return(0,Mc.execFileSync)(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function Bg(t){let e=t.split(`
|
|
98
|
+
`).map(n=>Number(n.trim())).filter(n=>Number.isFinite(n)&&n>0);return[...new Set(e)]}function Nc(t,e=Og){let n;try{n=Bg(e("lsof",["-ti",`tcp:${t}`]))}catch{return[]}return n.map(r=>{try{let s=e("ps",["-p",String(r),"-o","command="]);return s?{pid:r,command:s}:{pid:r}}catch{return{pid:r}}})}var vt=require("fs"),Qs=require("os"),Bc=require("crypto"),Dc=require("path");function Hc(t){return(0,Bc.randomBytes)(t).toString("base64url")}function Dg(){return`d_${Hc(12)}`}function Hg(){return(0,Qs.hostname)()}function Fg(){let t=(0,Qs.hostname)().trim().toLowerCase();return t?t.endsWith(".local")?t:`${t}.local`:"localhost"}function Ug(t){return{daemonId:Dg(),daemonSecret:Hc(32),displayName:Hg(),canonicalHost:Fg(),port:t,createdAt:new Date().toISOString()}}function Oc(t,e){(0,vt.mkdirSync)((0,Dc.dirname)(e),{recursive:!0}),(0,vt.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
99
|
+
`,"utf8")}function Fc(t,e=Il){try{let r=(0,vt.readFileSync)(e,"utf8"),s=JSON.parse(r);if(typeof s.daemonId=="string"&&typeof s.daemonSecret=="string"&&typeof s.displayName=="string"&&typeof s.canonicalHost=="string"&&typeof s.createdAt=="string"){let i={daemonId:s.daemonId,daemonSecret:s.daemonSecret,displayName:s.displayName,canonicalHost:s.canonicalHost,port:typeof s.port=="number"&&Number.isFinite(s.port)?s.port:t,createdAt:s.createdAt};return i.port!==t&&(i.port=t,Oc(i,e)),i}}catch{}let n=Ug(t);return Oc(n,e),n}var wt=require("crypto"),bt=require("fs"),qc=require("path");function ei(t){return(0,wt.randomBytes)(t).toString("base64url")}function ti(t){return(0,wt.createHash)("sha256").update(t).digest("hex")}function Uc(t,e){let n=Buffer.from(t),r=Buffer.from(e);return n.length!==r.length?!1:(0,wt.timingSafeEqual)(n,r)}function qg(t){try{let e=(0,bt.readFileSync)(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n.filter(r=>r&&typeof r.deviceId=="string"&&typeof r.deviceName=="string"&&typeof r.tokenHash=="string"&&typeof r.createdAt=="string"&&typeof r.lastSeenAt=="string"&&(typeof r.revokedAt=="string"||r.revokedAt===null)):[]}catch{return[]}}function an(t,e){(0,bt.mkdirSync)((0,qc.dirname)(t),{recursive:!0}),(0,bt.writeFileSync)(t,JSON.stringify(e,null,2)+`
|
|
100
|
+
`,"utf8")}var ar=class{constructor(e=xl){this.pairingsPath=e;this.records=qg(e)}records;windows=new Map;list(){return this.records.slice()}pairedCount(){return this.records.filter(e=>!e.revokedAt).length}openWindow(e=5*6e4){let n=`pair_${ei(8)}`,r=ei(24),s=new Date(Date.now()+e).toISOString(),i={pairingId:n,pairNonce:r,expiresAt:s};return this.windows.set(r,i),i}consumeWindow(e){let n=this.windows.get(e);return!n||(this.windows.delete(e),new Date(n.expiresAt).getTime()<Date.now())?null:n}issuePairToken(e,n){let r=new Date().toISOString(),s=ei(32),i={deviceId:e,deviceName:n,tokenHash:ti(s),createdAt:r,lastSeenAt:r,revokedAt:null},o=this.records.findIndex(a=>a.deviceId===e);return o>=0?this.records[o]=i:this.records.unshift(i),an(this.pairingsPath,this.records),s}validatePairToken(e,n,r=!0){let s=this.records.find(o=>o.deviceId===e&&!o.revokedAt);if(!s)return!1;let i=ti(n);return Uc(s.tokenHash,i)?(r&&(s.lastSeenAt=new Date().toISOString(),an(this.pairingsPath,this.records)),!0):!1}validateAnyPairToken(e,n=!0){let r=ti(e),s=this.records.find(i=>!i.revokedAt&&Uc(i.tokenHash,r));return s?(n&&(s.lastSeenAt=new Date().toISOString(),an(this.pairingsPath,this.records)),s):null}revoke(e){let n=this.records.find(r=>r.deviceId===e&&!r.revokedAt);return n?(n.revokedAt=new Date().toISOString(),an(this.pairingsPath,this.records),!0):!1}reset(){this.records=[],this.windows.clear(),an(this.pairingsPath,this.records)}};function It(t){return t?t==="127.0.0.1"||t==="::1"||t==="::ffff:127.0.0.1":!1}function Wg(t){return t&&t.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||null}function Wc(t,e){return Wg(t)??e}function ni(t,e){return!!(t&&e&&t===e)}function jc(t,e,n,r=!0){return t?ni(t,e)?!0:!!n(t,r):!1}var $c=require("child_process");function ri(t){let e=t.split(".");return e.length!==4?!1:e.every(n=>/^\d+$/.test(n)&&Number(n)>=0&&Number(n)<=255)}function zc(t){if(!ri(t))return!1;let[e,n]=t.split(".").map(Number);return e===100&&n>=64&&n<=127}function jg(t){if(!ri(t))return!1;let[e,n]=t.split(".").map(Number);return e===169&&n===254}function Gg(t){if(!ri(t))return!1;let[e,n]=t.split(".").map(Number);return e===198&&(n===18||n===19)}function si(t){return!!t&&!jg(t)&&!Gg(t)}function xt(t){if(!t)return;let e=t.trim().replace(/\.$/,"");return e?e.toLowerCase():void 0}function Vc(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function $g(t){let e=[],n=[];for(let r of Object.values(t))if(r)for(let s of r)s.internal||s.family!=="IPv4"||si(s.address)&&(zc(s.address)?e.push(s.address):n.push(s.address));return[...e,...n]}function Gc(t){let e=JSON.parse(t),n=xt(e.Self?.DNSName),r=(e.Self?.TailscaleIPs??[]).map(o=>xt(o)).filter(o=>!!o).filter(o=>zc(o)&&si(o)),s=r[0]??n,i=[...n&&n!==s?[n]:[],...r.filter(o=>o!==s)];return{canonicalHost:s,fallbackHosts:i}}function Yc(t=$c.execFileSync){let e=[process.env.TAILSCALE_SOCKET,"/tmp/tailscale.sock"].filter(Boolean);for(let n of e)try{let r=t("tailscale",["--socket",n,"status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Gc(r)}catch{}try{let n=t("tailscale",["status","--json"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:1500});return Gc(n)}catch{return{fallbackHosts:[]}}}function Jc(t){let e=xt(t.canonicalHost),n=xt(t.configuredCanonicalHost)||xt(t.tailscaleCanonicalHost)||e||"localhost",r=[...e&&e!==n?[e]:[],...t.configuredFallbackHosts??[],...t.tailscaleFallbackHosts??[],...$g(t.interfaces)].map(s=>xt(s)).filter(s=>!!s).filter(s=>si(s)).filter((s,i,o)=>s!==n&&o.indexOf(s)===i);return{canonicalHost:n,fallbackHosts:r}}function Kc(t){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("utf8");if(Array.isArray(t))return Buffer.concat(t).toString("utf8");if(t instanceof ArrayBuffer)return Buffer.from(t).toString("utf8");if(ArrayBuffer.isView(t)){let e=t;return Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8")}return String(t)}var W=L.child({module:"daemon"}),ln=L.child({module:"ws"}),le=new or,F=Fc(_.port),Re=new ar,lr=new Set,Ce=new WeakMap,Xc=!1,tu=Date.now(),Et=null;function Tt(){let t=Yc();return Jc({canonicalHost:F.canonicalHost,configuredCanonicalHost:_.canonicalHost,configuredFallbackHosts:Vc(_.fallbackHosts),tailscaleCanonicalHost:t.canonicalHost,tailscaleFallbackHosts:t.fallbackHosts,interfaces:(0,Qc.networkInterfaces)()})}async function ii(t){let e=[];for await(let r of t)e.push(Buffer.isBuffer(r)?r:Buffer.from(r));let n=Buffer.concat(e).toString("utf8");return n?JSON.parse(n):{}}function D(t,e,n){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(n,null,2))}function nu(){let t=Re.openWindow(),e=Tt(),n=e.canonicalHost,r=F.port,s=e.fallbackHosts.length>0?e.fallbackHosts:void 0;if(_.relayUrl)try{let i=new URL(_.relayUrl);n=i.hostname,r=i.port?Number(i.port):i.protocol==="https:"?443:80,s=[e.canonicalHost,...s??[]].filter(Boolean)}catch{W.warn({relayUrl:_.relayUrl},"invalid VIBELET_RELAY_URL, ignoring")}return{type:"vibelet-pair",daemonId:F.daemonId,displayName:F.displayName,canonicalHost:n,fallbackHosts:s,port:r,pairNonce:t.pairNonce,expiresAt:t.expiresAt}}async function zg(t){let e=await(0,Ge.readdir)(t),n=[];for(let r of e){if(r.startsWith("."))continue;let s=await(0,Ge.stat)((0,cr.join)(t,r)).catch(()=>null);s&&n.push({name:r,isDirectory:s.isDirectory()})}return n.sort((r,s)=>r.isDirectory!==s.isDirectory?r.isDirectory?-1:1:r.name.localeCompare(s.name)),{entries:n}}var cn=(0,Zc.createServer)(async(t,e)=>{let n=new URL(t.url??"/",`http://localhost:${_.port}`);if(n.pathname==="/health"){let s=Tt(),i={status:"ok",version:ft,daemonId:F.daemonId,displayName:F.displayName,canonicalHost:s.canonicalHost,uptimeSeconds:Math.round((Date.now()-tu)/1e3),activeSessions:le.getActiveSessionCount(),pairedDevices:Re.pairedCount(),wsClients:ne.clients.size,drivers:le.getDriverCounts(),metrics:b.snapshot()};_.relayUrl&&(i.relayUrl=_.relayUrl),D(e,200,i);return}if(t.method==="POST"&&n.pathname==="/pair/open"){if(!It(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}D(e,200,nu());return}if(t.method==="POST"&&n.pathname==="/pair/reset"){if(!It(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}Re.reset(),D(e,200,{ok:!0});return}if(t.method==="POST"&&n.pathname==="/shutdown"){if(!It(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}D(e,200,{status:"stopping"}),setTimeout(()=>$e("HTTP /shutdown request"),50);return}if(t.method==="POST"&&n.pathname==="/hook/claude/session-start"){if(!It(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}try{let s=await ii(t),i=t.headers[Qt],o=Array.isArray(i)?i[0]:i;le.handleClaudeSessionStartHook(o,s),D(e,200,{ok:!0})}catch(s){D(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/hook/claude/permission-request"){if(!It(t.socket.remoteAddress)){D(e,403,{error:"forbidden"});return}try{let s=await ii(t),i=t.headers[Qt],o=Array.isArray(i)?i[0]:i,a=await le.handleClaudePermissionHook(o,s);D(e,200,a)}catch(s){D(e,400,{error:String(s)})}return}if(t.method==="POST"&&n.pathname==="/pair/create"){try{let s=await ii(t);if(s.daemonId!==F.daemonId||typeof s.pairNonce!="string"||typeof s.deviceId!="string"||typeof s.deviceName!="string"){D(e,400,{error:"invalid_pair_request"});return}if(!Re.consumeWindow(s.pairNonce)){D(e,401,{error:"pair_window_expired"});return}let o=Re.issuePairToken(s.deviceId,s.deviceName),a=Tt();D(e,200,{daemonId:F.daemonId,displayName:F.displayName,canonicalHost:a.canonicalHost,fallbackHosts:a.fallbackHosts,port:F.port,deviceId:s.deviceId,pairToken:o})}catch(s){D(e,400,{error:String(s)})}return}let r=Wc(t.headers.authorization,n.searchParams.get("token"));if(!jc(r,_.legacyToken,(s,i)=>Re.validateAnyPairToken(s,i),!1)){e.writeHead(401),e.end("Unauthorized");return}if(n.pathname==="/file"){let s=n.searchParams.get("path");if(!s){e.writeHead(400),e.end("Missing path parameter");return}try{let i=tr(s);if(!(await(0,Ge.stat)(i)).isFile()){e.writeHead(404),e.end("Not a file");return}let a=(0,cr.extname)(i).toLowerCase(),c={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".pdf":"application/pdf"}[a]||"application/octet-stream",u=await(0,Ge.readFile)(i);e.writeHead(200,{"Content-Type":c,"Content-Length":u.length}),e.end(u)}catch{e.writeHead(404),e.end("File not found")}return}e.writeHead(200),e.end(`Vibelet Daemon v${ft}`)}),ne=new Lr.default({server:cn});cn.on("connection",t=>{lr.add(t),t.on("close",()=>{lr.delete(t)})});ne.on("connection",(t,e)=>{let r=new URL(e.url??"/",`http://localhost:${_.port}`).searchParams.get("token");if(r&&ni(r,_.legacyToken))Ce.set(t,{authMode:"query_token"}),b.increment("ws.auth.success",{mode:"query_token"}),le.prewarmCaches();else if(r){let s=Re.validateAnyPairToken(r);if(s)Ce.set(t,{authMode:"query_token",deviceId:s.deviceId}),b.increment("ws.auth.success",{mode:"query_token"}),le.prewarmCaches();else{b.increment("ws.auth.failure",{mode:"query_token"}),t.close(4001,"Unauthorized");return}}ln.info({clients:ne.clients.size},"client connected"),b.increment("ws.connect"),b.gauge("ws.clients",ne.clients.size),v.emit("ws.connect",{clients:ne.clients.size,authMode:Ce.get(t)?.authMode??"pending",deviceId:Ce.get(t)?.deviceId}),t.on("message",async s=>{try{let i=JSON.parse(Kc(s));if(!i||typeof i.action!="string"){t.send(JSON.stringify({type:"error",sessionId:"",message:'Invalid message: missing or non-string "action" field'}));return}if(i.action==="ping"){t.send(JSON.stringify({type:"pong"}));return}let o=i;if(!Ce.has(t)){if(o.action==="auth.hello"&&o.daemonId===F.daemonId&&Re.validatePairToken(o.deviceId,o.pairToken)){Ce.set(t,{authMode:"auth_hello",deviceId:o.deviceId}),b.increment("ws.auth.success",{mode:"auth_hello"}),le.prewarmCaches(),t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:{daemonId:F.daemonId,displayName:F.displayName}}));return}if(o.action==="auth.hello"){b.increment("ws.auth.failure",{mode:"auth_hello"}),t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:"auth_failed"})),t.close(4001,"Unauthorized");return}b.increment("ws.auth.failure",{mode:"missing"}),t.send(JSON.stringify({type:"error",sessionId:"",message:"Authentication required"})),t.close(4001,"Unauthorized");return}if(o.action==="log.report"){for(let a of o.entries)v.emitApp(a.event,a.level,a.data??{},a.ts),(a.level==="error"?W.error:a.level==="warn"?W.warn:W.info).call(W,{event:a.event,...a.data},`[app] ${a.event}`);t.send(JSON.stringify({type:"response",id:o.id,ok:!0}));return}if(o.action==="dirs.list"){try{let a=await zg(o.path);t.send(JSON.stringify({type:"response",id:o.id,ok:!0,data:a}))}catch(a){t.send(JSON.stringify({type:"response",id:o.id,ok:!1,error:String(a)}))}return}if(i.action==="push.register"){let a=Ce.get(t);Zs(i,{deviceId:a?.deviceId,registerToken:Js,unregisterToken:Ks,respond:l=>t.send(JSON.stringify(l))});return}if(i.action==="push.unregister"){let a=Ce.get(t);Zs(i,{deviceId:a?.deviceId,registerToken:Js,unregisterToken:Ks,respond:l=>t.send(JSON.stringify(l))});return}await le.handle(t,o)}catch(i){ln.error({error:String(i)},"message handling error"),t.send(JSON.stringify({type:"error",sessionId:"",message:String(i)}))}}),t.on("close",s=>{ln.info({clients:ne.clients.size,code:s},"client disconnected"),b.increment("ws.disconnect"),b.increment("ws.disconnect.code",{code:String(s)}),b.gauge("ws.clients",ne.clients.size),v.emit("ws.disconnect",{clients:ne.clients.size,code:s}),le.removeClient(t)}),t.on("error",s=>{ln.error({error:s.message},"websocket error")})});function oi(){for(let t of lr)try{t.destroy()}catch{}lr.clear()}function ru(){let t=Dl({auditPath:ct,stdoutLogPath:Fn,stderrLogPath:Un,auditMaxBytes:_.auditMaxBytes,logMaxBytes:_.daemonLogMaxBytes});t.trimmedFiles>0&&W.info({trimmedFiles:t.trimmedFiles,reclaimedBytes:t.reclaimedBytes,files:t.files.filter(e=>e.trimmed).map(e=>({path:e.path,beforeBytes:e.beforeBytes,afterBytes:e.afterBytes}))},"trimmed vibelet storage")}function Vg(){Et||(Et=setInterval(ru,_.storageHousekeepingIntervalMs),Et.unref())}function Yg(){Et&&(clearInterval(Et),Et=null)}function $e(t,e=0){if(!Xc){Xc=!0,W.info({reason:t,exitCode:e},"shutting down"),v.emit("daemon.shutdown",{reason:t,exitCode:e,uptimeSeconds:Math.round((Date.now()-tu)/1e3)}),b.stopPeriodicLog(),Yg(),le.shutdown();for(let n of ne.clients)try{n.close(1001,"Server shutting down"),n.terminate()}catch{}ne.close(n=>{n&&W.error({error:String(n)},"websocket close error")}),cn.close(n=>{if(n){W.error({error:String(n)},"http close error"),oi(),process.exit(1);return}oi(),process.exit(e)}),setTimeout(()=>{W.error("force exiting after shutdown timeout"),oi(),process.exit(e||1)},3e3).unref()}}ne.on("error",t=>{ln.error({error:t.message},"wss error")});cn.on("error",t=>{if(t.code==="EADDRINUSE"){let e=Nc(_.port).filter(n=>n.pid!==process.pid);W.error({port:_.port,occupants:e},"port is already in use. Stop the existing process or use VIBE_PORT=<port> to specify another port")}else W.error({error:String(t)},"server error");$e(`httpServer error: ${t.code??t.message}`,1)});process.once("SIGINT",()=>$e("SIGINT"));process.once("SIGTERM",()=>$e("SIGTERM"));process.once("SIGHUP",()=>$e("SIGHUP"));process.once("SIGTTIN",()=>$e("SIGTTIN"));process.once("SIGTSTP",()=>$e("SIGTSTP"));process.on("uncaughtException",t=>{W.error({error:String(t),stack:t.stack},"uncaughtException"),v.emit("daemon.error",{type:"uncaughtException",error:String(t)})});process.on("unhandledRejection",t=>{W.error({reason:String(t)},"unhandledRejection"),v.emit("daemon.error",{type:"unhandledRejection",reason:String(t)})});cn.listen(_.port,async()=>{ru(),v.emit("daemon.start",{port:_.port}),b.startPeriodicLog(),Vg(),W.info({port:_.port,daemonId:F.daemonId,displayName:F.displayName,canonicalHost:Tt().canonicalHost,fallbackHosts:Tt().fallbackHosts,claudePath:_.claudePath,codexPath:_.codexPath,auditMaxBytes:_.auditMaxBytes,daemonLogMaxBytes:_.daemonLogMaxBytes,storageHousekeepingIntervalMs:_.storageHousekeepingIntervalMs,turnStallTimeoutMs:_.turnStallTimeoutMs},"daemon started");let t=Tt(),e=nu();Yt(`
|
|
101
101
|
\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|
|
102
|
-
\u2551 Vibelet Daemon v${
|
|
102
|
+
\u2551 Vibelet Daemon v${ft} \u2551
|
|
103
103
|
\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563
|
|
104
|
-
\u2551 Port: ${String(
|
|
104
|
+
\u2551 Port: ${String(_.port).padEnd(28)}\u2551
|
|
105
105
|
\u2551 ID: ${F.daemonId.slice(0,28).padEnd(28)}\u2551
|
|
106
106
|
\u2551 Host: ${t.canonicalHost.slice(0,28).padEnd(28)}\u2551
|
|
107
107
|
\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
|
|
@@ -110,9 +110,9 @@ Pair with: npx @vibelet/cli or npx vibelet
|
|
|
110
110
|
Host: ${t.canonicalHost}
|
|
111
111
|
Fallbacks: ${t.fallbackHosts.join(", ")||"(none)"}
|
|
112
112
|
|
|
113
|
-
Claude: ${
|
|
114
|
-
Codex: ${
|
|
115
|
-
`);try{let n=await
|
|
113
|
+
Claude: ${_.claudePath}
|
|
114
|
+
Codex: ${_.codexPath}
|
|
115
|
+
`);try{let n=await eu.default.toString(JSON.stringify(e),{type:"terminal",small:!0});Yt(`
|
|
116
116
|
Scan this QR code with Vibelet app:
|
|
117
117
|
|
|
118
118
|
${n}
|