@tangle-network/sandbox 0.1.2 → 0.2.1

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 +1,667 @@
1
- const a0_0x544454=a0_0x4306;(function(_0x25b3ad,_0x56356c){const _0x388ba9=a0_0x4306,_0x41868a=_0x25b3ad();while(!![]){try{const _0x3eb7ce=-parseInt(_0x388ba9(0xb9))/0x1+parseInt(_0x388ba9(0x15e))/0x2*(-parseInt(_0x388ba9(0x110))/0x3)+parseInt(_0x388ba9(0xe8))/0x4*(parseInt(_0x388ba9(0x181))/0x5)+parseInt(_0x388ba9(0x16e))/0x6+parseInt(_0x388ba9(0xc5))/0x7*(-parseInt(_0x388ba9(0x16b))/0x8)+-parseInt(_0x388ba9(0xe0))/0x9*(-parseInt(_0x388ba9(0x142))/0xa)+parseInt(_0x388ba9(0x173))/0xb;if(_0x3eb7ce===_0x56356c)break;else _0x41868a['push'](_0x41868a['shift']());}catch(_0x2e11f0){_0x41868a['push'](_0x41868a['shift']());}}}(a0_0x5ae1,0x8338d));const INITIAL_METRICS={'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':null,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':null,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':0x0,'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':0x0,'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':null,'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':null,'\x71\x75\x61\x6c\x69\x74\x79':a0_0x544454(0x114)};function calculateConnectionQuality(_0xd03a1c,_0x4be5a9){const _0x44c2a7=a0_0x544454,_0xeef03f={'\x62\x55\x6d\x43\x43':_0x44c2a7(0x114),'\x45\x66\x56\x69\x79':function(_0x2637b6,_0x4c50d7){return _0x2637b6-_0x4c50d7;},'\x5a\x57\x76\x64\x4b':function(_0x1374ce,_0x11fcb1){return _0x1374ce>=_0x11fcb1;},'\x56\x4c\x42\x71\x74':function(_0x56093a,_0x2067b5){return _0x56093a>_0x2067b5;},'\x51\x72\x4f\x69\x6f':'\x70\x6f\x6f\x72','\x41\x54\x5a\x71\x6c':function(_0x47aecf,_0x4410ec){return _0x47aecf>_0x4410ec;},'\x4b\x48\x52\x69\x6f':function(_0x473426,_0xc6312c){return _0x473426!==_0xc6312c;},'\x74\x6e\x4b\x56\x56':function(_0x38d2d5,_0x9f0a7a){return _0x38d2d5===_0x9f0a7a;},'\x45\x71\x58\x51\x78':function(_0x43b96b,_0x12f6e2){return _0x43b96b<=_0x12f6e2;},'\x4c\x5a\x55\x54\x68':_0x44c2a7(0xb3)};if(!_0x4be5a9)return _0xeef03f['\x62\x55\x6d\x43\x43'];const {avgPingLatencyMs:_0x303f06,missedPongCount:_0x87a7a1,reconnectCount:_0x337194,lastReconnectAt:_0x19be9b}=_0xd03a1c,_0x173e2a=_0x19be9b&&_0xeef03f['\x45\x66\x56\x69\x79'](Date['\x6e\x6f\x77'](),_0x19be9b)<0x12c*0x3e8;if(_0xeef03f[_0x44c2a7(0x9a)](_0x87a7a1,0x2)||_0x173e2a&&_0xeef03f[_0x44c2a7(0xcc)](_0x337194,0x1))return _0xeef03f[_0x44c2a7(0xae)];if(_0x87a7a1>=0x1||_0x303f06!==null&&_0xeef03f[_0x44c2a7(0xfe)](_0x303f06,0x3e8)||_0x173e2a)return'\x64\x65\x67\x72\x61\x64\x65\x64';if(_0xeef03f['\x4b\x48\x52\x69\x6f'](_0x303f06,null)&&_0x303f06<0x64&&_0xeef03f[_0x44c2a7(0x148)](_0x337194,0x0))return _0x44c2a7(0xac);if(_0x303f06!==null&&_0xeef03f[_0x44c2a7(0xad)](_0x303f06,0x12c))return _0xeef03f[_0x44c2a7(0xb0)];return _0x44c2a7(0xb3);}const DEFAULT_CONFIG={'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':a0_0x544454(0x15d),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':['\x2a'],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':!![],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':0xa,'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':0x3e8,'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':0x7530,'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':0x7530,'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':0x2710,'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':0x2,'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':!![],'\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65':0x3e8,'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':![],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':a0_0x544454(0x17d),'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':0xa},STORAGE_KEYS={'\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64':a0_0x544454(0x91),'\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64':a0_0x544454(0x139),'\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':'\x73\x65\x73\x73\x69\x6f\x6e\x5f\x69\x64'},WIRE_TYPE_MAP={'\x73\x69\x64\x65\x63\x61\x72\x2e\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0x544454(0xec),'\x73\x69\x64\x65\x63\x61\x72\x2e\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0x544454(0xc0),'\x73\x69\x64\x65\x63\x61\x72\x2e\x6e\x6f\x74\x5f\x66\x6f\x75\x6e\x64':a0_0x544454(0x127),'\x73\x69\x64\x65\x63\x61\x72\x2e\x72\x65\x61\x64\x79':a0_0x544454(0x185)};function a0_0x4306(_0x416134,_0x2dae7e){_0x416134=_0x416134-0x91;const _0x5ae1c5=a0_0x5ae1();let _0x430636=_0x5ae1c5[_0x416134];if(a0_0x4306['\x45\x42\x59\x70\x54\x6c']===undefined){var _0x4eeec0=function(_0x1b3f63){const _0x48b4d8='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x3e253f='',_0x736d51='';for(let _0x337a08=0x0,_0x163b96,_0x355f96,_0x26a697=0x0;_0x355f96=_0x1b3f63['\x63\x68\x61\x72\x41\x74'](_0x26a697++);~_0x355f96&&(_0x163b96=_0x337a08%0x4?_0x163b96*0x40+_0x355f96:_0x355f96,_0x337a08++%0x4)?_0x3e253f+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x163b96>>(-0x2*_0x337a08&0x6)):0x0){_0x355f96=_0x48b4d8['\x69\x6e\x64\x65\x78\x4f\x66'](_0x355f96);}for(let _0x15c9c7=0x0,_0x224308=_0x3e253f['\x6c\x65\x6e\x67\x74\x68'];_0x15c9c7<_0x224308;_0x15c9c7++){_0x736d51+='\x25'+('\x30\x30'+_0x3e253f['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x15c9c7)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0x736d51);};a0_0x4306['\x7a\x56\x64\x73\x62\x44']=_0x4eeec0,a0_0x4306['\x54\x4a\x57\x45\x65\x70']={},a0_0x4306['\x45\x42\x59\x70\x54\x6c']=!![];}const _0x1e46b3=_0x5ae1c5[0x0],_0x4c626f=_0x416134+_0x1e46b3,_0x312e1f=a0_0x4306['\x54\x4a\x57\x45\x65\x70'][_0x4c626f];return!_0x312e1f?(_0x430636=a0_0x4306['\x7a\x56\x64\x73\x62\x44'](_0x430636),a0_0x4306['\x54\x4a\x57\x45\x65\x70'][_0x4c626f]=_0x430636):_0x430636=_0x312e1f,_0x430636;}var MemoryStorage=class{[a0_0x544454(0x158)]=new Map();[a0_0x544454(0x106)](_0x4a09a8){const _0x21bac0=a0_0x544454;return this['\x73\x74\x6f\x72\x65'][_0x21bac0(0x123)](_0x4a09a8)??null;}[a0_0x544454(0x105)](_0x3087e0,_0x317ddd){this['\x73\x74\x6f\x72\x65']['\x73\x65\x74'](_0x3087e0,_0x317ddd);}[a0_0x544454(0xf7)](_0x25346f){const _0x323865=a0_0x544454;this['\x73\x74\x6f\x72\x65'][_0x323865(0xea)](_0x25346f);}},SessionGatewayClient=class{['\x77\x73']=null;[a0_0x544454(0x11c)];[a0_0x544454(0x168)];[a0_0x544454(0xbd)];[a0_0x544454(0x12a)]=![];[a0_0x544454(0x120)]=a0_0x544454(0x114);[a0_0x544454(0x171)]=null;[a0_0x544454(0x15f)]=![];['\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74']=null;['\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74']=null;[a0_0x544454(0x9d)]=null;[a0_0x544454(0xf3)]=0x0;['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']=0x0;[a0_0x544454(0xa8)]=0x0;[a0_0x544454(0xa4)]=0x0;[a0_0x544454(0x128)]=0x0;[a0_0x544454(0x104)]=0x0;[a0_0x544454(0x131)]=null;[a0_0x544454(0xc6)]=null;[a0_0x544454(0xb8)]=null;['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73']=new Map();[a0_0x544454(0x137)]=0x0;[a0_0x544454(0x109)]=new Set();[a0_0x544454(0xf5)]=[];['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...INITIAL_METRICS};[a0_0x544454(0x15b)]=null;[a0_0x544454(0x179)]=null;[a0_0x544454(0xe2)]=null;['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=![];[a0_0x544454(0xa3)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0};constructor(_0x1feb6a){const _0x93efc=a0_0x544454,_0x4a0540={'\x4f\x52\x4b\x4d\x58':_0x93efc(0xa0),'\x62\x4d\x6a\x6f\x61':'\x5f\x5f\x74\x65\x73\x74\x5f\x5f'};let _0x5a700d;if(_0x1feb6a[_0x93efc(0x9c)])_0x5a700d=_0x1feb6a[_0x93efc(0x9c)];else{if(typeof globalThis!==_0x93efc(0x102)&&_0x4a0540[_0x93efc(0x121)]in globalThis)try{const _0x481354=_0x4a0540[_0x93efc(0x99)];localStorage[_0x93efc(0x105)](_0x481354,_0x481354),localStorage[_0x93efc(0xf7)](_0x481354),_0x5a700d=localStorage;}catch{_0x5a700d=new MemoryStorage();}else _0x5a700d=new MemoryStorage();}this[_0x93efc(0x11c)]={'\x75\x72\x6c':_0x1feb6a[_0x93efc(0xe4)],'\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':_0x1feb6a[_0x93efc(0x141)],'\x74\x6f\x6b\x65\x6e':_0x1feb6a['\x74\x6f\x6b\x65\x6e'],'\x6f\x6e\x54\x6f\x6b\x65\x6e\x52\x65\x66\x72\x65\x73\x68':_0x1feb6a[_0x93efc(0x13c)],'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':_0x1feb6a['\x74\x72\x61\x6e\x73\x70\x6f\x72\x74']??DEFAULT_CONFIG['\x74\x72\x61\x6e\x73\x70\x6f\x72\x74'],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x1feb6a[_0x93efc(0xdd)]??DEFAULT_CONFIG[_0x93efc(0xdd)],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':_0x1feb6a['\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74']??DEFAULT_CONFIG[_0x93efc(0x12b)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':_0x1feb6a[_0x93efc(0xd3)]??DEFAULT_CONFIG[_0x93efc(0xd3)],'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x1feb6a['\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73']??DEFAULT_CONFIG[_0x93efc(0x111)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x1feb6a[_0x93efc(0xf9)]??DEFAULT_CONFIG[_0x93efc(0xf9)],'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':_0x1feb6a[_0x93efc(0xdb)]??DEFAULT_CONFIG['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73'],'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':_0x1feb6a[_0x93efc(0x112)]??DEFAULT_CONFIG[_0x93efc(0x112)],'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':_0x1feb6a[_0x93efc(0x14c)]??DEFAULT_CONFIG[_0x93efc(0x14c)],'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':_0x1feb6a[_0x93efc(0xf6)]??DEFAULT_CONFIG['\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e'],'\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65':_0x1feb6a[_0x93efc(0x135)]??DEFAULT_CONFIG[_0x93efc(0x135)],'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':_0x1feb6a['\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65']??DEFAULT_CONFIG[_0x93efc(0xf4)],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65':_0x5a700d,'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':_0x1feb6a[_0x93efc(0x129)]??DEFAULT_CONFIG[_0x93efc(0x129)],'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':_0x1feb6a['\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65']??DEFAULT_CONFIG[_0x93efc(0x16a)]},this[_0x93efc(0x168)]=_0x1feb6a['\x68\x61\x6e\x64\x6c\x65\x72\x73']??{},this[_0x93efc(0xbd)]=_0x1feb6a[_0x93efc(0x154)];if(this[_0x93efc(0x11c)][_0x93efc(0xf4)])this[_0x93efc(0xfc)]();}[a0_0x544454(0xbb)](){const _0x319b95=a0_0x544454,_0x58696e={'\x48\x49\x44\x50\x62':_0x319b95(0xe3)};if(this[_0x319b95(0x120)]===_0x319b95(0x13f)||this[_0x319b95(0x120)]===_0x58696e[_0x319b95(0x97)])return;const _0xafe0ff=this[_0x319b95(0x15f)];this[_0x319b95(0x143)](_0xafe0ff?_0x319b95(0xaf):'\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67'),this[_0x319b95(0x15a)]();}[a0_0x544454(0x15a)](){const _0x15ec8f=a0_0x544454,_0x400995={'\x61\x4e\x47\x67\x53':'\x74\x6f\x6b\x65\x6e'},_0x1a89ba=new URL(this['\x63\x6f\x6e\x66\x69\x67'][_0x15ec8f(0xe4)]);_0x1a89ba['\x73\x65\x61\x72\x63\x68\x50\x61\x72\x61\x6d\x73'][_0x15ec8f(0x159)](_0x400995[_0x15ec8f(0x164)],this[_0x15ec8f(0xbd)]),this['\x77\x73']=new WebSocket(_0x1a89ba[_0x15ec8f(0x13b)]()),this['\x77\x73'][_0x15ec8f(0x94)]=()=>this[_0x15ec8f(0xd0)](),this['\x77\x73']['\x6f\x6e\x63\x6c\x6f\x73\x65']=_0x276256=>this[_0x15ec8f(0xf1)](_0x276256['\x63\x6f\x64\x65'],_0x276256[_0x15ec8f(0xbf)]),this['\x77\x73'][_0x15ec8f(0x107)]=_0x47144f=>{},this['\x77\x73'][_0x15ec8f(0x17e)]=_0x1d44bf=>this[_0x15ec8f(0xa9)](_0x1d44bf[_0x15ec8f(0xed)]);}['\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74'](){const _0x34b23f=a0_0x544454,_0x428421={'\x6d\x47\x42\x62\x46':_0x34b23f(0xa1),'\x4a\x74\x63\x56\x69':'\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'};this[_0x34b23f(0xfb)](),this['\x77\x73']&&(this['\x77\x73'][_0x34b23f(0x16f)](0x3e8,_0x428421[_0x34b23f(0xc1)]),this['\x77\x73']=null),this[_0x34b23f(0x143)](_0x428421['\x4a\x74\x63\x56\x69']);}async[a0_0x544454(0x93)](_0x5188d3){const _0x3ac274=a0_0x544454,_0x5dc0f0={'\x76\x43\x78\x65\x49':_0x3ac274(0x93)};return(await this[_0x3ac274(0x92)]({'\x74\x79\x70\x65':_0x5dc0f0[_0x3ac274(0x113)],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x5188d3}))[_0x3ac274(0xdd)];}async['\x75\x6e\x73\x75\x62\x73\x63\x72\x69\x62\x65'](_0xac5dfd){const _0x3fb31b=a0_0x544454;return(await this[_0x3fb31b(0x92)]({'\x74\x79\x70\x65':_0x3fb31b(0x95),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0xac5dfd}))[_0x3fb31b(0xdd)];}async[a0_0x544454(0x126)](){const _0x312eda=a0_0x544454,_0x8475d9={'\x56\x76\x64\x59\x42':_0x312eda(0x126)},_0xfbde54=Date[_0x312eda(0xe6)]();return await this[_0x312eda(0x92)]({'\x74\x79\x70\x65':_0x8475d9[_0x312eda(0x132)]}),Date[_0x312eda(0xe6)]()-_0xfbde54;}['\x72\x65\x70\x6c\x61\x79'](_0x547a96){const _0x10ada4=a0_0x544454;this[_0x10ada4(0x180)]({'\x74\x79\x70\x65':_0x10ada4(0x10b),'\x73\x69\x6e\x63\x65':_0x547a96});}[a0_0x544454(0x155)](_0x2a3224,_0x44ab43){const _0x4d60e1=a0_0x544454;if(!this[_0x4d60e1(0xc4)]())return![];return this[_0x4d60e1(0x180)]({'\x74\x79\x70\x65':_0x4d60e1(0x175),'\x64\x61\x74\x61':{'\x74\x65\x72\x6d\x69\x6e\x61\x6c\x49\x64':_0x2a3224,'\x69\x6e\x70\x75\x74':_0x44ab43}}),!![];}['\x73\x65\x74\x53\x65\x73\x73\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74'](_0x55a2bb,_0x258be4){const _0xe20e00=a0_0x544454;this[_0xe20e00(0xe2)]=_0x55a2bb;if(_0x258be4)this[_0xe20e00(0x179)]=_0x258be4;this[_0xe20e00(0x138)]();}[a0_0x544454(0xb4)](){const _0x417d64=a0_0x544454,_0x4358da={'\x46\x6a\x43\x4c\x41':function(_0x521e2c,_0x2cb258){return _0x521e2c+_0x2cb258;}};this['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64']=null,this[_0x417d64(0x179)]=null,this[_0x417d64(0xe2)]=null,this[_0x417d64(0x9f)]=![],this[_0x417d64(0xa3)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this[_0x417d64(0x109)]['\x63\x6c\x65\x61\x72'](),this[_0x417d64(0x104)]=0x0;if(this[_0x417d64(0x11c)][_0x417d64(0xf4)]){const _0x247414=this[_0x417d64(0x11c)][_0x417d64(0x129)];try{this[_0x417d64(0x11c)][_0x417d64(0x9c)][_0x417d64(0xf7)](_0x4358da['\x46\x6a\x43\x4c\x41'](_0x247414,STORAGE_KEYS['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64'])),this[_0x417d64(0x11c)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65']['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x247414+STORAGE_KEYS[_0x417d64(0x162)]),this[_0x417d64(0x11c)][_0x417d64(0x9c)]['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x247414+STORAGE_KEYS['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64']);}catch{}}}[a0_0x544454(0x10d)](){const _0x353ac9=a0_0x544454;return{'\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67':this[_0x353ac9(0x9f)],'\x70\x72\x6f\x67\x72\x65\x73\x73':{...this[_0x353ac9(0xa3)]}};}['\x67\x65\x74\x53\x74\x61\x74\x73'](){const _0x209f74=a0_0x544454;return{'\x73\x74\x61\x74\x65':this[_0x209f74(0x120)],'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74':this['\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74'],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74':this[_0x209f74(0x166)],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':this[_0x209f74(0x149)],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73'],'\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x209f74(0xa8)],'\x6d\x65\x73\x73\x61\x67\x65\x73\x53\x65\x6e\x74':this[_0x209f74(0xa4)],'\x65\x76\x65\x6e\x74\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x209f74(0x128)],'\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64':this[_0x209f74(0x104)],'\x6d\x65\x74\x72\x69\x63\x73':{...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']},'\x72\x65\x70\x6c\x61\x79':this['\x67\x65\x74\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']()};}[a0_0x544454(0x16d)](){const _0xb7806e=a0_0x544454;return this[_0xb7806e(0x120)];}[a0_0x544454(0xc4)](){const _0x44bc0f=a0_0x544454,_0x3ee108={'\x55\x55\x55\x79\x77':function(_0x41ebda,_0x18270e){return _0x41ebda===_0x18270e;}};return _0x3ee108[_0x44bc0f(0xe7)](this[_0x44bc0f(0x120)],_0x44bc0f(0x13f));}[a0_0x544454(0x153)](){const _0x2460cb=a0_0x544454;return this[_0x2460cb(0x17a)][_0x2460cb(0xd2)];}[a0_0x544454(0x178)](){return{...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']};}[a0_0x544454(0x101)](){const _0x34e84f=a0_0x544454;this[_0x34e84f(0xf5)]=[],this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...INITIAL_METRICS},this[_0x34e84f(0x168)][_0x34e84f(0x96)]?.(this[_0x34e84f(0x17a)]);}['\x75\x70\x64\x61\x74\x65\x54\x6f\x6b\x65\x6e'](_0x259b0c){const _0x461341=a0_0x544454,_0x103290={'\x65\x66\x50\x59\x55':'\x54\x6f\x6b\x65\x6e\x20\x72\x65\x66\x72\x65\x73\x68\x65\x64'};this[_0x461341(0xbd)]=_0x259b0c;if(this[_0x461341(0x120)]===_0x461341(0x13f)&&this['\x77\x73'])this['\x77\x73'][_0x461341(0x16f)](0x3e8,_0x103290['\x65\x66\x50\x59\x55']);}[a0_0x544454(0x140)](){const _0x52f10f=a0_0x544454;return this[_0x52f10f(0xbd)];}[a0_0x544454(0x143)](_0x5707f6){const _0x58e1f7=a0_0x544454,_0x3a2938={'\x52\x50\x75\x72\x69':function(_0x27f27a,_0x58b98d){return _0x27f27a!==_0x58b98d;}};_0x3a2938[_0x58e1f7(0xdf)](this['\x73\x74\x61\x74\x65'],_0x5707f6)&&(this['\x73\x74\x61\x74\x65']=_0x5707f6,this[_0x58e1f7(0x118)](),this[_0x58e1f7(0x168)][_0x58e1f7(0xe5)]?.(_0x5707f6));}['\x68\x61\x6e\x64\x6c\x65\x4f\x70\x65\x6e'](){const _0x53f376=a0_0x544454,_0xd28223=this[_0x53f376(0x15f)];this[_0x53f376(0x15f)]=!![],this[_0x53f376(0x143)]('\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'),this[_0x53f376(0x171)]=Date['\x6e\x6f\x77'](),this[_0x53f376(0xd6)]=0x0,this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']=0x0,this[_0x53f376(0x133)](),this[_0x53f376(0x9b)](),_0xd28223&&(this[_0x53f376(0xcd)](),this[_0x53f376(0x168)][_0x53f376(0x11b)]?.());}[a0_0x544454(0xf1)](_0x529481,_0x2b58ce){const _0x53f0fa=a0_0x544454,_0x4df5f2={'\x70\x52\x41\x4c\x6e':function(_0x43d6b5,_0x3a6037){return _0x43d6b5<_0x3a6037;}};this[_0x53f0fa(0xfb)](),this[_0x53f0fa(0x168)][_0x53f0fa(0x14b)]?.(_0x529481,_0x2b58ce);if(this[_0x53f0fa(0x11c)][_0x53f0fa(0x12b)]&&_0x4df5f2[_0x53f0fa(0xf2)](this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73'],this['\x63\x6f\x6e\x66\x69\x67'][_0x53f0fa(0xd3)]))this[_0x53f0fa(0x98)]();else this[_0x53f0fa(0x143)](_0x53f0fa(0x114));}[a0_0x544454(0xa9)](_0x17565f){const _0x2dff36=a0_0x544454,_0xb84374={'\x4f\x70\x65\x67\x47':function(_0x5a58c1,_0x48ed42){return _0x5a58c1!==_0x48ed42;},'\x4c\x67\x61\x74\x77':_0x2dff36(0xc7),'\x6b\x72\x41\x64\x64':function(_0x52b491,_0x47e93c){return _0x52b491===_0x47e93c;},'\x6a\x43\x6c\x4f\x79':function(_0x1ca6ec,_0x59319e){return _0x1ca6ec in _0x59319e;},'\x63\x4b\x76\x6c\x6a':function(_0x7530a0,_0x4b30df){return _0x7530a0>_0x4b30df;},'\x54\x56\x55\x67\x6c':function(_0x3d633c,_0x4d1df2){return _0x3d633c*_0x4d1df2;}};this[_0x2dff36(0xa8)]++;try{const _0x460aa1=JSON['\x70\x61\x72\x73\x65'](_0x17565f);if(!_0x460aa1[_0x2dff36(0x122)]&&_0x460aa1[_0x2dff36(0x11d)])_0x460aa1[_0x2dff36(0x122)]=_0x460aa1['\x6d\x65\x73\x73\x61\x67\x65\x54\x79\x70\x65'];if(typeof _0x460aa1[_0x2dff36(0x122)]===_0x2dff36(0x17b)&&_0xb84374[_0x2dff36(0x10c)](WIRE_TYPE_MAP[_0x460aa1[_0x2dff36(0x122)]],void 0x0))_0x460aa1['\x74\x79\x70\x65']=WIRE_TYPE_MAP[_0x460aa1[_0x2dff36(0x122)]];if(_0x460aa1[_0x2dff36(0xed)]&&typeof _0x460aa1[_0x2dff36(0xed)]===_0xb84374[_0x2dff36(0x17f)]){const _0x3df264=_0x460aa1[_0x2dff36(0xed)];if(_0x3df264['\x73\x69\x64\x65\x63\x61\x72\x49\x64']!==void 0x0&&_0xb84374[_0x2dff36(0xab)](_0x3df264[_0x2dff36(0x145)],void 0x0))_0x3df264[_0x2dff36(0x145)]=_0x3df264[_0x2dff36(0x16c)];}if(_0x460aa1['\x74\x79\x70\x65']===_0x2dff36(0xd8)&&!_0x460aa1[_0x2dff36(0xed)]&&_0x460aa1['\x63\x68\x61\x6e\x6e\x65\x6c']){const {type:_0x3bb88a,messageType:_0x5a4fe6,channel:_0x32cb13,id:_0x57208e,sequenceId:_0x5b32e2,timestamp:_0x13fbef,..._0x3e385e}=_0x460aa1;_0x460aa1[_0x2dff36(0xed)]=_0x3e385e;}if(_0x460aa1[_0x2dff36(0x122)]===_0x2dff36(0x17c)){this[_0x2dff36(0x124)](_0x460aa1[_0x2dff36(0x14e)]);return;}if(_0xb84374[_0x2dff36(0x174)]('\x69\x64',_0x460aa1)&&_0x460aa1['\x69\x64']&&this['\x63\x6f\x6e\x66\x69\x67'][_0x2dff36(0xf6)]){const _0x4a01a6=_0x460aa1['\x69\x64'];if(this[_0x2dff36(0x109)][_0x2dff36(0x172)](_0x4a01a6)){this['\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64']++;return;}this[_0x2dff36(0x109)][_0x2dff36(0xb7)](_0x4a01a6);if(_0xb84374[_0x2dff36(0xda)](this[_0x2dff36(0x109)][_0x2dff36(0x11e)],this[_0x2dff36(0x11c)][_0x2dff36(0x135)])){const _0x2f2732=Math[_0x2dff36(0xd1)](_0xb84374[_0x2dff36(0x125)](this[_0x2dff36(0x11c)][_0x2dff36(0x135)],0.1));let _0x4f6311=0x0;for(const _0x24c93e of this['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73']){if(_0x4f6311>=_0x2f2732)break;this[_0x2dff36(0x109)][_0x2dff36(0xea)](_0x24c93e),_0x4f6311++;}}this[_0x2dff36(0x15b)]=_0x4a01a6,this[_0x2dff36(0x138)]();}this[_0x2dff36(0x151)](_0x460aa1);}catch{}}[a0_0x544454(0x124)](_0x37f647){const _0x3170ff=a0_0x544454,_0x2c2891={'\x41\x6c\x55\x57\x44':function(_0x34e117,_0x4df4b7){return _0x34e117>_0x4df4b7;}},_0x4f2b38=Date[_0x3170ff(0xe6)]();this[_0x3170ff(0x149)]=_0x37f647,this[_0x3170ff(0xf3)]=0x0,this[_0x3170ff(0x14a)]();if(this['\x6c\x61\x73\x74\x50\x69\x6e\x67\x53\x65\x6e\x74\x41\x74']){const _0x9a4c58=_0x4f2b38-this[_0x3170ff(0x9d)];this[_0x3170ff(0xf5)][_0x3170ff(0x12e)](_0x9a4c58);if(_0x2c2891[_0x3170ff(0xef)](this[_0x3170ff(0xf5)]['\x6c\x65\x6e\x67\x74\x68'],this[_0x3170ff(0x11c)]['\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65']))this[_0x3170ff(0xf5)]['\x73\x68\x69\x66\x74']();this[_0x3170ff(0xc3)](_0x9a4c58,_0x4f2b38);}}[a0_0x544454(0x151)](_0x448cd6){const _0x3ebf30=a0_0x544454,_0x124678={'\x73\x54\x77\x47\x50':_0x3ebf30(0x136),'\x61\x69\x67\x50\x50':function(_0x3d8aec,_0x4e47a9){return _0x3d8aec in _0x4e47a9;},'\x41\x4a\x4b\x48\x64':_0x3ebf30(0xed),'\x58\x78\x4d\x76\x67':_0x3ebf30(0xec),'\x73\x6f\x64\x74\x52':'\x72\x75\x6e\x74\x69\x6d\x65\x2e\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64','\x55\x51\x58\x65\x67':'\x69\x6e\x76\x61\x6c\x69\x64\x5f\x70\x61\x79\x6c\x6f\x61\x64','\x4f\x6b\x69\x4b\x64':'\x70\x6f\x72\x74\x2e\x63\x6c\x6f\x73\x65\x64','\x51\x77\x51\x4c\x76':_0x3ebf30(0xb5),'\x5a\x67\x51\x7a\x69':_0x3ebf30(0xce),'\x57\x53\x50\x77\x52':_0x3ebf30(0xd9),'\x61\x71\x44\x6b\x74':'\x74\x6f\x6b\x65\x6e\x2e\x65\x78\x70\x69\x72\x65\x64','\x6c\x4e\x6b\x44\x69':_0x3ebf30(0x108)};if('\x69\x64'in _0x448cd6&&_0x448cd6['\x69\x64']){const _0x1d52b1=this[_0x3ebf30(0xb2)][_0x3ebf30(0x123)](_0x448cd6['\x69\x64']);if(_0x1d52b1){this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73'][_0x3ebf30(0xea)](_0x448cd6['\x69\x64']);if(_0x448cd6[_0x3ebf30(0x122)]===_0x124678['\x73\x54\x77\x47\x50'])_0x1d52b1[_0x3ebf30(0xde)](new Error(_0x448cd6['\x6d\x65\x73\x73\x61\x67\x65']));else _0x1d52b1[_0x3ebf30(0x15c)](_0x124678[_0x3ebf30(0x183)](_0x124678[_0x3ebf30(0xba)],_0x448cd6)?_0x448cd6[_0x3ebf30(0xed)]:void 0x0);return;}}switch(_0x448cd6[_0x3ebf30(0x122)]){case'\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x2e\x65\x73\x74\x61\x62\x6c\x69\x73\x68\x65\x64':this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x3ebf30(0xf8)]?.(_0x448cd6['\x64\x61\x74\x61'][_0x3ebf30(0x141)]);break;case _0x124678[_0x3ebf30(0x134)]:this[_0x3ebf30(0x168)][_0x3ebf30(0xca)]?.(_0x448cd6['\x64\x61\x74\x61'][_0x3ebf30(0x145)],_0x448cd6['\x64\x61\x74\x61'][_0x3ebf30(0x177)]);break;case _0x124678[_0x3ebf30(0x130)]:this[_0x3ebf30(0x168)][_0x3ebf30(0x14f)]?.(_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0x145)],_0x448cd6['\x64\x61\x74\x61']['\x65\x72\x72\x6f\x72']);break;case _0x3ebf30(0x127):this[_0x3ebf30(0x168)][_0x3ebf30(0x115)]?.(_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0x141)],_0x448cd6['\x64\x61\x74\x61']['\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x49\x64'],_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0xbf)]);break;case _0x3ebf30(0xbc):{const _0x2bf9bc=_0x448cd6[_0x3ebf30(0xed)],_0x12b6a9=_0x2bf9bc[_0x3ebf30(0x145)]??_0x2bf9bc[_0x3ebf30(0x16c)];if(_0x12b6a9)this[_0x3ebf30(0x168)][_0x3ebf30(0xfa)]?.(_0x12b6a9);else this[_0x3ebf30(0x168)][_0x3ebf30(0x119)]?.(_0x3ebf30(0xcf),_0x124678[_0x3ebf30(0xd7)]);break;}case _0x3ebf30(0x185):this[_0x3ebf30(0x168)][_0x3ebf30(0xe1)]?.(_0x448cd6[_0x3ebf30(0xed)]);break;case'\x70\x6f\x72\x74\x2e\x6f\x70\x65\x6e\x65\x64':this[_0x3ebf30(0x168)][_0x3ebf30(0xeb)]?.(_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0xaa)],_0x448cd6['\x64\x61\x74\x61'][_0x3ebf30(0xe9)],_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0x163)]);break;case _0x124678['\x4f\x6b\x69\x4b\x64']:this[_0x3ebf30(0x168)][_0x3ebf30(0x157)]?.(_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0xaa)]);break;case _0x3ebf30(0xd8):this[_0x3ebf30(0x128)]++,this[_0x3ebf30(0x156)](_0x448cd6[_0x3ebf30(0xed)]),this[_0x3ebf30(0x168)][_0x3ebf30(0x144)]?.(_0x448cd6[_0x3ebf30(0x150)],_0x448cd6['\x64\x61\x74\x61'],_0x448cd6[_0x3ebf30(0x116)]);break;case _0x3ebf30(0x182):this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=!![],this[_0x3ebf30(0xa3)]={'\x74\x6f\x74\x61\x6c':_0x448cd6[_0x3ebf30(0x169)],'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this[_0x3ebf30(0x168)][_0x3ebf30(0x10e)]?.(_0x448cd6[_0x3ebf30(0x169)]);break;case _0x124678[_0x3ebf30(0x146)]:this[_0x3ebf30(0xa3)][_0x3ebf30(0xb1)]=_0x448cd6[_0x3ebf30(0xb1)],this[_0x3ebf30(0x168)][_0x3ebf30(0x13e)]?.(_0x448cd6['\x72\x65\x63\x65\x69\x76\x65\x64'],this[_0x3ebf30(0xa3)]['\x74\x6f\x74\x61\x6c']);break;case _0x124678[_0x3ebf30(0xdc)]:this[_0x3ebf30(0x9f)]=![],this[_0x3ebf30(0x168)][_0x3ebf30(0x13d)]?.(_0x448cd6[_0x3ebf30(0x169)]);break;case _0x3ebf30(0x136):this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x3ebf30(0x119)]?.(_0x448cd6[_0x3ebf30(0x10f)],_0x448cd6[_0x3ebf30(0x117)]);break;case _0x124678['\x57\x53\x50\x77\x52']:this[_0x3ebf30(0x168)]['\x6f\x6e\x54\x6f\x6b\x65\x6e\x45\x78\x70\x69\x72\x69\x6e\x67']?.(_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0xf0)]),this[_0x3ebf30(0x11f)]();break;case _0x124678[_0x3ebf30(0x103)]:this[_0x3ebf30(0x168)]['\x6f\x6e\x54\x6f\x6b\x65\x6e\x45\x78\x70\x69\x72\x65\x64']?.();break;case _0x124678[_0x3ebf30(0xee)]:this[_0x3ebf30(0x168)]['\x6f\x6e\x42\x61\x63\x6b\x70\x72\x65\x73\x73\x75\x72\x65\x57\x61\x72\x6e\x69\x6e\x67']?.(_0x448cd6['\x64\x61\x74\x61']['\x64\x72\x6f\x70\x70\x65\x64\x43\x6f\x75\x6e\x74'],_0x448cd6['\x64\x61\x74\x61']['\x73\x69\x6e\x63\x65'],_0x448cd6[_0x3ebf30(0xed)][_0x3ebf30(0x12c)]);break;}}[a0_0x544454(0x156)](_0x46b4e7){const _0x5371a3=a0_0x544454,_0x588133={'\x6c\x62\x71\x47\x6b':'\x6f\x62\x6a\x65\x63\x74'};if(typeof _0x46b4e7!==_0x588133[_0x5371a3(0x161)]||_0x46b4e7===null)return;const _0x3e558d=_0x46b4e7;_0x3e558d[_0x5371a3(0x162)]&&(this[_0x5371a3(0x179)]=_0x3e558d[_0x5371a3(0x162)],this[_0x5371a3(0x138)]()),_0x3e558d['\x74\x79\x70\x65']===_0x5371a3(0x147)&&_0x3e558d[_0x5371a3(0x141)]&&(this[_0x5371a3(0xe2)]=_0x3e558d[_0x5371a3(0x141)],this[_0x5371a3(0x138)]());}async[a0_0x544454(0x11f)](){const _0x10f1ea=a0_0x544454,_0x33b17e={'\x42\x77\x44\x4b\x46':'\x54\x4f\x4b\x45\x4e\x5f\x52\x45\x46\x52\x45\x53\x48\x5f\x46\x41\x49\x4c\x45\x44'};if(!this[_0x10f1ea(0x11c)][_0x10f1ea(0x13c)]||this['\x69\x73\x52\x65\x66\x72\x65\x73\x68\x69\x6e\x67\x54\x6f\x6b\x65\x6e'])return;this['\x69\x73\x52\x65\x66\x72\x65\x73\x68\x69\x6e\x67\x54\x6f\x6b\x65\x6e']=!![];try{const _0x19d79f=await this['\x63\x6f\x6e\x66\x69\x67'][_0x10f1ea(0x13c)]();this[_0x10f1ea(0x13a)](_0x19d79f[_0x10f1ea(0x154)]);}catch(_0x202fba){this[_0x10f1ea(0x168)][_0x10f1ea(0x119)]?.(_0x10f1ea(0xa2)+(_0x202fba instanceof Error?_0x202fba['\x6d\x65\x73\x73\x61\x67\x65']:String(_0x202fba)),_0x33b17e[_0x10f1ea(0xb6)]);}finally{this[_0x10f1ea(0x12a)]=![];}}[a0_0x544454(0x180)](_0x39af98){const _0xd352c=a0_0x544454;this['\x77\x73']?.['\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65']===WebSocket[_0xd352c(0x12f)]&&(this['\x77\x73'][_0xd352c(0x180)](JSON[_0xd352c(0x165)](_0x39af98)),this['\x6d\x65\x73\x73\x61\x67\x65\x73\x53\x65\x6e\x74']++);}['\x73\x65\x6e\x64\x57\x69\x74\x68\x52\x65\x73\x70\x6f\x6e\x73\x65'](_0x20d54e){const _0x34fe75=a0_0x544454,_0x5864da={'\x67\x48\x76\x71\x66':function(_0x1dc924,_0x214eff){return _0x1dc924(_0x214eff);},'\x65\x52\x78\x74\x49':_0x34fe75(0xd5),'\x6e\x6a\x54\x52\x59':function(_0x12afe0,_0x33f838,_0x550855){return _0x12afe0(_0x33f838,_0x550855);}};return new Promise((_0x27f057,_0x4a21f4)=>{const _0x5241f4=_0x34fe75,_0x121a3f=_0x5241f4(0xa6)+ ++this[_0x5241f4(0x137)];this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73'][_0x5241f4(0x159)](_0x121a3f,{'\x72\x65\x73\x6f\x6c\x76\x65':_0x27f057,'\x72\x65\x6a\x65\x63\x74':_0x4a21f4}),_0x5864da['\x6e\x6a\x54\x52\x59'](setTimeout,()=>{const _0xb150ed=_0x5241f4;this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73'][_0xb150ed(0x172)](_0x121a3f)&&(this[_0xb150ed(0xb2)][_0xb150ed(0xea)](_0x121a3f),_0x5864da[_0xb150ed(0x170)](_0x4a21f4,new Error(_0x5864da[_0xb150ed(0x152)])));},0x2710),this[_0x5241f4(0x180)]({..._0x20d54e,'\x69\x64':_0x121a3f});});}[a0_0x544454(0x9b)](){const _0x4f7fd7=a0_0x544454,_0x1f89b2={'\x70\x70\x6f\x67\x46':function(_0x42b4b6,_0x31157f){return _0x42b4b6>_0x31157f;}},_0x1ad87c=this[_0x4f7fd7(0x11c)][_0x4f7fd7(0xdd)],_0x1d45ae={};if(this[_0x4f7fd7(0x15b)])_0x1d45ae[_0x4f7fd7(0x15b)]=this[_0x4f7fd7(0x15b)];if(this[_0x4f7fd7(0x179)])_0x1d45ae[_0x4f7fd7(0x162)]=this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64'];if(this[_0x4f7fd7(0xe2)])_0x1d45ae[_0x4f7fd7(0x141)]=this[_0x4f7fd7(0xe2)];const _0x78743a=_0x1f89b2[_0x4f7fd7(0xbe)](Object[_0x4f7fd7(0xa5)](_0x1d45ae)[_0x4f7fd7(0x184)],0x0);_0x78743a&&(this[_0x4f7fd7(0x9f)]=!![],this[_0x4f7fd7(0xa3)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0}),this['\x73\x65\x6e\x64']({'\x74\x79\x70\x65':_0x4f7fd7(0x93),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x1ad87c,..._0x78743a?{'\x72\x65\x70\x6c\x61\x79\x4f\x70\x74\x69\x6f\x6e\x73':_0x1d45ae}:{}});}[a0_0x544454(0x133)](){const _0x2a3a26=a0_0x544454;this['\x73\x74\x6f\x70\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](),this[_0x2a3a26(0xc6)]=setInterval(()=>{const _0x91484=_0x2a3a26;this[_0x91484(0xc8)]();},this[_0x2a3a26(0x11c)]['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73']);}[a0_0x544454(0xfd)](){const _0x3f5045=a0_0x544454;this['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c']&&(clearInterval(this[_0x3f5045(0xc6)]),this['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c']=null);}[a0_0x544454(0xc8)](){const _0x44688=a0_0x544454,_0x18a560={'\x74\x67\x63\x6c\x52':_0x44688(0x126),'\x51\x45\x55\x62\x66':function(_0x4761be,_0x4f5f95,_0x406e33){return _0x4761be(_0x4f5f95,_0x406e33);}};if(this['\x77\x73']?.['\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65']!==WebSocket[_0x44688(0x12f)])return;const _0x5c16f0=this[_0x44688(0x149)]?Date[_0x44688(0xe6)]()-this[_0x44688(0x149)]:0x0;if(this['\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74']&&_0x5c16f0>this[_0x44688(0x11c)][_0x44688(0x112)]){this[_0x44688(0xf3)]++,this[_0x44688(0x118)]();if(this[_0x44688(0xf3)]>=this[_0x44688(0x11c)]['\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73']){this['\x77\x73']?.[_0x44688(0x16f)](0xfa0,_0x44688(0x10a));return;}}this[_0x44688(0x166)]=Date[_0x44688(0xe6)](),this[_0x44688(0x9d)]=Date[_0x44688(0xe6)](),this[_0x44688(0x180)]({'\x74\x79\x70\x65':_0x18a560[_0x44688(0x11a)]}),this['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74']=_0x18a560[_0x44688(0x160)](setTimeout,()=>{const _0x29c5ea=_0x44688;this[_0x29c5ea(0xf3)]++,this['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x51\x75\x61\x6c\x69\x74\x79']();},this[_0x44688(0x11c)][_0x44688(0x112)]);}[a0_0x544454(0x14a)](){const _0x4fe442=a0_0x544454;this[_0x4fe442(0xb8)]&&(clearTimeout(this[_0x4fe442(0xb8)]),this[_0x4fe442(0xb8)]=null);}['\x73\x63\x68\x65\x64\x75\x6c\x65\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74'](){const _0x2600f1=a0_0x544454,_0x51797f={'\x43\x66\x58\x6e\x43':function(_0x1535b3,_0xc683d6){return _0x1535b3**_0xc683d6;},'\x45\x66\x6c\x73\x56':function(_0x1a088c,_0x3954b2){return _0x1a088c+_0x3954b2;}};if(this[_0x2600f1(0x131)])return;this[_0x2600f1(0xd6)]++;const _0x1456a3=Math[_0x2600f1(0x100)](this[_0x2600f1(0x11c)]['\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73']*_0x51797f[_0x2600f1(0x9e)](0x2,this[_0x2600f1(0xd6)]-0x1),this[_0x2600f1(0x11c)][_0x2600f1(0xf9)]),_0x11eb36=_0x1456a3*0.3*(Math[_0x2600f1(0x12d)]()*0x2-0x1);this[_0x2600f1(0x131)]=setTimeout(()=>{const _0x3ef453=_0x2600f1;this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']=null,this[_0x3ef453(0xbb)]();},_0x51797f[_0x2600f1(0x14d)](_0x1456a3,_0x11eb36));}[a0_0x544454(0xfb)](){const _0x364748=a0_0x544454,_0x443071={'\x47\x59\x55\x43\x51':_0x364748(0x176)};this[_0x364748(0xfd)](),this['\x63\x6c\x65\x61\x72\x50\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74']();this[_0x364748(0x131)]&&(clearTimeout(this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']),this[_0x364748(0x131)]=null);for(const [_0x12fca3,_0x2eb88b]of this[_0x364748(0xb2)]){_0x2eb88b[_0x364748(0xde)](new Error(_0x443071[_0x364748(0xcb)])),this[_0x364748(0xb2)][_0x364748(0xea)](_0x12fca3);}}[a0_0x544454(0xc3)](_0x4401a2,_0x4fca3d){const _0x46af5a=a0_0x544454,_0x293ee9={'\x6f\x79\x46\x64\x67':function(_0x4cc0cd,_0x216ca1){return _0x4cc0cd>_0x216ca1;}},_0x3f532f=_0x293ee9[_0x46af5a(0xd4)](this[_0x46af5a(0xf5)][_0x46af5a(0x184)],0x0)?this[_0x46af5a(0xf5)]['\x72\x65\x64\x75\x63\x65']((_0x2d6273,_0x415a01)=>_0x2d6273+_0x415a01,0x0)/this['\x70\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79'][_0x46af5a(0x184)]:null;this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this[_0x46af5a(0x17a)],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x4401a2,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x3f532f,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this[_0x46af5a(0xf3)],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':_0x4fca3d},this[_0x46af5a(0x118)]();}['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x51\x75\x61\x6c\x69\x74\x79'](){const _0x163abe=a0_0x544454,_0x377371={'\x78\x4f\x4e\x79\x69':function(_0xf0b1aa,_0x340526){return _0xf0b1aa===_0x340526;}},_0x552ac5=_0x377371[_0x163abe(0xa7)](this[_0x163abe(0x120)],'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'),_0x41f146=calculateConnectionQuality(this[_0x163abe(0x17a)],_0x552ac5);this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'][_0x163abe(0xd2)]!==_0x41f146&&(this[_0x163abe(0x17a)]={...this[_0x163abe(0x17a)],'\x71\x75\x61\x6c\x69\x74\x79':_0x41f146},this['\x68\x61\x6e\x64\x6c\x65\x72\x73']['\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73\x43\x68\x61\x6e\x67\x65']?.(this[_0x163abe(0x17a)]));}[a0_0x544454(0xcd)](){const _0x29628e=a0_0x544454,_0x2f362f={'\x5a\x55\x6d\x7a\x5a':function(_0x458b94,_0x23ed93){return _0x458b94+_0x23ed93;}},_0x2d33a4=Date[_0x29628e(0xe6)]();this[_0x29628e(0x17a)]={...this[_0x29628e(0x17a)],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':_0x2f362f[_0x29628e(0xc9)](this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74'],0x1),'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':_0x2d33a4},this[_0x29628e(0xf5)]=[],this[_0x29628e(0x118)]();}['\x6c\x6f\x61\x64\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65'](){const _0x2af509=a0_0x544454,_0x4a1e72={'\x59\x57\x4c\x64\x54':function(_0x2ddec7,_0x2c9034){return _0x2ddec7+_0x2c9034;}};if(!this[_0x2af509(0x11c)][_0x2af509(0xf4)])return;const _0x25d0b2=this[_0x2af509(0x11c)][_0x2af509(0x129)];try{this[_0x2af509(0x15b)]=this[_0x2af509(0x11c)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65'][_0x2af509(0x106)](_0x4a1e72[_0x2af509(0x167)](_0x25d0b2,STORAGE_KEYS['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64'])),this[_0x2af509(0x179)]=this[_0x2af509(0x11c)][_0x2af509(0x9c)][_0x2af509(0x106)](_0x4a1e72['\x59\x57\x4c\x64\x54'](_0x25d0b2,STORAGE_KEYS[_0x2af509(0x162)])),this[_0x2af509(0xe2)]=this[_0x2af509(0x11c)][_0x2af509(0x9c)][_0x2af509(0x106)](_0x4a1e72[_0x2af509(0x167)](_0x25d0b2,STORAGE_KEYS[_0x2af509(0x141)]));}catch{}}[a0_0x544454(0x138)](){const _0x3c8282=a0_0x544454,_0x5e994b={'\x51\x6e\x62\x47\x72':function(_0x25d83f,_0x8c12de){return _0x25d83f+_0x8c12de;},'\x63\x54\x49\x53\x74':function(_0x238cd5,_0x1c1e99){return _0x238cd5+_0x1c1e99;}};if(!this[_0x3c8282(0x11c)][_0x3c8282(0xf4)])return;const _0xf9d3f9=this[_0x3c8282(0x11c)][_0x3c8282(0x129)];try{if(this['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64'])this[_0x3c8282(0x11c)][_0x3c8282(0x9c)]['\x73\x65\x74\x49\x74\x65\x6d'](_0x5e994b[_0x3c8282(0xff)](_0xf9d3f9,STORAGE_KEYS['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64']),this[_0x3c8282(0x15b)]);if(this[_0x3c8282(0x179)])this[_0x3c8282(0x11c)][_0x3c8282(0x9c)][_0x3c8282(0x105)](_0x5e994b[_0x3c8282(0xc2)](_0xf9d3f9,STORAGE_KEYS[_0x3c8282(0x162)]),this[_0x3c8282(0x179)]);if(this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64'])this['\x63\x6f\x6e\x66\x69\x67'][_0x3c8282(0x9c)][_0x3c8282(0x105)](_0x5e994b[_0x3c8282(0xc2)](_0xf9d3f9,STORAGE_KEYS[_0x3c8282(0x141)]),this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']);}catch{}}};function a0_0x5ae1(){const _0x2963bd=['\x42\x32\x35\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a\x71\x32\x48\x48\x42\x4d\x44\x4c','\x73\x65\x4c\x65\x75\x67\x69','\x43\x32\x6e\x4f\x7a\x77\x72\x31\x42\x67\x76\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x79\x4b\x31\x51\x42\x32\x65','\x77\x4c\x44\x32\x7a\x65\x53','\x43\x4d\x76\x5a\x44\x67\x39\x59\x7a\x76\x6e\x31\x79\x4e\x6e\x4a\x43\x4d\x4c\x57\x44\x67\x4c\x56\x42\x4e\x6d','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x71','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x74\x7a\x77\x35\x30\x71\x78\x71','\x71\x32\x7a\x79\x42\x4b\x6d','\x41\x78\x6e\x73\x7a\x78\x62\x53\x79\x78\x4c\x50\x42\x4d\x43','\x42\x67\x39\x4a\x79\x77\x58\x74\x44\x67\x39\x59\x79\x77\x44\x4c','\x71\x32\x58\x50\x7a\x77\x35\x30\x69\x67\x72\x50\x43\x32\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x76\x67\x39\x52\x7a\x77\x34\x47\x43\x4d\x76\x4d\x43\x4d\x76\x5a\x41\x63\x62\x4d\x79\x77\x4c\x53\x7a\x77\x71\x36\x69\x61','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x68\x6a\x56\x7a\x33\x6a\x4c\x43\x33\x6d','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x74\x7a\x77\x35\x30','\x41\x32\x76\x35\x43\x57','\x42\x78\x6e\x4e\x78\x57','\x45\x65\x39\x6f\x45\x77\x4b','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x73\x7a\x77\x6e\x4c\x41\x78\x7a\x4c\x7a\x61','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x43\x67\x39\x59\x44\x61','\x41\x33\x6a\x62\x7a\x67\x71','\x7a\x78\x48\x4a\x7a\x77\x58\x53\x7a\x77\x35\x30','\x72\x78\x66\x79\x75\x78\x47','\x75\x78\x6a\x70\x41\x77\x38','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x41\x77\x35\x4e','\x74\x66\x50\x76\x76\x67\x47','\x43\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x43\x67\x76\x55\x7a\x67\x4c\x55\x7a\x30\x6e\x48\x42\x67\x58\x49\x79\x77\x6e\x52\x43\x57','\x7a\x32\x39\x56\x7a\x61','\x79\x32\x58\x4c\x79\x78\x6a\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x30\x7a\x71','\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4e\x62\x59\x42\x32\x44\x59\x7a\x78\x6e\x5a','\x71\x4e\x44\x65\x73\x30\x79','\x79\x77\x72\x4b','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x71','\x6e\x74\x43\x32\x6d\x74\x69\x33\x74\x68\x62\x35\x75\x65\x54\x4b','\x71\x75\x50\x6c\x73\x67\x71','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x6c\x4e\x6a\x4c\x79\x77\x72\x35','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x72\x56\x41\x32\x76\x55','\x43\x68\x62\x56\x7a\x30\x79','\x43\x4d\x76\x48\x43\x32\x39\x55','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4b\x41\x78\x6e\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x42\x75\x44\x63\x79\x4b\x79','\x79\x31\x72\x6a\x75\x33\x71','\x44\x78\x62\x4b\x79\x78\x72\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x41\x78\x6e\x64\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x6f\x64\x69\x31\x6e\x5a\x6a\x4a\x45\x77\x39\x6e\x45\x76\x47','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53','\x42\x32\x6a\x51\x7a\x77\x6e\x30','\x43\x32\x76\x55\x7a\x66\x62\x50\x42\x4d\x43','\x77\x4c\x76\x54\x45\x4c\x4f','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x72\x31\x4c\x76\x71\x31\x65','\x76\x4b\x58\x63\x43\x78\x71','\x44\x68\x6a\x48\x79\x32\x54\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x72\x50\x42\x32\x34','\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4d\x6e\x56\x42\x78\x62\x53\x7a\x78\x72\x4c','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x6c\x4e\x6a\x4c\x79\x77\x72\x35\x69\x67\x76\x32\x7a\x77\x35\x30\x69\x68\x6a\x4c\x79\x32\x76\x50\x44\x4d\x76\x4b\x69\x68\x44\x50\x44\x67\x48\x56\x44\x78\x71\x47\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x33\x62\x4c\x42\x47','\x7a\x4d\x58\x56\x42\x33\x69','\x43\x78\x76\x48\x42\x67\x4c\x30\x45\x71','\x42\x77\x66\x34\x75\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x42\x33\x4c\x67\x7a\x67\x43','\x75\x4d\x76\x58\x44\x77\x76\x5a\x44\x63\x62\x30\x41\x77\x31\x4c\x42\x33\x76\x30','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x76\x76\x66\x79\x7a\x77\x43','\x79\x77\x44\x4c\x42\x4e\x71\x55\x7a\x78\x7a\x4c\x42\x4e\x71','\x44\x67\x39\x52\x7a\x77\x34\x55\x7a\x78\x48\x57\x41\x78\x6a\x50\x42\x4d\x43','\x79\x30\x54\x32\x42\x67\x4f','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53\x74\x78\x6d','\x77\x4d\x44\x72\x45\x4d\x4b','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x68\x6d','\x43\x4d\x76\x51\x7a\x77\x6e\x30','\x75\x4c\x62\x31\x43\x4d\x4b','\x6f\x77\x72\x7a\x73\x32\x76\x36\x41\x47','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x75\x4d\x76\x48\x7a\x68\x4b','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x6e\x4c\x43\x33\x6e\x50\x42\x32\x35\x6a\x7a\x61','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x55\x7a\x57','\x44\x78\x6a\x53','\x42\x32\x35\x74\x44\x67\x66\x30\x7a\x75\x6e\x4f\x79\x77\x35\x4e\x7a\x71','\x42\x4d\x39\x33','\x76\x76\x76\x76\x45\x78\x43','\x6e\x74\x4b\x59\x6d\x4a\x75\x59\x7a\x66\x6a\x74\x77\x68\x4c\x75','\x43\x68\x6a\x56\x44\x67\x39\x4a\x42\x32\x57','\x7a\x67\x76\x53\x7a\x78\x72\x4c','\x42\x32\x35\x71\x42\x33\x6a\x30\x74\x33\x62\x4c\x42\x4d\x76\x4b','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x7a\x67\x66\x30\x79\x71','\x42\x65\x35\x52\x72\x67\x4b','\x71\x77\x58\x76\x76\x30\x71','\x43\x32\x76\x4a\x42\x32\x35\x4b\x43\x31\x6a\x4c\x42\x77\x66\x50\x42\x4d\x4c\x55\x7a\x57','\x41\x67\x66\x55\x7a\x67\x58\x4c\x71\x32\x58\x56\x43\x32\x75','\x43\x66\x6a\x62\x74\x67\x34','\x42\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x30\x6e\x56\x44\x77\x35\x30','\x7a\x77\x35\x48\x79\x4d\x58\x4c\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x67\x76\x59\x43\x32\x4c\x5a\x44\x67\x76\x55\x79\x32\x75','\x43\x67\x4c\x55\x7a\x30\x58\x48\x44\x67\x76\x55\x79\x33\x4c\x69\x41\x78\x6e\x30\x42\x33\x6a\x35','\x7a\x77\x35\x48\x79\x4d\x58\x4c\x72\x67\x76\x4b\x44\x78\x62\x53\x41\x77\x6e\x48\x44\x67\x4c\x56\x42\x47','\x43\x4d\x76\x54\x42\x33\x7a\x4c\x73\x78\x72\x4c\x42\x71','\x42\x32\x35\x64\x42\x32\x35\x55\x7a\x77\x6e\x30','\x42\x77\x66\x34\x75\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x72\x67\x76\x53\x79\x78\x4c\x6e\x43\x57','\x42\x32\x35\x64\x42\x32\x35\x30\x79\x77\x4c\x55\x7a\x78\x6a\x73\x7a\x77\x66\x4b\x45\x71','\x79\x32\x58\x4c\x79\x77\x35\x31\x43\x61','\x42\x67\x39\x48\x7a\x66\x6a\x4c\x43\x67\x58\x48\x45\x76\x6e\x30\x79\x78\x72\x4c','\x43\x33\x72\x56\x43\x66\x62\x50\x42\x4d\x44\x6a\x42\x4e\x72\x4c\x43\x4e\x7a\x48\x42\x61','\x71\x76\x72\x41\x43\x77\x57','\x75\x77\x35\x49\x72\x33\x69','\x42\x77\x4c\x55','\x43\x4d\x76\x5a\x7a\x78\x72\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a','\x44\x77\x35\x4b\x7a\x77\x7a\x50\x42\x4d\x76\x4b','\x79\x78\x66\x65\x41\x33\x71','\x7a\x68\x76\x57\x42\x67\x4c\x4a\x79\x78\x72\x4c\x43\x31\x6e\x52\x41\x78\x62\x57\x7a\x77\x71','\x43\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x7a\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x42\x32\x35\x4c\x43\x4e\x6a\x56\x43\x47','\x79\x4d\x66\x4a\x41\x33\x62\x59\x7a\x78\x6e\x5a\x44\x78\x6a\x4c\x6c\x4e\x44\x48\x43\x4d\x35\x50\x42\x4d\x43','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x32\x76\x4b\x72\x78\x7a\x4c\x42\x4e\x72\x6a\x7a\x68\x6d','\x75\x67\x39\x55\x7a\x59\x62\x30\x41\x77\x31\x4c\x42\x33\x76\x30\x69\x63\x30\x47\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x31\x42\x4e\x6a\x4c\x43\x33\x62\x56\x42\x4e\x6e\x50\x44\x4d\x75','\x43\x4d\x76\x57\x42\x67\x66\x35','\x74\x33\x62\x4c\x7a\x30\x43','\x7a\x32\x76\x30\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x48\x44\x67\x75','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x59\x44\x61','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x6d\x74\x6d\x34\x76\x67\x39\x55\x44\x66\x48\x69','\x41\x77\x35\x50\x44\x67\x4c\x48\x42\x66\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x65\x72\x4c\x42\x67\x66\x35\x74\x78\x6d','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x72\x6e\x43\x57','\x44\x4b\x6e\x34\x7a\x75\x4b','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x74\x4d\x39\x30\x72\x4d\x39\x31\x42\x4d\x71','\x43\x32\x76\x58\x44\x77\x76\x55\x79\x32\x76\x6a\x7a\x61','\x79\x32\x39\x4b\x7a\x71','\x44\x78\x62\x4b\x79\x78\x72\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4c\x66\x31\x79\x77\x58\x50\x44\x68\x4b','\x42\x32\x35\x66\x43\x4e\x6a\x56\x43\x47','\x44\x67\x44\x4a\x42\x66\x69','\x42\x32\x35\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x79\x32\x39\x55\x7a\x4d\x4c\x4e','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x76\x72\x35\x43\x67\x75','\x43\x32\x4c\x36\x7a\x71','\x41\x67\x66\x55\x7a\x67\x58\x4c\x76\x67\x39\x52\x7a\x77\x35\x66\x45\x68\x62\x50\x43\x4d\x4c\x55\x7a\x57','\x43\x33\x72\x48\x44\x67\x75','\x74\x31\x6a\x6c\x74\x76\x47','\x44\x68\x4c\x57\x7a\x71','\x7a\x32\x76\x30','\x41\x67\x66\x55\x7a\x67\x58\x4c\x75\x67\x39\x55\x7a\x57','\x76\x66\x7a\x76\x7a\x32\x57','\x43\x67\x4c\x55\x7a\x57','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x55\x42\x33\x72\x46\x7a\x4d\x39\x31\x42\x4d\x71','\x7a\x78\x7a\x4c\x42\x4e\x72\x5a\x75\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x75\x54\x4c\x45\x76\x62\x59\x7a\x77\x7a\x50\x45\x61','\x41\x78\x6e\x73\x7a\x77\x7a\x59\x7a\x78\x6e\x4f\x41\x77\x35\x4e\x76\x67\x39\x52\x7a\x77\x34','\x79\x78\x76\x30\x42\x31\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x44\x67\x39\x30\x79\x77\x58\x65\x43\x4d\x39\x57\x43\x67\x76\x4b','\x43\x4d\x66\x55\x7a\x67\x39\x54','\x43\x68\x76\x5a\x41\x61','\x74\x31\x62\x66\x74\x47','\x43\x32\x39\x4b\x44\x66\x69','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x76\x67\x4c\x54\x7a\x78\x69','\x76\x4e\x7a\x4b\x77\x75\x69','\x43\x33\x72\x48\x43\x4e\x72\x71\x41\x77\x35\x4e\x73\x77\x35\x30\x7a\x78\x6a\x32\x79\x77\x57','\x77\x68\x48\x6e\x44\x4d\x43','\x42\x77\x66\x34\x72\x67\x76\x4b\x44\x78\x62\x53\x41\x77\x6e\x48\x44\x67\x4c\x56\x42\x4c\x6e\x50\x45\x4d\x75','\x7a\x78\x6a\x59\x42\x33\x69','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x75\x4c\x4b\x71\x32\x39\x31\x42\x4e\x72\x4c\x43\x47','\x43\x32\x66\x32\x7a\x76\x6a\x4c\x43\x67\x58\x48\x45\x76\x6e\x30\x79\x78\x72\x4c','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x78\x32\x4c\x4b','\x44\x78\x62\x4b\x79\x78\x72\x4c\x76\x67\x39\x52\x7a\x77\x34','\x44\x67\x39\x74\x44\x68\x6a\x50\x42\x4d\x43','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4c\x6a\x4c\x7a\x4e\x6a\x4c\x43\x32\x47','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x64\x42\x32\x31\x57\x42\x67\x76\x30\x7a\x71','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x71\x43\x4d\x39\x4e\x43\x4d\x76\x5a\x43\x57','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x7a\x32\x76\x30\x76\x67\x39\x52\x7a\x77\x34','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4b\x4c\x4b','\x6e\x74\x43\x5a\x6d\x74\x43\x57\x72\x76\x48\x48\x7a\x4e\x66\x32','\x43\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x42\x32\x35\x62\x7a\x32\x76\x55\x44\x65\x76\x32\x7a\x77\x35\x30','\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x75\x78\x44\x72\x74\x68\x79','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x6c\x4e\x6e\x30\x79\x78\x6a\x30\x7a\x77\x71','\x44\x67\x35\x6c\x76\x4c\x79','\x42\x67\x66\x5a\x44\x66\x62\x56\x42\x4d\x44\x62\x44\x61','\x79\x32\x58\x4c\x79\x78\x6a\x71\x42\x32\x35\x4e\x76\x67\x4c\x54\x7a\x77\x39\x31\x44\x61','\x42\x32\x35\x65\x41\x78\x6e\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30','\x42\x77\x66\x34\x74\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x33\x6d','\x72\x77\x7a\x53\x43\x31\x79','\x44\x67\x4c\x54\x7a\x78\x6e\x30\x79\x77\x31\x57','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x72\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x61','\x7a\x67\x4c\x5a\x43\x67\x66\x30\x79\x32\x48\x6e\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x7a\x76\x6a\x34\x44\x65\x4b','\x7a\x32\x76\x30\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4c\x66\x31\x79\x77\x58\x50\x44\x68\x4b','\x44\x67\x39\x52\x7a\x77\x34','\x43\x32\x76\x55\x7a\x66\x72\x4c\x43\x4d\x31\x50\x42\x4d\x66\x53\x73\x77\x35\x57\x44\x78\x71','\x44\x68\x6a\x48\x79\x32\x54\x66\x45\x67\x76\x4a\x44\x78\x72\x50\x42\x32\x35\x64\x42\x32\x35\x30\x7a\x78\x48\x30','\x42\x32\x35\x71\x42\x33\x6a\x30\x71\x32\x58\x56\x43\x32\x76\x4b','\x43\x33\x72\x56\x43\x4d\x75','\x43\x32\x76\x30','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x66\x44\x4c\x79\x4c\x6e\x56\x79\x32\x54\x4c\x44\x61','\x42\x67\x66\x5a\x44\x65\x76\x32\x7a\x77\x35\x30\x73\x77\x71','\x43\x4d\x76\x5a\x42\x32\x58\x32\x7a\x71','\x44\x32\x76\x49\x43\x32\x39\x4a\x41\x32\x76\x30','\x6d\x4a\x75\x59\x6f\x74\x6a\x34\x71\x77\x39\x41\x45\x4d\x53','\x41\x67\x66\x5a\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x4d\x76\x4d\x42\x33\x6a\x4c','\x75\x75\x76\x76\x79\x4d\x79','\x42\x67\x6a\x58\x72\x32\x53','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x73\x77\x71','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x30\x35\x48\x42\x77\x75','\x79\x75\x35\x68\x7a\x31\x6d','\x43\x33\x72\x59\x41\x77\x35\x4e\x41\x77\x7a\x35','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x62\x44\x61','\x77\x76\x44\x6d\x7a\x66\x71','\x41\x67\x66\x55\x7a\x67\x58\x4c\x43\x4e\x6d','\x44\x67\x39\x30\x79\x77\x57','\x42\x67\x66\x30\x7a\x77\x35\x4a\x45\x75\x48\x50\x43\x33\x72\x56\x43\x4e\x4c\x74\x41\x78\x50\x4c','\x6e\x4a\x47\x57\x42\x78\x7a\x66\x75\x76\x44\x30','\x43\x32\x4c\x4b\x7a\x77\x6e\x48\x43\x4b\x4c\x4b','\x7a\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x6e\x74\x65\x31\x6d\x5a\x4b\x58\x6e\x4c\x76\x72\x75\x30\x66\x5a\x71\x71','\x79\x32\x58\x56\x43\x32\x75','\x7a\x30\x48\x32\x43\x77\x79','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x78\x71','\x41\x67\x66\x5a','\x6d\x74\x71\x33\x6d\x74\x69\x30\x6e\x74\x7a\x77\x79\x4b\x72\x34\x43\x66\x47','\x41\x4b\x6e\x53\x74\x33\x4b','\x44\x67\x76\x59\x42\x77\x4c\x55\x79\x77\x57\x55\x41\x77\x35\x57\x44\x78\x71','\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x79\x4d\x66\x5a\x7a\x76\x76\x59\x42\x61','\x7a\x32\x76\x30\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x65\x76\x34\x7a\x77\x6e\x31\x44\x67\x4c\x56\x42\x4b\x4c\x4b','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x43\x33\x72\x59\x41\x77\x35\x4e','\x43\x67\x39\x55\x7a\x57','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4c\x39\x4e\x79\x78\x72\x4c\x44\x32\x66\x35\x78\x57','\x42\x32\x35\x54\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x74\x67\x44\x48\x44\x68\x43','\x43\x32\x76\x55\x7a\x61','\x6d\x74\x76\x5a\x71\x30\x58\x51\x79\x4b\x65','\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4e\x6e\x30\x79\x78\x6a\x30','\x79\x77\x4c\x4e\x75\x66\x61','\x42\x67\x76\x55\x7a\x33\x72\x4f','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x59\x7a\x77\x66\x4b\x45\x71','\x42\x67\x66\x5a\x44\x66\x39\x4c\x44\x4d\x76\x55\x44\x66\x39\x50\x7a\x61','\x43\x32\x76\x55\x7a\x66\x44\x50\x44\x67\x48\x73\x7a\x78\x6e\x57\x42\x32\x35\x5a\x7a\x71','\x43\x33\x76\x49\x43\x32\x6e\x59\x41\x77\x6a\x4c','\x42\x32\x35\x56\x43\x67\x76\x55','\x44\x77\x35\x5a\x44\x77\x6a\x5a\x79\x33\x6a\x50\x79\x4d\x75'];a0_0x5ae1=function(){return _0x2963bd;};return a0_0x5ae1();}export{INITIAL_METRICS,SessionGatewayClient,calculateConnectionQuality};
1
+ //#region src/session-gateway/types.ts
2
+ /**
3
+ * Default connection metrics.
4
+ */
5
+ const INITIAL_METRICS = {
6
+ lastPingLatencyMs: null,
7
+ avgPingLatencyMs: null,
8
+ missedPongCount: 0,
9
+ reconnectCount: 0,
10
+ lastPongAt: null,
11
+ lastReconnectAt: null,
12
+ quality: "disconnected"
13
+ };
14
+ /**
15
+ * Calculate connection quality from metrics.
16
+ */
17
+ function calculateConnectionQuality(metrics, isConnected) {
18
+ if (!isConnected) return "disconnected";
19
+ const { avgPingLatencyMs, missedPongCount, reconnectCount, lastReconnectAt } = metrics;
20
+ const recentReconnect = lastReconnectAt && Date.now() - lastReconnectAt < 300 * 1e3;
21
+ if (missedPongCount >= 2 || recentReconnect && reconnectCount > 1) return "poor";
22
+ if (missedPongCount >= 1 || avgPingLatencyMs !== null && avgPingLatencyMs > 1e3 || recentReconnect) return "degraded";
23
+ if (avgPingLatencyMs !== null && avgPingLatencyMs < 100 && reconnectCount === 0) return "excellent";
24
+ if (avgPingLatencyMs !== null && avgPingLatencyMs <= 300) return "good";
25
+ return "good";
26
+ }
27
+ //#endregion
28
+ //#region src/session-gateway/client.ts
29
+ /**
30
+ * SessionGatewayClient
31
+ *
32
+ * WebSocket client for Sandbox API session streaming.
33
+ * Browser-safe: no Node.js APIs.
34
+ */
35
+ const DEFAULT_CONFIG = {
36
+ transport: "websocket",
37
+ channels: ["*"],
38
+ autoReconnect: true,
39
+ maxReconnectAttempts: 10,
40
+ initialReconnectDelayMs: 1e3,
41
+ maxReconnectDelayMs: 3e4,
42
+ pingIntervalMs: 3e4,
43
+ pongTimeoutMs: 1e4,
44
+ maxMissedPongs: 2,
45
+ enableDeduplication: true,
46
+ maxDeduplicationSize: 1e3,
47
+ enableReplayPersistence: false,
48
+ replayStorageKeyPrefix: "session_gateway_",
49
+ latencyHistorySize: 10
50
+ };
51
+ const STORAGE_KEYS = {
52
+ lastEventId: "last_event_id",
53
+ executionId: "execution_id",
54
+ sessionId: "session_id"
55
+ };
56
+ /**
57
+ * Legacy wire-protocol message type map. The current server emits the
58
+ * `sidecar.*` message types; the SDK surfaces the canonical `runtime.*`
59
+ * names. Kept at module scope so it isn't re-allocated per inbound
60
+ * WebSocket message.
61
+ */
62
+ const WIRE_TYPE_MAP = {
63
+ "sidecar.connected": "runtime.connected",
64
+ "sidecar.disconnected": "runtime.disconnected",
65
+ "sidecar.not_found": "runtime.not_found",
66
+ "sidecar.ready": "runtime.ready"
67
+ };
68
+ /**
69
+ * Memory-based storage fallback when localStorage is not available.
70
+ */
71
+ var MemoryStorage = class {
72
+ store = /* @__PURE__ */ new Map();
73
+ getItem(key) {
74
+ return this.store.get(key) ?? null;
75
+ }
76
+ setItem(key, value) {
77
+ this.store.set(key, value);
78
+ }
79
+ removeItem(key) {
80
+ this.store.delete(key);
81
+ }
82
+ };
83
+ var SessionGatewayClient = class {
84
+ ws = null;
85
+ config;
86
+ handlers;
87
+ currentToken;
88
+ isRefreshingToken = false;
89
+ state = "disconnected";
90
+ connectedAt = null;
91
+ hasConnectedBefore = false;
92
+ lastPingAt = null;
93
+ lastPongAt = null;
94
+ lastPingSentAt = null;
95
+ missedPongCount = 0;
96
+ reconnectAttempts = 0;
97
+ messagesReceived = 0;
98
+ messagesSent = 0;
99
+ eventsReceived = 0;
100
+ duplicatesSkipped = 0;
101
+ reconnectTimer = null;
102
+ pingInterval = null;
103
+ pongTimeout = null;
104
+ pendingCallbacks = /* @__PURE__ */ new Map();
105
+ messageIdCounter = 0;
106
+ processedEventIds = /* @__PURE__ */ new Set();
107
+ pingLatencyHistory = [];
108
+ connectionMetrics = { ...INITIAL_METRICS };
109
+ lastEventId = null;
110
+ currentExecutionId = null;
111
+ currentSessionId = null;
112
+ isReplaying = false;
113
+ replayProgress = {
114
+ total: 0,
115
+ received: 0
116
+ };
117
+ constructor(config) {
118
+ let storage;
119
+ if (config.replayStorage) storage = config.replayStorage;
120
+ else if (typeof globalThis !== "undefined" && "localStorage" in globalThis) try {
121
+ const testKey = "__test__";
122
+ localStorage.setItem(testKey, testKey);
123
+ localStorage.removeItem(testKey);
124
+ storage = localStorage;
125
+ } catch {
126
+ storage = new MemoryStorage();
127
+ }
128
+ else storage = new MemoryStorage();
129
+ this.config = {
130
+ url: config.url,
131
+ sessionId: config.sessionId,
132
+ token: config.token,
133
+ onTokenRefresh: config.onTokenRefresh,
134
+ transport: config.transport ?? DEFAULT_CONFIG.transport,
135
+ channels: config.channels ?? DEFAULT_CONFIG.channels,
136
+ autoReconnect: config.autoReconnect ?? DEFAULT_CONFIG.autoReconnect,
137
+ maxReconnectAttempts: config.maxReconnectAttempts ?? DEFAULT_CONFIG.maxReconnectAttempts,
138
+ initialReconnectDelayMs: config.initialReconnectDelayMs ?? DEFAULT_CONFIG.initialReconnectDelayMs,
139
+ maxReconnectDelayMs: config.maxReconnectDelayMs ?? DEFAULT_CONFIG.maxReconnectDelayMs,
140
+ pingIntervalMs: config.pingIntervalMs ?? DEFAULT_CONFIG.pingIntervalMs,
141
+ pongTimeoutMs: config.pongTimeoutMs ?? DEFAULT_CONFIG.pongTimeoutMs,
142
+ maxMissedPongs: config.maxMissedPongs ?? DEFAULT_CONFIG.maxMissedPongs,
143
+ enableDeduplication: config.enableDeduplication ?? DEFAULT_CONFIG.enableDeduplication,
144
+ maxDeduplicationSize: config.maxDeduplicationSize ?? DEFAULT_CONFIG.maxDeduplicationSize,
145
+ enableReplayPersistence: config.enableReplayPersistence ?? DEFAULT_CONFIG.enableReplayPersistence,
146
+ replayStorage: storage,
147
+ replayStorageKeyPrefix: config.replayStorageKeyPrefix ?? DEFAULT_CONFIG.replayStorageKeyPrefix,
148
+ latencyHistorySize: config.latencyHistorySize ?? DEFAULT_CONFIG.latencyHistorySize
149
+ };
150
+ this.handlers = config.handlers ?? {};
151
+ this.currentToken = config.token;
152
+ if (this.config.enableReplayPersistence) this.loadReplayState();
153
+ }
154
+ /**
155
+ * Connect to the session gateway.
156
+ */
157
+ connect() {
158
+ if (this.state === "connected" || this.state === "connecting") return;
159
+ const isReconnect = this.hasConnectedBefore;
160
+ this.setState(isReconnect ? "reconnecting" : "connecting");
161
+ this.connectWebSocket();
162
+ }
163
+ connectWebSocket() {
164
+ const url = new URL(this.config.url);
165
+ url.searchParams.set("token", this.currentToken);
166
+ this.ws = new WebSocket(url.toString());
167
+ this.ws.onopen = () => this.handleOpen();
168
+ this.ws.onclose = (event) => this.handleClose(event.code, event.reason);
169
+ this.ws.onerror = (_event) => {};
170
+ this.ws.onmessage = (event) => this.handleMessage(event.data);
171
+ }
172
+ /**
173
+ * Disconnect from the session gateway.
174
+ */
175
+ disconnect() {
176
+ this.cleanup();
177
+ if (this.ws) {
178
+ this.ws.close(1e3, "Client disconnect");
179
+ this.ws = null;
180
+ }
181
+ this.setState("disconnected");
182
+ }
183
+ /**
184
+ * Subscribe to additional channels.
185
+ */
186
+ async subscribe(channels) {
187
+ return (await this.sendWithResponse({
188
+ type: "subscribe",
189
+ channels
190
+ })).channels;
191
+ }
192
+ /**
193
+ * Unsubscribe from channels.
194
+ */
195
+ async unsubscribe(channels) {
196
+ return (await this.sendWithResponse({
197
+ type: "unsubscribe",
198
+ channels
199
+ })).channels;
200
+ }
201
+ /**
202
+ * Send a ping and wait for pong.
203
+ */
204
+ async ping() {
205
+ const start = Date.now();
206
+ await this.sendWithResponse({ type: "ping" });
207
+ return Date.now() - start;
208
+ }
209
+ /**
210
+ * Request replay of events since a timestamp.
211
+ */
212
+ replay(since) {
213
+ this.send({
214
+ type: "replay",
215
+ since
216
+ });
217
+ }
218
+ /**
219
+ * Send terminal input via WebSocket.
220
+ */
221
+ sendTerminalInput(terminalId, input) {
222
+ if (!this.isConnected()) return false;
223
+ this.send({
224
+ type: "terminal.input",
225
+ data: {
226
+ terminalId,
227
+ input
228
+ }
229
+ });
230
+ return true;
231
+ }
232
+ /**
233
+ * Set the current session/execution context for event tracking.
234
+ */
235
+ setSessionContext(sessionId, executionId) {
236
+ this.currentSessionId = sessionId;
237
+ if (executionId) this.currentExecutionId = executionId;
238
+ this.saveReplayState();
239
+ }
240
+ /**
241
+ * Clear replay state (call when session ends).
242
+ */
243
+ clearReplayState() {
244
+ this.lastEventId = null;
245
+ this.currentExecutionId = null;
246
+ this.currentSessionId = null;
247
+ this.isReplaying = false;
248
+ this.replayProgress = {
249
+ total: 0,
250
+ received: 0
251
+ };
252
+ this.processedEventIds.clear();
253
+ this.duplicatesSkipped = 0;
254
+ if (this.config.enableReplayPersistence) {
255
+ const prefix = this.config.replayStorageKeyPrefix;
256
+ try {
257
+ this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.lastEventId);
258
+ this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.executionId);
259
+ this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.sessionId);
260
+ } catch {}
261
+ }
262
+ }
263
+ /**
264
+ * Get current replay state for UI indicators.
265
+ */
266
+ getReplayState() {
267
+ return {
268
+ isReplaying: this.isReplaying,
269
+ progress: { ...this.replayProgress }
270
+ };
271
+ }
272
+ /**
273
+ * Get connection statistics.
274
+ */
275
+ getStats() {
276
+ return {
277
+ state: this.state,
278
+ connectedAt: this.connectedAt,
279
+ lastPingAt: this.lastPingAt,
280
+ lastPongAt: this.lastPongAt,
281
+ reconnectAttempts: this.reconnectAttempts,
282
+ messagesReceived: this.messagesReceived,
283
+ messagesSent: this.messagesSent,
284
+ eventsReceived: this.eventsReceived,
285
+ duplicatesSkipped: this.duplicatesSkipped,
286
+ metrics: { ...this.connectionMetrics },
287
+ replay: this.getReplayState()
288
+ };
289
+ }
290
+ getState() {
291
+ return this.state;
292
+ }
293
+ isConnected() {
294
+ return this.state === "connected";
295
+ }
296
+ getConnectionQuality() {
297
+ return this.connectionMetrics.quality;
298
+ }
299
+ getConnectionMetrics() {
300
+ return { ...this.connectionMetrics };
301
+ }
302
+ resetMetrics() {
303
+ this.pingLatencyHistory = [];
304
+ this.connectionMetrics = { ...INITIAL_METRICS };
305
+ this.handlers.onMetricsChange?.(this.connectionMetrics);
306
+ }
307
+ /**
308
+ * Update the auth token and reconnect with the new token.
309
+ */
310
+ updateToken(token) {
311
+ this.currentToken = token;
312
+ if (this.state === "connected" && this.ws) this.ws.close(1e3, "Token refreshed");
313
+ }
314
+ /**
315
+ * Get the current auth token.
316
+ */
317
+ getToken() {
318
+ return this.currentToken;
319
+ }
320
+ setState(state) {
321
+ if (this.state !== state) {
322
+ this.state = state;
323
+ this.updateConnectionQuality();
324
+ this.handlers.onStateChange?.(state);
325
+ }
326
+ }
327
+ handleOpen() {
328
+ const isReconnect = this.hasConnectedBefore;
329
+ this.hasConnectedBefore = true;
330
+ this.setState("connected");
331
+ this.connectedAt = Date.now();
332
+ this.reconnectAttempts = 0;
333
+ this.missedPongCount = 0;
334
+ this.startPingInterval();
335
+ this.restoreSubscriptions();
336
+ if (isReconnect) {
337
+ this.trackReconnection();
338
+ this.handlers.onReconnect?.();
339
+ }
340
+ }
341
+ handleClose(code, reason) {
342
+ this.cleanup();
343
+ this.handlers.onDisconnect?.(code, reason);
344
+ if (this.config.autoReconnect && this.reconnectAttempts < this.config.maxReconnectAttempts) {
345
+ this.setState("reconnecting");
346
+ this.scheduleReconnect();
347
+ } else this.setState("disconnected");
348
+ }
349
+ handleMessage(data) {
350
+ this.messagesReceived++;
351
+ try {
352
+ const raw = JSON.parse(data);
353
+ if (!raw.type && raw.messageType) raw.type = raw.messageType;
354
+ if (typeof raw.type === "string" && WIRE_TYPE_MAP[raw.type] !== void 0) raw.type = WIRE_TYPE_MAP[raw.type];
355
+ if (raw.data && typeof raw.data === "object") {
356
+ const d = raw.data;
357
+ if (d.sidecarId !== void 0 && d.sandboxId === void 0) d.sandboxId = d.sidecarId;
358
+ }
359
+ if (raw.type === "agent.event" && !raw.data && raw.channel) {
360
+ const { type, messageType, channel, id, sequenceId, timestamp, ...rest } = raw;
361
+ raw.data = rest;
362
+ }
363
+ const message = raw;
364
+ if (message.type === "pong") {
365
+ this.handlePong(message.timestamp);
366
+ this.dispatchMessage(message);
367
+ return;
368
+ }
369
+ if ("id" in message && message.id && this.config.enableDeduplication) {
370
+ const eventId = message.id;
371
+ if (this.processedEventIds.has(eventId)) {
372
+ this.duplicatesSkipped++;
373
+ return;
374
+ }
375
+ this.processedEventIds.add(eventId);
376
+ if (this.processedEventIds.size > this.config.maxDeduplicationSize) {
377
+ const entriesToRemove = Math.floor(this.config.maxDeduplicationSize * .1);
378
+ let removed = 0;
379
+ for (const oldId of this.processedEventIds) {
380
+ if (removed >= entriesToRemove) break;
381
+ this.processedEventIds.delete(oldId);
382
+ removed++;
383
+ }
384
+ }
385
+ this.lastEventId = eventId;
386
+ this.saveReplayState();
387
+ }
388
+ this.dispatchMessage(message);
389
+ } catch {}
390
+ }
391
+ handlePong(timestamp) {
392
+ const now = Date.now();
393
+ this.lastPongAt = timestamp;
394
+ this.missedPongCount = 0;
395
+ this.clearPongTimeout();
396
+ if (this.lastPingSentAt) {
397
+ const latency = now - this.lastPingSentAt;
398
+ this.pingLatencyHistory.push(latency);
399
+ if (this.pingLatencyHistory.length > this.config.latencyHistorySize) this.pingLatencyHistory.shift();
400
+ this.updateConnectionMetrics(latency, now);
401
+ }
402
+ }
403
+ dispatchMessage(message) {
404
+ if ("id" in message && message.id) {
405
+ const callback = this.pendingCallbacks.get(message.id);
406
+ if (callback) {
407
+ this.pendingCallbacks.delete(message.id);
408
+ if (message.type === "error") callback.reject(new Error(message.message));
409
+ else callback.resolve("data" in message ? message.data : void 0);
410
+ return;
411
+ }
412
+ }
413
+ switch (message.type) {
414
+ case "connection.established":
415
+ this.handlers.onConnect?.(message.data.sessionId);
416
+ break;
417
+ case "runtime.connected":
418
+ this.handlers.onRuntimeConnected?.(message.data.sandboxId, message.data.baseUrl);
419
+ break;
420
+ case "runtime.disconnected":
421
+ this.handlers.onRuntimeDisconnected?.(message.data.sandboxId, message.data.error);
422
+ break;
423
+ case "runtime.not_found":
424
+ this.handlers.onRuntimeNotFound?.(message.data.sessionId, message.data.containerId, message.data.reason);
425
+ break;
426
+ case "container.ready": {
427
+ const data = message.data;
428
+ const id = data.sandboxId ?? data.sidecarId;
429
+ if (id) this.handlers.onContainerReady?.(id);
430
+ else this.handlers.onError?.("container.ready event received without sandboxId", "invalid_payload");
431
+ break;
432
+ }
433
+ case "runtime.ready":
434
+ this.handlers.onRuntimeReady?.(message.data);
435
+ break;
436
+ case "port.opened":
437
+ this.handlers.onPortOpened?.(message.data.port, message.data.protocol, message.data.processName);
438
+ break;
439
+ case "port.closed":
440
+ this.handlers.onPortClosed?.(message.data.port);
441
+ break;
442
+ case "agent.event":
443
+ this.eventsReceived++;
444
+ this.trackExecutionContext(message.data);
445
+ this.handlers.onAgentEvent?.(message.channel, message.data, message.sequenceId);
446
+ break;
447
+ case "replay.start":
448
+ this.isReplaying = true;
449
+ this.replayProgress = {
450
+ total: message.total,
451
+ received: 0
452
+ };
453
+ this.handlers.onReplayStart?.(message.total);
454
+ break;
455
+ case "replay.progress":
456
+ this.replayProgress.received = message.received;
457
+ this.handlers.onReplayProgress?.(message.received, this.replayProgress.total);
458
+ break;
459
+ case "replay.complete":
460
+ this.isReplaying = false;
461
+ this.handlers.onReplayComplete?.(message.total);
462
+ break;
463
+ case "error":
464
+ this.handlers.onError?.(message.message, message.code);
465
+ break;
466
+ case "token.expiring":
467
+ this.handlers.onTokenExpiring?.(message.data.secondsRemaining);
468
+ this.handleTokenExpiring();
469
+ break;
470
+ case "token.expired":
471
+ this.handlers.onTokenExpired?.();
472
+ break;
473
+ case "backpressure.warning":
474
+ this.handlers.onBackpressureWarning?.(message.data.droppedCount, message.data.since, message.data.totalDropped);
475
+ break;
476
+ }
477
+ }
478
+ trackExecutionContext(data) {
479
+ if (typeof data !== "object" || data === null) return;
480
+ const eventData = data;
481
+ if (eventData.executionId) {
482
+ this.currentExecutionId = eventData.executionId;
483
+ this.saveReplayState();
484
+ }
485
+ if (eventData.type === "execution.started" && eventData.sessionId) {
486
+ this.currentSessionId = eventData.sessionId;
487
+ this.saveReplayState();
488
+ }
489
+ }
490
+ async handleTokenExpiring() {
491
+ if (!this.config.onTokenRefresh || this.isRefreshingToken) return;
492
+ this.isRefreshingToken = true;
493
+ try {
494
+ const result = await this.config.onTokenRefresh();
495
+ this.updateToken(result.token);
496
+ } catch (error) {
497
+ this.handlers.onError?.(`Token refresh failed: ${error instanceof Error ? error.message : String(error)}`, "TOKEN_REFRESH_FAILED");
498
+ } finally {
499
+ this.isRefreshingToken = false;
500
+ }
501
+ }
502
+ send(message) {
503
+ if (this.ws?.readyState === WebSocket.OPEN) {
504
+ this.ws.send(JSON.stringify(message));
505
+ this.messagesSent++;
506
+ }
507
+ }
508
+ sendWithResponse(message) {
509
+ return new Promise((resolve, reject) => {
510
+ const id = `msg_${++this.messageIdCounter}`;
511
+ this.pendingCallbacks.set(id, {
512
+ resolve,
513
+ reject
514
+ });
515
+ setTimeout(() => {
516
+ if (this.pendingCallbacks.has(id)) {
517
+ this.pendingCallbacks.delete(id);
518
+ reject(/* @__PURE__ */ new Error("Request timeout"));
519
+ }
520
+ }, 1e4);
521
+ this.send({
522
+ ...message,
523
+ id
524
+ });
525
+ });
526
+ }
527
+ restoreSubscriptions() {
528
+ const channels = this.config.channels;
529
+ const replayOptions = {};
530
+ if (this.lastEventId) replayOptions.lastEventId = this.lastEventId;
531
+ if (this.currentExecutionId) replayOptions.executionId = this.currentExecutionId;
532
+ if (this.currentSessionId) replayOptions.sessionId = this.currentSessionId;
533
+ const hasReplayState = Object.keys(replayOptions).length > 0;
534
+ if (hasReplayState) {
535
+ this.isReplaying = true;
536
+ this.replayProgress = {
537
+ total: 0,
538
+ received: 0
539
+ };
540
+ }
541
+ this.send({
542
+ type: "subscribe",
543
+ channels,
544
+ ...hasReplayState ? { replayOptions } : {}
545
+ });
546
+ }
547
+ startPingInterval() {
548
+ this.stopPingInterval();
549
+ this.pingInterval = setInterval(() => {
550
+ this.sendPing();
551
+ }, this.config.pingIntervalMs);
552
+ }
553
+ stopPingInterval() {
554
+ if (this.pingInterval) {
555
+ clearInterval(this.pingInterval);
556
+ this.pingInterval = null;
557
+ }
558
+ }
559
+ sendPing() {
560
+ if (this.ws?.readyState !== WebSocket.OPEN) return;
561
+ const timeSinceLastPong = this.lastPongAt ? Date.now() - this.lastPongAt : 0;
562
+ if (this.lastPongAt && timeSinceLastPong > this.config.pongTimeoutMs) {
563
+ this.missedPongCount++;
564
+ this.connectionMetrics = {
565
+ ...this.connectionMetrics,
566
+ missedPongCount: this.missedPongCount
567
+ };
568
+ this.updateConnectionQuality();
569
+ if (this.missedPongCount >= this.config.maxMissedPongs) {
570
+ this.ws?.close(4e3, "Pong timeout - connection unresponsive");
571
+ return;
572
+ }
573
+ }
574
+ this.lastPingAt = Date.now();
575
+ this.lastPingSentAt = Date.now();
576
+ this.send({ type: "ping" });
577
+ this.pongTimeout = setTimeout(() => {
578
+ this.missedPongCount++;
579
+ this.connectionMetrics = {
580
+ ...this.connectionMetrics,
581
+ missedPongCount: this.missedPongCount
582
+ };
583
+ this.updateConnectionQuality();
584
+ if (this.missedPongCount >= this.config.maxMissedPongs) this.ws?.close(4e3, "Pong timeout - connection unresponsive");
585
+ }, this.config.pongTimeoutMs);
586
+ }
587
+ clearPongTimeout() {
588
+ if (this.pongTimeout) {
589
+ clearTimeout(this.pongTimeout);
590
+ this.pongTimeout = null;
591
+ }
592
+ }
593
+ scheduleReconnect() {
594
+ if (this.reconnectTimer) return;
595
+ this.reconnectAttempts++;
596
+ const delay = Math.min(this.config.initialReconnectDelayMs * 2 ** (this.reconnectAttempts - 1), this.config.maxReconnectDelayMs);
597
+ const jitter = delay * .3 * (Math.random() * 2 - 1);
598
+ this.reconnectTimer = setTimeout(() => {
599
+ this.reconnectTimer = null;
600
+ this.connect();
601
+ }, delay + jitter);
602
+ }
603
+ cleanup() {
604
+ this.stopPingInterval();
605
+ this.clearPongTimeout();
606
+ if (this.reconnectTimer) {
607
+ clearTimeout(this.reconnectTimer);
608
+ this.reconnectTimer = null;
609
+ }
610
+ for (const [id, callback] of this.pendingCallbacks) {
611
+ callback.reject(/* @__PURE__ */ new Error("Connection closed"));
612
+ this.pendingCallbacks.delete(id);
613
+ }
614
+ }
615
+ updateConnectionMetrics(latency, pongTime) {
616
+ const avgLatency = this.pingLatencyHistory.length > 0 ? this.pingLatencyHistory.reduce((a, b) => a + b, 0) / this.pingLatencyHistory.length : null;
617
+ this.connectionMetrics = {
618
+ ...this.connectionMetrics,
619
+ lastPingLatencyMs: latency,
620
+ avgPingLatencyMs: avgLatency,
621
+ missedPongCount: this.missedPongCount,
622
+ lastPongAt: pongTime
623
+ };
624
+ this.updateConnectionQuality();
625
+ }
626
+ updateConnectionQuality() {
627
+ const isConnected = this.state === "connected";
628
+ const quality = calculateConnectionQuality(this.connectionMetrics, isConnected);
629
+ if (this.connectionMetrics.quality !== quality) {
630
+ this.connectionMetrics = {
631
+ ...this.connectionMetrics,
632
+ quality
633
+ };
634
+ this.handlers.onMetricsChange?.(this.connectionMetrics);
635
+ }
636
+ }
637
+ trackReconnection() {
638
+ const now = Date.now();
639
+ this.connectionMetrics = {
640
+ ...this.connectionMetrics,
641
+ reconnectCount: this.connectionMetrics.reconnectCount + 1,
642
+ lastReconnectAt: now
643
+ };
644
+ this.pingLatencyHistory = [];
645
+ this.updateConnectionQuality();
646
+ }
647
+ loadReplayState() {
648
+ if (!this.config.enableReplayPersistence) return;
649
+ const prefix = this.config.replayStorageKeyPrefix;
650
+ try {
651
+ this.lastEventId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.lastEventId);
652
+ this.currentExecutionId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.executionId);
653
+ this.currentSessionId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.sessionId);
654
+ } catch {}
655
+ }
656
+ saveReplayState() {
657
+ if (!this.config.enableReplayPersistence) return;
658
+ const prefix = this.config.replayStorageKeyPrefix;
659
+ try {
660
+ if (this.lastEventId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.lastEventId, this.lastEventId);
661
+ if (this.currentExecutionId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.executionId, this.currentExecutionId);
662
+ if (this.currentSessionId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.sessionId, this.currentSessionId);
663
+ } catch {}
664
+ }
665
+ };
666
+ //#endregion
667
+ export { INITIAL_METRICS, SessionGatewayClient, calculateConnectionQuality };