translation-chat-sdk 0.1.0 → 0.1.2

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.
@@ -1,2 +1,2 @@
1
- (function(v,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],l):(v=typeof globalThis<"u"?globalThis:v||self,l(v.TranslationChatSDK={},v.React,v.React))})(this,function(v,l,b){"use strict";const S=Object.create(null);S.open="0",S.close="1",S.ping="2",S.pong="3",S.message="4",S.upgrade="5",S.noop="6";const I=Object.create(null);Object.keys(S).forEach(n=>{I[S[n]]=n});const Y={type:"error",data:"parser error"},ce=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",ae=typeof ArrayBuffer=="function",he=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n&&n.buffer instanceof ArrayBuffer,z=({type:n,data:e},t,s)=>ce&&e instanceof Blob?t?s(e):ue(e,s):ae&&(e instanceof ArrayBuffer||he(e))?t?s(e):ue(new Blob([e]),s):s(S[n]+(e||"")),ue=(n,e)=>{const t=new FileReader;return t.onload=function(){const s=t.result.split(",")[1];e("b"+(s||""))},t.readAsDataURL(n)};function le(n){return n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}let J;function xe(n,e){if(ce&&n.data instanceof Blob)return n.data.arrayBuffer().then(le).then(e);if(ae&&(n.data instanceof ArrayBuffer||he(n.data)))return e(le(n.data));z(n,!1,t=>{J||(J=new TextEncoder),e(J.encode(t))})}const fe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",L=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let n=0;n<fe.length;n++)L[fe.charCodeAt(n)]=n;const Ne=n=>{let e=n.length*.75,t=n.length,s,i=0,r,o,h,f;n[n.length-1]==="="&&(e--,n[n.length-2]==="="&&e--);const c=new ArrayBuffer(e),d=new Uint8Array(c);for(s=0;s<t;s+=4)r=L[n.charCodeAt(s)],o=L[n.charCodeAt(s+1)],h=L[n.charCodeAt(s+2)],f=L[n.charCodeAt(s+3)],d[i++]=r<<2|o>>4,d[i++]=(o&15)<<4|h>>2,d[i++]=(h&3)<<6|f&63;return c},Oe=typeof ArrayBuffer=="function",Q=(n,e)=>{if(typeof n!="string")return{type:"message",data:de(n,e)};const t=n.charAt(0);return t==="b"?{type:"message",data:Re(n.substring(1),e)}:I[t]?n.length>1?{type:I[t],data:n.substring(1)}:{type:I[t]}:Y},Re=(n,e)=>{if(Oe){const t=Ne(n);return de(t,e)}else return{base64:!0,data:n}},de=(n,e)=>{switch(e){case"blob":return n instanceof Blob?n:new Blob([n]);case"arraybuffer":default:return n instanceof ArrayBuffer?n:n.buffer}},pe="",Be=(n,e)=>{const t=n.length,s=new Array(t);let i=0;n.forEach((r,o)=>{z(r,!1,h=>{s[o]=h,++i===t&&e(s.join(pe))})})},Pe=(n,e)=>{const t=n.split(pe),s=[];for(let i=0;i<t.length;i++){const r=Q(t[i],e);if(s.push(r),r.type==="error")break}return s};function Le(){return new TransformStream({transform(n,e){xe(n,t=>{const s=t.length;let i;if(s<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,s);else if(s<65536){i=new Uint8Array(3);const r=new DataView(i.buffer);r.setUint8(0,126),r.setUint16(1,s)}else{i=new Uint8Array(9);const r=new DataView(i.buffer);r.setUint8(0,127),r.setBigUint64(1,BigInt(s))}n.data&&typeof n.data!="string"&&(i[0]|=128),e.enqueue(i),e.enqueue(t)})}})}let X;function U(n){return n.reduce((e,t)=>e+t.length,0)}function M(n,e){if(n[0].length===e)return n.shift();const t=new Uint8Array(e);let s=0;for(let i=0;i<e;i++)t[i]=n[0][s++],s===n[0].length&&(n.shift(),s=0);return n.length&&s<n[0].length&&(n[0]=n[0].slice(s)),t}function De(n,e){X||(X=new TextDecoder);const t=[];let s=0,i=-1,r=!1;return new TransformStream({transform(o,h){for(t.push(o);;){if(s===0){if(U(t)<1)break;const f=M(t,1);r=(f[0]&128)===128,i=f[0]&127,i<126?s=3:i===126?s=1:s=2}else if(s===1){if(U(t)<2)break;const f=M(t,2);i=new DataView(f.buffer,f.byteOffset,f.length).getUint16(0),s=3}else if(s===2){if(U(t)<8)break;const f=M(t,8),c=new DataView(f.buffer,f.byteOffset,f.length),d=c.getUint32(0);if(d>Math.pow(2,21)-1){h.enqueue(Y);break}i=d*Math.pow(2,32)+c.getUint32(4),s=3}else{if(U(t)<i)break;const f=M(t,i);h.enqueue(Q(r?f:X.decode(f),e)),s=0}if(i===0||i>n){h.enqueue(Y);break}}}})}const ge=4;function m(n){if(n)return qe(n)}function qe(n){for(var e in m.prototype)n[e]=m.prototype[e];return n}m.prototype.on=m.prototype.addEventListener=function(n,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+n]=this._callbacks["$"+n]||[]).push(e),this},m.prototype.once=function(n,e){function t(){this.off(n,t),e.apply(this,arguments)}return t.fn=e,this.on(n,t),this},m.prototype.off=m.prototype.removeListener=m.prototype.removeAllListeners=m.prototype.removeEventListener=function(n,e){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var t=this._callbacks["$"+n];if(!t)return this;if(arguments.length==1)return delete this._callbacks["$"+n],this;for(var s,i=0;i<t.length;i++)if(s=t[i],s===e||s.fn===e){t.splice(i,1);break}return t.length===0&&delete this._callbacks["$"+n],this},m.prototype.emit=function(n){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),t=this._callbacks["$"+n],s=1;s<arguments.length;s++)e[s-1]=arguments[s];if(t){t=t.slice(0);for(var s=0,i=t.length;s<i;++s)t[s].apply(this,e)}return this},m.prototype.emitReserved=m.prototype.emit,m.prototype.listeners=function(n){return this._callbacks=this._callbacks||{},this._callbacks["$"+n]||[]},m.prototype.hasListeners=function(n){return!!this.listeners(n).length};const F=typeof Promise=="function"&&typeof Promise.resolve=="function"?e=>Promise.resolve().then(e):(e,t)=>t(e,0),E=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),Ie="arraybuffer";function qt(){}function me(n,...e){return e.reduce((t,s)=>(n.hasOwnProperty(s)&&(t[s]=n[s]),t),{})}const Ue=E.setTimeout,Me=E.clearTimeout;function V(n,e){e.useNativeTimers?(n.setTimeoutFn=Ue.bind(E),n.clearTimeoutFn=Me.bind(E)):(n.setTimeoutFn=E.setTimeout.bind(E),n.clearTimeoutFn=E.clearTimeout.bind(E))}const Fe=1.33;function Ve(n){return typeof n=="string"?He(n):Math.ceil((n.byteLength||n.size)*Fe)}function He(n){let e=0,t=0;for(let s=0,i=n.length;s<i;s++)e=n.charCodeAt(s),e<128?t+=1:e<2048?t+=2:e<55296||e>=57344?t+=3:(s++,t+=4);return t}function ye(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function Ke(n){let e="";for(let t in n)n.hasOwnProperty(t)&&(e.length&&(e+="&"),e+=encodeURIComponent(t)+"="+encodeURIComponent(n[t]));return e}function $e(n){let e={},t=n.split("&");for(let s=0,i=t.length;s<i;s++){let r=t[s].split("=");e[decodeURIComponent(r[0])]=decodeURIComponent(r[1])}return e}class We extends Error{constructor(e,t,s){super(e),this.description=t,this.context=s,this.type="TransportError"}}class j extends m{constructor(e){super(),this.writable=!1,V(this,e),this.opts=e,this.query=e.query,this.socket=e.socket,this.supportsBinary=!e.forceBase64}onError(e,t,s){return super.emitReserved("error",new We(e,t,s)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return(this.readyState==="opening"||this.readyState==="open")&&(this.doClose(),this.onClose()),this}send(e){this.readyState==="open"&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){const t=Q(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){const e=this.opts.hostname;return e.indexOf(":")===-1?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(e){const t=Ke(e);return t.length?"?"+t:""}}class Ye extends j{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(e){this.readyState="pausing";const t=()=>{this.readyState="paused",e()};if(this._polling||!this.writable){let s=0;this._polling&&(s++,this.once("pollComplete",function(){--s||t()})),this.writable||(s++,this.once("drain",function(){--s||t()}))}else t()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){const t=s=>{if(this.readyState==="opening"&&s.type==="open"&&this.onOpen(),s.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(s)};Pe(e,this.socket.binaryType).forEach(t),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const e=()=>{this.write([{type:"close"}])};this.readyState==="open"?e():this.once("open",e)}write(e){this.writable=!1,Be(e,t=>{this.doWrite(t,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return this.opts.timestampRequests!==!1&&(t[this.opts.timestampParam]=ye()),!this.supportsBinary&&!t.sid&&(t.b64=1),this.createUri(e,t)}}let _e=!1;try{_e=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const ze=_e;function Je(){}class Qe extends Ye{constructor(e){if(super(e),typeof location<"u"){const t=location.protocol==="https:";let s=location.port;s||(s=t?"443":"80"),this.xd=typeof location<"u"&&e.hostname!==location.hostname||s!==e.port}}doWrite(e,t){const s=this.request({method:"POST",data:e});s.on("success",t),s.on("error",(i,r)=>{this.onError("xhr post error",i,r)})}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(t,s)=>{this.onError("xhr poll error",t,s)}),this.pollXhr=e}}class C extends m{constructor(e,t,s){super(),this.createRequest=e,V(this,s),this._opts=s,this._method=s.method||"GET",this._uri=t,this._data=s.data!==void 0?s.data:null,this._create()}_create(){var e;const t=me(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this._opts.xd;const s=this._xhr=this.createRequest(t);try{s.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){s.setDisableHeaderCheck&&s.setDisableHeaderCheck(!0);for(let i in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(i)&&s.setRequestHeader(i,this._opts.extraHeaders[i])}}catch{}if(this._method==="POST")try{s.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{s.setRequestHeader("Accept","*/*")}catch{}(e=this._opts.cookieJar)===null||e===void 0||e.addCookies(s),"withCredentials"in s&&(s.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(s.timeout=this._opts.requestTimeout),s.onreadystatechange=()=>{var i;s.readyState===3&&((i=this._opts.cookieJar)===null||i===void 0||i.parseCookies(s.getResponseHeader("set-cookie"))),s.readyState===4&&(s.status===200||s.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof s.status=="number"?s.status:0)},0))},s.send(this._data)}catch(i){this.setTimeoutFn(()=>{this._onError(i)},0);return}typeof document<"u"&&(this._index=C.requestsCount++,C.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(e){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=Je,e)try{this._xhr.abort()}catch{}typeof document<"u"&&delete C.requests[this._index],this._xhr=null}}_onLoad(){const e=this._xhr.responseText;e!==null&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}}if(C.requestsCount=0,C.requests={},typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",we);else if(typeof addEventListener=="function"){const n="onpagehide"in E?"pagehide":"unload";addEventListener(n,we,!1)}}function we(){for(let n in C.requests)C.requests.hasOwnProperty(n)&&C.requests[n].abort()}const Xe=function(){const n=be({xdomain:!1});return n&&n.responseType!==null}();class je extends Qe{constructor(e){super(e);const t=e&&e.forceBase64;this.supportsBinary=Xe&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new C(be,this.uri(),e)}}function be(n){const e=n.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!e||ze))return new XMLHttpRequest}catch{}if(!e)try{return new E[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const ke=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Ge extends j{get name(){return"websocket"}doOpen(){const e=this.uri(),t=this.opts.protocols,s=ke?{}:me(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(s.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,t,s)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const s=e[t],i=t===e.length-1;z(s,this.supportsBinary,r=>{try{this.doWrite(s,r)}catch{}i&&F(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=ye()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}}const G=E.WebSocket||E.MozWebSocket;class Ze extends Ge{createSocket(e,t,s){return ke?new G(e,t,s):t?new G(e,t):new G(e)}doWrite(e,t){this.ws.send(t)}}class et extends j{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved("error",e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{const t=De(Number.MAX_SAFE_INTEGER,this.socket.binaryType),s=e.readable.pipeThrough(t).getReader(),i=Le();i.readable.pipeTo(e.writable),this._writer=i.writable.getWriter();const r=()=>{s.read().then(({done:h,value:f})=>{h||(this.onPacket(f),r())}).catch(h=>{})};r();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const s=e[t],i=t===e.length-1;this._writer.write(s).then(()=>{i&&F(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)===null||e===void 0||e.close()}}const tt={websocket:Ze,webtransport:et,polling:je},st=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,nt=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Z(n){if(n.length>8e3)throw"URI too long";const e=n,t=n.indexOf("["),s=n.indexOf("]");t!=-1&&s!=-1&&(n=n.substring(0,t)+n.substring(t,s).replace(/:/g,";")+n.substring(s,n.length));let i=st.exec(n||""),r={},o=14;for(;o--;)r[nt[o]]=i[o]||"";return t!=-1&&s!=-1&&(r.source=e,r.host=r.host.substring(1,r.host.length-1).replace(/;/g,":"),r.authority=r.authority.replace("[","").replace("]","").replace(/;/g,":"),r.ipv6uri=!0),r.pathNames=it(r,r.path),r.queryKey=rt(r,r.query),r}function it(n,e){const t=/\/{2,9}/g,s=e.replace(t,"/").split("/");return(e.slice(0,1)=="/"||e.length===0)&&s.splice(0,1),e.slice(-1)=="/"&&s.splice(s.length-1,1),s}function rt(n,e){const t={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(s,i,r){i&&(t[i]=r)}),t}const ee=typeof addEventListener=="function"&&typeof removeEventListener=="function",H=[];ee&&addEventListener("offline",()=>{H.forEach(n=>n())},!1);class O extends m{constructor(e,t){if(super(),this.binaryType=Ie,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e=="object"&&(t=e,e=null),e){const s=Z(e);t.hostname=s.host,t.secure=s.protocol==="https"||s.protocol==="wss",t.port=s.port,s.query&&(t.query=s.query)}else t.host&&(t.hostname=Z(t.host).host);V(this,t),this.secure=t.secure!=null?t.secure:typeof location<"u"&&location.protocol==="https:",t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=t.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},t.transports.forEach(s=>{const i=s.prototype.name;this.transports.push(i),this._transportsByName[i]=s}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=$e(this.opts.query)),ee&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},H.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){const t=Object.assign({},this.opts.query);t.EIO=ge,t.transport=e,this.id&&(t.sid=this.id);const s=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](s)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const e=this.opts.rememberUpgrade&&O.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const t=this.createTransport(e);t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",t=>this._onClose("transport close",t))}onOpen(){this.readyState="open",O.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const t=new Error("server error");t.code=e.data,this._onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data);break}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let t=1;for(let s=0;s<this.writeBuffer.length;s++){const i=this.writeBuffer[s].data;if(i&&(t+=Ve(i)),s>0&&t>this._maxPayload)return this.writeBuffer.slice(0,s);t+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,F(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,t,s){return this._sendPacket("message",e,t,s),this}send(e,t,s){return this._sendPacket("message",e,t,s),this}_sendPacket(e,t,s,i){if(typeof t=="function"&&(i=t,t=void 0),typeof s=="function"&&(i=s,s=null),this.readyState==="closing"||this.readyState==="closed")return;s=s||{},s.compress=s.compress!==!1;const r={type:e,data:t,options:s};this.emitReserved("packetCreate",r),this.writeBuffer.push(r),i&&this.once("flush",i),this.flush()}close(){const e=()=>{this._onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},s=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?s():e()}):this.upgrading?s():e()),this}_onError(e){if(O.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),ee&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const s=H.indexOf(this._offlineEventListener);s!==-1&&H.splice(s,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this._prevBufferLen=0}}}O.protocol=ge;class ot extends O{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let e=0;e<this._upgrades.length;e++)this._probe(this._upgrades[e])}_probe(e){let t=this.createTransport(e),s=!1;O.priorWebsocketSuccess=!1;const i=()=>{s||(t.send([{type:"ping",data:"probe"}]),t.once("packet",p=>{if(!s)if(p.type==="pong"&&p.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;O.priorWebsocketSuccess=t.name==="websocket",this.transport.pause(()=>{s||this.readyState!=="closed"&&(d(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())})}else{const _=new Error("probe error");_.transport=t.name,this.emitReserved("upgradeError",_)}}))};function r(){s||(s=!0,d(),t.close(),t=null)}const o=p=>{const _=new Error("probe error: "+p);_.transport=t.name,r(),this.emitReserved("upgradeError",_)};function h(){o("transport closed")}function f(){o("socket closed")}function c(p){t&&p.name!==t.name&&r()}const d=()=>{t.removeListener("open",i),t.removeListener("error",o),t.removeListener("close",h),this.off("close",f),this.off("upgrading",c)};t.once("open",i),t.once("error",o),t.once("close",h),this.once("close",f),this.once("upgrading",c),this._upgrades.indexOf("webtransport")!==-1&&e!=="webtransport"?this.setTimeoutFn(()=>{s||t.open()},200):t.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){const t=[];for(let s=0;s<e.length;s++)~this.transports.indexOf(e[s])&&t.push(e[s]);return t}}let ct=class extends ot{constructor(e,t={}){const s=typeof e=="object"?e:t;(!s.transports||s.transports&&typeof s.transports[0]=="string")&&(s.transports=(s.transports||["polling","websocket","webtransport"]).map(i=>tt[i]).filter(i=>!!i)),super(e,s)}};function at(n,e="",t){let s=n;t=t||typeof location<"u"&&location,n==null&&(n=t.protocol+"//"+t.host),typeof n=="string"&&(n.charAt(0)==="/"&&(n.charAt(1)==="/"?n=t.protocol+n:n=t.host+n),/^(https?|wss?):\/\//.test(n)||(typeof t<"u"?n=t.protocol+"//"+n:n="https://"+n),s=Z(n)),s.port||(/^(http|ws)$/.test(s.protocol)?s.port="80":/^(http|ws)s$/.test(s.protocol)&&(s.port="443")),s.path=s.path||"/";const r=s.host.indexOf(":")!==-1?"["+s.host+"]":s.host;return s.id=s.protocol+"://"+r+":"+s.port+e,s.href=s.protocol+"://"+r+(t&&t.port===s.port?"":":"+s.port),s}const ht=typeof ArrayBuffer=="function",ut=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n.buffer instanceof ArrayBuffer,Ee=Object.prototype.toString,lt=typeof Blob=="function"||typeof Blob<"u"&&Ee.call(Blob)==="[object BlobConstructor]",ft=typeof File=="function"||typeof File<"u"&&Ee.call(File)==="[object FileConstructor]";function te(n){return ht&&(n instanceof ArrayBuffer||ut(n))||lt&&n instanceof Blob||ft&&n instanceof File}function K(n,e){if(!n||typeof n!="object")return!1;if(Array.isArray(n)){for(let t=0,s=n.length;t<s;t++)if(K(n[t]))return!0;return!1}if(te(n))return!0;if(n.toJSON&&typeof n.toJSON=="function"&&arguments.length===1)return K(n.toJSON(),!0);for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&K(n[t]))return!0;return!1}function dt(n){const e=[],t=n.data,s=n;return s.data=se(t,e),s.attachments=e.length,{packet:s,buffers:e}}function se(n,e){if(!n)return n;if(te(n)){const t={_placeholder:!0,num:e.length};return e.push(n),t}else if(Array.isArray(n)){const t=new Array(n.length);for(let s=0;s<n.length;s++)t[s]=se(n[s],e);return t}else if(typeof n=="object"&&!(n instanceof Date)){const t={};for(const s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=se(n[s],e));return t}return n}function pt(n,e){return n.data=ne(n.data,e),delete n.attachments,n}function ne(n,e){if(!n)return n;if(n&&n._placeholder===!0){if(typeof n.num=="number"&&n.num>=0&&n.num<e.length)return e[n.num];throw new Error("illegal attachments")}else if(Array.isArray(n))for(let t=0;t<n.length;t++)n[t]=ne(n[t],e);else if(typeof n=="object")for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=ne(n[t],e));return n}const Te=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"],gt=5;var u;(function(n){n[n.CONNECT=0]="CONNECT",n[n.DISCONNECT=1]="DISCONNECT",n[n.EVENT=2]="EVENT",n[n.ACK=3]="ACK",n[n.CONNECT_ERROR=4]="CONNECT_ERROR",n[n.BINARY_EVENT=5]="BINARY_EVENT",n[n.BINARY_ACK=6]="BINARY_ACK"})(u||(u={}));class mt{constructor(e){this.replacer=e}encode(e){return(e.type===u.EVENT||e.type===u.ACK)&&K(e)?this.encodeAsBinary({type:e.type===u.EVENT?u.BINARY_EVENT:u.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id}):[this.encodeAsString(e)]}encodeAsString(e){let t=""+e.type;return(e.type===u.BINARY_EVENT||e.type===u.BINARY_ACK)&&(t+=e.attachments+"-"),e.nsp&&e.nsp!=="/"&&(t+=e.nsp+","),e.id!=null&&(t+=e.id),e.data!=null&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){const t=dt(e),s=this.encodeAsString(t.packet),i=t.buffers;return i.unshift(s),i}}class ie extends m{constructor(e){super(),this.reviver=e}add(e){let t;if(typeof e=="string"){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const s=t.type===u.BINARY_EVENT;s||t.type===u.BINARY_ACK?(t.type=s?u.EVENT:u.ACK,this.reconstructor=new yt(t),t.attachments===0&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else if(te(e)||e.base64)if(this.reconstructor)t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t));else throw new Error("got binary data when not reconstructing a packet");else throw new Error("Unknown type: "+e)}decodeString(e){let t=0;const s={type:Number(e.charAt(0))};if(u[s.type]===void 0)throw new Error("unknown packet type "+s.type);if(s.type===u.BINARY_EVENT||s.type===u.BINARY_ACK){const r=t+1;for(;e.charAt(++t)!=="-"&&t!=e.length;);const o=e.substring(r,t);if(o!=Number(o)||e.charAt(t)!=="-")throw new Error("Illegal attachments");s.attachments=Number(o)}if(e.charAt(t+1)==="/"){const r=t+1;for(;++t&&!(e.charAt(t)===","||t===e.length););s.nsp=e.substring(r,t)}else s.nsp="/";const i=e.charAt(t+1);if(i!==""&&Number(i)==i){const r=t+1;for(;++t;){const o=e.charAt(t);if(o==null||Number(o)!=o){--t;break}if(t===e.length)break}s.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(ie.isPayloadValid(s.type,r))s.data=r;else throw new Error("invalid payload")}return s}tryParse(e){try{return JSON.parse(e,this.reviver)}catch{return!1}}static isPayloadValid(e,t){switch(e){case u.CONNECT:return $(t);case u.DISCONNECT:return t===void 0;case u.CONNECT_ERROR:return typeof t=="string"||$(t);case u.EVENT:case u.BINARY_EVENT:return Array.isArray(t)&&(typeof t[0]=="number"||typeof t[0]=="string"&&Te.indexOf(t[0])===-1);case u.ACK:case u.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class yt{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const t=pt(this.reconPack,this.buffers);return this.finishedReconstruction(),t}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}function _t(n){return typeof n=="string"}const wt=Number.isInteger||function(n){return typeof n=="number"&&isFinite(n)&&Math.floor(n)===n};function bt(n){return n===void 0||wt(n)}function $(n){return Object.prototype.toString.call(n)==="[object Object]"}function kt(n,e){switch(n){case u.CONNECT:return e===void 0||$(e);case u.DISCONNECT:return e===void 0;case u.EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&Te.indexOf(e[0])===-1);case u.ACK:return Array.isArray(e);case u.CONNECT_ERROR:return typeof e=="string"||$(e);default:return!1}}function Et(n){return _t(n.nsp)&&bt(n.id)&&kt(n.type,n.data)}const Tt=Object.freeze(Object.defineProperty({__proto__:null,Decoder:ie,Encoder:mt,get PacketType(){return u},isPacketValid:Et,protocol:gt},Symbol.toStringTag,{value:"Module"}));function T(n,e,t){return n.on(e,t),function(){n.off(e,t)}}const vt=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class ve extends m{constructor(e,t,s){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,s&&s.auth&&(this.auth=s.auth),this._opts=Object.assign({},s),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[T(e,"open",this.onopen.bind(this)),T(e,"packet",this.onpacket.bind(this)),T(e,"error",this.onerror.bind(this)),T(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState==="open"&&this.onopen(),this)}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){var s,i,r;if(vt.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const o={type:u.EVENT,data:t};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof t[t.length-1]=="function"){const d=this.ids++,p=t.pop();this._registerAckCallback(d,p),o.id=d}const h=(i=(s=this.io.engine)===null||s===void 0?void 0:s.transport)===null||i===void 0?void 0:i.writable,f=this.connected&&!(!((r=this.io.engine)===null||r===void 0)&&r._hasPingExpired());return this.flags.volatile&&!h||(f?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(e,t){var s;const i=(s=this.flags.timeout)!==null&&s!==void 0?s:this._opts.ackTimeout;if(i===void 0){this.acks[e]=t;return}const r=this.io.setTimeoutFn(()=>{delete this.acks[e];for(let h=0;h<this.sendBuffer.length;h++)this.sendBuffer[h].id===e&&this.sendBuffer.splice(h,1);t.call(this,new Error("operation has timed out"))},i),o=(...h)=>{this.io.clearTimeoutFn(r),t.apply(this,h)};o.withError=!0,this.acks[e]=o}emitWithAck(e,...t){return new Promise((s,i)=>{const r=(o,h)=>o?i(o):s(h);r.withError=!0,t.push(r),this.emit(e,...t)})}_addToQueue(e){let t;typeof e[e.length-1]=="function"&&(t=e.pop());const s={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((i,...r)=>(this._queue[0],i!==null?s.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(i)):(this._queue.shift(),t&&t(null,...r)),s.pending=!1,this._drainQueue())),this._queue.push(s),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;const t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth=="function"?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:u.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(s=>String(s.id)===e)){const s=this.acks[e];delete this.acks[e],s.withError&&s.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case u.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case u.EVENT:case u.BINARY_EVENT:this.onevent(e);break;case u.ACK:case u.BINARY_ACK:this.onack(e);break;case u.DISCONNECT:this.ondisconnect();break;case u.CONNECT_ERROR:this.destroy();const s=new Error(e.data.message);s.data=e.data.data,this.emitReserved("connect_error",s);break}}onevent(e){const t=e.data||[];e.id!=null&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const s of t)s.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]=="string"&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let s=!1;return function(...i){s||(s=!0,t.packet({type:u.ACK,id:e,data:i}))}}onack(e){const t=this.acks[e.id];typeof t=="function"&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:u.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let s=0;s<t.length;s++)if(e===t[s])return t.splice(s,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){const t=this._anyOutgoingListeners;for(let s=0;s<t.length;s++)if(e===t[s])return t.splice(s,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const t=this._anyOutgoingListeners.slice();for(const s of t)s.apply(this,e.data)}}}function P(n){n=n||{},this.ms=n.min||100,this.max=n.max||1e4,this.factor=n.factor||2,this.jitter=n.jitter>0&&n.jitter<=1?n.jitter:0,this.attempts=0}P.prototype.duration=function(){var n=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),t=Math.floor(e*this.jitter*n);n=Math.floor(e*10)&1?n+t:n-t}return Math.min(n,this.max)|0},P.prototype.reset=function(){this.attempts=0},P.prototype.setMin=function(n){this.ms=n},P.prototype.setMax=function(n){this.max=n},P.prototype.setJitter=function(n){this.jitter=n};class re extends m{constructor(e,t){var s;super(),this.nsps={},this.subs=[],e&&typeof e=="object"&&(t=e,e=void 0),t=t||{},t.path=t.path||"/socket.io",this.opts=t,V(this,t),this.reconnection(t.reconnection!==!1),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor((s=t.randomizationFactor)!==null&&s!==void 0?s:.5),this.backoff=new P({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(t.timeout==null?2e4:t.timeout),this._readyState="closed",this.uri=e;const i=t.parser||Tt;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=t.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(t=this.backoff)===null||t===void 0||t.setMin(e),this)}randomizationFactor(e){var t;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(t=this.backoff)===null||t===void 0||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(t=this.backoff)===null||t===void 0||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new ct(this.uri,this.opts);const t=this.engine,s=this;this._readyState="opening",this.skipReconnect=!1;const i=T(t,"open",function(){s.onopen(),e&&e()}),r=h=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",h),e?e(h):this.maybeReconnectOnOpen()},o=T(t,"error",r);if(this._timeout!==!1){const h=this._timeout,f=this.setTimeoutFn(()=>{i(),r(new Error("timeout")),t.close()},h);this.opts.autoUnref&&f.unref(),this.subs.push(()=>{this.clearTimeoutFn(f)})}return this.subs.push(i),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(T(e,"ping",this.onping.bind(this)),T(e,"data",this.ondata.bind(this)),T(e,"error",this.onerror.bind(this)),T(e,"close",this.onclose.bind(this)),T(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(t){this.onclose("parse error",t)}}ondecoded(e){F(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let s=this.nsps[e];return s?this._autoConnect&&!s.active&&s.connect():(s=new ve(this,e,t),this.nsps[e]=s),s}_destroy(e){const t=Object.keys(this.nsps);for(const s of t)if(this.nsps[s].active)return;this._close()}_packet(e){const t=this.encoder.encode(e);for(let s=0;s<t.length;s++)this.engine.write(t[s],e.options)}cleanup(){this.subs.forEach(e=>e()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,t){var s;this.cleanup(),(s=this.engine)===null||s===void 0||s.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const s=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),!e.skipReconnect&&e.open(i=>{i?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",i)):e.onreconnect()}))},t);this.opts.autoUnref&&s.unref(),this.subs.push(()=>{this.clearTimeoutFn(s)})}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const D={};function W(n,e){typeof n=="object"&&(e=n,n=void 0),e=e||{};const t=at(n,e.path||"/socket.io"),s=t.source,i=t.id,r=t.path,o=D[i]&&r in D[i].nsps,h=e.forceNew||e["force new connection"]||e.multiplex===!1||o;let f;return h?f=new re(s,e):(D[i]||(D[i]=new re(s,e)),f=D[i]),t.query&&!e.query&&(e.query=t.queryKey),f.socket(t.path,e)}Object.assign(W,{Manager:re,Socket:ve,io:W,connect:W});function A(){return`${Date.now().toString(36)}-${Math.random().toString(16).slice(2,8)}`}class St{constructor(e){this.socket=null,this.reconnectAttempts=0,this.listeners=new Map,this.lastContext=null,this.config={reconnectAttempts:5,reconnectDelayMs:1500,logger:console,...e}}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{var s;return(s=this.listeners.get(e))==null?void 0:s.delete(t)}}emit(e,t){var s;(s=this.listeners.get(e))==null||s.forEach(i=>{var r,o;try{i(t)}catch(h){(o=(r=this.config.logger)==null?void 0:r.error)==null||o.call(r,`chat-sdk listener error for ${e}`,h)}})}setConnection(e){var t,s;this.emit("connection",e),(s=(t=this.config).onConnectionChange)==null||s.call(t,e)}async getToken(){var t,s;const{tokenProvider:e}=this.config;if(!e)return null;try{return(typeof e=="function"?await e():e)||null}catch(i){return(s=(t=this.config.logger)==null?void 0:t.warn)==null||s.call(t,"chat-sdk token provider failed",i),null}}async connect(){var r;if((r=this.socket)!=null&&r.connected)return;const e=new URL(this.config.websocketUrl),t=e.pathname==="/"?"/socket.io":e.pathname,s=e.origin,i=await this.getToken();return this.socket=W(s,{path:t,transports:["websocket","polling"],autoConnect:!1,reconnection:!1,auth:i?{token:i}:void 0}),this.registerSocketEvents(),this.setConnection({connected:!1,connecting:!0}),new Promise((o,h)=>{const f=setTimeout(()=>{h(new Error("connection timeout"))},1e4);this.socket.once("connect",()=>{clearTimeout(f),this.reconnectAttempts=0,this.setConnection({connected:!0,connecting:!1}),o()}),this.socket.once("connect_error",c=>{clearTimeout(f),this.setConnection({connected:!1,connecting:!1,error:c.message}),this.handleReconnect(),h(c)}),this.socket.connect()})}disconnect(){var e;(e=this.socket)==null||e.disconnect(),this.socket=null,this.setConnection({connected:!1,connecting:!1})}async submitInstruction(e,t){var r,o;if(!((r=this.socket)!=null&&r.connected))throw new Error("Not connected");this.lastContext=t;const s=await this.getToken(),i={trans_doc_id:t.trans_doc_id,page_num:t.page_num,instruction:e,modification_level:"page",access_token:s||void 0,region_coordinates:t.highlighted_region?{start_offset:t.highlighted_region.start_offset,end_offset:t.highlighted_region.end_offset}:void 0,region_text:(o=t.highlighted_region)==null?void 0:o.text,selection_id:t.selection_id};this.socket.emit("INSTR_SUBMIT",i)}async requestChatHistory(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.lastContext=e,this.socket.emit("CHAT_HISTORY_REQUEST",{trans_doc_id:e.trans_doc_id,access_token:t||void 0})}async sendPatchDecision(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("PATCH_DECISION",{...e,access_token:t||void 0})}async requestPageTranslation(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("PAGE_TRANSLATION_REQUEST",{...e,access_token:t||void 0})}async requestBulkTranslation(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("BULK_TRANSLATION_REQUEST",{...e,access_token:t||void 0})}async cancelBulkTranslation(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("CANCEL_BULK_TRANSLATION_REQUEST",{trans_doc_id:e,access_token:t||void 0})}registerSocketEvents(){this.socket&&(this.socket.on("disconnect",()=>{this.setConnection({connected:!1,connecting:!1}),this.handleReconnect()}),this.socket.on("connect_error",e=>{this.setConnection({connected:!1,connecting:!1,error:e.message}),this.handleReconnect()}),this.socket.on("CHAT_RESPONSE",e=>{this.emit("chat-response",e)}),this.socket.on("PATCH_OFFER",e=>{this.emit("patch-offer",e)}),this.socket.on("CHAT_HISTORY_RESPONSE",e=>{this.emit("chat-history-response",e)}),this.socket.on("INSTRUCTION_ERROR",e=>{this.emit("instruction-error",e)}),this.socket.on("PAGE_TRANSLATION_RESPONSE",e=>{var t,s;this.emit("page-translation-response",e),(s=(t=this.config).onPageTranslationResponse)==null||s.call(t,e)}),this.socket.on("BULK_TRANSLATION_RESPONSE",e=>{var t,s;this.emit("bulk-translation-response",e),(s=(t=this.config).onBulkTranslationResponse)==null||s.call(t,e)}),this.socket.on("connected",()=>{this.lastContext&&this.requestChatHistory(this.lastContext).catch(e=>{var t,s;return(s=(t=this.config.logger)==null?void 0:t.warn)==null?void 0:s.call(t,"chat-sdk history on reconnect failed",e)})}))}handleReconnect(){var e,t;if(this.reconnectAttempts>=(this.config.reconnectAttempts??5)){(t=(e=this.config.logger)==null?void 0:e.warn)==null||t.call(e,"chat-sdk max reconnection attempts reached");return}this.reconnectAttempts+=1,setTimeout(()=>{this.connect().catch(s=>{var i,r;return(r=(i=this.config.logger)==null?void 0:i.error)==null?void 0:r.call(i,"chat-sdk reconnect failed",s)})},this.config.reconnectDelayMs)}}function Ct(n){return n.map(e=>{const t={id:A(),instructionId:e.instruction_id,pageNum:e.page_num,timestamp:new Date(e.timestamp)},s={...t,type:"user",content:e.instruction,contextText:e.region_text},i=[];return e.response_content&&e.response_type==="chat"&&i.push({...t,type:"ai-chat",content:e.response_content}),e.response_content&&e.response_type==="patch"&&i.push({...t,type:"ai-patch",content:e.response_content,patchData:{originalText:e.region_text,improvedText:e.response_content,regionText:e.region_text,isComplete:!0}}),[s,...i]}).flat().sort((e,t)=>e.timestamp.getTime()-t.timestamp.getTime())}const Se=b.createContext(null),At={connected:!1,connecting:!1};function xt({config:n,children:e}){const t=b.useRef(null),s=b.useRef(new Map),[i,r]=b.useState({messages:[],connection:At,latestPatchOffer:null,isSubmitting:!1}),o=b.useMemo(()=>({reconnectAttempts:5,reconnectDelayMs:1500,...n}),[n]);b.useEffect(()=>{const c=new St(o);t.current=c;const d=c.on("connection",a=>{r(g=>({...g,connection:a}))}),p=c.on("chat-response",a=>{r(g=>{const k=[...g.messages];let x=k.find(w=>w.instructionId===a.instruction_id&&w.type==="ai-chat");x||(x={id:A(),type:"ai-chat",content:"",timestamp:new Date,instructionId:a.instruction_id,pageNum:a.page_num,isStreaming:!0},k.push(x));const N={...x,content:(x.content||"")+(a.chunk_text||""),isStreaming:!a.is_final},B=k.map(w=>w.id===x.id?N:w);return{...g,messages:B,isSubmitting:a.is_final?!1:g.isSubmitting}})}),_=c.on("patch-offer",a=>{var x;const g=`${a.trans_doc_id}-${a.instruction_id}`,k=s.current.get(g)??{trans_doc_id:a.trans_doc_id,page_num:a.page_num,instruction_id:a.instruction_id,original_text:a.region_original_text||"",highlighted_region:a.region_coordinates,new_suggestion:"",is_page_level:!a.region_coordinates,selection_id:a.selection_id};if(k.new_suggestion+=a.region_replacement_text_chunk||"",a.selection_id&&!k.selection_id&&(k.selection_id=a.selection_id),s.current.set(g,k),r(N=>{var Ae;const B=[...N.messages];let w=B.find(q=>q.instructionId===a.instruction_id&&q.type==="ai-patch");w||(w={id:A(),type:"ai-patch",content:"",timestamp:new Date,instructionId:a.instruction_id,pageNum:a.page_num,isStreaming:!0,patchData:{originalText:a.region_original_text,improvedText:"",regionText:a.region_original_text,isComplete:!1}},B.push(w));const Lt={...w,content:(w.content||"")+(a.region_replacement_text_chunk||""),isStreaming:!a.is_final,patchData:{...w.patchData,improvedText:(((Ae=w.patchData)==null?void 0:Ae.improvedText)||"")+(a.region_replacement_text_chunk||""),regionText:a.region_original_text,isComplete:a.is_final}},Dt=B.map(q=>q.id===w.id?Lt:q);return{...N,messages:Dt,isSubmitting:a.is_final?!1:N.isSubmitting}}),a.is_final){const N=s.current.get(g);N&&((x=o.onPatchOffer)==null||x.call(o,N),r(B=>({...B,latestPatchOffer:N}))),s.current.delete(g)}}),y=c.on("chat-history-response",a=>{if(a.status==="success"){const g=Ct(a.messages);r(k=>({...k,messages:g}))}else r(g=>({...g,messages:[...g.messages,{id:A(),type:"system",content:a.error||"Failed to load chat history",timestamp:new Date}]}))}),R=c.on("instruction-error",a=>{r(g=>({...g,isSubmitting:!1,messages:[...g.messages,{id:A(),type:"error",content:a.error,timestamp:new Date}]}))}),Bt=c.on("page-translation-response",a=>{var g;(g=o.onPageTranslationResponse)==null||g.call(o,a)}),Pt=c.on("bulk-translation-response",a=>{var g;(g=o.onBulkTranslationResponse)==null||g.call(o,a)});return c.connect().then(()=>{const a=o.contextProvider();if(a)return c.requestChatHistory(a)}).catch(a=>{var g,k;return(k=(g=o.logger)==null?void 0:g.warn)==null?void 0:k.call(g,"chat-sdk connect failed",a)}),()=>{d(),p(),_(),y(),R(),Bt(),Pt(),c.disconnect()}},[o]);const h=b.useMemo(()=>({async submitInstruction(c){const d=t.current;if(!d)throw new Error("SDK not ready");const p=o.contextProvider();if(!p)throw new Error("contextProvider returned null");r(_=>{var y;return{..._,isSubmitting:!0,messages:[..._.messages,{id:A(),type:"user",content:c,timestamp:new Date,contextText:(y=p.highlighted_region)==null?void 0:y.text},{id:A(),type:"loading",content:"Processing your instruction...",timestamp:new Date,isStreaming:!0}]}}),await d.submitInstruction(c,p)},async submitInstructionWithContext(c,d){const p=t.current;if(!p)throw new Error("SDK not ready");r(_=>{var y;return{..._,isSubmitting:!0,messages:[..._.messages,{id:A(),type:"user",content:c,timestamp:new Date,contextText:(y=d.highlighted_region)==null?void 0:y.text},{id:A(),type:"loading",content:"Processing your instruction...",timestamp:new Date,isStreaming:!0}]}}),await p.submitInstruction(c,d)},async requestChatHistory(){const c=t.current;if(!c)throw new Error("SDK not ready");const d=o.contextProvider();if(!d)throw new Error("contextProvider returned null");await c.requestChatHistory(d)},async sendPatchDecision(c,d,p,_){const y=t.current;if(!y)throw new Error("SDK not ready");await y.sendPatchDecision({trans_doc_id:c,page_num:d,instruction_id:p,decision:_}),r(R=>({...R,latestPatchOffer:null}))},async requestPageTranslation(c,d){const p=t.current;if(!p)throw new Error("SDK not ready");return await p.requestPageTranslation({trans_doc_id:c,page_num:d}),!0},async requestBulkTranslation(c,d){const p=t.current;if(!p)throw new Error("SDK not ready");return await p.requestBulkTranslation({trans_doc_id:c,page_list:d}),!0},async cancelBulkTranslation(c){const d=t.current;if(!d)throw new Error("SDK not ready");return await d.cancelBulkTranslation(c),!0},clearMessages(){r(c=>({...c,messages:[]}))}}),[o]),f=b.useMemo(()=>({...i,...h}),[i,h]);return l.jsx(Se.Provider,{value:f,children:e})}function Nt(){const n=b.useContext(Se);if(!n)throw new Error("useChat must be used within ChatProvider");return n}function Ce(){return Nt()}function Ot({title:n="AI Assistance",placeholder:e="Ask anything...",height:t="420px"}){const{messages:s,connection:i,submitInstruction:r,isSubmitting:o}=Ce(),[h,f]=b.useState(""),c=b.useRef(null),d=!i.connected||o,p=b.useMemo(()=>[...s].sort((y,R)=>y.timestamp.getTime()-R.timestamp.getTime()),[s]);b.useEffect(()=>{c.current&&(c.current.scrollTop=c.current.scrollHeight)},[p]);const _=async y=>{y.preventDefault();const R=h.trim();R&&(await r(R),f(""))};return l.jsxs("div",{className:"chat-sdk",style:{height:t},children:[l.jsx("div",{className:"chat-sdk__header",children:l.jsxs("div",{children:[l.jsx("div",{className:"chat-sdk__title",children:n}),l.jsxs("div",{className:"chat-sdk__status",children:[l.jsx("span",{className:`chat-sdk__status-dot ${i.connected?"connected":"disconnected"}`}),i.connected?"Connected":i.connecting?"Connecting...":"Disconnected"]})]})}),l.jsx("div",{className:"chat-sdk__messages",ref:c,children:p.length===0?l.jsx("div",{className:"chat-sdk__empty",children:"Start a conversation to get translation help."}):p.map(y=>l.jsx(Rt,{message:y},y.id))}),l.jsxs("form",{className:"chat-sdk__composer",onSubmit:_,children:[l.jsx("textarea",{placeholder:e,value:h,onChange:y=>f(y.target.value),disabled:d,rows:2}),l.jsx("button",{type:"submit",disabled:!h.trim()||d,children:"Send"})]})]})}function Rt({message:n}){var i;const e=n.type==="user",t=n.type==="loading",s=n.type==="ai-patch";return l.jsxs("div",{className:`chat-sdk__bubble ${e?"user":"ai"}`,children:[l.jsxs("div",{className:"chat-sdk__bubble-meta",children:[l.jsx("span",{children:e?"You":s?"Patch":"Assistant"}),l.jsx("span",{children:n.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),l.jsx("div",{className:`chat-sdk__bubble-body ${n.isStreaming?"streaming":""}`,children:s&&((i=n.patchData)!=null&&i.originalText)?l.jsxs("div",{className:"chat-sdk__patch",children:[l.jsx("div",{className:"chat-sdk__patch-label",children:"Original"}),l.jsx("div",{className:"chat-sdk__patch-block",children:n.patchData.originalText}),l.jsx("div",{className:"chat-sdk__patch-label",children:"Improved"}),l.jsxs("div",{className:"chat-sdk__patch-block",children:[n.patchData.improvedText,n.isStreaming&&l.jsx(oe,{})]})]}):l.jsxs(l.Fragment,{children:[l.jsx("div",{children:n.content}),t&&l.jsx(oe,{}),n.isStreaming&&!t&&l.jsx(oe,{})]})}),n.contextText&&l.jsx("div",{className:"chat-sdk__context-chip",children:n.contextText.length>80?`${n.contextText.slice(0,80)}…`:n.contextText})]})}function oe(){return l.jsxs("span",{className:"chat-sdk__stream",children:[l.jsx("span",{}),l.jsx("span",{}),l.jsx("span",{})]})}v.ChatProvider=xt,v.ChatWidget=Ot,v.useChat=Ce,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
1
+ (function(T,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],a):(T=typeof globalThis<"u"?globalThis:T||self,a(T.TranslationChatSDK={},T.React,T.React))})(this,function(T,a,y){"use strict";const C=Object.create(null);C.open="0",C.close="1",C.ping="2",C.pong="3",C.message="4",C.upgrade="5",C.noop="6";const q=Object.create(null);Object.keys(C).forEach(n=>{q[C[n]]=n});const Y={type:"error",data:"parser error"},he=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",le=typeof ArrayBuffer=="function",ue=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n&&n.buffer instanceof ArrayBuffer,z=({type:n,data:e},t,s)=>he&&e instanceof Blob?t?s(e):fe(e,s):le&&(e instanceof ArrayBuffer||ue(e))?t?s(e):fe(new Blob([e]),s):s(C[n]+(e||"")),fe=(n,e)=>{const t=new FileReader;return t.onload=function(){const s=t.result.split(",")[1];e("b"+(s||""))},t.readAsDataURL(n)};function de(n){return n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}let J;function Oe(n,e){if(he&&n.data instanceof Blob)return n.data.arrayBuffer().then(de).then(e);if(le&&(n.data instanceof ArrayBuffer||ue(n.data)))return e(de(n.data));z(n,!1,t=>{J||(J=new TextEncoder),e(J.encode(t))})}const pe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",P=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let n=0;n<pe.length;n++)P[pe.charCodeAt(n)]=n;const Be=n=>{let e=n.length*.75,t=n.length,s,i=0,r,o,h,f;n[n.length-1]==="="&&(e--,n[n.length-2]==="="&&e--);const l=new ArrayBuffer(e),p=new Uint8Array(l);for(s=0;s<t;s+=4)r=P[n.charCodeAt(s)],o=P[n.charCodeAt(s+1)],h=P[n.charCodeAt(s+2)],f=P[n.charCodeAt(s+3)],p[i++]=r<<2|o>>4,p[i++]=(o&15)<<4|h>>2,p[i++]=(h&3)<<6|f&63;return l},Re=typeof ArrayBuffer=="function",Q=(n,e)=>{if(typeof n!="string")return{type:"message",data:ge(n,e)};const t=n.charAt(0);return t==="b"?{type:"message",data:Pe(n.substring(1),e)}:q[t]?n.length>1?{type:q[t],data:n.substring(1)}:{type:q[t]}:Y},Pe=(n,e)=>{if(Re){const t=Be(n);return ge(t,e)}else return{base64:!0,data:n}},ge=(n,e)=>{switch(e){case"blob":return n instanceof Blob?n:new Blob([n]);case"arraybuffer":default:return n instanceof ArrayBuffer?n:n.buffer}},_e="",Le=(n,e)=>{const t=n.length,s=new Array(t);let i=0;n.forEach((r,o)=>{z(r,!1,h=>{s[o]=h,++i===t&&e(s.join(_e))})})},De=(n,e)=>{const t=n.split(_e),s=[];for(let i=0;i<t.length;i++){const r=Q(t[i],e);if(s.push(r),r.type==="error")break}return s};function Ie(){return new TransformStream({transform(n,e){Oe(n,t=>{const s=t.length;let i;if(s<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,s);else if(s<65536){i=new Uint8Array(3);const r=new DataView(i.buffer);r.setUint8(0,126),r.setUint16(1,s)}else{i=new Uint8Array(9);const r=new DataView(i.buffer);r.setUint8(0,127),r.setBigUint64(1,BigInt(s))}n.data&&typeof n.data!="string"&&(i[0]|=128),e.enqueue(i),e.enqueue(t)})}})}let X;function M(n){return n.reduce((e,t)=>e+t.length,0)}function U(n,e){if(n[0].length===e)return n.shift();const t=new Uint8Array(e);let s=0;for(let i=0;i<e;i++)t[i]=n[0][s++],s===n[0].length&&(n.shift(),s=0);return n.length&&s<n[0].length&&(n[0]=n[0].slice(s)),t}function qe(n,e){X||(X=new TextDecoder);const t=[];let s=0,i=-1,r=!1;return new TransformStream({transform(o,h){for(t.push(o);;){if(s===0){if(M(t)<1)break;const f=U(t,1);r=(f[0]&128)===128,i=f[0]&127,i<126?s=3:i===126?s=1:s=2}else if(s===1){if(M(t)<2)break;const f=U(t,2);i=new DataView(f.buffer,f.byteOffset,f.length).getUint16(0),s=3}else if(s===2){if(M(t)<8)break;const f=U(t,8),l=new DataView(f.buffer,f.byteOffset,f.length),p=l.getUint32(0);if(p>Math.pow(2,21)-1){h.enqueue(Y);break}i=p*Math.pow(2,32)+l.getUint32(4),s=3}else{if(M(t)<i)break;const f=U(t,i);h.enqueue(Q(r?f:X.decode(f),e)),s=0}if(i===0||i>n){h.enqueue(Y);break}}}})}const me=4;function _(n){if(n)return Me(n)}function Me(n){for(var e in _.prototype)n[e]=_.prototype[e];return n}_.prototype.on=_.prototype.addEventListener=function(n,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+n]=this._callbacks["$"+n]||[]).push(e),this},_.prototype.once=function(n,e){function t(){this.off(n,t),e.apply(this,arguments)}return t.fn=e,this.on(n,t),this},_.prototype.off=_.prototype.removeListener=_.prototype.removeAllListeners=_.prototype.removeEventListener=function(n,e){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var t=this._callbacks["$"+n];if(!t)return this;if(arguments.length==1)return delete this._callbacks["$"+n],this;for(var s,i=0;i<t.length;i++)if(s=t[i],s===e||s.fn===e){t.splice(i,1);break}return t.length===0&&delete this._callbacks["$"+n],this},_.prototype.emit=function(n){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),t=this._callbacks["$"+n],s=1;s<arguments.length;s++)e[s-1]=arguments[s];if(t){t=t.slice(0);for(var s=0,i=t.length;s<i;++s)t[s].apply(this,e)}return this},_.prototype.emitReserved=_.prototype.emit,_.prototype.listeners=function(n){return this._callbacks=this._callbacks||{},this._callbacks["$"+n]||[]},_.prototype.hasListeners=function(n){return!!this.listeners(n).length};const V=typeof Promise=="function"&&typeof Promise.resolve=="function"?e=>Promise.resolve().then(e):(e,t)=>t(e,0),v=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),Ue="arraybuffer";function It(){}function ye(n,...e){return e.reduce((t,s)=>(n.hasOwnProperty(s)&&(t[s]=n[s]),t),{})}const Ve=v.setTimeout,Fe=v.clearTimeout;function F(n,e){e.useNativeTimers?(n.setTimeoutFn=Ve.bind(v),n.clearTimeoutFn=Fe.bind(v)):(n.setTimeoutFn=v.setTimeout.bind(v),n.clearTimeoutFn=v.clearTimeout.bind(v))}const He=1.33;function Ke(n){return typeof n=="string"?$e(n):Math.ceil((n.byteLength||n.size)*He)}function $e(n){let e=0,t=0;for(let s=0,i=n.length;s<i;s++)e=n.charCodeAt(s),e<128?t+=1:e<2048?t+=2:e<55296||e>=57344?t+=3:(s++,t+=4);return t}function we(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function We(n){let e="";for(let t in n)n.hasOwnProperty(t)&&(e.length&&(e+="&"),e+=encodeURIComponent(t)+"="+encodeURIComponent(n[t]));return e}function Ye(n){let e={},t=n.split("&");for(let s=0,i=t.length;s<i;s++){let r=t[s].split("=");e[decodeURIComponent(r[0])]=decodeURIComponent(r[1])}return e}class ze extends Error{constructor(e,t,s){super(e),this.description=t,this.context=s,this.type="TransportError"}}class j extends _{constructor(e){super(),this.writable=!1,F(this,e),this.opts=e,this.query=e.query,this.socket=e.socket,this.supportsBinary=!e.forceBase64}onError(e,t,s){return super.emitReserved("error",new ze(e,t,s)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return(this.readyState==="opening"||this.readyState==="open")&&(this.doClose(),this.onClose()),this}send(e){this.readyState==="open"&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){const t=Q(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){const e=this.opts.hostname;return e.indexOf(":")===-1?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(e){const t=We(e);return t.length?"?"+t:""}}class Je extends j{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(e){this.readyState="pausing";const t=()=>{this.readyState="paused",e()};if(this._polling||!this.writable){let s=0;this._polling&&(s++,this.once("pollComplete",function(){--s||t()})),this.writable||(s++,this.once("drain",function(){--s||t()}))}else t()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){const t=s=>{if(this.readyState==="opening"&&s.type==="open"&&this.onOpen(),s.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(s)};De(e,this.socket.binaryType).forEach(t),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const e=()=>{this.write([{type:"close"}])};this.readyState==="open"?e():this.once("open",e)}write(e){this.writable=!1,Le(e,t=>{this.doWrite(t,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return this.opts.timestampRequests!==!1&&(t[this.opts.timestampParam]=we()),!this.supportsBinary&&!t.sid&&(t.b64=1),this.createUri(e,t)}}let ke=!1;try{ke=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const Qe=ke;function Xe(){}class je extends Je{constructor(e){if(super(e),typeof location<"u"){const t=location.protocol==="https:";let s=location.port;s||(s=t?"443":"80"),this.xd=typeof location<"u"&&e.hostname!==location.hostname||s!==e.port}}doWrite(e,t){const s=this.request({method:"POST",data:e});s.on("success",t),s.on("error",(i,r)=>{this.onError("xhr post error",i,r)})}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(t,s)=>{this.onError("xhr poll error",t,s)}),this.pollXhr=e}}class S extends _{constructor(e,t,s){super(),this.createRequest=e,F(this,s),this._opts=s,this._method=s.method||"GET",this._uri=t,this._data=s.data!==void 0?s.data:null,this._create()}_create(){var e;const t=ye(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this._opts.xd;const s=this._xhr=this.createRequest(t);try{s.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){s.setDisableHeaderCheck&&s.setDisableHeaderCheck(!0);for(let i in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(i)&&s.setRequestHeader(i,this._opts.extraHeaders[i])}}catch{}if(this._method==="POST")try{s.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{s.setRequestHeader("Accept","*/*")}catch{}(e=this._opts.cookieJar)===null||e===void 0||e.addCookies(s),"withCredentials"in s&&(s.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(s.timeout=this._opts.requestTimeout),s.onreadystatechange=()=>{var i;s.readyState===3&&((i=this._opts.cookieJar)===null||i===void 0||i.parseCookies(s.getResponseHeader("set-cookie"))),s.readyState===4&&(s.status===200||s.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof s.status=="number"?s.status:0)},0))},s.send(this._data)}catch(i){this.setTimeoutFn(()=>{this._onError(i)},0);return}typeof document<"u"&&(this._index=S.requestsCount++,S.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(e){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=Xe,e)try{this._xhr.abort()}catch{}typeof document<"u"&&delete S.requests[this._index],this._xhr=null}}_onLoad(){const e=this._xhr.responseText;e!==null&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}}if(S.requestsCount=0,S.requests={},typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",be);else if(typeof addEventListener=="function"){const n="onpagehide"in v?"pagehide":"unload";addEventListener(n,be,!1)}}function be(){for(let n in S.requests)S.requests.hasOwnProperty(n)&&S.requests[n].abort()}const Ge=function(){const n=ve({xdomain:!1});return n&&n.responseType!==null}();class Ze extends je{constructor(e){super(e);const t=e&&e.forceBase64;this.supportsBinary=Ge&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new S(ve,this.uri(),e)}}function ve(n){const e=n.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!e||Qe))return new XMLHttpRequest}catch{}if(!e)try{return new v[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const Ee=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class et extends j{get name(){return"websocket"}doOpen(){const e=this.uri(),t=this.opts.protocols,s=Ee?{}:ye(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(s.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,t,s)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const s=e[t],i=t===e.length-1;z(s,this.supportsBinary,r=>{try{this.doWrite(s,r)}catch{}i&&V(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=we()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}}const G=v.WebSocket||v.MozWebSocket;class tt extends et{createSocket(e,t,s){return Ee?new G(e,t,s):t?new G(e,t):new G(e)}doWrite(e,t){this.ws.send(t)}}class st extends j{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved("error",e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{const t=qe(Number.MAX_SAFE_INTEGER,this.socket.binaryType),s=e.readable.pipeThrough(t).getReader(),i=Ie();i.readable.pipeTo(e.writable),this._writer=i.writable.getWriter();const r=()=>{s.read().then(({done:h,value:f})=>{h||(this.onPacket(f),r())}).catch(h=>{})};r();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const s=e[t],i=t===e.length-1;this._writer.write(s).then(()=>{i&&V(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)===null||e===void 0||e.close()}}const nt={websocket:tt,webtransport:st,polling:Ze},it=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,rt=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Z(n){if(n.length>8e3)throw"URI too long";const e=n,t=n.indexOf("["),s=n.indexOf("]");t!=-1&&s!=-1&&(n=n.substring(0,t)+n.substring(t,s).replace(/:/g,";")+n.substring(s,n.length));let i=it.exec(n||""),r={},o=14;for(;o--;)r[rt[o]]=i[o]||"";return t!=-1&&s!=-1&&(r.source=e,r.host=r.host.substring(1,r.host.length-1).replace(/;/g,":"),r.authority=r.authority.replace("[","").replace("]","").replace(/;/g,":"),r.ipv6uri=!0),r.pathNames=ot(r,r.path),r.queryKey=ct(r,r.query),r}function ot(n,e){const t=/\/{2,9}/g,s=e.replace(t,"/").split("/");return(e.slice(0,1)=="/"||e.length===0)&&s.splice(0,1),e.slice(-1)=="/"&&s.splice(s.length-1,1),s}function ct(n,e){const t={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(s,i,r){i&&(t[i]=r)}),t}const ee=typeof addEventListener=="function"&&typeof removeEventListener=="function",H=[];ee&&addEventListener("offline",()=>{H.forEach(n=>n())},!1);class O extends _{constructor(e,t){if(super(),this.binaryType=Ue,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e=="object"&&(t=e,e=null),e){const s=Z(e);t.hostname=s.host,t.secure=s.protocol==="https"||s.protocol==="wss",t.port=s.port,s.query&&(t.query=s.query)}else t.host&&(t.hostname=Z(t.host).host);F(this,t),this.secure=t.secure!=null?t.secure:typeof location<"u"&&location.protocol==="https:",t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=t.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},t.transports.forEach(s=>{const i=s.prototype.name;this.transports.push(i),this._transportsByName[i]=s}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=Ye(this.opts.query)),ee&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},H.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){const t=Object.assign({},this.opts.query);t.EIO=me,t.transport=e,this.id&&(t.sid=this.id);const s=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](s)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const e=this.opts.rememberUpgrade&&O.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const t=this.createTransport(e);t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",t=>this._onClose("transport close",t))}onOpen(){this.readyState="open",O.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const t=new Error("server error");t.code=e.data,this._onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data);break}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let t=1;for(let s=0;s<this.writeBuffer.length;s++){const i=this.writeBuffer[s].data;if(i&&(t+=Ke(i)),s>0&&t>this._maxPayload)return this.writeBuffer.slice(0,s);t+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,V(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,t,s){return this._sendPacket("message",e,t,s),this}send(e,t,s){return this._sendPacket("message",e,t,s),this}_sendPacket(e,t,s,i){if(typeof t=="function"&&(i=t,t=void 0),typeof s=="function"&&(i=s,s=null),this.readyState==="closing"||this.readyState==="closed")return;s=s||{},s.compress=s.compress!==!1;const r={type:e,data:t,options:s};this.emitReserved("packetCreate",r),this.writeBuffer.push(r),i&&this.once("flush",i),this.flush()}close(){const e=()=>{this._onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},s=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?s():e()}):this.upgrading?s():e()),this}_onError(e){if(O.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),ee&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const s=H.indexOf(this._offlineEventListener);s!==-1&&H.splice(s,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this._prevBufferLen=0}}}O.protocol=me;class at extends O{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let e=0;e<this._upgrades.length;e++)this._probe(this._upgrades[e])}_probe(e){let t=this.createTransport(e),s=!1;O.priorWebsocketSuccess=!1;const i=()=>{s||(t.send([{type:"ping",data:"probe"}]),t.once("packet",g=>{if(!s)if(g.type==="pong"&&g.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;O.priorWebsocketSuccess=t.name==="websocket",this.transport.pause(()=>{s||this.readyState!=="closed"&&(p(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())})}else{const m=new Error("probe error");m.transport=t.name,this.emitReserved("upgradeError",m)}}))};function r(){s||(s=!0,p(),t.close(),t=null)}const o=g=>{const m=new Error("probe error: "+g);m.transport=t.name,r(),this.emitReserved("upgradeError",m)};function h(){o("transport closed")}function f(){o("socket closed")}function l(g){t&&g.name!==t.name&&r()}const p=()=>{t.removeListener("open",i),t.removeListener("error",o),t.removeListener("close",h),this.off("close",f),this.off("upgrading",l)};t.once("open",i),t.once("error",o),t.once("close",h),this.once("close",f),this.once("upgrading",l),this._upgrades.indexOf("webtransport")!==-1&&e!=="webtransport"?this.setTimeoutFn(()=>{s||t.open()},200):t.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){const t=[];for(let s=0;s<e.length;s++)~this.transports.indexOf(e[s])&&t.push(e[s]);return t}}let ht=class extends at{constructor(e,t={}){const s=typeof e=="object"?e:t;(!s.transports||s.transports&&typeof s.transports[0]=="string")&&(s.transports=(s.transports||["polling","websocket","webtransport"]).map(i=>nt[i]).filter(i=>!!i)),super(e,s)}};function lt(n,e="",t){let s=n;t=t||typeof location<"u"&&location,n==null&&(n=t.protocol+"//"+t.host),typeof n=="string"&&(n.charAt(0)==="/"&&(n.charAt(1)==="/"?n=t.protocol+n:n=t.host+n),/^(https?|wss?):\/\//.test(n)||(typeof t<"u"?n=t.protocol+"//"+n:n="https://"+n),s=Z(n)),s.port||(/^(http|ws)$/.test(s.protocol)?s.port="80":/^(http|ws)s$/.test(s.protocol)&&(s.port="443")),s.path=s.path||"/";const r=s.host.indexOf(":")!==-1?"["+s.host+"]":s.host;return s.id=s.protocol+"://"+r+":"+s.port+e,s.href=s.protocol+"://"+r+(t&&t.port===s.port?"":":"+s.port),s}const ut=typeof ArrayBuffer=="function",ft=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n.buffer instanceof ArrayBuffer,Te=Object.prototype.toString,dt=typeof Blob=="function"||typeof Blob<"u"&&Te.call(Blob)==="[object BlobConstructor]",pt=typeof File=="function"||typeof File<"u"&&Te.call(File)==="[object FileConstructor]";function te(n){return ut&&(n instanceof ArrayBuffer||ft(n))||dt&&n instanceof Blob||pt&&n instanceof File}function K(n,e){if(!n||typeof n!="object")return!1;if(Array.isArray(n)){for(let t=0,s=n.length;t<s;t++)if(K(n[t]))return!0;return!1}if(te(n))return!0;if(n.toJSON&&typeof n.toJSON=="function"&&arguments.length===1)return K(n.toJSON(),!0);for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&K(n[t]))return!0;return!1}function gt(n){const e=[],t=n.data,s=n;return s.data=se(t,e),s.attachments=e.length,{packet:s,buffers:e}}function se(n,e){if(!n)return n;if(te(n)){const t={_placeholder:!0,num:e.length};return e.push(n),t}else if(Array.isArray(n)){const t=new Array(n.length);for(let s=0;s<n.length;s++)t[s]=se(n[s],e);return t}else if(typeof n=="object"&&!(n instanceof Date)){const t={};for(const s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=se(n[s],e));return t}return n}function _t(n,e){return n.data=ne(n.data,e),delete n.attachments,n}function ne(n,e){if(!n)return n;if(n&&n._placeholder===!0){if(typeof n.num=="number"&&n.num>=0&&n.num<e.length)return e[n.num];throw new Error("illegal attachments")}else if(Array.isArray(n))for(let t=0;t<n.length;t++)n[t]=ne(n[t],e);else if(typeof n=="object")for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=ne(n[t],e));return n}const Ce=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"],mt=5;var u;(function(n){n[n.CONNECT=0]="CONNECT",n[n.DISCONNECT=1]="DISCONNECT",n[n.EVENT=2]="EVENT",n[n.ACK=3]="ACK",n[n.CONNECT_ERROR=4]="CONNECT_ERROR",n[n.BINARY_EVENT=5]="BINARY_EVENT",n[n.BINARY_ACK=6]="BINARY_ACK"})(u||(u={}));class yt{constructor(e){this.replacer=e}encode(e){return(e.type===u.EVENT||e.type===u.ACK)&&K(e)?this.encodeAsBinary({type:e.type===u.EVENT?u.BINARY_EVENT:u.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id}):[this.encodeAsString(e)]}encodeAsString(e){let t=""+e.type;return(e.type===u.BINARY_EVENT||e.type===u.BINARY_ACK)&&(t+=e.attachments+"-"),e.nsp&&e.nsp!=="/"&&(t+=e.nsp+","),e.id!=null&&(t+=e.id),e.data!=null&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){const t=gt(e),s=this.encodeAsString(t.packet),i=t.buffers;return i.unshift(s),i}}class ie extends _{constructor(e){super(),this.reviver=e}add(e){let t;if(typeof e=="string"){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const s=t.type===u.BINARY_EVENT;s||t.type===u.BINARY_ACK?(t.type=s?u.EVENT:u.ACK,this.reconstructor=new wt(t),t.attachments===0&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else if(te(e)||e.base64)if(this.reconstructor)t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t));else throw new Error("got binary data when not reconstructing a packet");else throw new Error("Unknown type: "+e)}decodeString(e){let t=0;const s={type:Number(e.charAt(0))};if(u[s.type]===void 0)throw new Error("unknown packet type "+s.type);if(s.type===u.BINARY_EVENT||s.type===u.BINARY_ACK){const r=t+1;for(;e.charAt(++t)!=="-"&&t!=e.length;);const o=e.substring(r,t);if(o!=Number(o)||e.charAt(t)!=="-")throw new Error("Illegal attachments");s.attachments=Number(o)}if(e.charAt(t+1)==="/"){const r=t+1;for(;++t&&!(e.charAt(t)===","||t===e.length););s.nsp=e.substring(r,t)}else s.nsp="/";const i=e.charAt(t+1);if(i!==""&&Number(i)==i){const r=t+1;for(;++t;){const o=e.charAt(t);if(o==null||Number(o)!=o){--t;break}if(t===e.length)break}s.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(ie.isPayloadValid(s.type,r))s.data=r;else throw new Error("invalid payload")}return s}tryParse(e){try{return JSON.parse(e,this.reviver)}catch{return!1}}static isPayloadValid(e,t){switch(e){case u.CONNECT:return $(t);case u.DISCONNECT:return t===void 0;case u.CONNECT_ERROR:return typeof t=="string"||$(t);case u.EVENT:case u.BINARY_EVENT:return Array.isArray(t)&&(typeof t[0]=="number"||typeof t[0]=="string"&&Ce.indexOf(t[0])===-1);case u.ACK:case u.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class wt{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const t=_t(this.reconPack,this.buffers);return this.finishedReconstruction(),t}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}function kt(n){return typeof n=="string"}const bt=Number.isInteger||function(n){return typeof n=="number"&&isFinite(n)&&Math.floor(n)===n};function vt(n){return n===void 0||bt(n)}function $(n){return Object.prototype.toString.call(n)==="[object Object]"}function Et(n,e){switch(n){case u.CONNECT:return e===void 0||$(e);case u.DISCONNECT:return e===void 0;case u.EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&Ce.indexOf(e[0])===-1);case u.ACK:return Array.isArray(e);case u.CONNECT_ERROR:return typeof e=="string"||$(e);default:return!1}}function Tt(n){return kt(n.nsp)&&vt(n.id)&&Et(n.type,n.data)}const Ct=Object.freeze(Object.defineProperty({__proto__:null,Decoder:ie,Encoder:yt,get PacketType(){return u},isPacketValid:Tt,protocol:mt},Symbol.toStringTag,{value:"Module"}));function E(n,e,t){return n.on(e,t),function(){n.off(e,t)}}const St=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class Se extends _{constructor(e,t,s){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,s&&s.auth&&(this.auth=s.auth),this._opts=Object.assign({},s),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[E(e,"open",this.onopen.bind(this)),E(e,"packet",this.onpacket.bind(this)),E(e,"error",this.onerror.bind(this)),E(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState==="open"&&this.onopen(),this)}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){var s,i,r;if(St.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const o={type:u.EVENT,data:t};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof t[t.length-1]=="function"){const p=this.ids++,g=t.pop();this._registerAckCallback(p,g),o.id=p}const h=(i=(s=this.io.engine)===null||s===void 0?void 0:s.transport)===null||i===void 0?void 0:i.writable,f=this.connected&&!(!((r=this.io.engine)===null||r===void 0)&&r._hasPingExpired());return this.flags.volatile&&!h||(f?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(e,t){var s;const i=(s=this.flags.timeout)!==null&&s!==void 0?s:this._opts.ackTimeout;if(i===void 0){this.acks[e]=t;return}const r=this.io.setTimeoutFn(()=>{delete this.acks[e];for(let h=0;h<this.sendBuffer.length;h++)this.sendBuffer[h].id===e&&this.sendBuffer.splice(h,1);t.call(this,new Error("operation has timed out"))},i),o=(...h)=>{this.io.clearTimeoutFn(r),t.apply(this,h)};o.withError=!0,this.acks[e]=o}emitWithAck(e,...t){return new Promise((s,i)=>{const r=(o,h)=>o?i(o):s(h);r.withError=!0,t.push(r),this.emit(e,...t)})}_addToQueue(e){let t;typeof e[e.length-1]=="function"&&(t=e.pop());const s={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((i,...r)=>(this._queue[0],i!==null?s.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(i)):(this._queue.shift(),t&&t(null,...r)),s.pending=!1,this._drainQueue())),this._queue.push(s),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;const t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth=="function"?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:u.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(s=>String(s.id)===e)){const s=this.acks[e];delete this.acks[e],s.withError&&s.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case u.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case u.EVENT:case u.BINARY_EVENT:this.onevent(e);break;case u.ACK:case u.BINARY_ACK:this.onack(e);break;case u.DISCONNECT:this.ondisconnect();break;case u.CONNECT_ERROR:this.destroy();const s=new Error(e.data.message);s.data=e.data.data,this.emitReserved("connect_error",s);break}}onevent(e){const t=e.data||[];e.id!=null&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const s of t)s.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]=="string"&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let s=!1;return function(...i){s||(s=!0,t.packet({type:u.ACK,id:e,data:i}))}}onack(e){const t=this.acks[e.id];typeof t=="function"&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:u.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let s=0;s<t.length;s++)if(e===t[s])return t.splice(s,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){const t=this._anyOutgoingListeners;for(let s=0;s<t.length;s++)if(e===t[s])return t.splice(s,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const t=this._anyOutgoingListeners.slice();for(const s of t)s.apply(this,e.data)}}}function R(n){n=n||{},this.ms=n.min||100,this.max=n.max||1e4,this.factor=n.factor||2,this.jitter=n.jitter>0&&n.jitter<=1?n.jitter:0,this.attempts=0}R.prototype.duration=function(){var n=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),t=Math.floor(e*this.jitter*n);n=Math.floor(e*10)&1?n+t:n-t}return Math.min(n,this.max)|0},R.prototype.reset=function(){this.attempts=0},R.prototype.setMin=function(n){this.ms=n},R.prototype.setMax=function(n){this.max=n},R.prototype.setJitter=function(n){this.jitter=n};class re extends _{constructor(e,t){var s;super(),this.nsps={},this.subs=[],e&&typeof e=="object"&&(t=e,e=void 0),t=t||{},t.path=t.path||"/socket.io",this.opts=t,F(this,t),this.reconnection(t.reconnection!==!1),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor((s=t.randomizationFactor)!==null&&s!==void 0?s:.5),this.backoff=new R({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(t.timeout==null?2e4:t.timeout),this._readyState="closed",this.uri=e;const i=t.parser||Ct;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=t.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(t=this.backoff)===null||t===void 0||t.setMin(e),this)}randomizationFactor(e){var t;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(t=this.backoff)===null||t===void 0||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(t=this.backoff)===null||t===void 0||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new ht(this.uri,this.opts);const t=this.engine,s=this;this._readyState="opening",this.skipReconnect=!1;const i=E(t,"open",function(){s.onopen(),e&&e()}),r=h=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",h),e?e(h):this.maybeReconnectOnOpen()},o=E(t,"error",r);if(this._timeout!==!1){const h=this._timeout,f=this.setTimeoutFn(()=>{i(),r(new Error("timeout")),t.close()},h);this.opts.autoUnref&&f.unref(),this.subs.push(()=>{this.clearTimeoutFn(f)})}return this.subs.push(i),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(E(e,"ping",this.onping.bind(this)),E(e,"data",this.ondata.bind(this)),E(e,"error",this.onerror.bind(this)),E(e,"close",this.onclose.bind(this)),E(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(t){this.onclose("parse error",t)}}ondecoded(e){V(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let s=this.nsps[e];return s?this._autoConnect&&!s.active&&s.connect():(s=new Se(this,e,t),this.nsps[e]=s),s}_destroy(e){const t=Object.keys(this.nsps);for(const s of t)if(this.nsps[s].active)return;this._close()}_packet(e){const t=this.encoder.encode(e);for(let s=0;s<t.length;s++)this.engine.write(t[s],e.options)}cleanup(){this.subs.forEach(e=>e()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,t){var s;this.cleanup(),(s=this.engine)===null||s===void 0||s.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const s=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),!e.skipReconnect&&e.open(i=>{i?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",i)):e.onreconnect()}))},t);this.opts.autoUnref&&s.unref(),this.subs.push(()=>{this.clearTimeoutFn(s)})}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const L={};function W(n,e){typeof n=="object"&&(e=n,n=void 0),e=e||{};const t=lt(n,e.path||"/socket.io"),s=t.source,i=t.id,r=t.path,o=L[i]&&r in L[i].nsps,h=e.forceNew||e["force new connection"]||e.multiplex===!1||o;let f;return h?f=new re(s,e):(L[i]||(L[i]=new re(s,e)),f=L[i]),t.query&&!e.query&&(e.query=t.queryKey),f.socket(t.path,e)}Object.assign(W,{Manager:re,Socket:Se,io:W,connect:W});function N(){return`${Date.now().toString(36)}-${Math.random().toString(16).slice(2,8)}`}class Nt{constructor(e){this.socket=null,this.reconnectAttempts=0,this.listeners=new Map,this.lastContext=null,this.config={reconnectAttempts:5,reconnectDelayMs:1500,logger:console,...e}}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{var s;return(s=this.listeners.get(e))==null?void 0:s.delete(t)}}emit(e,t){var s;(s=this.listeners.get(e))==null||s.forEach(i=>{var r,o;try{i(t)}catch(h){(o=(r=this.config.logger)==null?void 0:r.error)==null||o.call(r,`chat-sdk listener error for ${e}`,h)}})}setConnection(e){var t,s;this.emit("connection",e),(s=(t=this.config).onConnectionChange)==null||s.call(t,e)}async getToken(){var t,s;const{tokenProvider:e}=this.config;if(!e)return null;try{return(typeof e=="function"?await e():e)||null}catch(i){return(s=(t=this.config.logger)==null?void 0:t.warn)==null||s.call(t,"chat-sdk token provider failed",i),null}}async connect(){var r;if((r=this.socket)!=null&&r.connected)return;const e=new URL(this.config.websocketUrl),t=e.pathname==="/"?"/socket.io":e.pathname,s=e.origin,i=await this.getToken();return this.socket=W(s,{path:t,transports:["websocket","polling"],autoConnect:!1,reconnection:!1,auth:i?{token:i}:void 0}),this.registerSocketEvents(),this.setConnection({connected:!1,connecting:!0}),new Promise((o,h)=>{const f=setTimeout(()=>{h(new Error("connection timeout"))},1e4);this.socket.once("connect",()=>{clearTimeout(f),this.reconnectAttempts=0,this.setConnection({connected:!0,connecting:!1}),o()}),this.socket.once("connect_error",l=>{clearTimeout(f),this.setConnection({connected:!1,connecting:!1,error:l.message}),this.handleReconnect(),h(l)}),this.socket.connect()})}disconnect(){var e;(e=this.socket)==null||e.disconnect(),this.socket=null,this.setConnection({connected:!1,connecting:!1})}async submitInstruction(e,t){var r,o;if(!((r=this.socket)!=null&&r.connected))throw new Error("Not connected");this.lastContext=t;const s=await this.getToken(),i={trans_doc_id:t.trans_doc_id,page_num:t.page_num,instruction:e,modification_level:"page",access_token:s||void 0,region_coordinates:t.highlighted_region?{start_offset:t.highlighted_region.start_offset,end_offset:t.highlighted_region.end_offset}:void 0,region_text:(o=t.highlighted_region)==null?void 0:o.text,selection_id:t.selection_id};this.socket.emit("INSTR_SUBMIT",i)}async requestChatHistory(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.lastContext=e,this.socket.emit("CHAT_HISTORY_REQUEST",{trans_doc_id:e.trans_doc_id,access_token:t||void 0})}async sendPatchDecision(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("PATCH_DECISION",{...e,access_token:t||void 0})}async requestPageTranslation(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("PAGE_TRANSLATION_REQUEST",{...e,access_token:t||void 0})}async requestBulkTranslation(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("BULK_TRANSLATION_REQUEST",{...e,access_token:t||void 0})}async cancelBulkTranslation(e){var s;if(!((s=this.socket)!=null&&s.connected))throw new Error("Not connected");const t=await this.getToken();this.socket.emit("CANCEL_BULK_TRANSLATION_REQUEST",{trans_doc_id:e,access_token:t||void 0})}registerSocketEvents(){this.socket&&(this.socket.on("disconnect",()=>{this.setConnection({connected:!1,connecting:!1}),this.handleReconnect()}),this.socket.on("connect_error",e=>{this.setConnection({connected:!1,connecting:!1,error:e.message}),this.handleReconnect()}),this.socket.on("CHAT_RESPONSE",e=>{this.emit("chat-response",e)}),this.socket.on("PATCH_OFFER",e=>{this.emit("patch-offer",e)}),this.socket.on("CHAT_HISTORY_RESPONSE",e=>{this.emit("chat-history-response",e)}),this.socket.on("INSTRUCTION_ERROR",e=>{this.emit("instruction-error",e)}),this.socket.on("PAGE_TRANSLATION_RESPONSE",e=>{var t,s;this.emit("page-translation-response",e),(s=(t=this.config).onPageTranslationResponse)==null||s.call(t,e)}),this.socket.on("BULK_TRANSLATION_RESPONSE",e=>{var t,s;this.emit("bulk-translation-response",e),(s=(t=this.config).onBulkTranslationResponse)==null||s.call(t,e)}),this.socket.on("connected",()=>{this.lastContext&&this.requestChatHistory(this.lastContext).catch(e=>{var t,s;return(s=(t=this.config.logger)==null?void 0:t.warn)==null?void 0:s.call(t,"chat-sdk history on reconnect failed",e)})}))}handleReconnect(){var e,t;if(this.reconnectAttempts>=(this.config.reconnectAttempts??5)){(t=(e=this.config.logger)==null?void 0:e.warn)==null||t.call(e,"chat-sdk max reconnection attempts reached");return}this.reconnectAttempts+=1,setTimeout(()=>{this.connect().catch(s=>{var i,r;return(r=(i=this.config.logger)==null?void 0:i.error)==null?void 0:r.call(i,"chat-sdk reconnect failed",s)})},this.config.reconnectDelayMs)}}function xt(n){return n.map(e=>{const t={id:N(),instructionId:e.instruction_id,pageNum:e.page_num,timestamp:new Date(e.timestamp)},s={...t,type:"user",content:e.instruction,contextText:e.region_text},i=[];return e.response_content&&e.response_type==="chat"&&i.push({...t,type:"ai-chat",content:e.response_content}),e.response_content&&e.response_type==="patch"&&i.push({...t,type:"ai-patch",content:e.response_content,patchData:{originalText:e.region_text,improvedText:e.response_content,regionText:e.region_text,isComplete:!0}}),[s,...i]}).flat().sort((e,t)=>e.timestamp.getTime()-t.timestamp.getTime())}const Ne=y.createContext(null),At={connected:!1,connecting:!1};function Ot({config:n,children:e}){const t=y.useRef(null),s=y.useRef(new Map),[i,r]=y.useState({messages:[],connection:At,latestPatchOffer:null,isSubmitting:!1}),o=y.useMemo(()=>({reconnectAttempts:5,reconnectDelayMs:1500,...n}),[n]);y.useEffect(()=>{const l=new Nt(o);t.current=l;const p=l.on("connection",c=>{r(d=>({...d,connection:c}))}),g=l.on("chat-response",c=>{r(d=>{const b=[...d.messages];let x=b.find(k=>k.instructionId===c.instruction_id&&k.type==="ai-chat");x||(x={id:N(),type:"ai-chat",content:"",timestamp:new Date,instructionId:c.instruction_id,pageNum:c.page_num,isStreaming:!0},b.push(x));const A={...x,content:(x.content||"")+(c.chunk_text||""),isStreaming:!c.is_final},B=b.map(k=>k.id===x.id?A:k);return{...d,messages:B,isSubmitting:c.is_final?!1:d.isSubmitting}})}),m=l.on("patch-offer",c=>{var x;const d=`${c.trans_doc_id}-${c.instruction_id}`,b=s.current.get(d)??{trans_doc_id:c.trans_doc_id,page_num:c.page_num,instruction_id:c.instruction_id,original_text:c.region_original_text||"",highlighted_region:c.region_coordinates,new_suggestion:"",is_page_level:!c.region_coordinates,selection_id:c.selection_id};if(b.new_suggestion+=c.region_replacement_text_chunk||"",c.selection_id&&!b.selection_id&&(b.selection_id=c.selection_id),s.current.set(d,b),r(A=>{var Ae;const B=[...A.messages];let k=B.find(I=>I.instructionId===c.instruction_id&&I.type==="ai-patch");k||(k={id:N(),type:"ai-patch",content:"",timestamp:new Date,instructionId:c.instruction_id,pageNum:c.page_num,isStreaming:!0,patchData:{originalText:c.region_original_text,improvedText:"",regionText:c.region_original_text,isComplete:!1}},B.push(k));const Lt={...k,content:(k.content||"")+(c.region_replacement_text_chunk||""),isStreaming:!c.is_final,patchData:{...k.patchData,improvedText:(((Ae=k.patchData)==null?void 0:Ae.improvedText)||"")+(c.region_replacement_text_chunk||""),regionText:c.region_original_text,isComplete:c.is_final}},Dt=B.map(I=>I.id===k.id?Lt:I);return{...A,messages:Dt,isSubmitting:c.is_final?!1:A.isSubmitting}}),c.is_final){const A=s.current.get(d);A&&((x=o.onPatchOffer)==null||x.call(o,A),r(B=>({...B,latestPatchOffer:A}))),s.current.delete(d)}}),w=l.on("chat-history-response",c=>{if(c.status==="success"){const d=xt(c.messages);r(b=>({...b,messages:d}))}else r(d=>({...d,messages:[...d.messages,{id:N(),type:"system",content:c.error||"Failed to load chat history",timestamp:new Date}]}))}),D=l.on("instruction-error",c=>{r(d=>({...d,isSubmitting:!1,messages:[...d.messages,{id:N(),type:"error",content:c.error,timestamp:new Date}]}))}),ce=l.on("page-translation-response",c=>{var d;(d=o.onPageTranslationResponse)==null||d.call(o,c)}),ae=l.on("bulk-translation-response",c=>{var d;(d=o.onBulkTranslationResponse)==null||d.call(o,c)});return l.connect().then(()=>{const c=o.contextProvider();if(c)return l.requestChatHistory(c)}).catch(c=>{var d,b;return(b=(d=o.logger)==null?void 0:d.warn)==null?void 0:b.call(d,"chat-sdk connect failed",c)}),()=>{p(),g(),m(),w(),D(),ce(),ae(),l.disconnect()}},[o]);const h=y.useMemo(()=>({async submitInstruction(l){const p=t.current;if(!p)throw new Error("SDK not ready");const g=o.contextProvider();if(!g)throw new Error("contextProvider returned null");r(m=>{var w;return{...m,isSubmitting:!0,messages:[...m.messages,{id:N(),type:"user",content:l,timestamp:new Date,contextText:(w=g.highlighted_region)==null?void 0:w.text},{id:N(),type:"loading",content:"Processing your instruction...",timestamp:new Date,isStreaming:!0}]}}),await p.submitInstruction(l,g)},async submitInstructionWithContext(l,p){const g=t.current;if(!g)throw new Error("SDK not ready");r(m=>{var w;return{...m,isSubmitting:!0,messages:[...m.messages,{id:N(),type:"user",content:l,timestamp:new Date,contextText:(w=p.highlighted_region)==null?void 0:w.text},{id:N(),type:"loading",content:"Processing your instruction...",timestamp:new Date,isStreaming:!0}]}}),await g.submitInstruction(l,p)},async requestChatHistory(){const l=t.current;if(!l)throw new Error("SDK not ready");const p=o.contextProvider();if(!p)throw new Error("contextProvider returned null");await l.requestChatHistory(p)},async sendPatchDecision(l,p,g,m){const w=t.current;if(!w)throw new Error("SDK not ready");await w.sendPatchDecision({trans_doc_id:l,page_num:p,instruction_id:g,decision:m}),r(D=>({...D,latestPatchOffer:null}))},async requestPageTranslation(l,p){const g=t.current;if(!g)throw new Error("SDK not ready");return await g.requestPageTranslation({trans_doc_id:l,page_num:p}),!0},async requestBulkTranslation(l,p){const g=t.current;if(!g)throw new Error("SDK not ready");return await g.requestBulkTranslation({trans_doc_id:l,page_list:p}),!0},async cancelBulkTranslation(l){const p=t.current;if(!p)throw new Error("SDK not ready");return await p.cancelBulkTranslation(l),!0},clearMessages(){r(l=>({...l,messages:[]}))}}),[o]),f=y.useMemo(()=>({...i,...h}),[i,h]);return a.jsx(Ne.Provider,{value:f,children:e})}function Bt(){const n=y.useContext(Ne);if(!n)throw new Error("useChat must be used within ChatProvider");return n}function xe(){return Bt()}function Rt({title:n="AI Assistance",placeholder:e="Ask anything...",height:t="500px"}){const{messages:s,connection:i,submitInstruction:r,isSubmitting:o}=xe(),[h,f]=y.useState(""),[l,p]=y.useState(null),g=y.useRef(null),m=!i.connected||o,w=y.useMemo(()=>[...s].sort((c,d)=>c.timestamp.getTime()-d.timestamp.getTime()),[s]);y.useEffect(()=>{g.current&&(g.current.scrollTop=g.current.scrollHeight)},[w]);const D=async c=>{c.preventDefault();const d=h.trim();d&&(await r(d),f(""),p(null))},ce=(c,d=40)=>c.length>d?`${c.slice(0,d)}...`:c,ae=()=>{p(null)};return a.jsxs("div",{className:"chat-sdk",style:{height:t},children:[a.jsxs("div",{className:"chat-sdk__header",children:[a.jsx("div",{className:"chat-sdk__title",children:n}),a.jsxs("div",{className:"chat-sdk__status",children:[a.jsx("span",{className:`chat-sdk__status-dot ${i.connected?"connected":"disconnected"}`}),i.connected?"Connected":i.connecting?"Connecting...":"Disconnected"]})]}),a.jsx("div",{className:"chat-sdk__messages",ref:g,children:w.length===0?a.jsx("div",{className:"chat-sdk__empty",children:"Welcome! Ask anything about the translation."}):w.map(c=>a.jsx(Pt,{message:c},c.id))}),a.jsxs("div",{className:"chat-sdk__composer",children:[a.jsxs("div",{className:"chat-sdk__input-bar",children:[l&&a.jsx("div",{className:"chat-sdk__input-context",children:a.jsxs("div",{className:"chat-sdk__context-chip",children:[a.jsx("span",{className:"chat-sdk__context-text",children:ce(l)}),a.jsx("button",{type:"button",className:"chat-sdk__context-remove",onClick:ae,"aria-label":"Remove context",children:a.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:a.jsx("path",{d:"M1 1L9 9M9 1L1 9",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]})}),a.jsxs("form",{className:"chat-sdk__form",onSubmit:D,children:[a.jsx("div",{className:"chat-sdk__input-wrapper",children:a.jsx("textarea",{className:"chat-sdk__input",placeholder:e,value:h,onChange:c=>f(c.target.value),disabled:m,rows:1})}),a.jsxs("div",{className:"chat-sdk__actions",children:[a.jsx("button",{type:"button",className:"chat-sdk__add-btn","aria-label":"Add context",children:a.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:a.jsx("path",{d:"M8 3V13M3 8H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),a.jsx("button",{className:"chat-sdk__send",type:"submit",disabled:!h.trim()||m,"aria-label":"Send message",children:a.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:a.jsx("path",{d:"M7 12V2M7 2L3 6M7 2L11 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]})]}),i.error&&a.jsxs("div",{className:"chat-sdk__error",children:["⚠️ ",i.error]})]})]})}function Pt({message:n}){var r;const e=n.type==="user",t=n.type==="loading",s=n.type==="ai-patch",i=(o,h=40)=>o.length>h?`${o.slice(0,h)}...`:o;return e?a.jsxs("div",{className:"chat-sdk__user-container",children:[n.contextText&&a.jsx("div",{className:"chat-sdk__user-context",children:a.jsx("div",{className:"chat-sdk__context-chip chat-sdk__context-chip--display",children:a.jsx("span",{className:"chat-sdk__context-text",children:i(n.contextText)})})}),a.jsx("div",{className:"chat-sdk__bubble user",children:a.jsx("div",{className:"chat-sdk__bubble-body",children:n.content})})]}):a.jsx("div",{className:"chat-sdk__ai-container",children:a.jsx("div",{className:"chat-sdk__ai-response",children:s&&((r=n.patchData)!=null&&r.originalText)?a.jsxs("div",{className:"chat-sdk__patch",children:[a.jsx("div",{className:"chat-sdk__ai-title",children:"I have a suggestion for you."}),a.jsxs("div",{className:"chat-sdk__patch-content",children:[a.jsx("div",{className:"chat-sdk__patch-label",children:"Original"}),a.jsx("div",{className:"chat-sdk__patch-block",children:n.patchData.originalText}),a.jsx("div",{className:"chat-sdk__patch-label",children:"Improved"}),a.jsxs("div",{className:"chat-sdk__patch-block",children:[n.patchData.improvedText,n.isStreaming&&a.jsx(oe,{})]})]})]}):a.jsx(a.Fragment,{children:n.content&&a.jsxs("div",{className:"chat-sdk__ai-body",children:[n.content,t&&a.jsx(oe,{}),n.isStreaming&&!t&&a.jsx(oe,{})]})})})})}function oe(){return a.jsxs("span",{className:"chat-sdk__stream",children:[a.jsx("span",{}),a.jsx("span",{}),a.jsx("span",{})]})}T.ChatProvider=Ot,T.ChatWidget=Rt,T.useChat=xe,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=translation-chat-sdk.umd.js.map