hypha-rpc 0.20.12 → 0.20.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("hyphaWebsocketClient",[],t):"object"==typeof exports?exports.hyphaWebsocketClient=t():e.hyphaWebsocketClient=t()}(this,(()=>(()=>{"use strict";var __webpack_modules__={164:(e,t,r)=>{r.d(t,{m:()=>F,y:()=>J});var i=r(878),n=r(287);function o(e){return"".concat(e<0?"-":"","0x").concat(Math.abs(e).toString(16).padStart(2,"0"))}var s,c=function(e,t){this.type=e,this.data=t},a=(s=function(e,t){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},s(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),h=function(e){function t(r){var i=e.call(this,r)||this,n=Object.create(t.prototype);return Object.setPrototypeOf(i,n),Object.defineProperty(i,"name",{configurable:!0,enumerable:!1,value:t.name}),i}return a(t,e),t}(Error),_=4294967295;function l(e,t,r){var i=Math.floor(r/4294967296),n=r;e.setUint32(t,i),e.setUint32(t+4,n)}function d(e,t){return 4294967296*e.getInt32(t)+e.getUint32(t+4)}var p,u,f,y={type:-1,encode:function(e){var t,r,i,n;return e instanceof Date?function(e){var t,r=e.sec,i=e.nsec;if(r>=0&&i>=0&&r<=17179869183){if(0===i&&r<=4294967295){var n=new Uint8Array(4);return(t=new DataView(n.buffer)).setUint32(0,r),n}var o=r/4294967296,s=4294967295&r;return n=new Uint8Array(8),(t=new DataView(n.buffer)).setUint32(0,i<<2|3&o),t.setUint32(4,s),n}return n=new Uint8Array(12),(t=new DataView(n.buffer)).setUint32(0,i),l(t,4,r),n}((i=1e6*((t=e.getTime())-1e3*(r=Math.floor(t/1e3))),{sec:r+(n=Math.floor(i/1e9)),nsec:i-1e9*n})):null},decode:function(e){var t=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return{sec:t.getUint32(0),nsec:0};case 8:var r=t.getUint32(0);return{sec:4294967296*(3&r)+t.getUint32(4),nsec:r>>>2};case 12:return{sec:d(t,4),nsec:t.getUint32(0)};default:throw new h("Unrecognized data size for timestamp (expected 4, 8, or 12): ".concat(e.length))}}(e);return new Date(1e3*t.sec+t.nsec/1e6)}},w=function(){function e(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(y)}return e.prototype.register=function(e){var t=e.type,r=e.encode,i=e.decode;if(t>=0)this.encoders[t]=r,this.decoders[t]=i;else{var n=1+t;this.builtInEncoders[n]=r,this.builtInDecoders[n]=i}},e.prototype.tryToEncode=function(e,t){for(var r=0;r<this.builtInEncoders.length;r++)if(null!=(i=this.builtInEncoders[r])&&null!=(n=i(e,t)))return new c(-1-r,n);for(r=0;r<this.encoders.length;r++){var i,n;if(null!=(i=this.encoders[r])&&null!=(n=i(e,t)))return new c(r,n)}return e instanceof c?e:null},e.prototype.decode=function(e,t,r){var i=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return i?i(e,t,r):new c(t,e)},e.defaultCodec=new e,e}(),m=("undefined"==typeof process||"never"!==(null===(p=null===process||void 0===process?void 0:process.env)||void 0===p?void 0:p.TEXT_ENCODING))&&"undefined"!=typeof TextEncoder&&"undefined"!=typeof TextDecoder;function g(e){for(var t=e.length,r=0,i=0;i<t;){var n=e.charCodeAt(i++);if(4294967168&n)if(4294965248&n){if(n>=55296&&n<=56319&&i<t){var o=e.charCodeAt(i);56320==(64512&o)&&(++i,n=((1023&n)<<10)+(1023&o)+65536)}r+=4294901760&n?4:3}else r+=2;else r++}return r}var v=m?new TextEncoder:void 0,b=m?"undefined"!=typeof process&&"force"!==(null===(u=null===process||void 0===process?void 0:process.env)||void 0===u?void 0:u.TEXT_ENCODING)?200:0:_,k=(null==v?void 0:v.encodeInto)?function(e,t,r){v.encodeInto(e,t.subarray(r))}:function(e,t,r){t.set(v.encode(e),r)};function E(e,t,r){for(var i=t,n=i+r,o=[],s="";i<n;){var c=e[i++];if(128&c)if(192==(224&c)){var a=63&e[i++];o.push((31&c)<<6|a)}else if(224==(240&c)){a=63&e[i++];var h=63&e[i++];o.push((31&c)<<12|a<<6|h)}else if(240==(248&c)){var _=(7&c)<<18|(a=63&e[i++])<<12|(h=63&e[i++])<<6|63&e[i++];_>65535&&(_-=65536,o.push(_>>>10&1023|55296),_=56320|1023&_),o.push(_)}else o.push(c);else o.push(c);o.length>=4096&&(s+=String.fromCharCode.apply(String,o),o.length=0)}return o.length>0&&(s+=String.fromCharCode.apply(String,o)),s}var A=m?new TextDecoder:null,U=m?"undefined"!=typeof process&&"force"!==(null===(f=null===process||void 0===process?void 0:process.env)||void 0===f?void 0:f.TEXT_DECODER)?200:0:_;function S(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer?new Uint8Array(e):Uint8Array.from(e)}var x=function(){function e(e,t){void 0===e&&(e=16),void 0===t&&(t=16),this.maxKeyLength=e,this.maxLengthPerKey=t,this.hit=0,this.miss=0,this.caches=[];for(var r=0;r<this.maxKeyLength;r++)this.caches.push([])}return e.prototype.canBeCached=function(e){return e>0&&e<=this.maxKeyLength},e.prototype.find=function(e,t,r){e:for(var i=0,n=this.caches[r-1];i<n.length;i++){for(var o=n[i],s=o.bytes,c=0;c<r;c++)if(s[c]!==e[t+c])continue e;return o.str}return null},e.prototype.store=function(e,t){var r=this.caches[e.length-1],i={bytes:e,str:t};r.length>=this.maxLengthPerKey?r[Math.random()*r.length|0]=i:r.push(i)},e.prototype.decode=function(e,t,r){var i=this.find(e,t,r);if(null!=i)return this.hit++,i;this.miss++;var n=E(e,t,r),o=Uint8Array.prototype.slice.call(e,t,t+r);return this.store(o,n),n},e}(),j=function(e,t){var r,i,n,o,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,i&&(n=2&o[0]?i.return:o[0]?i.throw||((n=i.return)&&n.call(i),0):i.next)&&!(n=n.call(i,o[1])).done)return n;switch(i=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((n=(n=s.trys).length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){s.label=o[1];break}if(6===o[0]&&s.label<n[1]){s.label=n[1],n=o;break}if(n&&s.label<n[2]){s.label=n[2],s.ops.push(o);break}n[2]&&s.ops.pop(),s.trys.pop();continue}o=t.call(e,s)}catch(e){o=[6,e],i=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}},O=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(r){t[r]=e[r]&&function(t){return new Promise((function(i,n){!function(e,t,r,i){Promise.resolve(i).then((function(t){e({value:t,done:r})}),t)}(i,n,(t=e[r](t)).done,t.value)}))}}},C=function(e){return this instanceof C?(this.v=e,this):new C(e)},T=new DataView(new ArrayBuffer(0)),P=new Uint8Array(T.buffer),D=function(){try{T.getInt8(0)}catch(e){return e.constructor}throw new Error("never reached")}(),M=new D("Insufficient data"),W=new x,I=function(){function e(e,t,r,i,n,o,s,c){void 0===e&&(e=w.defaultCodec),void 0===t&&(t=void 0),void 0===r&&(r=_),void 0===i&&(i=_),void 0===n&&(n=_),void 0===o&&(o=_),void 0===s&&(s=_),void 0===c&&(c=W),this.extensionCodec=e,this.context=t,this.maxStrLength=r,this.maxBinLength=i,this.maxArrayLength=n,this.maxMapLength=o,this.maxExtLength=s,this.keyDecoder=c,this.totalPos=0,this.pos=0,this.view=T,this.bytes=P,this.headByte=-1,this.stack=[]}return e.prototype.reinitializeState=function(){this.totalPos=0,this.headByte=-1,this.stack.length=0},e.prototype.setBuffer=function(e){this.bytes=S(e),this.view=function(e){if(e instanceof ArrayBuffer)return new DataView(e);var t=S(e);return new DataView(t.buffer,t.byteOffset,t.byteLength)}(this.bytes),this.pos=0},e.prototype.appendBuffer=function(e){if(-1!==this.headByte||this.hasRemaining(1)){var t=this.bytes.subarray(this.pos),r=S(e),i=new Uint8Array(t.length+r.length);i.set(t),i.set(r,t.length),this.setBuffer(i)}else this.setBuffer(e)},e.prototype.hasRemaining=function(e){return this.view.byteLength-this.pos>=e},e.prototype.createExtraByteError=function(e){var t=this.view,r=this.pos;return new RangeError("Extra ".concat(t.byteLength-r," of ").concat(t.byteLength," byte(s) found at buffer[").concat(e,"]"))},e.prototype.decode=function(e){this.reinitializeState(),this.setBuffer(e);var t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t},e.prototype.decodeMulti=function(e){return j(this,(function(t){switch(t.label){case 0:this.reinitializeState(),this.setBuffer(e),t.label=1;case 1:return this.hasRemaining(1)?[4,this.doDecodeSync()]:[3,3];case 2:return t.sent(),[3,1];case 3:return[2]}}))},e.prototype.decodeAsync=function(e){var t,r,i,n,s,c,a,h;return s=this,c=void 0,h=function(){var s,c,a,h,_,l,d,p;return j(this,(function(u){switch(u.label){case 0:s=!1,u.label=1;case 1:u.trys.push([1,6,7,12]),t=O(e),u.label=2;case 2:return[4,t.next()];case 3:if((r=u.sent()).done)return[3,5];if(a=r.value,s)throw this.createExtraByteError(this.totalPos);this.appendBuffer(a);try{c=this.doDecodeSync(),s=!0}catch(e){if(!(e instanceof D))throw e}this.totalPos+=this.pos,u.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return h=u.sent(),i={error:h},[3,12];case 7:return u.trys.push([7,,10,11]),r&&!r.done&&(n=t.return)?[4,n.call(t)]:[3,9];case 8:u.sent(),u.label=9;case 9:return[3,11];case 10:if(i)throw i.error;return[7];case 11:return[7];case 12:if(s){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return[2,c]}throw l=(_=this).headByte,d=_.pos,p=_.totalPos,new RangeError("Insufficient data in parsing ".concat(o(l)," at ").concat(p," (").concat(d," in the current buffer)"))}}))},new((a=void 0)||(a=Promise))((function(e,t){function r(e){try{n(h.next(e))}catch(e){t(e)}}function i(e){try{n(h.throw(e))}catch(e){t(e)}}function n(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a((function(e){e(n)}))).then(r,i)}n((h=h.apply(s,c||[])).next())}))},e.prototype.decodeArrayStream=function(e){return this.decodeMultiAsync(e,!0)},e.prototype.decodeStream=function(e){return this.decodeMultiAsync(e,!1)},e.prototype.decodeMultiAsync=function(e,t){return function(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,n=r.apply(e,t||[]),o=[];return i={},s("next"),s("throw"),s("return"),i[Symbol.asyncIterator]=function(){return this},i;function s(e){n[e]&&(i[e]=function(t){return new Promise((function(r,i){o.push([e,t,r,i])>1||c(e,t)}))})}function c(e,t){try{(r=n[e](t)).value instanceof C?Promise.resolve(r.value.v).then(a,h):_(o[0][2],r)}catch(e){_(o[0][3],e)}var r}function a(e){c("next",e)}function h(e){c("throw",e)}function _(e,t){e(t),o.shift(),o.length&&c(o[0][0],o[0][1])}}(this,arguments,(function(){var r,i,n,o,s,c,a,h,_;return j(this,(function(l){switch(l.label){case 0:r=t,i=-1,l.label=1;case 1:l.trys.push([1,13,14,19]),n=O(e),l.label=2;case 2:return[4,C(n.next())];case 3:if((o=l.sent()).done)return[3,12];if(s=o.value,t&&0===i)throw this.createExtraByteError(this.totalPos);this.appendBuffer(s),r&&(i=this.readArraySize(),r=!1,this.complete()),l.label=4;case 4:l.trys.push([4,9,,10]),l.label=5;case 5:return[4,C(this.doDecodeSync())];case 6:return[4,l.sent()];case 7:return l.sent(),0==--i?[3,8]:[3,5];case 8:return[3,10];case 9:if(!((c=l.sent())instanceof D))throw c;return[3,10];case 10:this.totalPos+=this.pos,l.label=11;case 11:return[3,2];case 12:return[3,19];case 13:return a=l.sent(),h={error:a},[3,19];case 14:return l.trys.push([14,,17,18]),o&&!o.done&&(_=n.return)?[4,C(_.call(n))]:[3,16];case 15:l.sent(),l.label=16;case 16:return[3,18];case 17:if(h)throw h.error;return[7];case 18:return[7];case 19:return[2]}}))}))},e.prototype.doDecodeSync=function(){e:for(;;){var e=this.readHeadByte(),t=void 0;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){if(0!=(i=e-128)){this.pushMapState(i),this.complete();continue e}t={}}else if(e<160){if(0!=(i=e-144)){this.pushArrayState(i),this.complete();continue e}t=[]}else{var r=e-160;t=this.decodeUtf8String(r,0)}else if(192===e)t=null;else if(194===e)t=!1;else if(195===e)t=!0;else if(202===e)t=this.readF32();else if(203===e)t=this.readF64();else if(204===e)t=this.readU8();else if(205===e)t=this.readU16();else if(206===e)t=this.readU32();else if(207===e)t=this.readU64();else if(208===e)t=this.readI8();else if(209===e)t=this.readI16();else if(210===e)t=this.readI32();else if(211===e)t=this.readI64();else if(217===e)r=this.lookU8(),t=this.decodeUtf8String(r,1);else if(218===e)r=this.lookU16(),t=this.decodeUtf8String(r,2);else if(219===e)r=this.lookU32(),t=this.decodeUtf8String(r,4);else if(220===e){if(0!==(i=this.readU16())){this.pushArrayState(i),this.complete();continue e}t=[]}else if(221===e){if(0!==(i=this.readU32())){this.pushArrayState(i),this.complete();continue e}t=[]}else if(222===e){if(0!==(i=this.readU16())){this.pushMapState(i),this.complete();continue e}t={}}else if(223===e){if(0!==(i=this.readU32())){this.pushMapState(i),this.complete();continue e}t={}}else if(196===e){var i=this.lookU8();t=this.decodeBinary(i,1)}else if(197===e)i=this.lookU16(),t=this.decodeBinary(i,2);else if(198===e)i=this.lookU32(),t=this.decodeBinary(i,4);else if(212===e)t=this.decodeExtension(1,0);else if(213===e)t=this.decodeExtension(2,0);else if(214===e)t=this.decodeExtension(4,0);else if(215===e)t=this.decodeExtension(8,0);else if(216===e)t=this.decodeExtension(16,0);else if(199===e)i=this.lookU8(),t=this.decodeExtension(i,1);else if(200===e)i=this.lookU16(),t=this.decodeExtension(i,2);else{if(201!==e)throw new h("Unrecognized type byte: ".concat(o(e)));i=this.lookU32(),t=this.decodeExtension(i,4)}this.complete();for(var n=this.stack;n.length>0;){var s=n[n.length-1];if(0===s.type){if(s.array[s.position]=t,s.position++,s.position!==s.size)continue e;n.pop(),t=s.array}else{if(1===s.type){if(void 0,"string"!=(c=typeof t)&&"number"!==c)throw new h("The type of key must be string or number but "+typeof t);if("__proto__"===t)throw new h("The key __proto__ is not allowed");s.key=t,s.type=2;continue e}if(s.map[s.key]=t,s.readCount++,s.readCount!==s.size){s.key=null,s.type=1;continue e}n.pop(),t=s.map}}return t}var c},e.prototype.readHeadByte=function(){return-1===this.headByte&&(this.headByte=this.readU8()),this.headByte},e.prototype.complete=function(){this.headByte=-1},e.prototype.readArraySize=function(){var e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:if(e<160)return e-144;throw new h("Unrecognized array type byte: ".concat(o(e)))}},e.prototype.pushMapState=function(e){if(e>this.maxMapLength)throw new h("Max length exceeded: map length (".concat(e,") > maxMapLengthLength (").concat(this.maxMapLength,")"));this.stack.push({type:1,size:e,key:null,readCount:0,map:{}})},e.prototype.pushArrayState=function(e){if(e>this.maxArrayLength)throw new h("Max length exceeded: array length (".concat(e,") > maxArrayLength (").concat(this.maxArrayLength,")"));this.stack.push({type:0,size:e,array:new Array(e),position:0})},e.prototype.decodeUtf8String=function(e,t){var r;if(e>this.maxStrLength)throw new h("Max length exceeded: UTF-8 byte length (".concat(e,") > maxStrLength (").concat(this.maxStrLength,")"));if(this.bytes.byteLength<this.pos+t+e)throw M;var i,n=this.pos+t;return i=this.stateIsMapKey()&&(null===(r=this.keyDecoder)||void 0===r?void 0:r.canBeCached(e))?this.keyDecoder.decode(this.bytes,n,e):e>U?function(e,t,r){var i=e.subarray(t,t+r);return A.decode(i)}(this.bytes,n,e):E(this.bytes,n,e),this.pos+=t+e,i},e.prototype.stateIsMapKey=function(){return this.stack.length>0&&1===this.stack[this.stack.length-1].type},e.prototype.decodeBinary=function(e,t){if(e>this.maxBinLength)throw new h("Max length exceeded: bin length (".concat(e,") > maxBinLength (").concat(this.maxBinLength,")"));if(!this.hasRemaining(e+t))throw M;var r=this.pos+t,i=this.bytes.subarray(r,r+e);return this.pos+=t+e,i},e.prototype.decodeExtension=function(e,t){if(e>this.maxExtLength)throw new h("Max length exceeded: ext length (".concat(e,") > maxExtLength (").concat(this.maxExtLength,")"));var r=this.view.getInt8(this.pos+t),i=this.decodeBinary(e,t+1);return this.extensionCodec.decode(i,r,this.context)},e.prototype.lookU8=function(){return this.view.getUint8(this.pos)},e.prototype.lookU16=function(){return this.view.getUint16(this.pos)},e.prototype.lookU32=function(){return this.view.getUint32(this.pos)},e.prototype.readU8=function(){var e=this.view.getUint8(this.pos);return this.pos++,e},e.prototype.readI8=function(){var e=this.view.getInt8(this.pos);return this.pos++,e},e.prototype.readU16=function(){var e=this.view.getUint16(this.pos);return this.pos+=2,e},e.prototype.readI16=function(){var e=this.view.getInt16(this.pos);return this.pos+=2,e},e.prototype.readU32=function(){var e=this.view.getUint32(this.pos);return this.pos+=4,e},e.prototype.readI32=function(){var e=this.view.getInt32(this.pos);return this.pos+=4,e},e.prototype.readU64=function(){var e,t,r=(e=this.view,t=this.pos,4294967296*e.getUint32(t)+e.getUint32(t+4));return this.pos+=8,r},e.prototype.readI64=function(){var e=d(this.view,this.pos);return this.pos+=8,e},e.prototype.readF32=function(){var e=this.view.getFloat32(this.pos);return this.pos+=4,e},e.prototype.readF64=function(){var e=this.view.getFloat64(this.pos);return this.pos+=8,e},e}(),L={};function B(e,t){return void 0===t&&(t=L),new I(t.extensionCodec,t.context,t.maxStrLength,t.maxBinLength,t.maxArrayLength,t.maxMapLength,t.maxExtLength).decodeMulti(e)}var $=function(){function e(e,t,r,i,n,o,s,c){void 0===e&&(e=w.defaultCodec),void 0===t&&(t=void 0),void 0===r&&(r=100),void 0===i&&(i=2048),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===s&&(s=!1),void 0===c&&(c=!1),this.extensionCodec=e,this.context=t,this.maxDepth=r,this.initialBufferSize=i,this.sortKeys=n,this.forceFloat32=o,this.ignoreUndefined=s,this.forceIntegerToFloat=c,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}return e.prototype.reinitializeState=function(){this.pos=0},e.prototype.encodeSharedRef=function(e){return this.reinitializeState(),this.doEncode(e,1),this.bytes.subarray(0,this.pos)},e.prototype.encode=function(e){return this.reinitializeState(),this.doEncode(e,1),this.bytes.slice(0,this.pos)},e.prototype.doEncode=function(e,t){if(t>this.maxDepth)throw new Error("Too deep objects in depth ".concat(t));null==e?this.encodeNil():"boolean"==typeof e?this.encodeBoolean(e):"number"==typeof e?this.encodeNumber(e):"string"==typeof e?this.encodeString(e):this.encodeObject(e,t)},e.prototype.ensureBufferSizeToWrite=function(e){var t=this.pos+e;this.view.byteLength<t&&this.resizeBuffer(2*t)},e.prototype.resizeBuffer=function(e){var t=new ArrayBuffer(e),r=new Uint8Array(t),i=new DataView(t);r.set(this.bytes),this.view=i,this.bytes=r},e.prototype.encodeNil=function(){this.writeU8(192)},e.prototype.encodeBoolean=function(e){!1===e?this.writeU8(194):this.writeU8(195)},e.prototype.encodeNumber=function(e){Number.isSafeInteger(e)&&!this.forceIntegerToFloat?e>=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):(this.writeU8(211),this.writeI64(e)):this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))},e.prototype.writeStringHeader=function(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else{if(!(e<4294967296))throw new Error("Too long string: ".concat(e," bytes in UTF-8"));this.writeU8(219),this.writeU32(e)}},e.prototype.encodeString=function(e){if(e.length>b){var t=g(e);this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),k(e,this.bytes,this.pos),this.pos+=t}else t=g(e),this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),function(e,t,r){for(var i=e.length,n=r,o=0;o<i;){var s=e.charCodeAt(o++);if(4294967168&s){if(4294965248&s){if(s>=55296&&s<=56319&&o<i){var c=e.charCodeAt(o);56320==(64512&c)&&(++o,s=((1023&s)<<10)+(1023&c)+65536)}4294901760&s?(t[n++]=s>>18&7|240,t[n++]=s>>12&63|128,t[n++]=s>>6&63|128):(t[n++]=s>>12&15|224,t[n++]=s>>6&63|128)}else t[n++]=s>>6&31|192;t[n++]=63&s|128}else t[n++]=s}}(e,this.bytes,this.pos),this.pos+=t},e.prototype.encodeObject=function(e,t){var r=this.extensionCodec.tryToEncode(e,this.context);if(null!=r)this.encodeExtension(r);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else{if("object"!=typeof e)throw new Error("Unrecognized object: ".concat(Object.prototype.toString.apply(e)));this.encodeMap(e,t)}},e.prototype.encodeBinary=function(e){var t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else{if(!(t<4294967296))throw new Error("Too large binary: ".concat(t));this.writeU8(198),this.writeU32(t)}var r=S(e);this.writeU8a(r)},e.prototype.encodeArray=function(e,t){var r=e.length;if(r<16)this.writeU8(144+r);else if(r<65536)this.writeU8(220),this.writeU16(r);else{if(!(r<4294967296))throw new Error("Too large array: ".concat(r));this.writeU8(221),this.writeU32(r)}for(var i=0,n=e;i<n.length;i++){var o=n[i];this.doEncode(o,t+1)}},e.prototype.countWithoutUndefined=function(e,t){for(var r=0,i=0,n=t;i<n.length;i++)void 0!==e[n[i]]&&r++;return r},e.prototype.encodeMap=function(e,t){var r=Object.keys(e);this.sortKeys&&r.sort();var i=this.ignoreUndefined?this.countWithoutUndefined(e,r):r.length;if(i<16)this.writeU8(128+i);else if(i<65536)this.writeU8(222),this.writeU16(i);else{if(!(i<4294967296))throw new Error("Too large map object: ".concat(i));this.writeU8(223),this.writeU32(i)}for(var n=0,o=r;n<o.length;n++){var s=o[n],c=e[s];this.ignoreUndefined&&void 0===c||(this.encodeString(s),this.doEncode(c,t+1))}},e.prototype.encodeExtension=function(e){var t=e.data.length;if(1===t)this.writeU8(212);else if(2===t)this.writeU8(213);else if(4===t)this.writeU8(214);else if(8===t)this.writeU8(215);else if(16===t)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else{if(!(t<4294967296))throw new Error("Too large extension object: ".concat(t));this.writeU8(201),this.writeU32(t)}this.writeI8(e.type),this.writeU8a(e.data)},e.prototype.writeU8=function(e){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,e),this.pos++},e.prototype.writeU8a=function(e){var t=e.length;this.ensureBufferSizeToWrite(t),this.bytes.set(e,this.pos),this.pos+=t},e.prototype.writeI8=function(e){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,e),this.pos++},e.prototype.writeU16=function(e){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,e),this.pos+=2},e.prototype.writeI16=function(e){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,e),this.pos+=2},e.prototype.writeU32=function(e){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,e),this.pos+=4},e.prototype.writeI32=function(e){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,e),this.pos+=4},e.prototype.writeF32=function(e){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,e),this.pos+=4},e.prototype.writeF64=function(e){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,e),this.pos+=8},e.prototype.writeU64=function(e){this.ensureBufferSizeToWrite(8),function(e,t,r){var i=r/4294967296,n=r;e.setUint32(t,i),e.setUint32(t+4,n)}(this.view,this.pos,e),this.pos+=8},e.prototype.writeI64=function(e){this.ensureBufferSizeToWrite(8),l(this.view,this.pos,e),this.pos+=8},e}(),R={};function q(e,t){return void 0===t&&(t=R),new $(t.extensionCodec,t.context,t.maxDepth,t.initialBufferSize,t.sortKeys,t.forceFloat32,t.ignoreUndefined,t.forceIntegerToFloat).encodeSharedRef(e)}const F="0.20.0",K=512e3,z=Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array)).constructor;function N(e,t){const r=new Uint8Array(e.byteLength+t.byteLength);return r.set(new Uint8Array(e),0),r.set(new Uint8Array(t),e.byteLength),r.buffer}function G(e,t){if(!t)throw new Error("undefined index");return"string"==typeof t?G(e,t.split(".")):0===t.length?e:G(e[t[0]],t.slice(1))}function H(e,t=null,r=!1){if(e instanceof Object){let t={};for(let i in e)t[i]=H(e[i],i,r);return t}if(e instanceof Array)return e.map(((e,t)=>H(e,null,r)));if("function"==typeof e){if(e.__schema__){const i=JSON.parse(JSON.stringify(e.__schema__));return t&&(i.name=t,e.__schema__.name=t),r&&i.parameters&&i.parameters.properties&&delete i.parameters.properties.context,{type:"function",function:i}}return{type:"function"}}return"number"==typeof e?{type:"number"}:"string"==typeof e?{type:"string"}:"boolean"==typeof e?{type:"boolean"}:null===e?{type:"null"}:{}}class V{constructor(e,t,r,i){this._timeout=e,this._callback=t,this._args=r,this._label=i||"timer",this._task=null,this.started=!1}start(){this.started?this.reset():(this._task=setTimeout((()=>{this._callback.apply(this,this._args)}),1e3*this._timeout),this.started=!0)}clear(){this._task?(clearTimeout(this._task),this._task=null,this.started=!1):console.warn(`Clearing a timer (${this._label}) which is not started`)}reset(){this._task&&clearTimeout(this._task),this._task=setTimeout((()=>{this._callback.apply(this,this._args)}),1e3*this._timeout),this.started=!0}}class J extends i.sw{constructor(e,{client_id:t=null,default_context:r=null,name:n=null,codecs:o=null,method_timeout:s=null,max_message_buffer_size:c=0,debug:a=!1,workspace:h=null,silent:_=!1,app_id:l=null}){if(super(a),this._codecs=o||{},(0,i.vA)(t&&"string"==typeof t),(0,i.vA)(t,"client_id is required"),this._client_id=t,this._name=n,this._app_id=l||"*",this._local_workspace=h,this._silent=_,this.default_context=r||{},this._method_annotations=new WeakMap,this._max_message_buffer_size=c,this._chunk_store={},this._method_timeout=s||30,this._services={},this._object_store={services:this._services},e){this.add_service({id:"built-in",type:"built-in",name:`Built-in services for ${this._local_workspace}/${this._client_id}`,config:{require_context:!0,visibility:"public"},ping:this._ping.bind(this),get_service:this.get_local_service.bind(this),message_cache:{create:this._create_message.bind(this),append:this._append_message.bind(this),process:this._process_message.bind(this),remove:this._remove_message.bind(this)}}),this.on("method",this._handle_method.bind(this)),this.on("error",console.error),(0,i.vA)(e.emit_message&&e.on_message),(0,i.vA)(void 0!==e.manager_id,"Connection must have manager_id"),this._emit_message=e.emit_message.bind(e),e.on_message(this._on_message.bind(this)),this._connection=e;const t=async e=>{if(!this._silent&&this._connection.manager_id){console.log("Connection established, reporting services...");const e=await this.get_manager_service(10,"camel");for(let t of Object.values(this._services)){const r=this._extract_service_info(t);await e.registerService(r)}}else console.log("Connection established",e);this._fire("connected",e)};e.on_connected(t),t()}else this._emit_message=function(){console.log("No connection to emit message")}}register_codec(e){if(!e.name||!e.encoder&&!e.decoder)throw new Error("Invalid codec format, please make sure you provide a name, type, encoder and decoder.");if(e.type)for(let t of Object.keys(this._codecs))this._codecs[t].type!==e.type&&t!==e.name||(delete this._codecs[t],console.warn("Remove duplicated codec: "+t));this._codecs[e.name]=e}async _ping(e,t){return(0,i.vA)("ping"==e),"pong"}async ping(e,t){let r=this._generate_remote_method({_rtarget:e,_rmethod:"services.built-in.ping",_rpromise:!0,_rdoc:"Ping a remote client"});(0,i.vA)("pong"==await r("ping",t))}_create_message(e,t,r,i){if(t){if(!this._object_store[e])throw new Error(`session does not exist anymore: ${e}`);this._object_store[e].timer.reset()}if(this._object_store.message_cache||(this._object_store.message_cache={}),!r&&this._object_store.message_cache[e])throw new Error(`Message with the same key (${e}) already exists in the cache store, please use overwrite=true or remove it first.`);this._object_store.message_cache[e]=[]}_append_message(e,t,r,n){if(r){if(!this._object_store[e])throw new Error(`session does not exist anymore: ${e}`);this._object_store[e].timer.reset()}const o=this._object_store.message_cache;if(!o[e])throw new Error(`Message with key ${e} does not exists.`);(0,i.vA)(t instanceof z),o[e].push(t)}_remove_message(e,t){const r=this._object_store.message_cache;if(!r[e])throw new Error(`Message with key ${e} does not exists.`);delete r[e]}_process_message(e,t,r){if(t){if(!this._object_store[e])throw new Error(`session does not exist anymore: ${e}`);this._object_store[e].timer.reset()}const n=this._object_store.message_cache;if((0,i.vA)(!!r,"Context is required"),!n[e])throw new Error(`Message with key ${e} does not exists.`);var o,s,c,a;n[e]=(c=(s=(o=n[e]).map((function(e){return e.byteLength}))).reduce((function(e,t){return e+t}),0),a=new Uint8Array(c),s.reduce((function(e,t,r){return a.set(new Uint8Array(o[r]),e),e+t}),0),a.buffer),console.debug(`Processing message ${e} (bytes=${n[e].byteLength})`);let h=B(n[e]);const{done:_,value:l}=h.next(),d=l;if(Object.assign(d,{from:r.from,to:r.to,user:r.user}),d.ctx=JSON.parse(JSON.stringify(d)),Object.assign(d.ctx,this.default_context),!_){let e=h.next();Object.assign(d,e.value)}this._fire(d.type,d),console.debug(this._client_id,`Processed message ${e} (bytes=${n[e].byteLength})`),delete n[e]}_on_message(e){if("string"==typeof e){const t=JSON.parse(e);this._fire(t.type,t)}else if(e instanceof ArrayBuffer){let t=B(e);const{done:r,value:i}=t.next(),n=i;if(n.ctx=JSON.parse(JSON.stringify(n)),Object.assign(n.ctx,this.default_context),!r){let e=t.next();Object.assign(n,e.value)}this._fire(n.type,n)}else{if("object"!=typeof e)throw new Error("Invalid message format");this._fire(e.type,e)}}reset(){this._event_handlers={},this._services={}}async disconnect(){this._fire("disconnected"),await this._connection.disconnect()}async get_manager_service(e,t=null){return(0,i.vA)(this._connection.manager_id,"Manager id is not set"),await this.get_remote_service(`*/${this._connection.manager_id}:default`,e,t)}get_all_local_services(){return this._services}get_local_service(e,t){(0,i.vA)(e);const[r,n]=t.to.split("/");(0,i.vA)(n===this._client_id,"Services can only be accessed locally");const o=this._services[e];if(!o)throw new Error("Service not found: "+e);if(o.config.workspace=t.ws,"public"==o.config.visibility)return o;if(t.ws===r)return o;throw new Error(`Permission denied for getting protected service: ${e}, workspace mismatch: ${r} != ${t.ws}`)}async get_remote_service(e,t,r=null){t=void 0===t?this._method_timeout:t,!e&&this._connection.manager_id?e="*/"+this._connection.manager_id:e.includes(":")||(e=this._client_id+":"+e);const n=e.split(":")[0];let o=e.split(":")[1];if(o.includes("@")){o=o.split("@")[0];const t=e.split("@")[1];this._app_id&&"*"!==this._app_id&&(0,i.vA)(t===this._app_id,`Invalid app id: ${t} != ${this._app_id}`)}(0,i.vA)(n,`Invalid service uri: ${e}`);try{const s=this._generate_remote_method({_rtarget:n,_rmethod:"services.built-in.get_service",_rpromise:!0,_rdoc:"Get a remote service"}),c=await(0,i.fm)(s(o),t,"Timeout Error: Failed to get remote service: "+e);return c.id=`${n}:${o}`,r?(0,i.gX)(c,r):c}catch(t){throw console.warn("Failed to get remote service: "+e,t),t}}_annotate_service_methods(e,t,r,i,n){if("function"==typeof e){let o=t.split(".")[1];this._method_annotations.set(e,{require_context:Array.isArray(r)?r.includes(o):!!r,run_in_executor:i,method_id:"services."+t,visibility:n})}else if(e instanceof Array||e instanceof Object)for(let o of Object.keys(e)){let s=e[o];if("function"==typeof s&&s.__rpc_object__){let t=s.__rpc_object__._rtarget;if(t.includes("/")&&(t=t.split("/")[1]),this._client_id!==t)throw new Error(`Local method not found: ${s.__rpc_object__._rmethod}, client id mismatch ${this._client_id} != ${t}`);e instanceof Array&&(e=e.slice()),e[o]=G(this._object_store,s.__rpc_object__._rmethod),s=e[o]}this._annotate_service_methods(s,t+"."+o,r,i,n)}}add_service(e,t){if(!e||Array.isArray(e))throw new Error("Invalid service object");if(e.constructor===Object)e=Object.assign({},e);else{const t={},r=Object.getOwnPropertyNames(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)));for(let i of r)"constructor"!==i&&("function"==typeof e[i]?t[i]=e[i].bind(e):t[i]=e[i]);e.id=e.id||"default",e=t}(0,i.vA)(e.id&&"string"==typeof e.id,`Service id not found: ${e}`),e.name||(e.name=e.id),e.config||(e.config={}),e.type||(e.type="generic");let r=!1,n=!1;e.config.require_context&&(r=e.config.require_context),e.config.run_in_executor&&(n=!0);const o=e.config.visibility||"protected";if((0,i.vA)(["protected","public"].includes(o)),this._annotate_service_methods(e,e.id,r,n,o),this._services[e.id]){if(!t)throw new Error(`Service already exists: ${e.id}, please specify a different id (not ${e.id}) or overwrite=true`);delete this._services[e.id]}return this._services[e.id]=e,e}_extract_service_info(e){const t=e.config||{};t.workspace=t.workspace||self._local_workspace;const r=H(e,null,t.require_context);return{config:t,id:`${this._client_id}:${e.id}`,name:e.name||e.id,description:e.description||"",type:e.type||"generic",docs:e.docs||null,app_id:this._app_id,service_schema:r}}async get_service_schema(e){return H(e,null,e.config.require_context)}async register_service(e,t,r=!0,i=!1){let o;if(i&&e.type)try{o=await this.get_manager_service(10,"camel"),e=function(e,t){function r(e,t,r="root"){for(let i in t)if(!e.hasOwnProperty(i))throw new Error(`Missing key '${i}' in service at path '${r}'`);for(let i in e)if("type"!==i&&!t.hasOwnProperty(i))throw new Error(`Unexpected key '${i}' in service at path '${r}'`)}return r(e,t.definition),function e(t,i,o="root"){if("object"!=typeof t||Array.isArray(t)){if(Array.isArray(t)){if(t.length!==i.length)throw new Error(`Length mismatch at path '${o}'`);t.forEach(((r,s)=>{let c=`${o}[${s}]`;if("object"!=typeof r||Array.isArray(r)){if("function"==typeof r){if(!i.hasOwnProperty(s))throw new Error(`Missing schema for function at index ${s} in path '${c}'`);t[s]=(0,n.G)(r,{name:i[s].name,description:i[s].description||"",parameters:i[s].parameters})}}else e(r,i[s],c)}))}}else{r(t,i,o);for(let r in t){let s=t[r],c=`${o}.${r}`;if("object"!=typeof s||Array.isArray(s)){if("function"==typeof s){if(!i.hasOwnProperty(r))throw new Error(`Missing schema for function '${r}' at path '${c}'`);t[r]=(0,n.G)(s,{name:i[r].name,description:i[r].description||"",parameters:i[r].parameters})}}else e(s,i[r],c)}}}(e,t.definition),e}(e,await o.get_service_type(e.type))}catch(t){throw new Error(`Failed to get service type ${e.type}, error: ${t}`)}const s=this.add_service(e,t),c=this._extract_service_info(s);if(r)try{o=o||await this.get_manager_service(10,"camel"),await o.registerService(c)}catch(e){throw new Error(`Failed to notify workspace manager: ${e}`)}return c}async unregister_service(e,t){if(e instanceof Object&&(e=e.id),!this._services[e])throw new Error(`Service not found: ${e}`);const r=this._services[e];if(delete this._services[e],t){const e=await this.get_manager_service(10,"camel");await e.registerService(r.id)}}_ndarray(e,t,r){const n=(0,i.D4)(e);if(r&&r!==n)throw"dtype doesn't match the type of the array: "+n+" != "+r;return t=t||[e.length],{_rtype:"ndarray",_rvalue:e.buffer,_rshape:t,_rdtype:n}}_encode_callback(e,t,r,i,n,o){let s=`${r}.${e}`,c={_rtype:"method",_rtarget:o?`${o}/${this._client_id}`:this._client_id,_rmethod:s,_rpromise:!1};const a=this;return[c,function(){try{t.apply(null,Array.prototype.slice.call(arguments))}catch(e){console.error("Error in callback:",s,e)}finally{i&&a._object_store[r]&&delete a._object_store[r],n&&n.started&&n.clear()}}]}async _encode_promise(e,t,r,n,o,s){let c=this._get_session_store(r,!0);(0,i.vA)(c,`Failed to create session store ${r} due to invalid parent`);let a={};return o&&t&&this._method_timeout?(a.heartbeat=await this._encode(o.reset.bind(o),r,s),a.interval=this._method_timeout/2,c.timer=o):o=null,[a.resolve,c.resolve]=this._encode_callback("resolve",e,r,n,o,s),[a.reject,c.reject]=this._encode_callback("reject",t,r,n,o,s),a}async _send_chunks(e,t,r){let n=await this.get_remote_service(`${t}:built-in`);(0,i.vA)(n.message_cache,"Remote client does not support message caching for long message.");let o=n.message_cache,s=r||(0,i.bq)();await o.create(s,!!r);let c=e.length,a=Math.ceil(c/K);for(let t=0;t<a;t++){let i=t*K;await o.append(s,e.slice(i,i+K),!!r),console.log(`Sending chunk ${t+1}/${a} (${c} bytes)`)}await o.process(s,!!r)}emit(e,t){if((0,i.vA)("object"==typeof e&&e.type,"Invalid message, must be an object with a `type` fields."),!e.to)return void this._fire(e.type,e);let r=q(e);if(t){const e=q(t);r=new Uint8Array([...r,...e])}if(r.length<=513024)return this._emit_message(r);throw new Error("Message is too large to send in one go.")}_generate_remote_method(e,t,r,n,o){let s=e._rtarget;n&&!s.includes("/")&&(n!==s&&(s=n+"/"+s),e._rtarget=s);let c=e._rmethod,a=e._rpromise;const h=this;function _(){return new Promise((async(e,n)=>{let _=(0,i.bq)();r&&(_=r+"."+_);let l=h._get_session_store(_,!0);if(!l)return void n(new Error(`Runtime Error: Failed to get session store ${_}`));l.target_id=s;const d=await h._encode(Array.prototype.slice.call(arguments),_,o),p=d.length,u=p>0&&"object"==typeof d[p-1]&&null!==d[p-1]&&d[p-1]._rkwargs;let f;u&&delete d[p-1]._rkwargs,f=h._local_workspace?h._local_workspace+"/"+h._client_id:h._client_id;let y={type:"method",from:f,to:s,method:c},w={};d&&(w.args=d),u&&(w.with_kwargs=u),t&&(y.parent=t);let m=null;if(a){y.session=_;let t=`${s}:${c}`;m=new V(h._method_timeout,n,[`Method call time out: ${t}`],t);let r=!0;for(let e of d)if("object"==typeof e&&!0===e._rintf){r=!1;break}w.promise=await h._encode_promise(e,n,_,r,m,o)}let g=q(y);if(w){const e=q(w);g=new Uint8Array([...g,...e])}g.length<=513024?h._emit_message(g).then((function(){m&&m.start()})):h._send_chunks(g,s,t).then((function(){m&&m.start()})).catch((function(e){console.error("Failed to send message",e),n(e)}))}))}_.__rpc_object__=e;const l=c.split(".");return _.__name__=l[l.length-1],_.__doc__=e._rdoc||`Remote method: ${c}`,_.__schema__=e._rschema,_}get_client_info(){const e=[];for(let t of Object.values(this._services))e.push(this._extract_service_info(t));return{id:this._client_id,services:e}}async _handle_method(e){let t=null;try{(0,i.vA)(e.method&&e.ctx&&e.from);const r=e.from+":"+e.method,n=e.from.split("/")[0],o=e.from.split("/")[1];let s;e.to=e.to.includes("/")?e.to:n+"/"+e.to,e.ctx.to=e.to,this._local_workspace?(this._local_workspace&&"*"!==this._local_workspace&&(0,i.vA)(e.to.split("/")[0]===this._local_workspace,"Workspace mismatch: "+e.to.split("/")[0]+" != "+this._local_workspace),s=this._local_workspace):s=e.to.split("/")[0];const c=e.parent;let a,h,_,l;if(e.promise){const d=await this._decode(e.promise,e.session,c,n,s);if(a=d.resolve,h=d.reject,d.heartbeat&&d.interval){async function p(){try{console.log("Reset heartbeat timer: "+e.method),await d.heartbeat()}catch(e){console.error(e)}}t=setInterval(p,1e3*d.interval)}}try{_=G(this._object_store,e.method)}catch(u){throw console.debug("Failed to find method",r,this._client_id,u),new Error(`Method not found: ${r} at ${this._client_id}`)}if((0,i.vA)(_&&"function"==typeof _,"Invalid method: "+r),this._method_annotations.has(_)){if("protected"===this._method_annotations.get(_).visibility&&s!==n&&("*"!==n||o!==this._connection.manager_id))throw new Error("Permission denied for invoking protected method "+r+", workspace mismatch: "+s+" != "+n)}else{let f=this._object_store[e.method.split(".")[0]].target_id;if(s===n&&f&&-1===f.indexOf("/")&&(f=s+"/"+f),f!==e.from)throw new Error("Access denied for method call ("+r+") from "+e.from+" to target "+f)}if(c&&(0,i.vA)(null!==this._get_session_store(c,!0),"Parent session was closed: "+c),l=e.args?await this._decode(e.args,e.session,null,n,null):[],this._method_annotations.has(_)&&this._method_annotations.get(_).require_context){if(l.length+1<_.length)for(let y=l.length;y<_.length-1;y++)l.push(void 0);l.push(e.ctx),(0,i.vA)(l.length===_.length,`Runtime Error: Invalid number of arguments for method ${r}, expected ${_.length} but got ${l.length}`)}if(e.promise){const w=_.apply(null,l);w instanceof Promise?w.then((e=>{a(e),clearInterval(t)})).catch((e=>{h(e),clearInterval(t)})):(a(w),clearInterval(t))}else _.apply(null,l),clearInterval(t)}catch(m){console.error("Error during calling method: ",m),clearInterval(t)}}encode(e,t){return this._encode(e,t)}_get_session_store(e,t){let r=this._object_store;const i=e.split(".");if(t){const e=i.length-1;for(let t of i.slice(0,e)){if(!r[t])return null;r=r[t]}return r[i[e]]||(r[i[e]]={}),r[i[e]]}for(let e of i){if(!r[e])return null;r=r[e]}return r}async _encode(e,t,r){const n=typeof e;if("number"===n||"string"===n||"boolean"===n||null==e||e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return{_rtype:"memoryview",_rvalue:new Uint8Array(e)};if(e.__rpc_object__)return e.__rpc_object__;let o;if(e.constructor instanceof Object&&e._rtype){const c=e._rtype;return delete e._rtype,o=await this._encode(e,t,r),o._rtype=c,o}if("function"==typeof e){if(this._method_annotations.has(e)){let a=this._method_annotations.get(e);o={_rtype:"method",_rtarget:this._client_id,_rmethod:a.method_id,_rpromise:!0}}else{let h;(0,i.vA)("string"==typeof t),h=e.__name__?`${(0,i.bq)()}-${e.__name__}`:(0,i.bq)(),o={_rtype:"method",_rtarget:this._client_id,_rmethod:`${t}.${h}`,_rpromise:!0};let _=this._get_session_store(t,!0);(0,i.vA)(null!==_,`Failed to create session store ${t} due to invalid parent`),_[h]=e}if(o._rdoc=e.__doc__,!o._rdoc)try{const l=function(e){const t=e.toString(),r=t.match(/function\s*(\w*)/),i=r&&r[1]||"",n=t.match(/\(([^)]*)\)/);let o="";n&&(o=n[1].split(",").map((e=>e.replace(/\/\*.*?\*\//g,"").replace(/\/\/.*$/g,""))).filter((e=>e.trim().length>0)).map((e=>e.trim())).join(", "));let s=t.match(/\)\s*\{\s*\/\*([\s\S]*?)\*\//);const c=s&&s[1].trim()||"";s=t.match(/\)\s*\{\s*(\/\/[\s\S]*?)\n\s*[^\s\/]/);const a=s&&s[1].split("\n").map((e=>e.replace(/^\/\/\s*/,"").trim())).join("\n")||"",h=c||a;return i&&o.length>0&&{name:i,sig:o,doc:h}}(e);l&&!o._rdoc&&(o._rdoc=`${l.doc}`)}catch(d){console.error("Failed to extract function docstring:",e)}return o._rschema=e.__schema__,o}const s=Array.isArray(e);for(let p of Object.keys(this._codecs)){const u=this._codecs[p];if(u.encoder&&e instanceof u.type){let f=await Promise.resolve(u.encoder(e));if(f&&!f._rtype&&(f._rtype=u.name),"object"==typeof f){const y=f._rtype;delete f._rtype,f=await this._encode(f,t,r),f._rtype=y}return o=f,o}}if("undefined"!=typeof tf&&tf.Tensor&&e instanceof tf.Tensor){const w=e.dataSync();o={_rtype:"ndarray",_rvalue:new Uint8Array(w.buffer),_rshape:e.shape,_rdtype:e.dtype}}else if("undefined"!=typeof nj&&nj.NdArray&&e instanceof nj.NdArray){const m=(0,i.D4)(e.selection.data);o={_rtype:"ndarray",_rvalue:new Uint8Array(e.selection.data.buffer),_rshape:e.shape,_rdtype:m}}else if(e instanceof Error)console.error(e),o={_rtype:"error",_rvalue:e.toString(),_rtrace:e.stack};else if(e!==Object(e)||e instanceof Boolean||e instanceof String||e instanceof Date||e instanceof RegExp||e instanceof ImageData||"undefined"!=typeof FileList&&e instanceof FileList||"undefined"!=typeof FileSystemDirectoryHandle&&e instanceof FileSystemDirectoryHandle||"undefined"!=typeof FileSystemFileHandle&&e instanceof FileSystemFileHandle||"undefined"!=typeof FileSystemHandle&&e instanceof FileSystemHandle||"undefined"!=typeof FileSystemWritableFileStream&&e instanceof FileSystemWritableFileStream)o=e;else if(e instanceof Blob){let g=0;async function v(t){let r;r=t?e.slice(g,g+t):e.slice(g);const i=new Uint8Array(await r.arrayBuffer());return g+=i.byteLength,i}function b(e){g=e}o={_rtype:"iostream",_rnative:"js:blob",type:e.type,name:e.name,size:e.size,path:e._path||e.webkitRelativePath,read:await this._encode(v,t,r),seek:await this._encode(b,t,r)}}else if(e instanceof z){const k=(0,i.D4)(e);o={_rtype:"typedarray",_rvalue:new Uint8Array(e.buffer),_rdtype:k}}else if(e instanceof DataView)o={_rtype:"memoryview",_rvalue:new Uint8Array(e.buffer)};else if(e instanceof Set)o={_rtype:"set",_rvalue:await this._encode(Array.from(e),t,r)};else if(e instanceof Map)o={_rtype:"orderedmap",_rvalue:await this._encode(Array.from(e),t,r)};else{if(!(e.constructor instanceof Object||Array.isArray(e)))throw`hypha-rpc: Unsupported data type: ${e}, you can register a custom codec to encode/decode the object.`;{o=s?[]:{};const E=Object.keys(e);for(let A of E)o[A]=await this._encode(e[A],t,r)}}if(!o)throw new Error("Failed to encode object");return o}async decode(e){return await this._decode(e)}async _decode(e,t,r,n,o){if(!e)return e;let s;if(e._rtype)if(this._codecs[e._rtype]&&this._codecs[e._rtype].decoder){const i=e._rtype;delete e._rtype,(e=await this._decode(e,t,r,n,o))._rtype=i,s=await Promise.resolve(this._codecs[e._rtype].decoder(e))}else if("method"===e._rtype)s=this._generate_remote_method(e,t,r,n,o);else if("ndarray"===e._rtype)if("undefined"!=typeof nj&&nj.array)Array.isArray(e._rvalue)&&(e._rvalue=e._rvalue.reduce(N)),s=nj.array(new Uint8(e._rvalue),e._rdtype).reshape(e._rshape);else if("undefined"!=typeof tf&&tf.Tensor){Array.isArray(e._rvalue)&&(e._rvalue=e._rvalue.reduce(N));const t=i.RR[e._rdtype];s=tf.tensor(new t(e._rvalue),e._rshape,e._rdtype)}else s=e;else if("error"===e._rtype)s=new Error("RemoteError: "+e._rvalue+"\n"+(e._rtrace||""));else if("typedarray"===e._rtype){const t=i.RR[e._rdtype];if(!t)throw new Error("unsupported dtype: "+e._rdtype);s=new t(e._rvalue.buffer.slice(e._rvalue.byteOffset,e._rvalue.byteOffset+e._rvalue.byteLength))}else if("memoryview"===e._rtype)s=e._rvalue.buffer.slice(e._rvalue.byteOffset,e._rvalue.byteOffset+e._rvalue.byteLength);else if("iostream"===e._rtype){if("js:blob"===e._rnative){const i=await this._generate_remote_method(e.read,t,r,n,o),c=await i();s=new Blob([c],{type:e.type,name:e.name})}else{s={};for(let i of Object.keys(e))i.startsWith("_")||(s[i]=await this._decode(e[i],t,r,n,o))}s.__rpc_object__=e}else if("orderedmap"===e._rtype)s=new Map(await this._decode(e._rvalue,t,r,n,o));else if("set"===e._rtype)s=new Set(await this._decode(e._rvalue,t,r,n,o));else{const i=e._rtype;delete e._rtype,s=await this._decode(e,t,r,n,o),s._rtype=i}else if(e.constructor===Object||Array.isArray(e)){const i=Array.isArray(e);s=i?[]:{};for(let c of Object.keys(e))if(i||e.hasOwnProperty(c)){const i=e[c];s[c]=await this._decode(i,t,r,n,o)}}else s=e;if(void 0===s)throw new Error("Failed to decode object");return s}}},878:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{function randId(){return Math.random().toString(36).substr(2,10)+(new Date).getTime()}function toCamelCase(e){return e.includes("_")?e.replace(/_./g,(e=>e[1].toUpperCase())):e}function toSnakeCase(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}function convertCase(e,t){if("object"!=typeof e||null===e||!t)return e;const r=Array.isArray(e)?[]:{};for(const i in e)if(e.hasOwnProperty(i)){const n=e[i],o=toCamelCase(i),s=toSnakeCase(i);"camel"===t?(r[o]=convertCase(n,t),"function"==typeof n&&(r[o].__name__=o,n.__schema__&&(r[o].__schema__={...n.__schema__},r[o].__schema__.name=o))):"snake"===t?(r[s]=convertCase(n,t),"function"==typeof n&&(r[s].__name__=s,n.__schema__&&(r[s].__schema__={...n.__schema__},r[s].__schema__.name=s))):(t.includes("camel")&&(r[o]=convertCase(n,"camel")),t.includes("snake")&&(r[s]=convertCase(n,"snake")))}return r}__webpack_require__.d(__webpack_exports__,{D4:()=>typedArrayToDtype,RR:()=>dtypeToTypedArray,V0:()=>loadRequirements,bq:()=>randId,fm:()=>waitFor,gX:()=>convertCase,sw:()=>MessageEmitter,vA:()=>assert});const dtypeToTypedArray={int8:Int8Array,int16:Int16Array,int32:Int32Array,uint8:Uint8Array,uint16:Uint16Array,uint32:Uint32Array,float32:Float32Array,float64:Float64Array,array:Array};async function loadRequirementsInWindow(e){function t(e){return new Promise(((t,r)=>{var i=document.createElement("script");i.src=e,i.type="text/javascript",i.onload=t,i.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||t()},i.onerror=r,document.head.appendChild(i)}))}async function r(){for(var e=Array.prototype.slice.call(arguments),r=e.length,i=0;i<r;i++)await t(e[i])}if(e&&(Array.isArray(e)||"string"==typeof e))try{var i;if(e="string"==typeof e?[e]:e,!Array.isArray(e))throw"unsupported requirements definition";for(var n=0;n<e.length;n++)e[n].toLowerCase().endsWith(".css")||e[n].startsWith("css:")?(e[n].startsWith("css:")&&(e[n]=e[n].slice(4)),(i=document.createElement("link")).rel="stylesheet",i.href=e[n],document.head.appendChild(i)):e[n].toLowerCase().endsWith(".mjs")||e[n].startsWith("mjs:")?(e[n].startsWith("mjs:")&&(e[n]=e[n].slice(4)),await import(e[n])):e[n].toLowerCase().endsWith(".js")||e[n].startsWith("js:")?(e[n].startsWith("js:")&&(e[n]=e[n].slice(3)),await r(e[n])):e[n].startsWith("http")?await r(e[n]):e[n].startsWith("cache:")||console.log("Unprocessed requirements url: "+e[n])}catch(t){throw"failed to import required scripts: "+e.toString()}}async function loadRequirementsInWebworker(e){if(e&&(Array.isArray(e)||"string"==typeof e))try{Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++){if(e[t].toLowerCase().endsWith(".css")||e[t].startsWith("css:"))throw"unable to import css in a webworker";e[t].toLowerCase().endsWith(".js")||e[t].startsWith("js:")?(e[t].startsWith("js:")&&(e[t]=e[t].slice(3)),importScripts(e[t])):e[t].startsWith("http")?importScripts(e[t]):e[t].startsWith("cache:")||console.log("Unprocessed requirements url: "+e[t])}}catch(t){throw"failed to import required scripts: "+e.toString()}}function loadRequirements(e){return"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?loadRequirementsInWebworker(e):loadRequirementsInWindow(e)}function normalizeConfig(e){return e.version=e.version||"0.1.0",e.description=e.description||`[TODO: add description for ${e.name} ]`,e.type=e.type||"rpc-window",e.id=e.id||randId(),e.target_origin=e.target_origin||"*",e.allow_execution=e.allow_execution||!1,e=Object.keys(e).reduce(((t,r)=>("function"!=typeof e[r]&&(t[r]=e[r]),t)),{})}const typedArrayToDtypeMapping={Int8Array:"int8",Int16Array:"int16",Int32Array:"int32",Uint8Array:"uint8",Uint16Array:"uint16",Uint32Array:"uint32",Float32Array:"float32",Float64Array:"float64",Array:"array"},typedArrayToDtypeKeys=[];for(const arrType of Object.keys(typedArrayToDtypeMapping))typedArrayToDtypeKeys.push(eval(arrType));function typedArrayToDtype(e){let t=typedArrayToDtypeMapping[e.constructor.name];if(!t){const r=Object.getPrototypeOf(e);for(const e of typedArrayToDtypeKeys)if(r instanceof e){t=typedArrayToDtypeMapping[e.name];break}}return t}function cacheUrlInServiceWorker(e){return new Promise((function(t,r){const i={command:"add",url:e};if(!navigator.serviceWorker||!navigator.serviceWorker.register)return void r("Service worker is not supported.");const n=new MessageChannel;n.port1.onmessage=function(e){e.data&&e.data.error?r(e.data.error):t(e.data&&e.data.result)},navigator.serviceWorker&&navigator.serviceWorker.controller?navigator.serviceWorker.controller.postMessage(i,[n.port2]):r("Service worker controller is not available")}))}async function cacheRequirements(e){e=e||[],Array.isArray(e)||(e=[e]);for(let t of e)t.startsWith("js:")&&(t=t.slice(3)),t.startsWith("css:")&&(t=t.slice(4)),t.startsWith("cache:")&&(t=t.slice(6)),t.startsWith("http")&&await cacheUrlInServiceWorker(t).catch((e=>{console.error(e)}))}function assert(e,t){if(!e)throw new Error(t||"Assertion failed")}function urlJoin(...e){return e.join("/").replace(/[\/]+/g,"/").replace(/^(.+):\//,"$1://").replace(/^file:/,"file:/").replace(/\/(\?|&|#[^!])/g,"$1").replace(/\?/g,"&").replace("&","?")}function waitFor(e,t,r){let i;return Promise.race([e,new Promise(((e,n)=>i=setTimeout((()=>{n(r||"Timeout Error")}),1e3*t)))]).finally((()=>clearTimeout(i)))}class MessageEmitter{constructor(e){this._event_handlers={},this._once_handlers={},this._debug=e}emit(){throw new Error("emit is not implemented")}on(e,t){this._event_handlers[e]||(this._event_handlers[e]=[]),this._event_handlers[e].push(t)}once(e,t){t.___event_run_once=!0,this.on(e,t)}off(e,t){if(e||t){if(e&&!t)this._event_handlers[e]&&(this._event_handlers[e]=[]);else if(this._event_handlers[e]){const r=this._event_handlers[e].indexOf(t);r>=0&&this._event_handlers[e].splice(r,1)}}else this._event_handlers={}}_fire(e,t){if(this._event_handlers[e])for(var r=this._event_handlers[e].length;r--;){const i=this._event_handlers[e][r];try{i(t)}catch(e){console.error(e)}finally{i.___event_run_once&&this._event_handlers[e].splice(r,1)}}else this._debug&&console.warn("unhandled event",e,t)}waitFor(e,t){return new Promise(((r,i)=>{const n=e=>{clearTimeout(o),r(e)};this.once(e,n);const o=setTimeout((()=>{this.off(e,n),i(new Error("Timeout"))}),t)}))}}},287:(e,t,r)=>{r.d(t,{G:()=>n});var i=r(878);function n(e,{schema_type:t="auto",name:r=null,description:n=null,parameters:o=null}){if(!e||"function"!=typeof e)throw Error("func should be a function");return(0,i.vA)("auto"===t,"schema_type should be auto"),(0,i.vA)(r,"name should not be null"),(0,i.vA)(o&&"object"===o.type,"parameters should be an object"),e.__schema__={name:r,description:n,parameters:o||[]},e}},831:(e,t,r)=>{r.d(t,{b:()=>a,e:()=>h});var i=r(164),n=r(878),o=r(287);class s{constructor(e){this._data_channel=e,this._handle_message=null,this._reconnection_token=null,this._handle_disconnected=null,this._handle_connected=()=>{},this.manager_id=null,this._data_channel.onopen=async()=>{this._handle_connected&&this._handle_connected({channel:this._data_channel})},this._data_channel.onmessage=async e=>{let t=e.data;t instanceof Blob&&(t=await t.arrayBuffer()),this._handle_message(t)};const t=this;this._data_channel.onclose=function(){this._handle_disconnected&&this._handle_disconnected("closed"),console.log("websocket closed"),t._data_channel=null}}on_disconnected(e){this._handle_disconnected=e}on_connected(e){this._handle_connected=e}on_message(e){(0,n.vA)(e,"handler is required"),this._handle_message=e}async emit_message(e){(0,n.vA)(this._handle_message,"No handler for message");try{this._data_channel.send(e)}catch(e){throw console.error(`Failed to send data, error: ${e}`),e}}async disconnect(e){this._data_channel=null,console.info(`data channel connection disconnected (${e})`)}}async function c(e){(0,n.vA)(e.channel,"No channel provided"),(0,n.vA)(e.workspace,"No workspace provided");const t=e.channel,r=e.client_id||(0,n.bq)(),o=new s(t);return e.context=e.context||{},e.context.connection_type="webrtc",new i.y(o,{client_id:r,default_context:e.context,name:e.name,method_timeout:e.method_timeout||10,workspace:e.workspace})}async function a(e,t,r){(r=r||{}).peer_id=r.peer_id||(0,n.bq)();const i=new RTCPeerConnection({iceServers:r.ice_servers||[{urls:["stun:stun.l.google.com:19302"]}],sdpSemantics:"unified-plan"});return new Promise((async(s,a)=>{try{i.addEventListener("connectionstatechange",(()=>{"failed"===i.connectionState?(i.close(),a(new Error("WebRTC Connection failed"))):"closed"===i.connectionState?a(new Error("WebRTC Connection closed")):console.log("WebRTC Connection state: ",i.connectionState)}),!1),r.on_init&&(await r.on_init(i),delete r.on_init);let h=i.createDataChannel(r.peer_id,{ordered:!0});h.binaryType="arraybuffer";const _=await i.createOffer();await i.setLocalDescription(_);const l=await e.getService(t),d=await l.offer({sdp:i.localDescription.sdp,type:i.localDescription.type});h.onopen=()=>{r.channel=h,r.workspace=d.workspace,setTimeout((async()=>{const e=await c(r);i.rpc=e,i.getService=(0,o.G)((async function(t){return(0,n.vA)(!t.includes(":"),"WebRTC service name should not contain ':'"),(0,n.vA)(!t.includes("/"),"WebRTC service name should not contain '/'"),await e.get_remote_service(r.workspace+"/"+r.peer_id+":"+t)}),{name:"get_service",description:"Get a remote service via webrtc",parameters:{type:"object",properties:{name:{type:"string",description:"Name of the service"}}}}),i.disconnect=(0,o.G)((async function(){await e.disconnect(),i.close()}),{name:"disconnect",description:"Disconnect from the webrtc connection via webrtc",parameters:{type:"object",properties:{}}}),i.registerCodec=(0,o.G)(e.register_codec,{name:"registerCodec",description:"Register a codec for the webrtc connection",parameters:{type:"object",properties:{codec:{type:"object",description:"Codec to register",properties:{name:{type:"string"},type:{},encoder:{type:"function"},decoder:{type:"function"}}}}}}),s(i)}),500)},h.onclose=()=>a(new Error("Data channel closed")),await i.setRemoteDescription(new RTCSessionDescription({sdp:d.sdp,type:d.type}))}catch(e){a(e)}}))}async function h(e,t,r){const i=(r=r||{visibility:"protected",require_context:!0}).on_init;return delete r.on_init,await e.registerService({id:t,config:r,offer:(t,n)=>async function(e,t,r,i,n){r=r||{};let o=new RTCSessionDescription({sdp:e.sdp,type:e.type}),s=new RTCPeerConnection({iceServers:r.ice_servers||[{urls:["stun:stun.l.google.com:19302"]}],sdpSemantics:"unified-plan"});t&&s.addEventListener("datachannel",(async e=>{const r=e.channel;let i=null;n&&n.user&&(i={user:n.user,ws:n.ws}),(await c({channel:r,client_id:r.label,workspace:t.config.workspace,context:i}))._services=t.rpc._services})),i&&await i(s),await s.setRemoteDescription(o);let a=await s.createAnswer();return await s.setLocalDescription(a),{sdp:s.localDescription.sdp,type:s.localDescription.type,workspace:t.config.workspace}}(t,e,r,i,n)})}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{API_VERSION:()=>_rpc_js__WEBPACK_IMPORTED_MODULE_0__.m,LocalWebSocket:()=>LocalWebSocket,RPC:()=>_rpc_js__WEBPACK_IMPORTED_MODULE_0__.y,connectToServer:()=>connectToServer,getRTCService:()=>_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.b,loadRequirements:()=>_utils__WEBPACK_IMPORTED_MODULE_1__.V0,login:()=>login,registerRTCService:()=>_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.e,schemaFunction:()=>_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G,setupLocalClient:()=>setupLocalClient});var _rpc_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(164),_utils__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(878),_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(287),_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(831);const MAX_RETRY=1e6;class WebsocketRPCConnection{constructor(e,t,r,i,n=null,o=60,s=null){(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(e&&t,"server_url and client_id are required"),this._server_url=e,this._client_id=t,this._workspace=r,this._token=i,this._reconnection_token=n,this._websocket=null,this._handle_message=null,this._handle_connected=null,this._handle_disconnected=null,this._timeout=o,this._WebSocketClass=s||WebSocket,this._closed=!1,this._legacy_auth=null,this.connection_info=null,this._enable_reconnect=!1,this.manager_id=null}on_message(e){(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(e,"handler is required"),this._handle_message=e}on_connected(e){this._handle_connected=e}on_disconnected(e){this._handle_disconnected=e}async _attempt_connection(e,t=!0){return new Promise(((r,i)=>{this._legacy_auth=!1;const n=new this._WebSocketClass(e);n.binaryType="arraybuffer",n.onopen=()=>{console.info("WebSocket connection established"),r(n)},n.onerror=e=>{console.error("WebSocket connection error:",e),i(new Error(`ConnectionAbortedError: ${e}`))},n.onclose=n=>{1003===n.code&&t?(console.info("Received 1003 error, attempting connection with query parameters."),this._legacy_auth=!0,this._attempt_connection_with_query_params(e).then(r).catch(i)):this._handle_disconnected&&this._handle_disconnected(n.reason)}}))}async _attempt_connection_with_query_params(e){const t=[];this._client_id&&t.push(`client_id=${encodeURIComponent(this._client_id)}`),this._workspace&&t.push(`workspace=${encodeURIComponent(this._workspace)}`),this._token&&t.push(`token=${encodeURIComponent(this._token)}`),this._reconnection_token&&t.push(`reconnection_token=${encodeURIComponent(this._reconnection_token)}`);const r=e+(t.length>0?`?${t.join("&")}`:"");return await this._attempt_connection(r,!1)}_establish_connection(){return new Promise(((e,t)=>{this._websocket.onmessage=r=>{const i=r.data,n=JSON.parse(i);if("connection_info"!=n.type){if("error"==n.type){const e="ConnectionAbortedError: "+n.message;return console.error("Failed to connect, "+e),void t(new Error(e))}return console.error("ConnectionAbortedError: Unexpected message received from the server:",i),void t(new Error("ConnectionAbortedError: Unexpected message received from the server"))}this.connection_info=n,this._workspace&&(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(this.connection_info.workspace===this._workspace,`Connected to the wrong workspace: ${this.connection_info.workspace}, expected: ${this._workspace}`),this.connection_info.reconnection_token&&(this._reconnection_token=this.connection_info.reconnection_token),this.manager_id=this.connection_info.manager_id||null,console.log(`Successfully connected to the server, workspace: ${this.connection_info.workspace}, manager_id: ${this.manager_id}`),this.connection_info.announcement&&console.log(`${this.connection_info.announcement}`),e(this.connection_info)}}))}async open(){console.log("Creating a new websocket connection to",this._server_url.split("?")[0]);try{if(this._websocket=await this._attempt_connection(this._server_url),this._legacy_auth)throw new Error("NotImplementedError: Legacy authentication is not supported");const e=JSON.stringify({client_id:this._client_id,workspace:this._workspace,token:this._token,reconnection_token:this._reconnection_token});return this._websocket.send(e),await(0,_utils__WEBPACK_IMPORTED_MODULE_1__.fm)(this._establish_connection(),this._timeout,"Failed to receive the first message from the server"),this._enable_reconnect=!0,this._closed=!1,this._websocket.onmessage=e=>{this._handle_message(e.data)},this._websocket.onclose=this._handle_close.bind(this),this._handle_connected&&this._handle_connected(this.connection_info),this.connection_info}catch(e){throw console.error("Failed to connect to",this._server_url.split("?")[0],e),e}}_handle_close(e){if(!this._closed&&this._websocket&&this._websocket.readyState===WebSocket.CLOSED){if([1e3,1001].includes(e.code))console.info(`Websocket connection closed (code: ${e.code}): ${e.reason}`),this._handle_disconnected&&this._handle_disconnected(e.reason),this._closed=!0;else if(this._enable_reconnect){console.warn("Websocket connection closed unexpectedly (code: %s): %s",e.code,e.reason);let t=0;const r=async()=>{try{console.warn(`Reconnecting to ${this._server_url.split("?")[0]} (attempt #${t})`),await this.open(),console.warn(`Successfully reconnected to server ${this._server_url}`)}catch(e){if(`${e}`.includes("ConnectionAbortedError:"))return void console.warn("Failed to reconnect, connection aborted:",e);if(`${e}`.includes("NotImplementedError:"))return void console.error(`${e}\nIt appears that you are trying to connect to a hypha server that is older than 0.20.0, please upgrade the hypha server or use the websocket client in imjoy-rpc(https://www.npmjs.com/package/imjoy-rpc) instead`);if(await new Promise((e=>setTimeout(e,1e3))),this._websocket&&this._websocket.readyState===WebSocket.CONNECTED)return;t+=1,t<MAX_RETRY?await r():console.error("Failed to reconnect after",MAX_RETRY,"attempts")}};r()}}else this._handle_disconnected&&this._handle_disconnected(e.reason)}async emit_message(e){if(this._closed)throw new Error("Connection is closed");this._websocket&&this._websocket.readyState===WebSocket.OPEN||await this.open();try{this._websocket.send(e)}catch(e){throw console.error(`Failed to send data, error: ${e}`),e}}disconnect(e){this._closed=!0,this._websocket&&this._websocket.readyState===WebSocket.OPEN&&this._websocket.close(1e3,e),console.info(`WebSocket connection disconnected (${e})`)}}function normalizeServerUrl(e){if(!e)throw new Error("server_url is required");return e.startsWith("http://")?e=e.replace("http://","ws://").replace(/\/$/,"")+"/ws":e.startsWith("https://")&&(e=e.replace("https://","wss://").replace(/\/$/,"")+"/ws"),e}async function login(e){const t=e.login_service_id||"public/*:hypha-login",r=e.login_timeout||60,i=e.login_callback,n=e.profile,o=await connectToServer({name:"initial login client",server_url:e.server_url});try{const e=await o.getService(t);(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(e,`Failed to get the login service: ${t}`);const s=await e.start();return i?await i(s):console.log(`Please open your browser and login at ${s.login_url}`),await e.check(s.key,r,n)}catch(e){throw e}finally{await o.disconnect()}}async function webrtcGetService(e,t,r,i,n){(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)([void 0,!0,!1,"auto"].includes(i),"webrtc must be true, false or 'auto'");const o=Array.prototype.slice.call(arguments,3),s=await e.getService(r,...o);if(!0===i||"auto"===i){if(s.id.includes(":")&&s.id.includes("/"))try{const r=await(0,_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.b)(e,t,n),i=await r.get_service(s.id.split(":")[1]);return i._webrtc=!0,i._peer=r,i._service=s,i}catch(e){console.warn("Failed to get webrtc service, using websocket connection",e)}if(!0===i)throw new Error("Failed to get the service via webrtc")}return s}async function connectToServer(e){e.server&&(e.server_url=e.server_url||e.server.url,e.WebSocketClass=e.WebSocketClass||e.server.WebSocketClass);let t=e.client_id;t||(t=(0,_utils__WEBPACK_IMPORTED_MODULE_1__.bq)(),e.client_id=t);let r=normalizeServerUrl(e.server_url),i=new WebsocketRPCConnection(r,t,e.workspace,e.token,e.reconnection_token,e.method_timeout||60,e.WebSocketClass);const n=await i.open();if((0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(n,"Failed to connect to the server, no connection info obtained. This issue is most likely due to an outdated Hypha server version. Please use `imjoy-rpc` for compatibility, or upgrade the Hypha server to the latest version."),e.workspace&&n.workspace!==e.workspace)throw new Error(`Connected to the wrong workspace: ${n.workspace}, expected: ${e.workspace}`);const o=n.workspace,s=new _rpc_js__WEBPACK_IMPORTED_MODULE_0__.y(i,{client_id:t,workspace:o,default_context:{connection_type:"websocket"},name:e.name,method_timeout:e.method_timeout,app_id:e.app_id}),c=await s.get_manager_service(e.method_timeout,"camel");if(c.rpc=s,n&&(c.config=Object.assign(c.config,n)),c.export=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)((async function(t){t.id="default",t.name=t.name||e.name||t.id,t.description=t.description||e.description,await s.register_service(t,!0)}),{name:"export",description:"Export the api.",parameters:{properties:{api:{description:"The api to export",type:"object"}},required:["api"],type:"object"}}),c.getApp=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)((async function(e){let t;e=e||"*",(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(!e.includes(":"),"clientId should not contain ':'"),e.includes("/")?[t,e]=e.split("/"):t=n.workspace;const r={workspace:t,client_id:e,service_id:"default"};return await c.getService(r)}),{name:"getApp",description:"Get the app.",parameters:{properties:{clientId:{default:"*",description:"The clientId",type:"string"}},type:"object"}}),c.listApps=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)((async function(e){e=e||o,(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(!e.includes(":"),"workspace should not contain ':'"),(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(!e.includes("/"),"workspace should not contain '/'");const t={workspace:e,service_id:"default"};return await c.listServices(t)}),{name:"listApps",description:"List the apps.",parameters:{properties:{workspace:{default:o,description:"The workspace",type:"string"}},type:"object"}}),c.disconnect=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.disconnect.bind(s),{name:"disconnect",description:"Disconnect from the server.",parameters:{type:"object",properties:{},required:[]}}),c.registerCodec=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.register_codec.bind(s),{name:"registerCodec",description:"Register a codec for the webrtc connection",parameters:{type:"object",properties:{codec:{type:"object",description:"Codec to register",properties:{name:{type:"string"},type:{},encoder:{type:"function"},decoder:{type:"function"}}}}}}),c.emit=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.emit.bind(s),{name:"emit",description:"Emit a message.",parameters:{properties:{data:{description:"The data to emit",type:"object"}},required:["data"],type:"object"}}),c.on=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.on.bind(s),{name:"on",description:"Register a message handler.",parameters:{properties:{event:{description:"The event to listen to",type:"string"},handler:{description:"The handler function",type:"function"}},required:["event","handler"],type:"object"}}),c.getServiceSchema=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.get_service_schema,{name:"getServiceSchema",description:"Get the service schema.",parameters:{properties:{service:{description:"The service to extract schema",type:"object"}},required:["service"],type:"object"}}),c.registerService=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.register_service.bind(s),{name:"registerService",description:"Register a service.",parameters:{properties:{service:{description:"The service to register",type:"object"},force:{default:!1,description:"Force to register the service",type:"boolean"}},required:["service"],type:"object"}}),c.unregisterService=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.unregister_service.bind(s),{name:"unregisterService",description:"Unregister a service.",parameters:{properties:{service:{description:"The service id to unregister",type:"string"},notify:{default:!0,description:"Notify the workspace manager",type:"boolean"}},required:["service"],type:"object"}}),i.manager_id&&s.on("force-exit",(async e=>{e.from==="*/"+i.manager_id&&(console.log("Disconnecting from server, reason:",e.reason),await s.disconnect())})),e.webrtc){await(0,_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.e)(c,t+"-rtc",e.webrtc_config);const r=Object.assign({},c);c.getService=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(webrtcGetService.bind(null,r,t+"-rtc"),{name:"getService",description:"Get a service via webrtc.",parameters:{properties:{query:{description:"The query to get the service",type:"object"},webrtc:{default:"auto",description:"Use webrtc to get the service",type:["boolean","string"]},webrtc_config:{description:"The webrtc configuration",type:"object"}},required:["query"],type:"object"}})}return c}class LocalWebSocket{constructor(e,t,r){this.url=e,this.onopen=()=>{},this.onmessage=()=>{},this.onclose=()=>{},this.onerror=()=>{},this.client_id=t,this.workspace=r;const i="undefined"!=typeof window?window:self,n="undefined"!=typeof window;if(this.postMessage=e=>{n?window.parent.postMessage(e,"*"):self.postMessage(e)},this.readyState=WebSocket.CONNECTING,i.addEventListener("message",(e=>{const{type:t,data:r,to:i}=e.data;if(i===this.client_id)switch(t){case"message":this.readyState===WebSocket.OPEN&&this.onmessage&&this.onmessage({data:r});break;case"connected":this.readyState=WebSocket.OPEN,this.onopen(e);break;case"closed":this.readyState=WebSocket.CLOSED,this.onclose(e)}else console.debug("message not for me",i,this.client_id)}),!1),!this.client_id)throw new Error("client_id is required");if(!this.workspace)throw new Error("workspace is required");this.postMessage({type:"connect",url:this.url,from:this.client_id,workspace:this.workspace})}send(e){this.readyState===WebSocket.OPEN&&this.postMessage({type:"message",data:e,from:this.client_id,workspace:this.workspace})}close(){this.readyState=WebSocket.CLOSING,this.postMessage({type:"close",from:this.client_id,workspace:this.workspace}),this.onclose()}addEventListener(e,t){"message"===e&&(this.onmessage=t),"open"===e&&(this.onopen=t),"close"===e&&(this.onclose=t),"error"===e&&(this.onerror=t)}}function setupLocalClient({enable_execution=!1,on_ready=null}){return new Promise(((resolve,reject)=>{const context="undefined"!=typeof window?window:self,isWindow="undefined"!=typeof window;context.addEventListener("message",(event=>{const{type,server_url,workspace,client_id,token,method_timeout,name,config}=event.data;if("initializeHyphaClient"===type){if(!server_url||!workspace||!client_id)return void console.error("server_url, workspace, and client_id are required.");if(!server_url.startsWith("https://local-hypha-server:"))return void console.error("server_url should start with https://local-hypha-server:");connectToServer({server_url,workspace,client_id,token,method_timeout,name}).then((async server=>{globalThis.api=server;try{if(isWindow&&enable_execution){function e(e){return new Promise(((t,r)=>{const i=document.createElement("script");i.innerHTML=e.content,i.lang=e.lang,i.onload=()=>t(),i.onerror=e=>r(e),document.head.appendChild(i)}))}if(config.styles&&config.styles.length>0)for(const t of config.styles){const r=document.createElement("style");r.innerHTML=t.content,r.lang=t.lang,document.head.appendChild(r)}if(config.links&&config.links.length>0)for(const i of config.links){const n=document.createElement("a");n.href=i.url,n.innerText=i.text,document.body.appendChild(n)}if(config.windows&&config.windows.length>0)for(const o of config.windows){document.body.innerHTML=o.content;break}if(config.scripts&&config.scripts.length>0)for(const s of config.scripts){if("javascript"!==s.lang)throw new Error("Only javascript scripts are supported");await e(s)}}else if(!isWindow&&enable_execution&&config.scripts&&config.scripts.length>0)for(const script of config.scripts){if("javascript"!==script.lang)throw new Error("Only javascript scripts are supported");eval(script.content)}on_ready&&await on_ready(server,config),resolve(server)}catch(c){reject(c)}}))}}),!1),isWindow?window.parent.postMessage({type:"hyphaClientReady"},"*"):self.postMessage({type:"hyphaClientReady"})}))}return __webpack_exports__})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("hyphaWebsocketClient",[],t):"object"==typeof exports?exports.hyphaWebsocketClient=t():e.hyphaWebsocketClient=t()}(this,(()=>(()=>{"use strict";var __webpack_modules__={164:(e,t,r)=>{r.d(t,{m:()=>F,y:()=>J});var i=r(878),n=r(287);function o(e){return"".concat(e<0?"-":"","0x").concat(Math.abs(e).toString(16).padStart(2,"0"))}var s,c=function(e,t){this.type=e,this.data=t},a=(s=function(e,t){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},s(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),h=function(e){function t(r){var i=e.call(this,r)||this,n=Object.create(t.prototype);return Object.setPrototypeOf(i,n),Object.defineProperty(i,"name",{configurable:!0,enumerable:!1,value:t.name}),i}return a(t,e),t}(Error),_=4294967295;function l(e,t,r){var i=Math.floor(r/4294967296),n=r;e.setUint32(t,i),e.setUint32(t+4,n)}function d(e,t){return 4294967296*e.getInt32(t)+e.getUint32(t+4)}var p,u,f,y={type:-1,encode:function(e){var t,r,i,n;return e instanceof Date?function(e){var t,r=e.sec,i=e.nsec;if(r>=0&&i>=0&&r<=17179869183){if(0===i&&r<=4294967295){var n=new Uint8Array(4);return(t=new DataView(n.buffer)).setUint32(0,r),n}var o=r/4294967296,s=4294967295&r;return n=new Uint8Array(8),(t=new DataView(n.buffer)).setUint32(0,i<<2|3&o),t.setUint32(4,s),n}return n=new Uint8Array(12),(t=new DataView(n.buffer)).setUint32(0,i),l(t,4,r),n}((i=1e6*((t=e.getTime())-1e3*(r=Math.floor(t/1e3))),{sec:r+(n=Math.floor(i/1e9)),nsec:i-1e9*n})):null},decode:function(e){var t=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return{sec:t.getUint32(0),nsec:0};case 8:var r=t.getUint32(0);return{sec:4294967296*(3&r)+t.getUint32(4),nsec:r>>>2};case 12:return{sec:d(t,4),nsec:t.getUint32(0)};default:throw new h("Unrecognized data size for timestamp (expected 4, 8, or 12): ".concat(e.length))}}(e);return new Date(1e3*t.sec+t.nsec/1e6)}},w=function(){function e(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(y)}return e.prototype.register=function(e){var t=e.type,r=e.encode,i=e.decode;if(t>=0)this.encoders[t]=r,this.decoders[t]=i;else{var n=1+t;this.builtInEncoders[n]=r,this.builtInDecoders[n]=i}},e.prototype.tryToEncode=function(e,t){for(var r=0;r<this.builtInEncoders.length;r++)if(null!=(i=this.builtInEncoders[r])&&null!=(n=i(e,t)))return new c(-1-r,n);for(r=0;r<this.encoders.length;r++){var i,n;if(null!=(i=this.encoders[r])&&null!=(n=i(e,t)))return new c(r,n)}return e instanceof c?e:null},e.prototype.decode=function(e,t,r){var i=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return i?i(e,t,r):new c(t,e)},e.defaultCodec=new e,e}(),m=("undefined"==typeof process||"never"!==(null===(p=null===process||void 0===process?void 0:process.env)||void 0===p?void 0:p.TEXT_ENCODING))&&"undefined"!=typeof TextEncoder&&"undefined"!=typeof TextDecoder;function g(e){for(var t=e.length,r=0,i=0;i<t;){var n=e.charCodeAt(i++);if(4294967168&n)if(4294965248&n){if(n>=55296&&n<=56319&&i<t){var o=e.charCodeAt(i);56320==(64512&o)&&(++i,n=((1023&n)<<10)+(1023&o)+65536)}r+=4294901760&n?4:3}else r+=2;else r++}return r}var v=m?new TextEncoder:void 0,b=m?"undefined"!=typeof process&&"force"!==(null===(u=null===process||void 0===process?void 0:process.env)||void 0===u?void 0:u.TEXT_ENCODING)?200:0:_,k=(null==v?void 0:v.encodeInto)?function(e,t,r){v.encodeInto(e,t.subarray(r))}:function(e,t,r){t.set(v.encode(e),r)};function E(e,t,r){for(var i=t,n=i+r,o=[],s="";i<n;){var c=e[i++];if(128&c)if(192==(224&c)){var a=63&e[i++];o.push((31&c)<<6|a)}else if(224==(240&c)){a=63&e[i++];var h=63&e[i++];o.push((31&c)<<12|a<<6|h)}else if(240==(248&c)){var _=(7&c)<<18|(a=63&e[i++])<<12|(h=63&e[i++])<<6|63&e[i++];_>65535&&(_-=65536,o.push(_>>>10&1023|55296),_=56320|1023&_),o.push(_)}else o.push(c);else o.push(c);o.length>=4096&&(s+=String.fromCharCode.apply(String,o),o.length=0)}return o.length>0&&(s+=String.fromCharCode.apply(String,o)),s}var A=m?new TextDecoder:null,U=m?"undefined"!=typeof process&&"force"!==(null===(f=null===process||void 0===process?void 0:process.env)||void 0===f?void 0:f.TEXT_DECODER)?200:0:_;function S(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer?new Uint8Array(e):Uint8Array.from(e)}var x=function(){function e(e,t){void 0===e&&(e=16),void 0===t&&(t=16),this.maxKeyLength=e,this.maxLengthPerKey=t,this.hit=0,this.miss=0,this.caches=[];for(var r=0;r<this.maxKeyLength;r++)this.caches.push([])}return e.prototype.canBeCached=function(e){return e>0&&e<=this.maxKeyLength},e.prototype.find=function(e,t,r){e:for(var i=0,n=this.caches[r-1];i<n.length;i++){for(var o=n[i],s=o.bytes,c=0;c<r;c++)if(s[c]!==e[t+c])continue e;return o.str}return null},e.prototype.store=function(e,t){var r=this.caches[e.length-1],i={bytes:e,str:t};r.length>=this.maxLengthPerKey?r[Math.random()*r.length|0]=i:r.push(i)},e.prototype.decode=function(e,t,r){var i=this.find(e,t,r);if(null!=i)return this.hit++,i;this.miss++;var n=E(e,t,r),o=Uint8Array.prototype.slice.call(e,t,t+r);return this.store(o,n),n},e}(),j=function(e,t){var r,i,n,o,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,i&&(n=2&o[0]?i.return:o[0]?i.throw||((n=i.return)&&n.call(i),0):i.next)&&!(n=n.call(i,o[1])).done)return n;switch(i=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((n=(n=s.trys).length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){s.label=o[1];break}if(6===o[0]&&s.label<n[1]){s.label=n[1],n=o;break}if(n&&s.label<n[2]){s.label=n[2],s.ops.push(o);break}n[2]&&s.ops.pop(),s.trys.pop();continue}o=t.call(e,s)}catch(e){o=[6,e],i=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}},O=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(r){t[r]=e[r]&&function(t){return new Promise((function(i,n){!function(e,t,r,i){Promise.resolve(i).then((function(t){e({value:t,done:r})}),t)}(i,n,(t=e[r](t)).done,t.value)}))}}},C=function(e){return this instanceof C?(this.v=e,this):new C(e)},T=new DataView(new ArrayBuffer(0)),P=new Uint8Array(T.buffer),D=function(){try{T.getInt8(0)}catch(e){return e.constructor}throw new Error("never reached")}(),M=new D("Insufficient data"),W=new x,I=function(){function e(e,t,r,i,n,o,s,c){void 0===e&&(e=w.defaultCodec),void 0===t&&(t=void 0),void 0===r&&(r=_),void 0===i&&(i=_),void 0===n&&(n=_),void 0===o&&(o=_),void 0===s&&(s=_),void 0===c&&(c=W),this.extensionCodec=e,this.context=t,this.maxStrLength=r,this.maxBinLength=i,this.maxArrayLength=n,this.maxMapLength=o,this.maxExtLength=s,this.keyDecoder=c,this.totalPos=0,this.pos=0,this.view=T,this.bytes=P,this.headByte=-1,this.stack=[]}return e.prototype.reinitializeState=function(){this.totalPos=0,this.headByte=-1,this.stack.length=0},e.prototype.setBuffer=function(e){this.bytes=S(e),this.view=function(e){if(e instanceof ArrayBuffer)return new DataView(e);var t=S(e);return new DataView(t.buffer,t.byteOffset,t.byteLength)}(this.bytes),this.pos=0},e.prototype.appendBuffer=function(e){if(-1!==this.headByte||this.hasRemaining(1)){var t=this.bytes.subarray(this.pos),r=S(e),i=new Uint8Array(t.length+r.length);i.set(t),i.set(r,t.length),this.setBuffer(i)}else this.setBuffer(e)},e.prototype.hasRemaining=function(e){return this.view.byteLength-this.pos>=e},e.prototype.createExtraByteError=function(e){var t=this.view,r=this.pos;return new RangeError("Extra ".concat(t.byteLength-r," of ").concat(t.byteLength," byte(s) found at buffer[").concat(e,"]"))},e.prototype.decode=function(e){this.reinitializeState(),this.setBuffer(e);var t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t},e.prototype.decodeMulti=function(e){return j(this,(function(t){switch(t.label){case 0:this.reinitializeState(),this.setBuffer(e),t.label=1;case 1:return this.hasRemaining(1)?[4,this.doDecodeSync()]:[3,3];case 2:return t.sent(),[3,1];case 3:return[2]}}))},e.prototype.decodeAsync=function(e){var t,r,i,n,s,c,a,h;return s=this,c=void 0,h=function(){var s,c,a,h,_,l,d,p;return j(this,(function(u){switch(u.label){case 0:s=!1,u.label=1;case 1:u.trys.push([1,6,7,12]),t=O(e),u.label=2;case 2:return[4,t.next()];case 3:if((r=u.sent()).done)return[3,5];if(a=r.value,s)throw this.createExtraByteError(this.totalPos);this.appendBuffer(a);try{c=this.doDecodeSync(),s=!0}catch(e){if(!(e instanceof D))throw e}this.totalPos+=this.pos,u.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return h=u.sent(),i={error:h},[3,12];case 7:return u.trys.push([7,,10,11]),r&&!r.done&&(n=t.return)?[4,n.call(t)]:[3,9];case 8:u.sent(),u.label=9;case 9:return[3,11];case 10:if(i)throw i.error;return[7];case 11:return[7];case 12:if(s){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return[2,c]}throw l=(_=this).headByte,d=_.pos,p=_.totalPos,new RangeError("Insufficient data in parsing ".concat(o(l)," at ").concat(p," (").concat(d," in the current buffer)"))}}))},new((a=void 0)||(a=Promise))((function(e,t){function r(e){try{n(h.next(e))}catch(e){t(e)}}function i(e){try{n(h.throw(e))}catch(e){t(e)}}function n(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a((function(e){e(n)}))).then(r,i)}n((h=h.apply(s,c||[])).next())}))},e.prototype.decodeArrayStream=function(e){return this.decodeMultiAsync(e,!0)},e.prototype.decodeStream=function(e){return this.decodeMultiAsync(e,!1)},e.prototype.decodeMultiAsync=function(e,t){return function(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,n=r.apply(e,t||[]),o=[];return i={},s("next"),s("throw"),s("return"),i[Symbol.asyncIterator]=function(){return this},i;function s(e){n[e]&&(i[e]=function(t){return new Promise((function(r,i){o.push([e,t,r,i])>1||c(e,t)}))})}function c(e,t){try{(r=n[e](t)).value instanceof C?Promise.resolve(r.value.v).then(a,h):_(o[0][2],r)}catch(e){_(o[0][3],e)}var r}function a(e){c("next",e)}function h(e){c("throw",e)}function _(e,t){e(t),o.shift(),o.length&&c(o[0][0],o[0][1])}}(this,arguments,(function(){var r,i,n,o,s,c,a,h,_;return j(this,(function(l){switch(l.label){case 0:r=t,i=-1,l.label=1;case 1:l.trys.push([1,13,14,19]),n=O(e),l.label=2;case 2:return[4,C(n.next())];case 3:if((o=l.sent()).done)return[3,12];if(s=o.value,t&&0===i)throw this.createExtraByteError(this.totalPos);this.appendBuffer(s),r&&(i=this.readArraySize(),r=!1,this.complete()),l.label=4;case 4:l.trys.push([4,9,,10]),l.label=5;case 5:return[4,C(this.doDecodeSync())];case 6:return[4,l.sent()];case 7:return l.sent(),0==--i?[3,8]:[3,5];case 8:return[3,10];case 9:if(!((c=l.sent())instanceof D))throw c;return[3,10];case 10:this.totalPos+=this.pos,l.label=11;case 11:return[3,2];case 12:return[3,19];case 13:return a=l.sent(),h={error:a},[3,19];case 14:return l.trys.push([14,,17,18]),o&&!o.done&&(_=n.return)?[4,C(_.call(n))]:[3,16];case 15:l.sent(),l.label=16;case 16:return[3,18];case 17:if(h)throw h.error;return[7];case 18:return[7];case 19:return[2]}}))}))},e.prototype.doDecodeSync=function(){e:for(;;){var e=this.readHeadByte(),t=void 0;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){if(0!=(i=e-128)){this.pushMapState(i),this.complete();continue e}t={}}else if(e<160){if(0!=(i=e-144)){this.pushArrayState(i),this.complete();continue e}t=[]}else{var r=e-160;t=this.decodeUtf8String(r,0)}else if(192===e)t=null;else if(194===e)t=!1;else if(195===e)t=!0;else if(202===e)t=this.readF32();else if(203===e)t=this.readF64();else if(204===e)t=this.readU8();else if(205===e)t=this.readU16();else if(206===e)t=this.readU32();else if(207===e)t=this.readU64();else if(208===e)t=this.readI8();else if(209===e)t=this.readI16();else if(210===e)t=this.readI32();else if(211===e)t=this.readI64();else if(217===e)r=this.lookU8(),t=this.decodeUtf8String(r,1);else if(218===e)r=this.lookU16(),t=this.decodeUtf8String(r,2);else if(219===e)r=this.lookU32(),t=this.decodeUtf8String(r,4);else if(220===e){if(0!==(i=this.readU16())){this.pushArrayState(i),this.complete();continue e}t=[]}else if(221===e){if(0!==(i=this.readU32())){this.pushArrayState(i),this.complete();continue e}t=[]}else if(222===e){if(0!==(i=this.readU16())){this.pushMapState(i),this.complete();continue e}t={}}else if(223===e){if(0!==(i=this.readU32())){this.pushMapState(i),this.complete();continue e}t={}}else if(196===e){var i=this.lookU8();t=this.decodeBinary(i,1)}else if(197===e)i=this.lookU16(),t=this.decodeBinary(i,2);else if(198===e)i=this.lookU32(),t=this.decodeBinary(i,4);else if(212===e)t=this.decodeExtension(1,0);else if(213===e)t=this.decodeExtension(2,0);else if(214===e)t=this.decodeExtension(4,0);else if(215===e)t=this.decodeExtension(8,0);else if(216===e)t=this.decodeExtension(16,0);else if(199===e)i=this.lookU8(),t=this.decodeExtension(i,1);else if(200===e)i=this.lookU16(),t=this.decodeExtension(i,2);else{if(201!==e)throw new h("Unrecognized type byte: ".concat(o(e)));i=this.lookU32(),t=this.decodeExtension(i,4)}this.complete();for(var n=this.stack;n.length>0;){var s=n[n.length-1];if(0===s.type){if(s.array[s.position]=t,s.position++,s.position!==s.size)continue e;n.pop(),t=s.array}else{if(1===s.type){if(void 0,"string"!=(c=typeof t)&&"number"!==c)throw new h("The type of key must be string or number but "+typeof t);if("__proto__"===t)throw new h("The key __proto__ is not allowed");s.key=t,s.type=2;continue e}if(s.map[s.key]=t,s.readCount++,s.readCount!==s.size){s.key=null,s.type=1;continue e}n.pop(),t=s.map}}return t}var c},e.prototype.readHeadByte=function(){return-1===this.headByte&&(this.headByte=this.readU8()),this.headByte},e.prototype.complete=function(){this.headByte=-1},e.prototype.readArraySize=function(){var e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:if(e<160)return e-144;throw new h("Unrecognized array type byte: ".concat(o(e)))}},e.prototype.pushMapState=function(e){if(e>this.maxMapLength)throw new h("Max length exceeded: map length (".concat(e,") > maxMapLengthLength (").concat(this.maxMapLength,")"));this.stack.push({type:1,size:e,key:null,readCount:0,map:{}})},e.prototype.pushArrayState=function(e){if(e>this.maxArrayLength)throw new h("Max length exceeded: array length (".concat(e,") > maxArrayLength (").concat(this.maxArrayLength,")"));this.stack.push({type:0,size:e,array:new Array(e),position:0})},e.prototype.decodeUtf8String=function(e,t){var r;if(e>this.maxStrLength)throw new h("Max length exceeded: UTF-8 byte length (".concat(e,") > maxStrLength (").concat(this.maxStrLength,")"));if(this.bytes.byteLength<this.pos+t+e)throw M;var i,n=this.pos+t;return i=this.stateIsMapKey()&&(null===(r=this.keyDecoder)||void 0===r?void 0:r.canBeCached(e))?this.keyDecoder.decode(this.bytes,n,e):e>U?function(e,t,r){var i=e.subarray(t,t+r);return A.decode(i)}(this.bytes,n,e):E(this.bytes,n,e),this.pos+=t+e,i},e.prototype.stateIsMapKey=function(){return this.stack.length>0&&1===this.stack[this.stack.length-1].type},e.prototype.decodeBinary=function(e,t){if(e>this.maxBinLength)throw new h("Max length exceeded: bin length (".concat(e,") > maxBinLength (").concat(this.maxBinLength,")"));if(!this.hasRemaining(e+t))throw M;var r=this.pos+t,i=this.bytes.subarray(r,r+e);return this.pos+=t+e,i},e.prototype.decodeExtension=function(e,t){if(e>this.maxExtLength)throw new h("Max length exceeded: ext length (".concat(e,") > maxExtLength (").concat(this.maxExtLength,")"));var r=this.view.getInt8(this.pos+t),i=this.decodeBinary(e,t+1);return this.extensionCodec.decode(i,r,this.context)},e.prototype.lookU8=function(){return this.view.getUint8(this.pos)},e.prototype.lookU16=function(){return this.view.getUint16(this.pos)},e.prototype.lookU32=function(){return this.view.getUint32(this.pos)},e.prototype.readU8=function(){var e=this.view.getUint8(this.pos);return this.pos++,e},e.prototype.readI8=function(){var e=this.view.getInt8(this.pos);return this.pos++,e},e.prototype.readU16=function(){var e=this.view.getUint16(this.pos);return this.pos+=2,e},e.prototype.readI16=function(){var e=this.view.getInt16(this.pos);return this.pos+=2,e},e.prototype.readU32=function(){var e=this.view.getUint32(this.pos);return this.pos+=4,e},e.prototype.readI32=function(){var e=this.view.getInt32(this.pos);return this.pos+=4,e},e.prototype.readU64=function(){var e,t,r=(e=this.view,t=this.pos,4294967296*e.getUint32(t)+e.getUint32(t+4));return this.pos+=8,r},e.prototype.readI64=function(){var e=d(this.view,this.pos);return this.pos+=8,e},e.prototype.readF32=function(){var e=this.view.getFloat32(this.pos);return this.pos+=4,e},e.prototype.readF64=function(){var e=this.view.getFloat64(this.pos);return this.pos+=8,e},e}(),L={};function B(e,t){return void 0===t&&(t=L),new I(t.extensionCodec,t.context,t.maxStrLength,t.maxBinLength,t.maxArrayLength,t.maxMapLength,t.maxExtLength).decodeMulti(e)}var $=function(){function e(e,t,r,i,n,o,s,c){void 0===e&&(e=w.defaultCodec),void 0===t&&(t=void 0),void 0===r&&(r=100),void 0===i&&(i=2048),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===s&&(s=!1),void 0===c&&(c=!1),this.extensionCodec=e,this.context=t,this.maxDepth=r,this.initialBufferSize=i,this.sortKeys=n,this.forceFloat32=o,this.ignoreUndefined=s,this.forceIntegerToFloat=c,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}return e.prototype.reinitializeState=function(){this.pos=0},e.prototype.encodeSharedRef=function(e){return this.reinitializeState(),this.doEncode(e,1),this.bytes.subarray(0,this.pos)},e.prototype.encode=function(e){return this.reinitializeState(),this.doEncode(e,1),this.bytes.slice(0,this.pos)},e.prototype.doEncode=function(e,t){if(t>this.maxDepth)throw new Error("Too deep objects in depth ".concat(t));null==e?this.encodeNil():"boolean"==typeof e?this.encodeBoolean(e):"number"==typeof e?this.encodeNumber(e):"string"==typeof e?this.encodeString(e):this.encodeObject(e,t)},e.prototype.ensureBufferSizeToWrite=function(e){var t=this.pos+e;this.view.byteLength<t&&this.resizeBuffer(2*t)},e.prototype.resizeBuffer=function(e){var t=new ArrayBuffer(e),r=new Uint8Array(t),i=new DataView(t);r.set(this.bytes),this.view=i,this.bytes=r},e.prototype.encodeNil=function(){this.writeU8(192)},e.prototype.encodeBoolean=function(e){!1===e?this.writeU8(194):this.writeU8(195)},e.prototype.encodeNumber=function(e){Number.isSafeInteger(e)&&!this.forceIntegerToFloat?e>=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):(this.writeU8(211),this.writeI64(e)):this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))},e.prototype.writeStringHeader=function(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else{if(!(e<4294967296))throw new Error("Too long string: ".concat(e," bytes in UTF-8"));this.writeU8(219),this.writeU32(e)}},e.prototype.encodeString=function(e){if(e.length>b){var t=g(e);this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),k(e,this.bytes,this.pos),this.pos+=t}else t=g(e),this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),function(e,t,r){for(var i=e.length,n=r,o=0;o<i;){var s=e.charCodeAt(o++);if(4294967168&s){if(4294965248&s){if(s>=55296&&s<=56319&&o<i){var c=e.charCodeAt(o);56320==(64512&c)&&(++o,s=((1023&s)<<10)+(1023&c)+65536)}4294901760&s?(t[n++]=s>>18&7|240,t[n++]=s>>12&63|128,t[n++]=s>>6&63|128):(t[n++]=s>>12&15|224,t[n++]=s>>6&63|128)}else t[n++]=s>>6&31|192;t[n++]=63&s|128}else t[n++]=s}}(e,this.bytes,this.pos),this.pos+=t},e.prototype.encodeObject=function(e,t){var r=this.extensionCodec.tryToEncode(e,this.context);if(null!=r)this.encodeExtension(r);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else{if("object"!=typeof e)throw new Error("Unrecognized object: ".concat(Object.prototype.toString.apply(e)));this.encodeMap(e,t)}},e.prototype.encodeBinary=function(e){var t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else{if(!(t<4294967296))throw new Error("Too large binary: ".concat(t));this.writeU8(198),this.writeU32(t)}var r=S(e);this.writeU8a(r)},e.prototype.encodeArray=function(e,t){var r=e.length;if(r<16)this.writeU8(144+r);else if(r<65536)this.writeU8(220),this.writeU16(r);else{if(!(r<4294967296))throw new Error("Too large array: ".concat(r));this.writeU8(221),this.writeU32(r)}for(var i=0,n=e;i<n.length;i++){var o=n[i];this.doEncode(o,t+1)}},e.prototype.countWithoutUndefined=function(e,t){for(var r=0,i=0,n=t;i<n.length;i++)void 0!==e[n[i]]&&r++;return r},e.prototype.encodeMap=function(e,t){var r=Object.keys(e);this.sortKeys&&r.sort();var i=this.ignoreUndefined?this.countWithoutUndefined(e,r):r.length;if(i<16)this.writeU8(128+i);else if(i<65536)this.writeU8(222),this.writeU16(i);else{if(!(i<4294967296))throw new Error("Too large map object: ".concat(i));this.writeU8(223),this.writeU32(i)}for(var n=0,o=r;n<o.length;n++){var s=o[n],c=e[s];this.ignoreUndefined&&void 0===c||(this.encodeString(s),this.doEncode(c,t+1))}},e.prototype.encodeExtension=function(e){var t=e.data.length;if(1===t)this.writeU8(212);else if(2===t)this.writeU8(213);else if(4===t)this.writeU8(214);else if(8===t)this.writeU8(215);else if(16===t)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else{if(!(t<4294967296))throw new Error("Too large extension object: ".concat(t));this.writeU8(201),this.writeU32(t)}this.writeI8(e.type),this.writeU8a(e.data)},e.prototype.writeU8=function(e){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,e),this.pos++},e.prototype.writeU8a=function(e){var t=e.length;this.ensureBufferSizeToWrite(t),this.bytes.set(e,this.pos),this.pos+=t},e.prototype.writeI8=function(e){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,e),this.pos++},e.prototype.writeU16=function(e){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,e),this.pos+=2},e.prototype.writeI16=function(e){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,e),this.pos+=2},e.prototype.writeU32=function(e){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,e),this.pos+=4},e.prototype.writeI32=function(e){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,e),this.pos+=4},e.prototype.writeF32=function(e){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,e),this.pos+=4},e.prototype.writeF64=function(e){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,e),this.pos+=8},e.prototype.writeU64=function(e){this.ensureBufferSizeToWrite(8),function(e,t,r){var i=r/4294967296,n=r;e.setUint32(t,i),e.setUint32(t+4,n)}(this.view,this.pos,e),this.pos+=8},e.prototype.writeI64=function(e){this.ensureBufferSizeToWrite(8),l(this.view,this.pos,e),this.pos+=8},e}(),R={};function q(e,t){return void 0===t&&(t=R),new $(t.extensionCodec,t.context,t.maxDepth,t.initialBufferSize,t.sortKeys,t.forceFloat32,t.ignoreUndefined,t.forceIntegerToFloat).encodeSharedRef(e)}const F="0.20.0",K=512e3,z=Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array)).constructor;function N(e,t){const r=new Uint8Array(e.byteLength+t.byteLength);return r.set(new Uint8Array(e),0),r.set(new Uint8Array(t),e.byteLength),r.buffer}function G(e,t){if(!t)throw new Error("undefined index");return"string"==typeof t?G(e,t.split(".")):0===t.length?e:G(e[t[0]],t.slice(1))}function H(e,t=null,r=!1){if(e instanceof Object){let t={};for(let i in e)t[i]=H(e[i],i,r);return t}if(e instanceof Array)return e.map(((e,t)=>H(e,null,r)));if("function"==typeof e){if(e.__schema__){const i=JSON.parse(JSON.stringify(e.__schema__));return t&&(i.name=t,e.__schema__.name=t),r&&i.parameters&&i.parameters.properties&&delete i.parameters.properties.context,{type:"function",function:i}}return{type:"function"}}return"number"==typeof e?{type:"number"}:"string"==typeof e?{type:"string"}:"boolean"==typeof e?{type:"boolean"}:null===e?{type:"null"}:{}}class V{constructor(e,t,r,i){this._timeout=e,this._callback=t,this._args=r,this._label=i||"timer",this._task=null,this.started=!1}start(){this.started?this.reset():(this._task=setTimeout((()=>{this._callback.apply(this,this._args)}),1e3*this._timeout),this.started=!0)}clear(){this._task?(clearTimeout(this._task),this._task=null,this.started=!1):console.warn(`Clearing a timer (${this._label}) which is not started`)}reset(){this._task&&clearTimeout(this._task),this._task=setTimeout((()=>{this._callback.apply(this,this._args)}),1e3*this._timeout),this.started=!0}}class J extends i.sw{constructor(e,{client_id:t=null,default_context:r=null,name:n=null,codecs:o=null,method_timeout:s=null,max_message_buffer_size:c=0,debug:a=!1,workspace:h=null,silent:_=!1,app_id:l=null}){if(super(a),this._codecs=o||{},(0,i.vA)(t&&"string"==typeof t),(0,i.vA)(t,"client_id is required"),this._client_id=t,this._name=n,this._app_id=l||"*",this._local_workspace=h,this._silent=_,this.default_context=r||{},this._method_annotations=new WeakMap,this._max_message_buffer_size=c,this._chunk_store={},this._method_timeout=s||30,this._services={},this._object_store={services:this._services},e){this.add_service({id:"built-in",type:"built-in",name:`Built-in services for ${this._local_workspace}/${this._client_id}`,config:{require_context:!0,visibility:"public"},ping:this._ping.bind(this),get_service:this.get_local_service.bind(this),message_cache:{create:this._create_message.bind(this),append:this._append_message.bind(this),process:this._process_message.bind(this),remove:this._remove_message.bind(this)}}),this.on("method",this._handle_method.bind(this)),this.on("error",console.error),(0,i.vA)(e.emit_message&&e.on_message),(0,i.vA)(void 0!==e.manager_id,"Connection must have manager_id"),this._emit_message=e.emit_message.bind(e),e.on_message(this._on_message.bind(this)),this._connection=e;const t=async e=>{if(!this._silent&&this._connection.manager_id){console.log("Connection established, reporting services...");const e=await this.get_manager_service(10,"camel");for(let t of Object.values(this._services)){const r=this._extract_service_info(t);await e.registerService(r)}}else console.log("Connection established",e);this._fire("connected",e)};e.on_connected(t),t()}else this._emit_message=function(){console.log("No connection to emit message")}}register_codec(e){if(!e.name||!e.encoder&&!e.decoder)throw new Error("Invalid codec format, please make sure you provide a name, type, encoder and decoder.");if(e.type)for(let t of Object.keys(this._codecs))this._codecs[t].type!==e.type&&t!==e.name||(delete this._codecs[t],console.warn("Remove duplicated codec: "+t));this._codecs[e.name]=e}async _ping(e,t){return(0,i.vA)("ping"==e),"pong"}async ping(e,t){let r=this._generate_remote_method({_rtarget:e,_rmethod:"services.built-in.ping",_rpromise:!0,_rdoc:"Ping a remote client"});(0,i.vA)("pong"==await r("ping",t))}_create_message(e,t,r,i){if(t){if(!this._object_store[e])throw new Error(`session does not exist anymore: ${e}`);this._object_store[e].timer.reset()}if(this._object_store.message_cache||(this._object_store.message_cache={}),!r&&this._object_store.message_cache[e])throw new Error(`Message with the same key (${e}) already exists in the cache store, please use overwrite=true or remove it first.`);this._object_store.message_cache[e]=[]}_append_message(e,t,r,n){if(r){if(!this._object_store[e])throw new Error(`session does not exist anymore: ${e}`);this._object_store[e].timer.reset()}const o=this._object_store.message_cache;if(!o[e])throw new Error(`Message with key ${e} does not exists.`);(0,i.vA)(t instanceof z),o[e].push(t)}_remove_message(e,t){const r=this._object_store.message_cache;if(!r[e])throw new Error(`Message with key ${e} does not exists.`);delete r[e]}_process_message(e,t,r){if(t){if(!this._object_store[e])throw new Error(`session does not exist anymore: ${e}`);this._object_store[e].timer.reset()}const n=this._object_store.message_cache;if((0,i.vA)(!!r,"Context is required"),!n[e])throw new Error(`Message with key ${e} does not exists.`);var o,s,c,a;n[e]=(c=(s=(o=n[e]).map((function(e){return e.byteLength}))).reduce((function(e,t){return e+t}),0),a=new Uint8Array(c),s.reduce((function(e,t,r){return a.set(new Uint8Array(o[r]),e),e+t}),0),a.buffer),console.debug(`Processing message ${e} (bytes=${n[e].byteLength})`);let h=B(n[e]);const{done:_,value:l}=h.next(),d=l;if(Object.assign(d,{from:r.from,to:r.to,user:r.user}),d.ctx=JSON.parse(JSON.stringify(d)),Object.assign(d.ctx,this.default_context),!_){let e=h.next();Object.assign(d,e.value)}this._fire(d.type,d),console.debug(this._client_id,`Processed message ${e} (bytes=${n[e].byteLength})`),delete n[e]}_on_message(e){if("string"==typeof e){const t=JSON.parse(e);this._fire(t.type,t)}else if(e instanceof ArrayBuffer){let t=B(e);const{done:r,value:i}=t.next(),n=i;if(n.ctx=JSON.parse(JSON.stringify(n)),Object.assign(n.ctx,this.default_context),!r){let e=t.next();Object.assign(n,e.value)}this._fire(n.type,n)}else{if("object"!=typeof e)throw new Error("Invalid message format");this._fire(e.type,e)}}reset(){this._event_handlers={},this._services={}}async disconnect(){this._fire("disconnected"),await this._connection.disconnect()}async get_manager_service(e,t=null){return(0,i.vA)(this._connection.manager_id,"Manager id is not set"),await this.get_remote_service(`*/${this._connection.manager_id}:default`,e,t)}get_all_local_services(){return this._services}get_local_service(e,t){(0,i.vA)(e);const[r,n]=t.to.split("/");(0,i.vA)(n===this._client_id,"Services can only be accessed locally");const o=this._services[e];if(!o)throw new Error("Service not found: "+e);if(o.config.workspace=t.ws,"public"==o.config.visibility)return o;if(t.ws===r)return o;throw new Error(`Permission denied for getting protected service: ${e}, workspace mismatch: ${r} != ${t.ws}`)}async get_remote_service(e,t,r=null){t=void 0===t?this._method_timeout:t,!e&&this._connection.manager_id?e="*/"+this._connection.manager_id:e.includes(":")||(e=this._client_id+":"+e);const n=e.split(":")[0];let o=e.split(":")[1];if(o.includes("@")){o=o.split("@")[0];const t=e.split("@")[1];this._app_id&&"*"!==this._app_id&&(0,i.vA)(t===this._app_id,`Invalid app id: ${t} != ${this._app_id}`)}(0,i.vA)(n,`Invalid service uri: ${e}`);try{const s=this._generate_remote_method({_rtarget:n,_rmethod:"services.built-in.get_service",_rpromise:!0,_rdoc:"Get a remote service"}),c=await(0,i.fm)(s(o),t,"Timeout Error: Failed to get remote service: "+e);return c.id=`${n}:${o}`,r?(0,i.gX)(c,r):c}catch(t){throw console.warn("Failed to get remote service: "+e,t),t}}_annotate_service_methods(e,t,r,i,n){if("function"==typeof e){let o=t.split(".")[1];this._method_annotations.set(e,{require_context:Array.isArray(r)?r.includes(o):!!r,run_in_executor:i,method_id:"services."+t,visibility:n})}else if(e instanceof Array||e instanceof Object)for(let o of Object.keys(e)){let s=e[o];if("function"==typeof s&&s.__rpc_object__){let t=s.__rpc_object__._rtarget;if(t.includes("/")&&(t=t.split("/")[1]),this._client_id!==t)throw new Error(`Local method not found: ${s.__rpc_object__._rmethod}, client id mismatch ${this._client_id} != ${t}`);e instanceof Array&&(e=e.slice()),e[o]=G(this._object_store,s.__rpc_object__._rmethod),s=e[o]}this._annotate_service_methods(s,t+"."+o,r,i,n)}}add_service(e,t){if(!e||Array.isArray(e))throw new Error("Invalid service object");if(e.constructor===Object)e=Object.assign({},e);else{const t={},r=Object.getOwnPropertyNames(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)));for(let i of r)"constructor"!==i&&("function"==typeof e[i]?t[i]=e[i].bind(e):t[i]=e[i]);e.id=e.id||"default",e=t}(0,i.vA)(e.id&&"string"==typeof e.id,`Service id not found: ${e}`),e.name||(e.name=e.id),e.config||(e.config={}),e.type||(e.type="generic");let r=!1,n=!1;e.config.require_context&&(r=e.config.require_context),e.config.run_in_executor&&(n=!0);const o=e.config.visibility||"protected";if((0,i.vA)(["protected","public"].includes(o)),this._annotate_service_methods(e,e.id,r,n,o),this._services[e.id]){if(!t)throw new Error(`Service already exists: ${e.id}, please specify a different id (not ${e.id}) or overwrite=true`);delete this._services[e.id]}return this._services[e.id]=e,e}_extract_service_info(e){const t=e.config||{};t.workspace=t.workspace||this._local_workspace||this._connection.workspace;const r=H(e,null,t.require_context);return{config:t,id:`${t.workspace}/${this._client_id}:${e.id}`,name:e.name||e.id,description:e.description||"",type:e.type||"generic",docs:e.docs||null,app_id:this._app_id,service_schema:r}}async get_service_schema(e){return H(e,null,e.config.require_context)}async register_service(e,t,r=!0,i=!1){let o;if(i&&e.type)try{o=await this.get_manager_service(10,"camel"),e=function(e,t){function r(e,t,r="root"){for(let i in t)if(!e.hasOwnProperty(i))throw new Error(`Missing key '${i}' in service at path '${r}'`);for(let i in e)if("type"!==i&&!t.hasOwnProperty(i))throw new Error(`Unexpected key '${i}' in service at path '${r}'`)}return r(e,t.definition),function e(t,i,o="root"){if("object"!=typeof t||Array.isArray(t)){if(Array.isArray(t)){if(t.length!==i.length)throw new Error(`Length mismatch at path '${o}'`);t.forEach(((r,s)=>{let c=`${o}[${s}]`;if("object"!=typeof r||Array.isArray(r)){if("function"==typeof r){if(!i.hasOwnProperty(s))throw new Error(`Missing schema for function at index ${s} in path '${c}'`);t[s]=(0,n.G)(r,{name:i[s].name,description:i[s].description||"",parameters:i[s].parameters})}}else e(r,i[s],c)}))}}else{r(t,i,o);for(let r in t){let s=t[r],c=`${o}.${r}`;if("object"!=typeof s||Array.isArray(s)){if("function"==typeof s){if(!i.hasOwnProperty(r))throw new Error(`Missing schema for function '${r}' at path '${c}'`);t[r]=(0,n.G)(s,{name:i[r].name,description:i[r].description||"",parameters:i[r].parameters})}}else e(s,i[r],c)}}}(e,t.definition),e}(e,await o.get_service_type(e.type))}catch(t){throw new Error(`Failed to get service type ${e.type}, error: ${t}`)}const s=this.add_service(e,t),c=this._extract_service_info(s);if(r)try{o=o||await this.get_manager_service(10,"camel"),await o.registerService(c)}catch(e){throw new Error(`Failed to notify workspace manager: ${e}`)}return c}async unregister_service(e,t){if(e instanceof Object&&(e=e.id),!this._services[e])throw new Error(`Service not found: ${e}`);const r=this._services[e];if(delete this._services[e],t){const e=await this.get_manager_service(10,"camel");await e.registerService(r.id)}}_ndarray(e,t,r){const n=(0,i.D4)(e);if(r&&r!==n)throw"dtype doesn't match the type of the array: "+n+" != "+r;return t=t||[e.length],{_rtype:"ndarray",_rvalue:e.buffer,_rshape:t,_rdtype:n}}_encode_callback(e,t,r,i,n,o){let s=`${r}.${e}`,c={_rtype:"method",_rtarget:o?`${o}/${this._client_id}`:this._client_id,_rmethod:s,_rpromise:!1};const a=this;return[c,function(){try{t.apply(null,Array.prototype.slice.call(arguments))}catch(e){console.error("Error in callback:",s,e)}finally{i&&a._object_store[r]&&delete a._object_store[r],n&&n.started&&n.clear()}}]}async _encode_promise(e,t,r,n,o,s){let c=this._get_session_store(r,!0);(0,i.vA)(c,`Failed to create session store ${r} due to invalid parent`);let a={};return o&&t&&this._method_timeout?(a.heartbeat=await this._encode(o.reset.bind(o),r,s),a.interval=this._method_timeout/2,c.timer=o):o=null,[a.resolve,c.resolve]=this._encode_callback("resolve",e,r,n,o,s),[a.reject,c.reject]=this._encode_callback("reject",t,r,n,o,s),a}async _send_chunks(e,t,r){let n=await this.get_remote_service(`${t}:built-in`);(0,i.vA)(n.message_cache,"Remote client does not support message caching for long message.");let o=n.message_cache,s=r||(0,i.bq)();await o.create(s,!!r);let c=e.length,a=Math.ceil(c/K);for(let t=0;t<a;t++){let i=t*K;await o.append(s,e.slice(i,i+K),!!r),console.log(`Sending chunk ${t+1}/${a} (${c} bytes)`)}await o.process(s,!!r)}emit(e,t){if((0,i.vA)("object"==typeof e&&e.type,"Invalid message, must be an object with a `type` fields."),!e.to)return void this._fire(e.type,e);let r=q(e);if(t){const e=q(t);r=new Uint8Array([...r,...e])}if(r.length<=513024)return this._emit_message(r);throw new Error("Message is too large to send in one go.")}_generate_remote_method(e,t,r,n,o){let s=e._rtarget;n&&!s.includes("/")&&(n!==s&&(s=n+"/"+s),e._rtarget=s);let c=e._rmethod,a=e._rpromise;const h=this;function _(){return new Promise((async(e,n)=>{let _=(0,i.bq)();r&&(_=r+"."+_);let l=h._get_session_store(_,!0);if(!l)return void n(new Error(`Runtime Error: Failed to get session store ${_}`));l.target_id=s;const d=await h._encode(Array.prototype.slice.call(arguments),_,o),p=d.length,u=p>0&&"object"==typeof d[p-1]&&null!==d[p-1]&&d[p-1]._rkwargs;let f;u&&delete d[p-1]._rkwargs,f=h._local_workspace?h._local_workspace+"/"+h._client_id:h._client_id;let y={type:"method",from:f,to:s,method:c},w={};d&&(w.args=d),u&&(w.with_kwargs=u),t&&(y.parent=t);let m=null;if(a){y.session=_;let t=`${s}:${c}`;m=new V(h._method_timeout,n,[`Method call time out: ${t}`],t);let r=!0;for(let e of d)if("object"==typeof e&&!0===e._rintf){r=!1;break}w.promise=await h._encode_promise(e,n,_,r,m,o)}let g=q(y);if(w){const e=q(w);g=new Uint8Array([...g,...e])}g.length<=513024?h._emit_message(g).then((function(){m&&m.start()})):h._send_chunks(g,s,t).then((function(){m&&m.start()})).catch((function(e){console.error("Failed to send message",e),n(e)}))}))}_.__rpc_object__=e;const l=c.split(".");return _.__name__=l[l.length-1],_.__doc__=e._rdoc||`Remote method: ${c}`,_.__schema__=e._rschema,_}get_client_info(){const e=[];for(let t of Object.values(this._services))e.push(this._extract_service_info(t));return{id:this._client_id,services:e}}async _handle_method(e){let t=null;try{(0,i.vA)(e.method&&e.ctx&&e.from);const r=e.from+":"+e.method,n=e.from.split("/")[0],o=e.from.split("/")[1];let s;e.to=e.to.includes("/")?e.to:n+"/"+e.to,e.ctx.to=e.to,this._local_workspace?(this._local_workspace&&"*"!==this._local_workspace&&(0,i.vA)(e.to.split("/")[0]===this._local_workspace,"Workspace mismatch: "+e.to.split("/")[0]+" != "+this._local_workspace),s=this._local_workspace):s=e.to.split("/")[0];const c=e.parent;let a,h,_,l;if(e.promise){const d=await this._decode(e.promise,e.session,c,n,s);if(a=d.resolve,h=d.reject,d.heartbeat&&d.interval){async function p(){try{console.log("Reset heartbeat timer: "+e.method),await d.heartbeat()}catch(e){console.error(e)}}t=setInterval(p,1e3*d.interval)}}try{_=G(this._object_store,e.method)}catch(u){throw console.debug("Failed to find method",r,this._client_id,u),new Error(`Method not found: ${r} at ${this._client_id}`)}if((0,i.vA)(_&&"function"==typeof _,"Invalid method: "+r),this._method_annotations.has(_)){if("protected"===this._method_annotations.get(_).visibility&&s!==n&&("*"!==n||o!==this._connection.manager_id))throw new Error("Permission denied for invoking protected method "+r+", workspace mismatch: "+s+" != "+n)}else{let f=this._object_store[e.method.split(".")[0]].target_id;if(s===n&&f&&-1===f.indexOf("/")&&(f=s+"/"+f),f!==e.from)throw new Error("Access denied for method call ("+r+") from "+e.from+" to target "+f)}if(c&&(0,i.vA)(null!==this._get_session_store(c,!0),"Parent session was closed: "+c),l=e.args?await this._decode(e.args,e.session,null,n,null):[],this._method_annotations.has(_)&&this._method_annotations.get(_).require_context){if(l.length+1<_.length)for(let y=l.length;y<_.length-1;y++)l.push(void 0);l.push(e.ctx),(0,i.vA)(l.length===_.length,`Runtime Error: Invalid number of arguments for method ${r}, expected ${_.length} but got ${l.length}`)}if(e.promise){const w=_.apply(null,l);w instanceof Promise?w.then((e=>{a(e),clearInterval(t)})).catch((e=>{h(e),clearInterval(t)})):(a(w),clearInterval(t))}else _.apply(null,l),clearInterval(t)}catch(m){console.error("Error during calling method: ",m),clearInterval(t)}}encode(e,t){return this._encode(e,t)}_get_session_store(e,t){let r=this._object_store;const i=e.split(".");if(t){const e=i.length-1;for(let t of i.slice(0,e)){if(!r[t])return null;r=r[t]}return r[i[e]]||(r[i[e]]={}),r[i[e]]}for(let e of i){if(!r[e])return null;r=r[e]}return r}async _encode(e,t,r){const n=typeof e;if("number"===n||"string"===n||"boolean"===n||null==e||e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return{_rtype:"memoryview",_rvalue:new Uint8Array(e)};if(e.__rpc_object__)return e.__rpc_object__;let o;if(e.constructor instanceof Object&&e._rtype){const c=e._rtype;return delete e._rtype,o=await this._encode(e,t,r),o._rtype=c,o}if("function"==typeof e){if(this._method_annotations.has(e)){let a=this._method_annotations.get(e);o={_rtype:"method",_rtarget:this._client_id,_rmethod:a.method_id,_rpromise:!0}}else{let h;(0,i.vA)("string"==typeof t),h=e.__name__?`${(0,i.bq)()}-${e.__name__}`:(0,i.bq)(),o={_rtype:"method",_rtarget:this._client_id,_rmethod:`${t}.${h}`,_rpromise:!0};let _=this._get_session_store(t,!0);(0,i.vA)(null!==_,`Failed to create session store ${t} due to invalid parent`),_[h]=e}if(o._rdoc=e.__doc__,!o._rdoc)try{const l=function(e){const t=e.toString(),r=t.match(/function\s*(\w*)/),i=r&&r[1]||"",n=t.match(/\(([^)]*)\)/);let o="";n&&(o=n[1].split(",").map((e=>e.replace(/\/\*.*?\*\//g,"").replace(/\/\/.*$/g,""))).filter((e=>e.trim().length>0)).map((e=>e.trim())).join(", "));let s=t.match(/\)\s*\{\s*\/\*([\s\S]*?)\*\//);const c=s&&s[1].trim()||"";s=t.match(/\)\s*\{\s*(\/\/[\s\S]*?)\n\s*[^\s\/]/);const a=s&&s[1].split("\n").map((e=>e.replace(/^\/\/\s*/,"").trim())).join("\n")||"",h=c||a;return i&&o.length>0&&{name:i,sig:o,doc:h}}(e);l&&!o._rdoc&&(o._rdoc=`${l.doc}`)}catch(d){console.error("Failed to extract function docstring:",e)}return o._rschema=e.__schema__,o}const s=Array.isArray(e);for(let p of Object.keys(this._codecs)){const u=this._codecs[p];if(u.encoder&&e instanceof u.type){let f=await Promise.resolve(u.encoder(e));if(f&&!f._rtype&&(f._rtype=u.name),"object"==typeof f){const y=f._rtype;delete f._rtype,f=await this._encode(f,t,r),f._rtype=y}return o=f,o}}if("undefined"!=typeof tf&&tf.Tensor&&e instanceof tf.Tensor){const w=e.dataSync();o={_rtype:"ndarray",_rvalue:new Uint8Array(w.buffer),_rshape:e.shape,_rdtype:e.dtype}}else if("undefined"!=typeof nj&&nj.NdArray&&e instanceof nj.NdArray){const m=(0,i.D4)(e.selection.data);o={_rtype:"ndarray",_rvalue:new Uint8Array(e.selection.data.buffer),_rshape:e.shape,_rdtype:m}}else if(e instanceof Error)console.error(e),o={_rtype:"error",_rvalue:e.toString(),_rtrace:e.stack};else if(e!==Object(e)||e instanceof Boolean||e instanceof String||e instanceof Date||e instanceof RegExp||e instanceof ImageData||"undefined"!=typeof FileList&&e instanceof FileList||"undefined"!=typeof FileSystemDirectoryHandle&&e instanceof FileSystemDirectoryHandle||"undefined"!=typeof FileSystemFileHandle&&e instanceof FileSystemFileHandle||"undefined"!=typeof FileSystemHandle&&e instanceof FileSystemHandle||"undefined"!=typeof FileSystemWritableFileStream&&e instanceof FileSystemWritableFileStream)o=e;else if(e instanceof Blob){let g=0;async function v(t){let r;r=t?e.slice(g,g+t):e.slice(g);const i=new Uint8Array(await r.arrayBuffer());return g+=i.byteLength,i}function b(e){g=e}o={_rtype:"iostream",_rnative:"js:blob",type:e.type,name:e.name,size:e.size,path:e._path||e.webkitRelativePath,read:await this._encode(v,t,r),seek:await this._encode(b,t,r)}}else if(e instanceof z){const k=(0,i.D4)(e);o={_rtype:"typedarray",_rvalue:new Uint8Array(e.buffer),_rdtype:k}}else if(e instanceof DataView)o={_rtype:"memoryview",_rvalue:new Uint8Array(e.buffer)};else if(e instanceof Set)o={_rtype:"set",_rvalue:await this._encode(Array.from(e),t,r)};else if(e instanceof Map)o={_rtype:"orderedmap",_rvalue:await this._encode(Array.from(e),t,r)};else{if(!(e.constructor instanceof Object||Array.isArray(e)))throw`hypha-rpc: Unsupported data type: ${e}, you can register a custom codec to encode/decode the object.`;{o=s?[]:{};const E=Object.keys(e);for(let A of E)o[A]=await this._encode(e[A],t,r)}}if(!o)throw new Error("Failed to encode object");return o}async decode(e){return await this._decode(e)}async _decode(e,t,r,n,o){if(!e)return e;let s;if(e._rtype)if(this._codecs[e._rtype]&&this._codecs[e._rtype].decoder){const i=e._rtype;delete e._rtype,(e=await this._decode(e,t,r,n,o))._rtype=i,s=await Promise.resolve(this._codecs[e._rtype].decoder(e))}else if("method"===e._rtype)s=this._generate_remote_method(e,t,r,n,o);else if("ndarray"===e._rtype)if("undefined"!=typeof nj&&nj.array)Array.isArray(e._rvalue)&&(e._rvalue=e._rvalue.reduce(N)),s=nj.array(new Uint8(e._rvalue),e._rdtype).reshape(e._rshape);else if("undefined"!=typeof tf&&tf.Tensor){Array.isArray(e._rvalue)&&(e._rvalue=e._rvalue.reduce(N));const t=i.RR[e._rdtype];s=tf.tensor(new t(e._rvalue),e._rshape,e._rdtype)}else s=e;else if("error"===e._rtype)s=new Error("RemoteError: "+e._rvalue+"\n"+(e._rtrace||""));else if("typedarray"===e._rtype){const t=i.RR[e._rdtype];if(!t)throw new Error("unsupported dtype: "+e._rdtype);s=new t(e._rvalue.buffer.slice(e._rvalue.byteOffset,e._rvalue.byteOffset+e._rvalue.byteLength))}else if("memoryview"===e._rtype)s=e._rvalue.buffer.slice(e._rvalue.byteOffset,e._rvalue.byteOffset+e._rvalue.byteLength);else if("iostream"===e._rtype){if("js:blob"===e._rnative){const i=await this._generate_remote_method(e.read,t,r,n,o),c=await i();s=new Blob([c],{type:e.type,name:e.name})}else{s={};for(let i of Object.keys(e))i.startsWith("_")||(s[i]=await this._decode(e[i],t,r,n,o))}s.__rpc_object__=e}else if("orderedmap"===e._rtype)s=new Map(await this._decode(e._rvalue,t,r,n,o));else if("set"===e._rtype)s=new Set(await this._decode(e._rvalue,t,r,n,o));else{const i=e._rtype;delete e._rtype,s=await this._decode(e,t,r,n,o),s._rtype=i}else if(e.constructor===Object||Array.isArray(e)){const i=Array.isArray(e);s=i?[]:{};for(let c of Object.keys(e))if(i||e.hasOwnProperty(c)){const i=e[c];s[c]=await this._decode(i,t,r,n,o)}}else s=e;if(void 0===s)throw new Error("Failed to decode object");return s}}},878:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{function randId(){return Math.random().toString(36).substr(2,10)+(new Date).getTime()}function toCamelCase(e){return e.includes("_")?e.replace(/_./g,(e=>e[1].toUpperCase())):e}function toSnakeCase(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}function convertCase(e,t){if("object"!=typeof e||null===e||!t)return e;const r=Array.isArray(e)?[]:{};for(const i in e)if(e.hasOwnProperty(i)){const n=e[i],o=toCamelCase(i),s=toSnakeCase(i);"camel"===t?(r[o]=convertCase(n,t),"function"==typeof n&&(r[o].__name__=o,n.__schema__&&(r[o].__schema__={...n.__schema__},r[o].__schema__.name=o))):"snake"===t?(r[s]=convertCase(n,t),"function"==typeof n&&(r[s].__name__=s,n.__schema__&&(r[s].__schema__={...n.__schema__},r[s].__schema__.name=s))):(t.includes("camel")&&(r[o]=convertCase(n,"camel")),t.includes("snake")&&(r[s]=convertCase(n,"snake")))}return r}__webpack_require__.d(__webpack_exports__,{D4:()=>typedArrayToDtype,RR:()=>dtypeToTypedArray,V0:()=>loadRequirements,bq:()=>randId,fm:()=>waitFor,gX:()=>convertCase,sw:()=>MessageEmitter,vA:()=>assert});const dtypeToTypedArray={int8:Int8Array,int16:Int16Array,int32:Int32Array,uint8:Uint8Array,uint16:Uint16Array,uint32:Uint32Array,float32:Float32Array,float64:Float64Array,array:Array};async function loadRequirementsInWindow(e){function t(e){return new Promise(((t,r)=>{var i=document.createElement("script");i.src=e,i.type="text/javascript",i.onload=t,i.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||t()},i.onerror=r,document.head.appendChild(i)}))}async function r(){for(var e=Array.prototype.slice.call(arguments),r=e.length,i=0;i<r;i++)await t(e[i])}if(e&&(Array.isArray(e)||"string"==typeof e))try{var i;if(e="string"==typeof e?[e]:e,!Array.isArray(e))throw"unsupported requirements definition";for(var n=0;n<e.length;n++)e[n].toLowerCase().endsWith(".css")||e[n].startsWith("css:")?(e[n].startsWith("css:")&&(e[n]=e[n].slice(4)),(i=document.createElement("link")).rel="stylesheet",i.href=e[n],document.head.appendChild(i)):e[n].toLowerCase().endsWith(".mjs")||e[n].startsWith("mjs:")?(e[n].startsWith("mjs:")&&(e[n]=e[n].slice(4)),await import(e[n])):e[n].toLowerCase().endsWith(".js")||e[n].startsWith("js:")?(e[n].startsWith("js:")&&(e[n]=e[n].slice(3)),await r(e[n])):e[n].startsWith("http")?await r(e[n]):e[n].startsWith("cache:")||console.log("Unprocessed requirements url: "+e[n])}catch(t){throw"failed to import required scripts: "+e.toString()}}async function loadRequirementsInWebworker(e){if(e&&(Array.isArray(e)||"string"==typeof e))try{Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++){if(e[t].toLowerCase().endsWith(".css")||e[t].startsWith("css:"))throw"unable to import css in a webworker";e[t].toLowerCase().endsWith(".js")||e[t].startsWith("js:")?(e[t].startsWith("js:")&&(e[t]=e[t].slice(3)),importScripts(e[t])):e[t].startsWith("http")?importScripts(e[t]):e[t].startsWith("cache:")||console.log("Unprocessed requirements url: "+e[t])}}catch(t){throw"failed to import required scripts: "+e.toString()}}function loadRequirements(e){return"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?loadRequirementsInWebworker(e):loadRequirementsInWindow(e)}function normalizeConfig(e){return e.version=e.version||"0.1.0",e.description=e.description||`[TODO: add description for ${e.name} ]`,e.type=e.type||"rpc-window",e.id=e.id||randId(),e.target_origin=e.target_origin||"*",e.allow_execution=e.allow_execution||!1,e=Object.keys(e).reduce(((t,r)=>("function"!=typeof e[r]&&(t[r]=e[r]),t)),{})}const typedArrayToDtypeMapping={Int8Array:"int8",Int16Array:"int16",Int32Array:"int32",Uint8Array:"uint8",Uint16Array:"uint16",Uint32Array:"uint32",Float32Array:"float32",Float64Array:"float64",Array:"array"},typedArrayToDtypeKeys=[];for(const arrType of Object.keys(typedArrayToDtypeMapping))typedArrayToDtypeKeys.push(eval(arrType));function typedArrayToDtype(e){let t=typedArrayToDtypeMapping[e.constructor.name];if(!t){const r=Object.getPrototypeOf(e);for(const e of typedArrayToDtypeKeys)if(r instanceof e){t=typedArrayToDtypeMapping[e.name];break}}return t}function cacheUrlInServiceWorker(e){return new Promise((function(t,r){const i={command:"add",url:e};if(!navigator.serviceWorker||!navigator.serviceWorker.register)return void r("Service worker is not supported.");const n=new MessageChannel;n.port1.onmessage=function(e){e.data&&e.data.error?r(e.data.error):t(e.data&&e.data.result)},navigator.serviceWorker&&navigator.serviceWorker.controller?navigator.serviceWorker.controller.postMessage(i,[n.port2]):r("Service worker controller is not available")}))}async function cacheRequirements(e){e=e||[],Array.isArray(e)||(e=[e]);for(let t of e)t.startsWith("js:")&&(t=t.slice(3)),t.startsWith("css:")&&(t=t.slice(4)),t.startsWith("cache:")&&(t=t.slice(6)),t.startsWith("http")&&await cacheUrlInServiceWorker(t).catch((e=>{console.error(e)}))}function assert(e,t){if(!e)throw new Error(t||"Assertion failed")}function urlJoin(...e){return e.join("/").replace(/[\/]+/g,"/").replace(/^(.+):\//,"$1://").replace(/^file:/,"file:/").replace(/\/(\?|&|#[^!])/g,"$1").replace(/\?/g,"&").replace("&","?")}function waitFor(e,t,r){let i;return Promise.race([e,new Promise(((e,n)=>i=setTimeout((()=>{n(r||"Timeout Error")}),1e3*t)))]).finally((()=>clearTimeout(i)))}class MessageEmitter{constructor(e){this._event_handlers={},this._once_handlers={},this._debug=e}emit(){throw new Error("emit is not implemented")}on(e,t){this._event_handlers[e]||(this._event_handlers[e]=[]),this._event_handlers[e].push(t)}once(e,t){t.___event_run_once=!0,this.on(e,t)}off(e,t){if(e||t){if(e&&!t)this._event_handlers[e]&&(this._event_handlers[e]=[]);else if(this._event_handlers[e]){const r=this._event_handlers[e].indexOf(t);r>=0&&this._event_handlers[e].splice(r,1)}}else this._event_handlers={}}_fire(e,t){if(this._event_handlers[e])for(var r=this._event_handlers[e].length;r--;){const i=this._event_handlers[e][r];try{i(t)}catch(e){console.error(e)}finally{i.___event_run_once&&this._event_handlers[e].splice(r,1)}}else this._debug&&console.warn("unhandled event",e,t)}waitFor(e,t){return new Promise(((r,i)=>{const n=e=>{clearTimeout(o),r(e)};this.once(e,n);const o=setTimeout((()=>{this.off(e,n),i(new Error("Timeout"))}),t)}))}}},287:(e,t,r)=>{r.d(t,{G:()=>n});var i=r(878);function n(e,{schema_type:t="auto",name:r=null,description:n=null,parameters:o=null}){if(!e||"function"!=typeof e)throw Error("func should be a function");return(0,i.vA)("auto"===t,"schema_type should be auto"),(0,i.vA)(r,"name should not be null"),(0,i.vA)(o&&"object"===o.type,"parameters should be an object"),e.__schema__={name:r,description:n,parameters:o||[]},e}},831:(e,t,r)=>{r.d(t,{b:()=>a,e:()=>h});var i=r(164),n=r(878),o=r(287);class s{constructor(e){this._data_channel=e,this._handle_message=null,this._reconnection_token=null,this._handle_disconnected=null,this._handle_connected=()=>{},this.manager_id=null,this._data_channel.onopen=async()=>{this._handle_connected&&this._handle_connected({channel:this._data_channel})},this._data_channel.onmessage=async e=>{let t=e.data;t instanceof Blob&&(t=await t.arrayBuffer()),this._handle_message(t)};const t=this;this._data_channel.onclose=function(){this._handle_disconnected&&this._handle_disconnected("closed"),console.log("websocket closed"),t._data_channel=null}}on_disconnected(e){this._handle_disconnected=e}on_connected(e){this._handle_connected=e}on_message(e){(0,n.vA)(e,"handler is required"),this._handle_message=e}async emit_message(e){(0,n.vA)(this._handle_message,"No handler for message");try{this._data_channel.send(e)}catch(e){throw console.error(`Failed to send data, error: ${e}`),e}}async disconnect(e){this._data_channel=null,console.info(`data channel connection disconnected (${e})`)}}async function c(e){(0,n.vA)(e.channel,"No channel provided"),(0,n.vA)(e.workspace,"No workspace provided");const t=e.channel,r=e.client_id||(0,n.bq)(),o=new s(t);return e.context=e.context||{},e.context.connection_type="webrtc",new i.y(o,{client_id:r,default_context:e.context,name:e.name,method_timeout:e.method_timeout||10,workspace:e.workspace})}async function a(e,t,r){(r=r||{}).peer_id=r.peer_id||(0,n.bq)();const i=new RTCPeerConnection({iceServers:r.ice_servers||[{urls:["stun:stun.l.google.com:19302"]}],sdpSemantics:"unified-plan"});return new Promise((async(s,a)=>{try{i.addEventListener("connectionstatechange",(()=>{"failed"===i.connectionState?(i.close(),a(new Error("WebRTC Connection failed"))):"closed"===i.connectionState?a(new Error("WebRTC Connection closed")):console.log("WebRTC Connection state: ",i.connectionState)}),!1),r.on_init&&(await r.on_init(i),delete r.on_init);let h=i.createDataChannel(r.peer_id,{ordered:!0});h.binaryType="arraybuffer";const _=await i.createOffer();await i.setLocalDescription(_);const l=await e.getService(t),d=await l.offer({sdp:i.localDescription.sdp,type:i.localDescription.type});h.onopen=()=>{r.channel=h,r.workspace=d.workspace,setTimeout((async()=>{const e=await c(r);i.rpc=e,i.getService=(0,o.G)((async function(t){return(0,n.vA)(!t.includes(":"),"WebRTC service name should not contain ':'"),(0,n.vA)(!t.includes("/"),"WebRTC service name should not contain '/'"),await e.get_remote_service(r.workspace+"/"+r.peer_id+":"+t)}),{name:"get_service",description:"Get a remote service via webrtc",parameters:{type:"object",properties:{name:{type:"string",description:"Name of the service"}}}}),i.disconnect=(0,o.G)((async function(){await e.disconnect(),i.close()}),{name:"disconnect",description:"Disconnect from the webrtc connection via webrtc",parameters:{type:"object",properties:{}}}),i.registerCodec=(0,o.G)(e.register_codec,{name:"registerCodec",description:"Register a codec for the webrtc connection",parameters:{type:"object",properties:{codec:{type:"object",description:"Codec to register",properties:{name:{type:"string"},type:{},encoder:{type:"function"},decoder:{type:"function"}}}}}}),s(i)}),500)},h.onclose=()=>a(new Error("Data channel closed")),await i.setRemoteDescription(new RTCSessionDescription({sdp:d.sdp,type:d.type}))}catch(e){a(e)}}))}async function h(e,t,r){const i=(r=r||{visibility:"protected",require_context:!0}).on_init;return delete r.on_init,await e.registerService({id:t,config:r,offer:(t,n)=>async function(e,t,r,i,n){r=r||{};let o=new RTCSessionDescription({sdp:e.sdp,type:e.type}),s=new RTCPeerConnection({iceServers:r.ice_servers||[{urls:["stun:stun.l.google.com:19302"]}],sdpSemantics:"unified-plan"});t&&s.addEventListener("datachannel",(async e=>{const r=e.channel;let i=null;n&&n.user&&(i={user:n.user,ws:n.ws}),(await c({channel:r,client_id:r.label,workspace:t.config.workspace,context:i}))._services=t.rpc._services})),i&&await i(s),await s.setRemoteDescription(o);let a=await s.createAnswer();return await s.setLocalDescription(a),{sdp:s.localDescription.sdp,type:s.localDescription.type,workspace:t.config.workspace}}(t,e,r,i,n)})}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{API_VERSION:()=>_rpc_js__WEBPACK_IMPORTED_MODULE_0__.m,LocalWebSocket:()=>LocalWebSocket,RPC:()=>_rpc_js__WEBPACK_IMPORTED_MODULE_0__.y,connectToServer:()=>connectToServer,getRTCService:()=>_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.b,loadRequirements:()=>_utils__WEBPACK_IMPORTED_MODULE_1__.V0,login:()=>login,registerRTCService:()=>_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.e,schemaFunction:()=>_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G,setupLocalClient:()=>setupLocalClient});var _rpc_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(164),_utils__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(878),_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(287),_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(831);const MAX_RETRY=1e6;class WebsocketRPCConnection{constructor(e,t,r,i,n=null,o=60,s=null){(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(e&&t,"server_url and client_id are required"),this._server_url=e,this._client_id=t,this._workspace=r,this._token=i,this._reconnection_token=n,this._websocket=null,this._handle_message=null,this._handle_connected=null,this._handle_disconnected=null,this._timeout=o,this._WebSocketClass=s||WebSocket,this._closed=!1,this._legacy_auth=null,this.connection_info=null,this._enable_reconnect=!1,this.manager_id=null}on_message(e){(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(e,"handler is required"),this._handle_message=e}on_connected(e){this._handle_connected=e}on_disconnected(e){this._handle_disconnected=e}async _attempt_connection(e,t=!0){return new Promise(((r,i)=>{this._legacy_auth=!1;const n=new this._WebSocketClass(e);n.binaryType="arraybuffer",n.onopen=()=>{console.info("WebSocket connection established"),r(n)},n.onerror=e=>{console.error("WebSocket connection error:",e),i(new Error(`ConnectionAbortedError: ${e}`))},n.onclose=n=>{1003===n.code&&t?(console.info("Received 1003 error, attempting connection with query parameters."),this._legacy_auth=!0,this._attempt_connection_with_query_params(e).then(r).catch(i)):this._handle_disconnected&&this._handle_disconnected(n.reason)}}))}async _attempt_connection_with_query_params(e){const t=[];this._client_id&&t.push(`client_id=${encodeURIComponent(this._client_id)}`),this._workspace&&t.push(`workspace=${encodeURIComponent(this._workspace)}`),this._token&&t.push(`token=${encodeURIComponent(this._token)}`),this._reconnection_token&&t.push(`reconnection_token=${encodeURIComponent(this._reconnection_token)}`);const r=e+(t.length>0?`?${t.join("&")}`:"");return await this._attempt_connection(r,!1)}_establish_connection(){return new Promise(((e,t)=>{this._websocket.onmessage=r=>{const i=r.data,n=JSON.parse(i);if("connection_info"!=n.type){if("error"==n.type){const e="ConnectionAbortedError: "+n.message;return console.error("Failed to connect, "+e),void t(new Error(e))}return console.error("ConnectionAbortedError: Unexpected message received from the server:",i),void t(new Error("ConnectionAbortedError: Unexpected message received from the server"))}this.connection_info=n,this._workspace&&(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(this.connection_info.workspace===this._workspace,`Connected to the wrong workspace: ${this.connection_info.workspace}, expected: ${this._workspace}`),this.connection_info.reconnection_token&&(this._reconnection_token=this.connection_info.reconnection_token),this.manager_id=this.connection_info.manager_id||null,console.log(`Successfully connected to the server, workspace: ${this.connection_info.workspace}, manager_id: ${this.manager_id}`),this.connection_info.announcement&&console.log(`${this.connection_info.announcement}`),e(this.connection_info)}}))}async open(){console.log("Creating a new websocket connection to",this._server_url.split("?")[0]);try{if(this._websocket=await this._attempt_connection(this._server_url),this._legacy_auth)throw new Error("NotImplementedError: Legacy authentication is not supported");const e=JSON.stringify({client_id:this._client_id,workspace:this._workspace,token:this._token,reconnection_token:this._reconnection_token});return this._websocket.send(e),await(0,_utils__WEBPACK_IMPORTED_MODULE_1__.fm)(this._establish_connection(),this._timeout,"Failed to receive the first message from the server"),this._enable_reconnect=!0,this._closed=!1,this._websocket.onmessage=e=>{this._handle_message(e.data)},this._websocket.onclose=this._handle_close.bind(this),this._handle_connected&&this._handle_connected(this.connection_info),this.connection_info}catch(e){throw console.error("Failed to connect to",this._server_url.split("?")[0],e),e}}_handle_close(e){if(!this._closed&&this._websocket&&this._websocket.readyState===WebSocket.CLOSED){if([1e3,1001].includes(e.code))console.info(`Websocket connection closed (code: ${e.code}): ${e.reason}`),this._handle_disconnected&&this._handle_disconnected(e.reason),this._closed=!0;else if(this._enable_reconnect){console.warn("Websocket connection closed unexpectedly (code: %s): %s",e.code,e.reason);let t=0;const r=async()=>{try{console.warn(`Reconnecting to ${this._server_url.split("?")[0]} (attempt #${t})`),await this.open(),console.warn(`Successfully reconnected to server ${this._server_url}`)}catch(e){if(`${e}`.includes("ConnectionAbortedError:"))return void console.warn("Failed to reconnect, connection aborted:",e);if(`${e}`.includes("NotImplementedError:"))return void console.error(`${e}\nIt appears that you are trying to connect to a hypha server that is older than 0.20.0, please upgrade the hypha server or use the websocket client in imjoy-rpc(https://www.npmjs.com/package/imjoy-rpc) instead`);if(await new Promise((e=>setTimeout(e,1e3))),this._websocket&&this._websocket.readyState===WebSocket.CONNECTED)return;t+=1,t<MAX_RETRY?await r():console.error("Failed to reconnect after",MAX_RETRY,"attempts")}};r()}}else this._handle_disconnected&&this._handle_disconnected(e.reason)}async emit_message(e){if(this._closed)throw new Error("Connection is closed");this._websocket&&this._websocket.readyState===WebSocket.OPEN||await this.open();try{this._websocket.send(e)}catch(e){throw console.error(`Failed to send data, error: ${e}`),e}}disconnect(e){this._closed=!0,this._websocket&&this._websocket.readyState===WebSocket.OPEN&&this._websocket.close(1e3,e),console.info(`WebSocket connection disconnected (${e})`)}}function normalizeServerUrl(e){if(!e)throw new Error("server_url is required");return e.startsWith("http://")?e=e.replace("http://","ws://").replace(/\/$/,"")+"/ws":e.startsWith("https://")&&(e=e.replace("https://","wss://").replace(/\/$/,"")+"/ws"),e}async function login(e){const t=e.login_service_id||"public/*:hypha-login",r=e.login_timeout||60,i=e.login_callback,n=e.profile,o=await connectToServer({name:"initial login client",server_url:e.server_url});try{const e=await o.getService(t);(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(e,`Failed to get the login service: ${t}`);const s=await e.start();return i?await i(s):console.log(`Please open your browser and login at ${s.login_url}`),await e.check(s.key,r,n)}catch(e){throw e}finally{await o.disconnect()}}async function webrtcGetService(e,t,r,i,n){(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)([void 0,!0,!1,"auto"].includes(i),"webrtc must be true, false or 'auto'");const o=Array.prototype.slice.call(arguments,3),s=await e.getService(r,...o);if(!0===i||"auto"===i){if(s.id.includes(":")&&s.id.includes("/"))try{const r=await(0,_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.b)(e,t,n),i=await r.get_service(s.id.split(":")[1]);return i._webrtc=!0,i._peer=r,i._service=s,i}catch(e){console.warn("Failed to get webrtc service, using websocket connection",e)}if(!0===i)throw new Error("Failed to get the service via webrtc")}return s}async function connectToServer(e){e.server&&(e.server_url=e.server_url||e.server.url,e.WebSocketClass=e.WebSocketClass||e.server.WebSocketClass);let t=e.client_id;t||(t=(0,_utils__WEBPACK_IMPORTED_MODULE_1__.bq)(),e.client_id=t);let r=normalizeServerUrl(e.server_url),i=new WebsocketRPCConnection(r,t,e.workspace,e.token,e.reconnection_token,e.method_timeout||60,e.WebSocketClass);const n=await i.open();if((0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(n,"Failed to connect to the server, no connection info obtained. This issue is most likely due to an outdated Hypha server version. Please use `imjoy-rpc` for compatibility, or upgrade the Hypha server to the latest version."),e.workspace&&n.workspace!==e.workspace)throw new Error(`Connected to the wrong workspace: ${n.workspace}, expected: ${e.workspace}`);const o=n.workspace,s=new _rpc_js__WEBPACK_IMPORTED_MODULE_0__.y(i,{client_id:t,workspace:o,default_context:{connection_type:"websocket"},name:e.name,method_timeout:e.method_timeout,app_id:e.app_id}),c=await s.get_manager_service(e.method_timeout,"camel");if(c.rpc=s,n&&(c.config=Object.assign(c.config,n)),c.export=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)((async function(t){t.id="default",t.name=t.name||e.name||t.id,t.description=t.description||e.description,await s.register_service(t,!0)}),{name:"export",description:"Export the api.",parameters:{properties:{api:{description:"The api to export",type:"object"}},required:["api"],type:"object"}}),c.getApp=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)((async function(e){let t;e=e||"*",(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(!e.includes(":"),"clientId should not contain ':'"),e.includes("/")?[t,e]=e.split("/"):t=n.workspace;const r={workspace:t,client_id:e,service_id:"default"};return await c.getService(r)}),{name:"getApp",description:"Get the app.",parameters:{properties:{clientId:{default:"*",description:"The clientId",type:"string"}},type:"object"}}),c.listApps=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)((async function(e){e=e||o,(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(!e.includes(":"),"workspace should not contain ':'"),(0,_utils__WEBPACK_IMPORTED_MODULE_1__.vA)(!e.includes("/"),"workspace should not contain '/'");const t={workspace:e,service_id:"default"};return await c.listServices(t)}),{name:"listApps",description:"List the apps.",parameters:{properties:{workspace:{default:o,description:"The workspace",type:"string"}},type:"object"}}),c.disconnect=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.disconnect.bind(s),{name:"disconnect",description:"Disconnect from the server.",parameters:{type:"object",properties:{},required:[]}}),c.registerCodec=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.register_codec.bind(s),{name:"registerCodec",description:"Register a codec for the webrtc connection",parameters:{type:"object",properties:{codec:{type:"object",description:"Codec to register",properties:{name:{type:"string"},type:{},encoder:{type:"function"},decoder:{type:"function"}}}}}}),c.emit=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.emit.bind(s),{name:"emit",description:"Emit a message.",parameters:{properties:{data:{description:"The data to emit",type:"object"}},required:["data"],type:"object"}}),c.on=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.on.bind(s),{name:"on",description:"Register a message handler.",parameters:{properties:{event:{description:"The event to listen to",type:"string"},handler:{description:"The handler function",type:"function"}},required:["event","handler"],type:"object"}}),c.getServiceSchema=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.get_service_schema,{name:"getServiceSchema",description:"Get the service schema.",parameters:{properties:{service:{description:"The service to extract schema",type:"object"}},required:["service"],type:"object"}}),c.registerService=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.register_service.bind(s),{name:"registerService",description:"Register a service.",parameters:{properties:{service:{description:"The service to register",type:"object"},force:{default:!1,description:"Force to register the service",type:"boolean"}},required:["service"],type:"object"}}),c.unregisterService=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(s.unregister_service.bind(s),{name:"unregisterService",description:"Unregister a service.",parameters:{properties:{service:{description:"The service id to unregister",type:"string"},notify:{default:!0,description:"Notify the workspace manager",type:"boolean"}},required:["service"],type:"object"}}),i.manager_id&&s.on("force-exit",(async e=>{e.from==="*/"+i.manager_id&&(console.log("Disconnecting from server, reason:",e.reason),await s.disconnect())})),e.webrtc){await(0,_webrtc_client_js__WEBPACK_IMPORTED_MODULE_3__.e)(c,t+"-rtc",e.webrtc_config);const r=Object.assign({},c);c.getService=(0,_utils_schema_js__WEBPACK_IMPORTED_MODULE_2__.G)(webrtcGetService.bind(null,r,t+"-rtc"),{name:"getService",description:"Get a service via webrtc.",parameters:{properties:{query:{description:"The query to get the service",type:"object"},webrtc:{default:"auto",description:"Use webrtc to get the service",type:["boolean","string"]},webrtc_config:{description:"The webrtc configuration",type:"object"}},required:["query"],type:"object"}})}return c}class LocalWebSocket{constructor(e,t,r){this.url=e,this.onopen=()=>{},this.onmessage=()=>{},this.onclose=()=>{},this.onerror=()=>{},this.client_id=t,this.workspace=r;const i="undefined"!=typeof window?window:self,n="undefined"!=typeof window;if(this.postMessage=e=>{n?window.parent.postMessage(e,"*"):self.postMessage(e)},this.readyState=WebSocket.CONNECTING,i.addEventListener("message",(e=>{const{type:t,data:r,to:i}=e.data;if(i===this.client_id)switch(t){case"message":this.readyState===WebSocket.OPEN&&this.onmessage&&this.onmessage({data:r});break;case"connected":this.readyState=WebSocket.OPEN,this.onopen(e);break;case"closed":this.readyState=WebSocket.CLOSED,this.onclose(e)}else console.debug("message not for me",i,this.client_id)}),!1),!this.client_id)throw new Error("client_id is required");if(!this.workspace)throw new Error("workspace is required");this.postMessage({type:"connect",url:this.url,from:this.client_id,workspace:this.workspace})}send(e){this.readyState===WebSocket.OPEN&&this.postMessage({type:"message",data:e,from:this.client_id,workspace:this.workspace})}close(){this.readyState=WebSocket.CLOSING,this.postMessage({type:"close",from:this.client_id,workspace:this.workspace}),this.onclose()}addEventListener(e,t){"message"===e&&(this.onmessage=t),"open"===e&&(this.onopen=t),"close"===e&&(this.onclose=t),"error"===e&&(this.onerror=t)}}function setupLocalClient({enable_execution=!1,on_ready=null}){return new Promise(((resolve,reject)=>{const context="undefined"!=typeof window?window:self,isWindow="undefined"!=typeof window;context.addEventListener("message",(event=>{const{type,server_url,workspace,client_id,token,method_timeout,name,config}=event.data;if("initializeHyphaClient"===type){if(!server_url||!workspace||!client_id)return void console.error("server_url, workspace, and client_id are required.");if(!server_url.startsWith("https://local-hypha-server:"))return void console.error("server_url should start with https://local-hypha-server:");connectToServer({server_url,workspace,client_id,token,method_timeout,name}).then((async server=>{globalThis.api=server;try{if(isWindow&&enable_execution){function e(e){return new Promise(((t,r)=>{const i=document.createElement("script");i.innerHTML=e.content,i.lang=e.lang,i.onload=()=>t(),i.onerror=e=>r(e),document.head.appendChild(i)}))}if(config.styles&&config.styles.length>0)for(const t of config.styles){const r=document.createElement("style");r.innerHTML=t.content,r.lang=t.lang,document.head.appendChild(r)}if(config.links&&config.links.length>0)for(const i of config.links){const n=document.createElement("a");n.href=i.url,n.innerText=i.text,document.body.appendChild(n)}if(config.windows&&config.windows.length>0)for(const o of config.windows){document.body.innerHTML=o.content;break}if(config.scripts&&config.scripts.length>0)for(const s of config.scripts){if("javascript"!==s.lang)throw new Error("Only javascript scripts are supported");await e(s)}}else if(!isWindow&&enable_execution&&config.scripts&&config.scripts.length>0)for(const script of config.scripts){if("javascript"!==script.lang)throw new Error("Only javascript scripts are supported");eval(script.content)}on_ready&&await on_ready(server,config),resolve(server)}catch(c){reject(c)}}))}}),!1),isWindow?window.parent.postMessage({type:"hyphaClientReady"},"*"):self.postMessage({type:"hyphaClientReady"})}))}return __webpack_exports__})()));
|
|
2
2
|
//# sourceMappingURL=hypha-rpc-websocket.min.js.map
|