@tangle-network/sandbox 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,667 @@
1
- const a0_0xc5ac43=a0_0x42fc;(function(_0x12e36c,_0x4622af){const _0xf891c=a0_0x42fc,_0x9f726b=_0x12e36c();while(!![]){try{const _0x31b3d3=parseInt(_0xf891c(0x239))/0x1+-parseInt(_0xf891c(0x25d))/0x2*(parseInt(_0xf891c(0x1ae))/0x3)+-parseInt(_0xf891c(0x210))/0x4+-parseInt(_0xf891c(0x262))/0x5+-parseInt(_0xf891c(0x1c6))/0x6+parseInt(_0xf891c(0x254))/0x7+parseInt(_0xf891c(0x243))/0x8*(parseInt(_0xf891c(0x24f))/0x9);if(_0x31b3d3===_0x4622af)break;else _0x9f726b['push'](_0x9f726b['shift']());}catch(_0x1565fd){_0x9f726b['push'](_0x9f726b['shift']());}}}(a0_0x1aa6,0x6af9b));function a0_0x1aa6(){const _0x1cf944=['\x76\x65\x76\x70\x76\x4b\x30','\x43\x67\x4c\x55\x7a\x30\x58\x48\x44\x67\x76\x55\x79\x33\x4c\x69\x41\x78\x6e\x30\x42\x33\x6a\x35','\x43\x32\x66\x32\x7a\x76\x6a\x4c\x43\x67\x58\x48\x45\x76\x6e\x30\x79\x78\x72\x4c','\x42\x67\x66\x5a\x44\x65\x76\x32\x7a\x77\x35\x30\x73\x77\x71','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x73\x75\x50\x77\x44\x65\x43','\x43\x33\x72\x48\x43\x4e\x72\x71\x41\x77\x35\x4e\x73\x77\x35\x30\x7a\x78\x6a\x32\x79\x77\x57','\x42\x67\x66\x5a\x44\x66\x62\x56\x42\x4d\x44\x62\x44\x61','\x42\x32\x35\x4c\x43\x4e\x6a\x56\x43\x47','\x44\x78\x62\x4b\x79\x78\x72\x4c\x76\x67\x39\x52\x7a\x77\x34','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x73\x77\x71','\x6e\x74\x71\x31\x6e\x4a\x47\x57\x45\x68\x50\x77\x44\x77\x6a\x78','\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','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x72\x56\x41\x32\x76\x55','\x72\x76\x50\x50\x45\x4c\x69','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x7a\x77\x58\x52\x41\x4e\x75','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x72\x6e\x43\x57','\x77\x77\x39\x65\x79\x4d\x53','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x59\x7a\x77\x66\x4b\x45\x71','\x7a\x67\x76\x4e\x43\x4d\x66\x4b\x7a\x77\x71','\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4d\x6e\x56\x42\x78\x62\x53\x7a\x78\x72\x4c','\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','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53\x74\x78\x6d','\x43\x32\x4c\x55\x79\x32\x75','\x42\x32\x35\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x41\x77\x35\x32\x79\x77\x58\x50\x7a\x66\x39\x57\x79\x78\x4c\x53\x42\x32\x66\x4b','\x42\x67\x76\x55\x7a\x33\x72\x4f','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x66\x44\x4c\x79\x4c\x6e\x56\x79\x32\x54\x4c\x44\x61','\x43\x65\x58\x64\x44\x68\x65','\x43\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x55\x42\x33\x72\x46\x7a\x4d\x39\x31\x42\x4d\x71','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x71\x43\x4d\x39\x4e\x43\x4d\x76\x5a\x43\x57','\x42\x32\x35\x71\x42\x33\x6a\x30\x71\x32\x58\x56\x43\x32\x76\x4b','\x76\x67\x39\x52\x7a\x77\x34\x47\x43\x4d\x76\x4d\x43\x4d\x76\x5a\x41\x67\x76\x4b','\x7a\x65\x66\x7a\x77\x67\x47','\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','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x74\x31\x62\x66\x74\x47','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x43\x32\x76\x30','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x73\x7a\x77\x6e\x4c\x41\x78\x7a\x4c\x7a\x61','\x43\x4d\x76\x51\x7a\x77\x6e\x30','\x78\x31\x39\x30\x7a\x78\x6e\x30\x78\x31\x38','\x43\x68\x76\x5a\x41\x61','\x74\x77\x6e\x48\x7a\x75\x69','\x7a\x32\x76\x30\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x48\x44\x67\x75','\x43\x32\x76\x55\x7a\x61','\x7a\x78\x48\x53\x7a\x76\x79','\x44\x67\x39\x52\x7a\x77\x34\x55\x7a\x78\x48\x57\x41\x78\x6a\x4c\x7a\x61','\x44\x67\x76\x59\x42\x77\x4c\x55\x79\x77\x57\x55\x41\x77\x35\x57\x44\x78\x71','\x6e\x5a\x75\x34\x6e\x64\x43\x57\x72\x68\x7a\x30\x76\x68\x76\x78','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x74\x7a\x77\x35\x30','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x74\x4d\x48\x33\x45\x65\x4b','\x43\x32\x4c\x36\x7a\x71','\x43\x67\x39\x59\x44\x63\x35\x56\x43\x67\x76\x55\x7a\x77\x71','\x79\x32\x58\x4c\x79\x77\x35\x31\x43\x61','\x43\x32\x76\x55\x7a\x66\x44\x50\x44\x67\x48\x73\x7a\x78\x6e\x57\x42\x32\x35\x5a\x7a\x71','\x75\x77\x39\x6e\x77\x75\x75','\x41\x67\x4c\x6f\x41\x4d\x53','\x6d\x74\x69\x57\x79\x4c\x48\x48\x41\x66\x7a\x6f','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x76\x72\x35\x43\x67\x75','\x7a\x67\x50\x79\x71\x75\x6d','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x6e\x4c\x43\x33\x6e\x50\x42\x32\x35\x6a\x7a\x61','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x30\x35\x48\x42\x77\x75','\x42\x32\x35\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a\x71\x32\x48\x48\x42\x4d\x44\x4c','\x44\x77\x35\x5a\x44\x77\x6a\x5a\x79\x33\x6a\x50\x79\x4d\x75','\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','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x71','\x43\x32\x76\x48\x43\x4d\x6e\x4f\x75\x67\x66\x59\x79\x77\x31\x5a','\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\x4d\x76\x57\x42\x67\x66\x35\x6c\x4e\x6e\x30\x79\x78\x6a\x30','\x6f\x74\x69\x57\x6d\x64\x4b\x33\x74\x31\x62\x54\x76\x65\x58\x69','\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','\x75\x77\x35\x4c\x45\x67\x75','\x43\x33\x72\x56\x43\x4d\x75','\x42\x32\x35\x62\x7a\x32\x76\x55\x44\x65\x76\x32\x7a\x77\x35\x30','\x6d\x4a\x4b\x5a\x6e\x5a\x69\x35\x6d\x75\x4c\x52\x42\x32\x48\x5a\x79\x57','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x61','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x59\x44\x61','\x42\x32\x35\x64\x42\x32\x35\x30\x79\x77\x4c\x55\x7a\x78\x6a\x73\x7a\x77\x66\x4b\x45\x71','\x42\x32\x35\x4a\x42\x67\x39\x5a\x7a\x71','\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x41\x4e\x76\x62\x7a\x76\x79','\x75\x76\x4c\x74\x44\x75\x6d','\x7a\x78\x7a\x4c\x42\x4e\x72\x5a\x75\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x6d\x4d\x44\x55\x72\x76\x6e\x49\x7a\x61','\x44\x68\x6a\x48\x42\x4e\x6e\x57\x42\x33\x6a\x30','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x32\x39\x31\x42\x4e\x71','\x43\x4d\x76\x48\x7a\x68\x4c\x74\x44\x67\x66\x30\x7a\x71','\x79\x32\x58\x4c\x79\x78\x6a\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x30\x7a\x71','\x6d\x4a\x65\x33\x6f\x74\x65\x59\x6e\x75\x6a\x56\x75\x30\x76\x55\x43\x71','\x7a\x67\x66\x30\x79\x71','\x42\x32\x35\x74\x44\x67\x66\x30\x7a\x75\x6e\x4f\x79\x77\x35\x4e\x7a\x71','\x42\x67\x66\x30\x7a\x77\x35\x4a\x45\x75\x48\x50\x43\x33\x72\x56\x43\x4e\x4c\x74\x41\x78\x50\x4c','\x43\x33\x76\x49\x43\x32\x6e\x59\x41\x77\x6a\x4c','\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','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x6c\x4e\x6e\x30\x79\x78\x6a\x30\x7a\x77\x71','\x41\x78\x6e\x73\x7a\x78\x62\x53\x79\x78\x4c\x50\x42\x4d\x43','\x7a\x32\x76\x30','\x43\x33\x72\x48\x44\x67\x75','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4b\x4c\x4b','\x43\x4d\x76\x4b\x44\x77\x6e\x4c','\x71\x4e\x7a\x63\x77\x4d\x69','\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\x32\x76\x5a\x43\x32\x4c\x56\x42\x4c\x39\x50\x7a\x61','\x79\x32\x54\x52\x45\x78\x71','\x44\x4b\x76\x67\x74\x68\x61','\x44\x67\x39\x74\x44\x68\x6a\x50\x42\x4d\x43','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x62\x44\x61','\x43\x4d\x76\x57\x42\x67\x66\x35','\x43\x33\x72\x56\x43\x66\x62\x50\x42\x4d\x44\x6a\x42\x4e\x72\x4c\x43\x4e\x7a\x48\x42\x61','\x41\x67\x66\x55\x7a\x67\x58\x4c\x43\x4e\x6d','\x43\x4d\x76\x5a\x42\x32\x58\x32\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','\x43\x4b\x76\x70\x42\x32\x47','\x79\x32\x39\x55\x7a\x4d\x4c\x4e','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x65\x76\x34\x7a\x77\x6e\x31\x44\x67\x4c\x56\x42\x4b\x4c\x4b','\x77\x4d\x6a\x54\x44\x76\x79','\x43\x67\x39\x55\x7a\x57','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x64\x42\x32\x31\x57\x42\x67\x76\x30\x7a\x71','\x45\x75\x6a\x56\x7a\x75\x38','\x75\x30\x66\x71\x76\x66\x65','\x42\x4d\x39\x33','\x77\x4e\x4c\x33\x79\x76\x75','\x71\x33\x6a\x50\x76\x65\x79','\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','\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','\x43\x32\x76\x55\x7a\x66\x62\x50\x42\x4d\x43','\x44\x68\x6a\x48\x79\x32\x54\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x72\x50\x42\x32\x34','\x79\x4d\x66\x5a\x7a\x76\x76\x59\x42\x61','\x41\x67\x66\x55\x7a\x67\x58\x4c\x75\x67\x39\x55\x7a\x57','\x41\x67\x66\x5a\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x4d\x76\x4d\x42\x33\x6a\x4c','\x43\x67\x39\x56\x43\x47','\x43\x32\x6e\x4f\x7a\x77\x72\x31\x42\x67\x76\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x41\x67\x66\x5a','\x43\x4b\x6a\x55\x41\x67\x4b','\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','\x7a\x78\x48\x4a\x7a\x77\x58\x53\x7a\x77\x35\x30','\x76\x75\x4c\x53\x7a\x30\x69','\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','\x7a\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x7a\x32\x39\x56\x7a\x61','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x55\x7a\x57','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x79\x78\x76\x30\x42\x31\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x74\x4d\x4c\x36\x72\x4d\x4b','\x41\x78\x6e\x64\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x42\x32\x6a\x51\x7a\x77\x6e\x30','\x42\x4e\x4c\x32\x74\x67\x75','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x35\x4c\x43\x33\x72\x48\x79\x4d\x58\x50\x43\x32\x48\x4c\x7a\x61','\x41\x32\x76\x35\x43\x57','\x43\x67\x39\x59\x44\x61','\x43\x4d\x76\x54\x42\x33\x7a\x4c\x73\x78\x72\x4c\x42\x71','\x6d\x4a\x75\x33\x6f\x64\x65\x59\x6d\x4c\x48\x72\x76\x31\x7a\x59\x76\x57','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4b\x76\x34\x43\x67\x4c\x59\x7a\x77\x71','\x41\x33\x50\x70\x76\x4b\x53','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53','\x7a\x4d\x58\x56\x42\x33\x69','\x43\x4d\x76\x48\x43\x32\x39\x55','\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','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x75\x66\x48\x4a\x45\x65\x69','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x41\x77\x35\x4e','\x43\x67\x39\x59\x44\x63\x35\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x41\x78\x6e\x73\x7a\x77\x7a\x59\x7a\x78\x6e\x4f\x41\x77\x35\x4e\x76\x67\x39\x52\x7a\x77\x34','\x79\x32\x58\x4c\x79\x78\x69','\x41\x4c\x6a\x4b\x74\x68\x4f','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x73\x77\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','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x71','\x44\x67\x39\x52\x7a\x77\x34','\x44\x67\x4c\x54\x7a\x78\x6e\x30\x79\x77\x31\x57','\x43\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x43\x67\x76\x55\x7a\x67\x4c\x55\x7a\x30\x6e\x48\x42\x67\x58\x49\x79\x77\x6e\x52\x43\x57','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x76\x67\x4c\x54\x7a\x78\x69','\x7a\x32\x76\x30\x76\x67\x39\x52\x7a\x77\x34','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x68\x6d','\x6e\x74\x61\x31\x6d\x64\x43\x59\x6f\x66\x48\x4c\x44\x32\x39\x75\x77\x47','\x43\x78\x76\x48\x42\x67\x4c\x30\x45\x71','\x79\x4c\x66\x36\x41\x67\x34','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x33\x62\x4c\x42\x47','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x75\x4c\x4b\x71\x32\x39\x31\x42\x4e\x72\x4c\x43\x47','\x43\x67\x4c\x55\x7a\x57','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4c\x6a\x4c\x7a\x4e\x6a\x4c\x43\x32\x47','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x68\x6a\x56\x7a\x33\x6a\x4c\x43\x33\x6d','\x75\x4d\x76\x58\x44\x77\x76\x5a\x44\x63\x62\x30\x41\x77\x31\x4c\x42\x33\x76\x30','\x73\x78\x7a\x52\x73\x78\x47','\x43\x33\x48\x50\x77\x4e\x47','\x76\x78\x66\x48\x76\x67\x65','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x32\x76\x4b\x72\x78\x7a\x4c\x42\x4e\x72\x6a\x7a\x68\x6d','\x7a\x4d\x58\x74\x73\x75\x38','\x41\x67\x66\x55\x7a\x67\x58\x4c\x71\x32\x58\x56\x43\x32\x75','\x45\x78\x62\x41\x45\x75\x38','\x42\x77\x66\x34\x74\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x33\x6d','\x79\x77\x44\x4c\x42\x4e\x71\x55\x7a\x78\x7a\x4c\x42\x4e\x71','\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\x66\x43\x4e\x6a\x56\x43\x47','\x44\x67\x50\x6f\x44\x4b\x38','\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','\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','\x71\x32\x58\x50\x7a\x77\x35\x30\x69\x67\x72\x50\x43\x32\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x71\x32\x4c\x4e\x45\x77\x47','\x79\x30\x7a\x64\x7a\x68\x6d','\x43\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x43\x4d\x66\x55\x7a\x67\x39\x54','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x7a\x77\x72\x4e\x72\x66\x4f','\x77\x4b\x72\x4f\x74\x31\x79','\x43\x32\x76\x4a\x42\x32\x35\x4b\x43\x31\x6a\x4c\x42\x77\x66\x50\x42\x4d\x4c\x55\x7a\x57','\x7a\x67\x76\x53\x7a\x78\x72\x4c','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x78\x71','\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','\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','\x79\x75\x35\x4d\x44\x33\x47','\x44\x67\x39\x30\x79\x77\x57','\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','\x44\x68\x4c\x57\x7a\x71','\x42\x78\x6e\x4e\x78\x57','\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x7a\x67\x4c\x5a\x43\x67\x66\x30\x79\x32\x48\x6e\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x7a\x32\x76\x30\x75\x33\x72\x48\x44\x68\x6d','\x75\x77\x50\x49\x41\x78\x61','\x79\x32\x39\x4b\x7a\x71','\x42\x75\x31\x50\x43\x67\x79','\x42\x32\x35\x63\x79\x77\x6e\x52\x43\x68\x6a\x4c\x43\x33\x6e\x31\x43\x4d\x76\x78\x79\x78\x6a\x55\x41\x77\x35\x4e','\x43\x32\x4c\x4b\x7a\x77\x6e\x48\x43\x4b\x4c\x4b','\x42\x67\x39\x4a\x79\x77\x58\x74\x44\x67\x39\x59\x79\x77\x44\x4c','\x41\x30\x48\x55\x79\x30\x6d','\x79\x32\x58\x56\x43\x32\x75','\x42\x32\x35\x56\x43\x67\x76\x55','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x74\x7a\x77\x35\x30\x71\x78\x71','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4b\x76\x34\x43\x67\x4c\x59\x41\x77\x35\x4e','\x42\x32\x35\x64\x42\x32\x35\x55\x7a\x77\x6e\x30','\x7a\x68\x76\x57\x42\x67\x4c\x4a\x79\x78\x72\x4c\x43\x31\x6e\x52\x41\x78\x62\x57\x7a\x77\x71','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x76\x4e\x6a\x63\x79\x78\x65','\x44\x78\x6a\x53','\x42\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x30\x6e\x56\x44\x77\x35\x30','\x7a\x78\x6a\x59\x42\x33\x69','\x45\x75\x72\x4a\x71\x75\x6d'];a0_0x1aa6=function(){return _0x1cf944;};return a0_0x1aa6();}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':'\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'};function calculateConnectionQuality(_0x30f211,_0x126cc8){const _0x190dbb=a0_0x42fc,_0x2dd490={'\x65\x78\x6c\x65\x56':_0x190dbb(0x1e2),'\x53\x41\x50\x54\x51':function(_0xf01c55,_0x7f5d02){return _0xf01c55<_0x7f5d02;},'\x5a\x44\x68\x4f\x56':function(_0x48fc45,_0x5af9b1){return _0x48fc45>=_0x5af9b1;},'\x68\x69\x4e\x6a\x6b':function(_0x1df310,_0x30d360){return _0x1df310!==_0x30d360;},'\x51\x6a\x62\x69\x70':function(_0x29f6c7,_0x3646db){return _0x29f6c7>_0x3646db;},'\x6a\x52\x64\x4c\x7a':function(_0x3f465d,_0x1ef4e0){return _0x3f465d!==_0x1ef4e0;}};if(!_0x126cc8)return _0x2dd490[_0x190dbb(0x236)];const {avgPingLatencyMs:_0x5cd667,missedPongCount:_0x49a0cf,reconnectCount:_0x766e74,lastReconnectAt:_0x44358e}=_0x30f211,_0x2a9739=_0x44358e&&_0x2dd490[_0x190dbb(0x18e)](Date[_0x190dbb(0x18f)]()-_0x44358e,0x12c*0x3e8);if(_0x2dd490[_0x190dbb(0x1e4)](_0x49a0cf,0x2)||_0x2a9739&&_0x766e74>0x1)return _0x190dbb(0x199);if(_0x49a0cf>=0x1||_0x2dd490[_0x190dbb(0x242)](_0x5cd667,null)&&_0x2dd490[_0x190dbb(0x1f2)](_0x5cd667,0x3e8)||_0x2a9739)return _0x190dbb(0x219);if(_0x2dd490[_0x190dbb(0x1bb)](_0x5cd667,null)&&_0x5cd667<0x64&&_0x766e74===0x0)return _0x190dbb(0x19e);if(_0x5cd667!==null&&_0x5cd667<=0x12c)return'\x67\x6f\x6f\x64';return _0x190dbb(0x1a2);}function a0_0x42fc(_0x47d4df,_0x4ec609){_0x47d4df=_0x47d4df-0x17c;const _0x1aa66f=a0_0x1aa6();let _0x42fc59=_0x1aa66f[_0x47d4df];if(a0_0x42fc['\x4b\x65\x56\x7a\x77\x6b']===undefined){var _0x3d22fb=function(_0x998590){const _0x3f5923='\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 _0x2ef021='',_0xf12979='';for(let _0x22508d=0x0,_0x1a1320,_0x5657bf,_0x2a72e9=0x0;_0x5657bf=_0x998590['\x63\x68\x61\x72\x41\x74'](_0x2a72e9++);~_0x5657bf&&(_0x1a1320=_0x22508d%0x4?_0x1a1320*0x40+_0x5657bf:_0x5657bf,_0x22508d++%0x4)?_0x2ef021+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x1a1320>>(-0x2*_0x22508d&0x6)):0x0){_0x5657bf=_0x3f5923['\x69\x6e\x64\x65\x78\x4f\x66'](_0x5657bf);}for(let _0x4e5893=0x0,_0x1517b5=_0x2ef021['\x6c\x65\x6e\x67\x74\x68'];_0x4e5893<_0x1517b5;_0x4e5893++){_0xf12979+='\x25'+('\x30\x30'+_0x2ef021['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4e5893)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0xf12979);};a0_0x42fc['\x77\x51\x6e\x5a\x4c\x48']=_0x3d22fb,a0_0x42fc['\x44\x6a\x55\x67\x4c\x4a']={},a0_0x42fc['\x4b\x65\x56\x7a\x77\x6b']=!![];}const _0x30e2ab=_0x1aa66f[0x0],_0x25690f=_0x47d4df+_0x30e2ab,_0x1abe2b=a0_0x42fc['\x44\x6a\x55\x67\x4c\x4a'][_0x25690f];return!_0x1abe2b?(_0x42fc59=a0_0x42fc['\x77\x51\x6e\x5a\x4c\x48'](_0x42fc59),a0_0x42fc['\x44\x6a\x55\x67\x4c\x4a'][_0x25690f]=_0x42fc59):_0x42fc59=_0x1abe2b,_0x42fc59;}const DEFAULT_CONFIG={'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':'\x77\x65\x62\x73\x6f\x63\x6b\x65\x74','\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':'\x73\x65\x73\x73\x69\x6f\x6e\x5f\x67\x61\x74\x65\x77\x61\x79\x5f','\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':'\x6c\x61\x73\x74\x5f\x65\x76\x65\x6e\x74\x5f\x69\x64','\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64':'\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x5f\x69\x64','\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':a0_0xc5ac43(0x17d)},WIRE_TYPE_MAP={'\x73\x69\x64\x65\x63\x61\x72\x2e\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0xc5ac43(0x221),'\x73\x69\x64\x65\x63\x61\x72\x2e\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0xc5ac43(0x1db),'\x73\x69\x64\x65\x63\x61\x72\x2e\x6e\x6f\x74\x5f\x66\x6f\x75\x6e\x64':a0_0xc5ac43(0x225),'\x73\x69\x64\x65\x63\x61\x72\x2e\x72\x65\x61\x64\x79':a0_0xc5ac43(0x218)};var MemoryStorage=class{[a0_0xc5ac43(0x252)]=new Map();['\x67\x65\x74\x49\x74\x65\x6d'](_0x297f40){const _0x2c6be6=a0_0xc5ac43;return this[_0x2c6be6(0x252)][_0x2c6be6(0x26a)](_0x297f40)??null;}[a0_0xc5ac43(0x1e0)](_0x421bf0,_0x1a161e){const _0x4535eb=a0_0xc5ac43;this[_0x4535eb(0x252)][_0x4535eb(0x22e)](_0x421bf0,_0x1a161e);}['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x4dc30a){const _0x12ea4c=a0_0xc5ac43;this['\x73\x74\x6f\x72\x65'][_0x12ea4c(0x1e6)](_0x4dc30a);}},SessionGatewayClient=class{['\x77\x73']=null;['\x63\x6f\x6e\x66\x69\x67'];[a0_0xc5ac43(0x184)];['\x63\x75\x72\x72\x65\x6e\x74\x54\x6f\x6b\x65\x6e'];['\x69\x73\x52\x65\x66\x72\x65\x73\x68\x69\x6e\x67\x54\x6f\x6b\x65\x6e']=![];[a0_0xc5ac43(0x26b)]=a0_0xc5ac43(0x1e2);[a0_0xc5ac43(0x1e7)]=null;['\x68\x61\x73\x43\x6f\x6e\x6e\x65\x63\x74\x65\x64\x42\x65\x66\x6f\x72\x65']=![];[a0_0xc5ac43(0x181)]=null;[a0_0xc5ac43(0x20c)]=null;[a0_0xc5ac43(0x1fb)]=null;[a0_0xc5ac43(0x202)]=0x0;['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']=0x0;[a0_0xc5ac43(0x22f)]=0x0;[a0_0xc5ac43(0x23a)]=0x0;[a0_0xc5ac43(0x25c)]=0x0;[a0_0xc5ac43(0x1fe)]=0x0;[a0_0xc5ac43(0x1c3)]=null;[a0_0xc5ac43(0x1b1)]=null;[a0_0xc5ac43(0x1be)]=null;[a0_0xc5ac43(0x1c2)]=new Map();[a0_0xc5ac43(0x1ca)]=0x0;[a0_0xc5ac43(0x1d2)]=new Set();[a0_0xc5ac43(0x206)]=[];[a0_0xc5ac43(0x23b)]={...INITIAL_METRICS};[a0_0xc5ac43(0x208)]=null;['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64']=null;['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']=null;['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=![];[a0_0xc5ac43(0x1cd)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0};constructor(_0x20bf28){const _0x2d6290=a0_0xc5ac43,_0x1335b0={'\x55\x49\x6c\x67\x42':function(_0x41987a,_0x84c67a){return _0x41987a!==_0x84c67a;},'\x51\x6f\x4d\x59\x45':'\x75\x6e\x64\x65\x66\x69\x6e\x65\x64','\x65\x6c\x6b\x6a\x75':function(_0x4f58d9,_0x22bb45){return _0x4f58d9 in _0x22bb45;},'\x49\x76\x6b\x49\x78':_0x2d6290(0x231)};let _0x20ea4f;if(_0x20bf28[_0x2d6290(0x24b)])_0x20ea4f=_0x20bf28[_0x2d6290(0x24b)];else{if(_0x1335b0[_0x2d6290(0x19f)](typeof globalThis,_0x1335b0[_0x2d6290(0x241)])&&_0x1335b0[_0x2d6290(0x215)](_0x2d6290(0x1f7),globalThis))try{const _0xcb9b67=_0x1335b0[_0x2d6290(0x1cf)];localStorage[_0x2d6290(0x1e0)](_0xcb9b67,_0xcb9b67),localStorage[_0x2d6290(0x1ad)](_0xcb9b67),_0x20ea4f=localStorage;}catch{_0x20ea4f=new MemoryStorage();}else _0x20ea4f=new MemoryStorage();}this[_0x2d6290(0x188)]={'\x75\x72\x6c':_0x20bf28[_0x2d6290(0x201)],'\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':_0x20bf28[_0x2d6290(0x26c)],'\x74\x6f\x6b\x65\x6e':_0x20bf28['\x74\x6f\x6b\x65\x6e'],'\x6f\x6e\x54\x6f\x6b\x65\x6e\x52\x65\x66\x72\x65\x73\x68':_0x20bf28[_0x2d6290(0x1cc)],'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':_0x20bf28[_0x2d6290(0x25e)]??DEFAULT_CONFIG[_0x2d6290(0x25e)],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x20bf28['\x63\x68\x61\x6e\x6e\x65\x6c\x73']??DEFAULT_CONFIG[_0x2d6290(0x1c5)],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':_0x20bf28['\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74']??DEFAULT_CONFIG[_0x2d6290(0x1a5)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':_0x20bf28[_0x2d6290(0x24a)]??DEFAULT_CONFIG[_0x2d6290(0x24a)],'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x20bf28[_0x2d6290(0x211)]??DEFAULT_CONFIG[_0x2d6290(0x211)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x20bf28[_0x2d6290(0x22a)]??DEFAULT_CONFIG['\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73'],'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':_0x20bf28[_0x2d6290(0x21c)]??DEFAULT_CONFIG[_0x2d6290(0x21c)],'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':_0x20bf28[_0x2d6290(0x216)]??DEFAULT_CONFIG[_0x2d6290(0x216)],'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':_0x20bf28[_0x2d6290(0x1d6)]??DEFAULT_CONFIG[_0x2d6290(0x1d6)],'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':_0x20bf28[_0x2d6290(0x1ec)]??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':_0x20bf28[_0x2d6290(0x1e9)]??DEFAULT_CONFIG[_0x2d6290(0x1e9)],'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':_0x20bf28[_0x2d6290(0x24d)]??DEFAULT_CONFIG[_0x2d6290(0x24d)],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65':_0x20ea4f,'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':_0x20bf28['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78']??DEFAULT_CONFIG[_0x2d6290(0x192)],'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':_0x20bf28[_0x2d6290(0x265)]??DEFAULT_CONFIG['\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65']},this[_0x2d6290(0x184)]=_0x20bf28[_0x2d6290(0x184)]??{},this[_0x2d6290(0x212)]=_0x20bf28[_0x2d6290(0x1bf)];if(this[_0x2d6290(0x188)][_0x2d6290(0x24d)])this['\x6c\x6f\x61\x64\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']();}[a0_0xc5ac43(0x1a4)](){const _0x35cdac=a0_0xc5ac43,_0x27e6b4={'\x4d\x63\x61\x65\x42':function(_0x137363,_0x5cb441){return _0x137363===_0x5cb441;},'\x51\x59\x53\x75\x43':_0x35cdac(0x1a3),'\x63\x46\x43\x64\x73':_0x35cdac(0x1b7)};if(this[_0x35cdac(0x26b)]===_0x35cdac(0x22d)||_0x27e6b4[_0x35cdac(0x233)](this[_0x35cdac(0x26b)],_0x27e6b4[_0x35cdac(0x25b)]))return;const _0x3a771a=this[_0x35cdac(0x198)];this[_0x35cdac(0x1c1)](_0x3a771a?_0x27e6b4[_0x35cdac(0x1df)]:_0x27e6b4[_0x35cdac(0x25b)]),this[_0x35cdac(0x222)]();}['\x63\x6f\x6e\x6e\x65\x63\x74\x57\x65\x62\x53\x6f\x63\x6b\x65\x74'](){const _0x446c9e=a0_0xc5ac43,_0x5615d9={'\x45\x51\x48\x52\x46':_0x446c9e(0x1bf)},_0x7fd8d6=new URL(this[_0x446c9e(0x188)][_0x446c9e(0x201)]);_0x7fd8d6[_0x446c9e(0x24c)][_0x446c9e(0x22e)](_0x5615d9['\x45\x51\x48\x52\x46'],this[_0x446c9e(0x212)]),this['\x77\x73']=new WebSocket(_0x7fd8d6[_0x446c9e(0x180)]()),this['\x77\x73'][_0x446c9e(0x1fa)]=()=>this[_0x446c9e(0x1c9)](),this['\x77\x73'][_0x446c9e(0x258)]=_0x12522d=>this['\x68\x61\x6e\x64\x6c\x65\x43\x6c\x6f\x73\x65'](_0x12522d[_0x446c9e(0x1f3)],_0x12522d[_0x446c9e(0x1b3)]),this['\x77\x73'][_0x446c9e(0x20d)]=_0x4b1432=>{},this['\x77\x73']['\x6f\x6e\x6d\x65\x73\x73\x61\x67\x65']=_0x287051=>this['\x68\x61\x6e\x64\x6c\x65\x4d\x65\x73\x73\x61\x67\x65'](_0x287051[_0x446c9e(0x263)]);}[a0_0xc5ac43(0x22b)](){const _0x38046d=a0_0xc5ac43,_0x52634e={'\x62\x62\x68\x75\x56':_0x38046d(0x1dd),'\x6a\x75\x41\x65\x56':_0x38046d(0x1e2)};this['\x63\x6c\x65\x61\x6e\x75\x70'](),this['\x77\x73']&&(this['\x77\x73'][_0x38046d(0x1f9)](0x3e8,_0x52634e['\x62\x62\x68\x75\x56']),this['\x77\x73']=null),this[_0x38046d(0x1c1)](_0x52634e[_0x38046d(0x25a)]);}async[a0_0xc5ac43(0x266)](_0x4ec8c8){const _0x5db9f5=a0_0xc5ac43,_0x29edd0={'\x51\x6e\x65\x78\x65':_0x5db9f5(0x266)};return(await this[_0x5db9f5(0x240)]({'\x74\x79\x70\x65':_0x29edd0[_0x5db9f5(0x251)],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x4ec8c8}))[_0x5db9f5(0x1c5)];}async[a0_0xc5ac43(0x249)](_0x5ecfcf){const _0x5276bd=a0_0xc5ac43,_0x537e81={'\x70\x4c\x43\x74\x71':_0x5276bd(0x249)};return(await this[_0x5276bd(0x240)]({'\x74\x79\x70\x65':_0x537e81[_0x5276bd(0x223)],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x5ecfcf}))[_0x5276bd(0x1c5)];}async[a0_0xc5ac43(0x1cb)](){const _0x5e9fa1=a0_0xc5ac43,_0x5afbe1=Date[_0x5e9fa1(0x18f)]();return await this['\x73\x65\x6e\x64\x57\x69\x74\x68\x52\x65\x73\x70\x6f\x6e\x73\x65']({'\x74\x79\x70\x65':_0x5e9fa1(0x1cb)}),Date['\x6e\x6f\x77']()-_0x5afbe1;}[a0_0xc5ac43(0x182)](_0x5b3551){const _0x4ed9bc=a0_0xc5ac43;this[_0x4ed9bc(0x235)]({'\x74\x79\x70\x65':_0x4ed9bc(0x182),'\x73\x69\x6e\x63\x65':_0x5b3551});}['\x73\x65\x6e\x64\x54\x65\x72\x6d\x69\x6e\x61\x6c\x49\x6e\x70\x75\x74'](_0x2378d4,_0x1d7df2){const _0xea529c=a0_0xc5ac43;if(!this[_0xea529c(0x1a7)]())return![];return this['\x73\x65\x6e\x64']({'\x74\x79\x70\x65':_0xea529c(0x238),'\x64\x61\x74\x61':{'\x74\x65\x72\x6d\x69\x6e\x61\x6c\x49\x64':_0x2378d4,'\x69\x6e\x70\x75\x74':_0x1d7df2}}),!![];}['\x73\x65\x74\x53\x65\x73\x73\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74'](_0x3b6191,_0x3e962a){const _0x3444c4=a0_0xc5ac43;this[_0x3444c4(0x246)]=_0x3b6191;if(_0x3e962a)this[_0x3444c4(0x189)]=_0x3e962a;this[_0x3444c4(0x207)]();}[a0_0xc5ac43(0x261)](){const _0x4258db=a0_0xc5ac43,_0x53cf95={'\x61\x4e\x66\x77\x78':function(_0x107322,_0x185949){return _0x107322+_0x185949;}};this[_0x4258db(0x208)]=null,this[_0x4258db(0x189)]=null,this[_0x4258db(0x246)]=null,this[_0x4258db(0x269)]=![],this[_0x4258db(0x1cd)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73'][_0x4258db(0x1ba)](),this[_0x4258db(0x1fe)]=0x0;if(this[_0x4258db(0x188)]['\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65']){const _0x546918=this[_0x4258db(0x188)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78'];try{this['\x63\x6f\x6e\x66\x69\x67'][_0x4258db(0x24b)][_0x4258db(0x1ad)](_0x546918+STORAGE_KEYS[_0x4258db(0x208)]),this['\x63\x6f\x6e\x66\x69\x67'][_0x4258db(0x24b)]['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x53cf95[_0x4258db(0x1ea)](_0x546918,STORAGE_KEYS[_0x4258db(0x20f)])),this[_0x4258db(0x188)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65'][_0x4258db(0x1ad)](_0x546918+STORAGE_KEYS['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64']);}catch{}}}[a0_0xc5ac43(0x234)](){const _0xb658db=a0_0xc5ac43;return{'\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67':this[_0xb658db(0x269)],'\x70\x72\x6f\x67\x72\x65\x73\x73':{...this[_0xb658db(0x1cd)]}};}[a0_0xc5ac43(0x1f1)](){const _0x54f0a9=a0_0xc5ac43;return{'\x73\x74\x61\x74\x65':this[_0x54f0a9(0x26b)],'\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[_0x54f0a9(0x181)],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':this[_0x54f0a9(0x20c)],'\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['\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64'],'\x6d\x65\x73\x73\x61\x67\x65\x73\x53\x65\x6e\x74':this[_0x54f0a9(0x23a)],'\x65\x76\x65\x6e\x74\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x54f0a9(0x25c)],'\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64':this['\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64'],'\x6d\x65\x74\x72\x69\x63\x73':{...this[_0x54f0a9(0x23b)]},'\x72\x65\x70\x6c\x61\x79':this[_0x54f0a9(0x234)]()};}['\x67\x65\x74\x53\x74\x61\x74\x65'](){const _0x23604d=a0_0xc5ac43;return this[_0x23604d(0x26b)];}[a0_0xc5ac43(0x1a7)](){const _0x140c59=a0_0xc5ac43;return this[_0x140c59(0x26b)]===_0x140c59(0x22d);}[a0_0xc5ac43(0x1dc)](){const _0x39dec1=a0_0xc5ac43;return this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'][_0x39dec1(0x1c7)];}[a0_0xc5ac43(0x193)](){return{...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']};}['\x72\x65\x73\x65\x74\x4d\x65\x74\x72\x69\x63\x73'](){const _0x4c6d7b=a0_0xc5ac43;this[_0x4c6d7b(0x206)]=[],this[_0x4c6d7b(0x23b)]={...INITIAL_METRICS},this[_0x4c6d7b(0x184)]['\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73\x43\x68\x61\x6e\x67\x65']?.(this[_0x4c6d7b(0x23b)]);}[a0_0xc5ac43(0x20e)](_0x25a2b3){const _0xeb536a=a0_0xc5ac43;this[_0xeb536a(0x212)]=_0x25a2b3;if(this['\x73\x74\x61\x74\x65']===_0xeb536a(0x22d)&&this['\x77\x73'])this['\x77\x73'][_0xeb536a(0x1f9)](0x3e8,_0xeb536a(0x228));}[a0_0xc5ac43(0x1c4)](){const _0x4865d8=a0_0xc5ac43;return this[_0x4865d8(0x212)];}['\x73\x65\x74\x53\x74\x61\x74\x65'](_0x1c36a8){const _0x3dfbde=a0_0xc5ac43;this[_0x3dfbde(0x26b)]!==_0x1c36a8&&(this[_0x3dfbde(0x26b)]=_0x1c36a8,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[_0x3dfbde(0x184)][_0x3dfbde(0x264)]?.(_0x1c36a8));}[a0_0xc5ac43(0x1c9)](){const _0x125912=a0_0xc5ac43,_0x29ccbf=this[_0x125912(0x198)];this[_0x125912(0x198)]=!![],this[_0x125912(0x1c1)](_0x125912(0x22d)),this[_0x125912(0x1e7)]=Date[_0x125912(0x18f)](),this[_0x125912(0x209)]=0x0,this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']=0x0,this['\x73\x74\x61\x72\x74\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](),this[_0x125912(0x1a0)](),_0x29ccbf&&(this[_0x125912(0x195)](),this[_0x125912(0x184)][_0x125912(0x21e)]?.());}[a0_0xc5ac43(0x1d4)](_0x3a27db,_0x3435a5){const _0x436fce=a0_0xc5ac43,_0x2295f6={'\x55\x71\x61\x54\x61':function(_0x426480,_0x225925){return _0x426480<_0x225925;}};this[_0x436fce(0x23f)](),this[_0x436fce(0x184)]['\x6f\x6e\x44\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74']?.(_0x3a27db,_0x3435a5);if(this[_0x436fce(0x188)][_0x436fce(0x1a5)]&&_0x2295f6[_0x436fce(0x1d1)](this[_0x436fce(0x209)],this[_0x436fce(0x188)][_0x436fce(0x24a)]))this[_0x436fce(0x1c1)](_0x436fce(0x1b7)),this[_0x436fce(0x19a)]();else this[_0x436fce(0x1c1)](_0x436fce(0x1e2));}[a0_0xc5ac43(0x214)](_0x2e1ca3){const _0x373f8c=a0_0xc5ac43,_0x553f1a={'\x57\x76\x53\x43\x44':'\x73\x74\x72\x69\x6e\x67','\x55\x76\x6d\x59\x62':function(_0x260933,_0x186559){return _0x260933!==_0x186559;},'\x62\x51\x7a\x68\x6e':_0x373f8c(0x1d7),'\x79\x44\x63\x41\x43':function(_0x57e42d,_0x22cfbc){return _0x57e42d===_0x22cfbc;},'\x66\x6c\x53\x49\x4f':function(_0x3de99b,_0x25e923){return _0x3de99b*_0x25e923;}};this['\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64']++;try{const _0xecc547=JSON['\x70\x61\x72\x73\x65'](_0x2e1ca3);if(!_0xecc547[_0x373f8c(0x1ed)]&&_0xecc547[_0x373f8c(0x244)])_0xecc547[_0x373f8c(0x1ed)]=_0xecc547[_0x373f8c(0x244)];if(typeof _0xecc547['\x74\x79\x70\x65']===_0x553f1a['\x57\x76\x53\x43\x44']&&WIRE_TYPE_MAP[_0xecc547[_0x373f8c(0x1ed)]]!==void 0x0)_0xecc547[_0x373f8c(0x1ed)]=WIRE_TYPE_MAP[_0xecc547[_0x373f8c(0x1ed)]];if(_0xecc547['\x64\x61\x74\x61']&&typeof _0xecc547['\x64\x61\x74\x61']===_0x373f8c(0x1a8)){const _0x48acad=_0xecc547[_0x373f8c(0x263)];if(_0x553f1a['\x55\x76\x6d\x59\x62'](_0x48acad[_0x373f8c(0x1f6)],void 0x0)&&_0x48acad['\x73\x61\x6e\x64\x62\x6f\x78\x49\x64']===void 0x0)_0x48acad[_0x373f8c(0x259)]=_0x48acad[_0x373f8c(0x1f6)];}if(_0xecc547[_0x373f8c(0x1ed)]===_0x553f1a[_0x373f8c(0x1c8)]&&!_0xecc547[_0x373f8c(0x263)]&&_0xecc547[_0x373f8c(0x255)]){const {type:_0x446e4b,messageType:_0x46b737,channel:_0x2d53bf,id:_0x230b8f,sequenceId:_0x4a8c4d,timestamp:_0x1c685c,..._0x4abc31}=_0xecc547;_0xecc547[_0x373f8c(0x263)]=_0x4abc31;}const _0x10258a=_0xecc547;if(_0x553f1a[_0x373f8c(0x204)](_0x10258a[_0x373f8c(0x1ed)],_0x373f8c(0x18b))){this[_0x373f8c(0x197)](_0x10258a[_0x373f8c(0x1c0)]),this[_0x373f8c(0x1f0)](_0x10258a);return;}if('\x69\x64'in _0x10258a&&_0x10258a['\x69\x64']&&this[_0x373f8c(0x188)][_0x373f8c(0x1ec)]){const _0x4c8e8e=_0x10258a['\x69\x64'];if(this[_0x373f8c(0x1d2)][_0x373f8c(0x19b)](_0x4c8e8e)){this[_0x373f8c(0x1fe)]++;return;}this['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73']['\x61\x64\x64'](_0x4c8e8e);if(this[_0x373f8c(0x1d2)][_0x373f8c(0x23d)]>this[_0x373f8c(0x188)]['\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65']){const _0x1d5483=Math[_0x373f8c(0x1b2)](_0x553f1a[_0x373f8c(0x1d3)](this[_0x373f8c(0x188)]['\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65'],0.1));let _0x17fef2=0x0;for(const _0x21eb43 of this[_0x373f8c(0x1d2)]){if(_0x17fef2>=_0x1d5483)break;this[_0x373f8c(0x1d2)][_0x373f8c(0x1e6)](_0x21eb43),_0x17fef2++;}}this['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64']=_0x4c8e8e,this[_0x373f8c(0x207)]();}this['\x64\x69\x73\x70\x61\x74\x63\x68\x4d\x65\x73\x73\x61\x67\x65'](_0x10258a);}catch{}}[a0_0xc5ac43(0x197)](_0x175e58){const _0x3ccc81=a0_0xc5ac43,_0x568c05={'\x50\x58\x63\x78\x42':function(_0x4a8edb,_0x46bdd3){return _0x4a8edb-_0x46bdd3;},'\x65\x64\x67\x44\x5a':function(_0x32e2f3,_0x4b1a82){return _0x32e2f3>_0x4b1a82;}},_0x24fcb7=Date[_0x3ccc81(0x18f)]();this['\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74']=_0x175e58,this[_0x3ccc81(0x202)]=0x0,this[_0x3ccc81(0x1d8)]();if(this['\x6c\x61\x73\x74\x50\x69\x6e\x67\x53\x65\x6e\x74\x41\x74']){const _0x10ed64=_0x568c05[_0x3ccc81(0x1b6)](_0x24fcb7,this[_0x3ccc81(0x1fb)]);this[_0x3ccc81(0x206)][_0x3ccc81(0x232)](_0x10ed64);if(_0x568c05[_0x3ccc81(0x1e3)](this[_0x3ccc81(0x206)][_0x3ccc81(0x220)],this['\x63\x6f\x6e\x66\x69\x67'][_0x3ccc81(0x265)]))this[_0x3ccc81(0x206)]['\x73\x68\x69\x66\x74']();this[_0x3ccc81(0x21b)](_0x10ed64,_0x24fcb7);}}[a0_0xc5ac43(0x1f0)](_0x540e05){const _0x4b2f57=a0_0xc5ac43,_0x36088e={'\x4e\x78\x51\x5a\x5a':function(_0x365931,_0x413952){return _0x365931 in _0x413952;},'\x64\x41\x59\x58\x68':function(_0x315a76,_0x1f1dcc){return _0x315a76===_0x1f1dcc;},'\x72\x45\x4f\x6f\x68':_0x4b2f57(0x203),'\x54\x45\x4f\x56\x4d':_0x4b2f57(0x263),'\x76\x45\x46\x4c\x70':_0x4b2f57(0x221),'\x6b\x7a\x4f\x56\x4b':_0x4b2f57(0x1db),'\x5a\x79\x77\x61\x55':_0x4b2f57(0x225),'\x68\x6d\x63\x72\x70':'\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x72\x65\x61\x64\x79','\x73\x78\x69\x5a\x78':_0x4b2f57(0x21f),'\x52\x6c\x6c\x43\x63':_0x4b2f57(0x218),'\x45\x5a\x69\x7a\x52':_0x4b2f57(0x24e),'\x43\x69\x67\x79\x68':'\x72\x65\x70\x6c\x61\x79\x2e\x70\x72\x6f\x67\x72\x65\x73\x73','\x74\x6a\x4e\x76\x4f':_0x4b2f57(0x21a),'\x6d\x4d\x69\x70\x66':'\x74\x6f\x6b\x65\x6e\x2e\x65\x78\x70\x69\x72\x69\x6e\x67','\x59\x6f\x44\x62\x6b':_0x4b2f57(0x17c)};if(_0x36088e['\x4e\x78\x51\x5a\x5a']('\x69\x64',_0x540e05)&&_0x540e05['\x69\x64']){const _0x3d735c=this[_0x4b2f57(0x1c2)][_0x4b2f57(0x26a)](_0x540e05['\x69\x64']);if(_0x3d735c){this[_0x4b2f57(0x1c2)][_0x4b2f57(0x1e6)](_0x540e05['\x69\x64']);if(_0x36088e[_0x4b2f57(0x229)](_0x540e05[_0x4b2f57(0x1ed)],_0x36088e[_0x4b2f57(0x187)]))_0x3d735c[_0x4b2f57(0x230)](new Error(_0x540e05[_0x4b2f57(0x1ff)]));else _0x3d735c[_0x4b2f57(0x185)](_0x36088e[_0x4b2f57(0x205)]in _0x540e05?_0x540e05['\x64\x61\x74\x61']:void 0x0);return;}}switch(_0x540e05[_0x4b2f57(0x1ed)]){case _0x4b2f57(0x1aa):this[_0x4b2f57(0x184)][_0x4b2f57(0x1fd)]?.(_0x540e05[_0x4b2f57(0x263)]['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64']);break;case _0x36088e[_0x4b2f57(0x17f)]:this[_0x4b2f57(0x184)][_0x4b2f57(0x1b5)]?.(_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x259)],_0x540e05['\x64\x61\x74\x61'][_0x4b2f57(0x196)]);break;case _0x36088e[_0x4b2f57(0x1b0)]:this[_0x4b2f57(0x184)][_0x4b2f57(0x1e8)]?.(_0x540e05['\x64\x61\x74\x61']['\x73\x61\x6e\x64\x62\x6f\x78\x49\x64'],_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x203)]);break;case _0x36088e[_0x4b2f57(0x190)]:this[_0x4b2f57(0x184)]['\x6f\x6e\x52\x75\x6e\x74\x69\x6d\x65\x4e\x6f\x74\x46\x6f\x75\x6e\x64']?.(_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x26c)],_0x540e05['\x64\x61\x74\x61'][_0x4b2f57(0x1bc)],_0x540e05['\x64\x61\x74\x61'][_0x4b2f57(0x1b3)]);break;case _0x36088e['\x68\x6d\x63\x72\x70']:{const _0x16f381=_0x540e05[_0x4b2f57(0x263)],_0x90092=_0x16f381['\x73\x61\x6e\x64\x62\x6f\x78\x49\x64']??_0x16f381['\x73\x69\x64\x65\x63\x61\x72\x49\x64'];if(_0x90092)this[_0x4b2f57(0x184)][_0x4b2f57(0x257)]?.(_0x90092);else this[_0x4b2f57(0x184)][_0x4b2f57(0x1d9)]?.(_0x4b2f57(0x250),_0x36088e[_0x4b2f57(0x1d0)]);break;}case _0x36088e['\x52\x6c\x6c\x43\x63']:this[_0x4b2f57(0x184)]['\x6f\x6e\x52\x75\x6e\x74\x69\x6d\x65\x52\x65\x61\x64\x79']?.(_0x540e05[_0x4b2f57(0x263)]);break;case _0x4b2f57(0x23e):this[_0x4b2f57(0x184)]['\x6f\x6e\x50\x6f\x72\x74\x4f\x70\x65\x6e\x65\x64']?.(_0x540e05[_0x4b2f57(0x263)]['\x70\x6f\x72\x74'],_0x540e05['\x64\x61\x74\x61']['\x70\x72\x6f\x74\x6f\x63\x6f\x6c'],_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x247)]);break;case _0x4b2f57(0x1b8):this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x4b2f57(0x227)]?.(_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x1ac)]);break;case _0x4b2f57(0x1d7):this[_0x4b2f57(0x25c)]++,this[_0x4b2f57(0x1bd)](_0x540e05[_0x4b2f57(0x263)]),this[_0x4b2f57(0x184)][_0x4b2f57(0x253)]?.(_0x540e05[_0x4b2f57(0x255)],_0x540e05[_0x4b2f57(0x263)],_0x540e05['\x73\x65\x71\x75\x65\x6e\x63\x65\x49\x64']);break;case _0x36088e[_0x4b2f57(0x213)]:this[_0x4b2f57(0x269)]=!![],this[_0x4b2f57(0x1cd)]={'\x74\x6f\x74\x61\x6c':_0x540e05[_0x4b2f57(0x1eb)],'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this[_0x4b2f57(0x184)][_0x4b2f57(0x256)]?.(_0x540e05['\x74\x6f\x74\x61\x6c']);break;case _0x36088e[_0x4b2f57(0x1de)]:this[_0x4b2f57(0x1cd)][_0x4b2f57(0x224)]=_0x540e05[_0x4b2f57(0x224)],this[_0x4b2f57(0x184)][_0x4b2f57(0x226)]?.(_0x540e05[_0x4b2f57(0x224)],this['\x72\x65\x70\x6c\x61\x79\x50\x72\x6f\x67\x72\x65\x73\x73']['\x74\x6f\x74\x61\x6c']);break;case _0x36088e[_0x4b2f57(0x1da)]:this[_0x4b2f57(0x269)]=![],this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x4b2f57(0x18c)]?.(_0x540e05[_0x4b2f57(0x1eb)]);break;case _0x4b2f57(0x203):this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0x4b2f57(0x1d9)]?.(_0x540e05['\x6d\x65\x73\x73\x61\x67\x65'],_0x540e05['\x63\x6f\x64\x65']);break;case _0x36088e[_0x4b2f57(0x1f4)]:this[_0x4b2f57(0x184)][_0x4b2f57(0x1fc)]?.(_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x1e5)]),this[_0x4b2f57(0x267)]();break;case _0x4b2f57(0x237):this[_0x4b2f57(0x184)][_0x4b2f57(0x1af)]?.();break;case _0x36088e[_0x4b2f57(0x217)]:this[_0x4b2f57(0x184)][_0x4b2f57(0x1f5)]?.(_0x540e05[_0x4b2f57(0x263)]['\x64\x72\x6f\x70\x70\x65\x64\x43\x6f\x75\x6e\x74'],_0x540e05[_0x4b2f57(0x263)][_0x4b2f57(0x21d)],_0x540e05[_0x4b2f57(0x263)]['\x74\x6f\x74\x61\x6c\x44\x72\x6f\x70\x70\x65\x64']);break;}}[a0_0xc5ac43(0x1bd)](_0x4efddd){const _0x498620=a0_0xc5ac43,_0x53e099={'\x72\x42\x6e\x68\x69':_0x498620(0x1a8),'\x6b\x48\x6e\x63\x43':function(_0x4581e7,_0x3fe5e9){return _0x4581e7===_0x3fe5e9;},'\x6e\x79\x76\x4c\x65':_0x498620(0x268)};if(typeof _0x4efddd!==_0x53e099[_0x498620(0x19c)]||_0x4efddd===null)return;const _0x179e31=_0x4efddd;_0x179e31[_0x498620(0x20f)]&&(this[_0x498620(0x189)]=_0x179e31[_0x498620(0x20f)],this['\x73\x61\x76\x65\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']()),_0x53e099[_0x498620(0x1f8)](_0x179e31[_0x498620(0x1ed)],_0x53e099[_0x498620(0x1a9)])&&_0x179e31[_0x498620(0x26c)]&&(this[_0x498620(0x246)]=_0x179e31['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64'],this[_0x498620(0x207)]());}async[a0_0xc5ac43(0x267)](){const _0x294222=a0_0xc5ac43,_0x85b0b9={'\x4e\x68\x77\x78\x49':function(_0x37e284,_0x5beaf9){return _0x37e284(_0x5beaf9);},'\x63\x6b\x6b\x79\x74':'\x54\x4f\x4b\x45\x4e\x5f\x52\x45\x46\x52\x45\x53\x48\x5f\x46\x41\x49\x4c\x45\x44'};if(!this['\x63\x6f\x6e\x66\x69\x67'][_0x294222(0x1cc)]||this[_0x294222(0x1b9)])return;this[_0x294222(0x1b9)]=!![];try{const _0x4ed994=await this['\x63\x6f\x6e\x66\x69\x67'][_0x294222(0x1cc)]();this[_0x294222(0x20e)](_0x4ed994['\x74\x6f\x6b\x65\x6e']);}catch(_0x4f0bcd){this[_0x294222(0x184)][_0x294222(0x1d9)]?.(_0x294222(0x19d)+(_0x4f0bcd instanceof Error?_0x4f0bcd[_0x294222(0x1ff)]:_0x85b0b9[_0x294222(0x23c)](String,_0x4f0bcd)),_0x85b0b9[_0x294222(0x17e)]);}finally{this[_0x294222(0x1b9)]=![];}}[a0_0xc5ac43(0x235)](_0x3149ea){const _0xb9f1bf=a0_0xc5ac43,_0xbe87c9={'\x5a\x62\x6d\x75\x56':function(_0x2cf75b,_0x3936e5){return _0x2cf75b===_0x3936e5;}};_0xbe87c9[_0xb9f1bf(0x18a)](this['\x77\x73']?.[_0xb9f1bf(0x260)],WebSocket[_0xb9f1bf(0x22c)])&&(this['\x77\x73'][_0xb9f1bf(0x235)](JSON['\x73\x74\x72\x69\x6e\x67\x69\x66\x79'](_0x3149ea)),this[_0xb9f1bf(0x23a)]++);}[a0_0xc5ac43(0x240)](_0x6a3d15){return new Promise((_0x562708,_0x4ec015)=>{const _0x8e315c=a0_0x42fc,_0xd9ac08={'\x56\x72\x42\x61\x71':function(_0x18b3a9,_0x205d7b){return _0x18b3a9(_0x205d7b);},'\x6e\x63\x57\x41\x47':_0x8e315c(0x1ce)},_0x41de62=_0x8e315c(0x1ee)+ ++this['\x6d\x65\x73\x73\x61\x67\x65\x49\x64\x43\x6f\x75\x6e\x74\x65\x72'];this[_0x8e315c(0x1c2)][_0x8e315c(0x22e)](_0x41de62,{'\x72\x65\x73\x6f\x6c\x76\x65':_0x562708,'\x72\x65\x6a\x65\x63\x74':_0x4ec015}),setTimeout(()=>{const _0x2d87e6=_0x8e315c;this[_0x2d87e6(0x1c2)][_0x2d87e6(0x19b)](_0x41de62)&&(this[_0x2d87e6(0x1c2)][_0x2d87e6(0x1e6)](_0x41de62),_0xd9ac08[_0x2d87e6(0x200)](_0x4ec015,new Error(_0xd9ac08['\x6e\x63\x57\x41\x47'])));},0x2710),this['\x73\x65\x6e\x64']({..._0x6a3d15,'\x69\x64':_0x41de62});});}[a0_0xc5ac43(0x1a0)](){const _0x3dd019=a0_0xc5ac43,_0x53f928=this[_0x3dd019(0x188)][_0x3dd019(0x1c5)],_0x14c258={};if(this[_0x3dd019(0x208)])_0x14c258[_0x3dd019(0x208)]=this[_0x3dd019(0x208)];if(this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64'])_0x14c258[_0x3dd019(0x20f)]=this[_0x3dd019(0x189)];if(this[_0x3dd019(0x246)])_0x14c258['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64']=this[_0x3dd019(0x246)];const _0x22e9c2=Object[_0x3dd019(0x1ab)](_0x14c258)[_0x3dd019(0x220)]>0x0;_0x22e9c2&&(this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=!![],this[_0x3dd019(0x1cd)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0}),this[_0x3dd019(0x235)]({'\x74\x79\x70\x65':_0x3dd019(0x266),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x53f928,..._0x22e9c2?{'\x72\x65\x70\x6c\x61\x79\x4f\x70\x74\x69\x6f\x6e\x73':_0x14c258}:{}});}[a0_0xc5ac43(0x20b)](){const _0x3abc26=a0_0xc5ac43;this[_0x3abc26(0x183)](),this[_0x3abc26(0x1b1)]=setInterval(()=>{const _0x5615c6=_0x3abc26;this[_0x5615c6(0x194)]();},this[_0x3abc26(0x188)][_0x3abc26(0x21c)]);}[a0_0xc5ac43(0x183)](){const _0x27e581=a0_0xc5ac43;this[_0x27e581(0x1b1)]&&(clearInterval(this['\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c']),this[_0x27e581(0x1b1)]=null);}[a0_0xc5ac43(0x194)](){const _0x101fbc=a0_0xc5ac43,_0x797bc={'\x79\x70\x5a\x79\x4f':function(_0x5c5bf0,_0x4aab6b){return _0x5c5bf0>=_0x4aab6b;}};if(this['\x77\x73']?.[_0x101fbc(0x260)]!==WebSocket[_0x101fbc(0x22c)])return;const _0x52b41f=this[_0x101fbc(0x20c)]?Date[_0x101fbc(0x18f)]()-this[_0x101fbc(0x20c)]:0x0;if(this['\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74']&&_0x52b41f>this['\x63\x6f\x6e\x66\x69\x67'][_0x101fbc(0x216)]){this[_0x101fbc(0x202)]++,this[_0x101fbc(0x23b)]={...this[_0x101fbc(0x23b)],'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this[_0x101fbc(0x202)]},this[_0x101fbc(0x186)]();if(this[_0x101fbc(0x202)]>=this[_0x101fbc(0x188)][_0x101fbc(0x1d6)]){this['\x77\x73']?.['\x63\x6c\x6f\x73\x65'](0xfa0,_0x101fbc(0x1b4));return;}}this[_0x101fbc(0x181)]=Date[_0x101fbc(0x18f)](),this[_0x101fbc(0x1fb)]=Date[_0x101fbc(0x18f)](),this[_0x101fbc(0x235)]({'\x74\x79\x70\x65':_0x101fbc(0x1cb)}),this[_0x101fbc(0x1be)]=setTimeout(()=>{const _0x1950c1=_0x101fbc;this[_0x1950c1(0x202)]++,this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this[_0x1950c1(0x23b)],'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']},this[_0x1950c1(0x186)]();if(_0x797bc[_0x1950c1(0x1d5)](this[_0x1950c1(0x202)],this[_0x1950c1(0x188)]['\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73']))this['\x77\x73']?.[_0x1950c1(0x1f9)](0xfa0,_0x1950c1(0x1b4));},this[_0x101fbc(0x188)]['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73']);}['\x63\x6c\x65\x61\x72\x50\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74'](){const _0xf38cc3=a0_0xc5ac43;this['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74']&&(clearTimeout(this[_0xf38cc3(0x1be)]),this[_0xf38cc3(0x1be)]=null);}[a0_0xc5ac43(0x19a)](){const _0xd807ef=a0_0xc5ac43,_0x264318={'\x42\x76\x42\x5a\x62':function(_0x1fc788,_0x4e9378){return _0x1fc788*_0x4e9378;},'\x61\x41\x77\x55\x73':function(_0x186a55,_0x4a6049){return _0x186a55*_0x4a6049;},'\x4e\x69\x7a\x46\x69':function(_0x1cbafd,_0x430c4e){return _0x1cbafd*_0x430c4e;},'\x79\x42\x6f\x65\x4f':function(_0x4bd35e,_0x137354){return _0x4bd35e+_0x137354;}};if(this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72'])return;this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']++;const _0x5f5426=Math['\x6d\x69\x6e'](_0x264318[_0xd807ef(0x26e)](this['\x63\x6f\x6e\x66\x69\x67'][_0xd807ef(0x211)],0x2**(this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']-0x1)),this[_0xd807ef(0x188)]['\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73']),_0x326a1a=_0x264318['\x61\x41\x77\x55\x73'](_0x264318[_0xd807ef(0x1a6)](_0x5f5426,0.3),Math[_0xd807ef(0x1e1)]()*0x2-0x1);this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']=setTimeout(()=>{const _0x401116=_0xd807ef;this[_0x401116(0x1c3)]=null,this[_0x401116(0x1a4)]();},_0x264318[_0xd807ef(0x18d)](_0x5f5426,_0x326a1a));}[a0_0xc5ac43(0x23f)](){const _0x3cac29=a0_0xc5ac43;this['\x73\x74\x6f\x70\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](),this[_0x3cac29(0x1d8)]();this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']&&(clearTimeout(this[_0x3cac29(0x1c3)]),this[_0x3cac29(0x1c3)]=null);for(const [_0x92c0ed,_0x47f7d7]of this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73']){_0x47f7d7[_0x3cac29(0x230)](new Error(_0x3cac29(0x1ef))),this[_0x3cac29(0x1c2)]['\x64\x65\x6c\x65\x74\x65'](_0x92c0ed);}}['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'](_0x54460f,_0x5f36a0){const _0x495dc6=a0_0xc5ac43,_0x3e07f8={'\x43\x72\x69\x54\x46':function(_0x181d2e,_0x124585){return _0x181d2e/_0x124585;}},_0x3be4a0=this[_0x495dc6(0x206)]['\x6c\x65\x6e\x67\x74\x68']>0x0?_0x3e07f8[_0x495dc6(0x191)](this[_0x495dc6(0x206)][_0x495dc6(0x26d)]((_0x296697,_0xe6f174)=>_0x296697+_0xe6f174,0x0),this['\x70\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79'][_0x495dc6(0x220)]):null;this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this[_0x495dc6(0x23b)],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x54460f,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x3be4a0,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74'],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':_0x5f36a0},this[_0x495dc6(0x186)]();}['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x51\x75\x61\x6c\x69\x74\x79'](){const _0x540c60=a0_0xc5ac43,_0x5d53c9=this[_0x540c60(0x26b)]===_0x540c60(0x22d),_0x2d086c=calculateConnectionQuality(this[_0x540c60(0x23b)],_0x5d53c9);this[_0x540c60(0x23b)][_0x540c60(0x1c7)]!==_0x2d086c&&(this[_0x540c60(0x23b)]={...this[_0x540c60(0x23b)],'\x71\x75\x61\x6c\x69\x74\x79':_0x2d086c},this[_0x540c60(0x184)][_0x540c60(0x248)]?.(this[_0x540c60(0x23b)]));}[a0_0xc5ac43(0x195)](){const _0xc8bccd=a0_0xc5ac43,_0x36f3b1=Date['\x6e\x6f\x77']();this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this[_0xc8bccd(0x23b)],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'][_0xc8bccd(0x25f)]+0x1,'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':_0x36f3b1},this[_0xc8bccd(0x206)]=[],this[_0xc8bccd(0x186)]();}['\x6c\x6f\x61\x64\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65'](){const _0x126072=a0_0xc5ac43,_0xf67de1={'\x49\x4a\x56\x74\x47':function(_0x17010f,_0x10822e){return _0x17010f+_0x10822e;}};if(!this['\x63\x6f\x6e\x66\x69\x67'][_0x126072(0x24d)])return;const _0x239645=this[_0x126072(0x188)][_0x126072(0x192)];try{this[_0x126072(0x208)]=this[_0x126072(0x188)][_0x126072(0x24b)][_0x126072(0x1a1)](_0xf67de1['\x49\x4a\x56\x74\x47'](_0x239645,STORAGE_KEYS[_0x126072(0x208)])),this[_0x126072(0x189)]=this[_0x126072(0x188)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65'][_0x126072(0x1a1)](_0xf67de1[_0x126072(0x20a)](_0x239645,STORAGE_KEYS[_0x126072(0x20f)])),this[_0x126072(0x246)]=this[_0x126072(0x188)][_0x126072(0x24b)][_0x126072(0x1a1)](_0x239645+STORAGE_KEYS[_0x126072(0x26c)]);}catch{}}[a0_0xc5ac43(0x207)](){const _0x88e2d0=a0_0xc5ac43,_0xa3591d={'\x64\x6a\x58\x41\x43':function(_0x4eadbb,_0x5c16f5){return _0x4eadbb+_0x5c16f5;},'\x41\x72\x41\x78\x4d':function(_0xb7f628,_0x573966){return _0xb7f628+_0x573966;}};if(!this[_0x88e2d0(0x188)][_0x88e2d0(0x24d)])return;const _0x520356=this[_0x88e2d0(0x188)][_0x88e2d0(0x192)];try{if(this[_0x88e2d0(0x208)])this[_0x88e2d0(0x188)][_0x88e2d0(0x24b)][_0x88e2d0(0x1e0)](_0xa3591d[_0x88e2d0(0x245)](_0x520356,STORAGE_KEYS[_0x88e2d0(0x208)]),this[_0x88e2d0(0x208)]);if(this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64'])this['\x63\x6f\x6e\x66\x69\x67'][_0x88e2d0(0x24b)]['\x73\x65\x74\x49\x74\x65\x6d'](_0x520356+STORAGE_KEYS[_0x88e2d0(0x20f)],this[_0x88e2d0(0x189)]);if(this[_0x88e2d0(0x246)])this[_0x88e2d0(0x188)][_0x88e2d0(0x24b)]['\x73\x65\x74\x49\x74\x65\x6d'](_0xa3591d['\x41\x72\x41\x78\x4d'](_0x520356,STORAGE_KEYS[_0x88e2d0(0x26c)]),this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']);}catch{}}};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 };