From 071eb8c26860d98cd30e0b5dc8984389101932bd Mon Sep 17 00:00:00 2001 From: Lee Dongeun Date: Fri, 12 Apr 2024 22:10:59 +0900 Subject: [PATCH] increse defaultQutoa Level : 3 --- dist/iosignal.cjs | 2 +- dist/iosignal.esm.js | 2 +- dist/iosignal.esm.js.map | 2 +- dist/iosignal.min.js | 2 +- dist/iosignal.min.js.map | 2 +- package.json | 2 +- src/client/IOCore.js | 2 +- src/server/serverOption.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/iosignal.cjs b/dist/iosignal.cjs index eb1fa4c..bddc28e 100644 --- a/dist/iosignal.cjs +++ b/dist/iosignal.cjs @@ -1,2 +1,2 @@ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("crypto"),t=require("stream"),r=require("net"),s=require("zlib"),i=require("fs"),n=require("path"),o=require("os"),a=require("buffer"),h=require("events"),c=require("https"),l=require("http"),f=require("tls"),u=require("url"),d=require("process");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function g(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var _=p(e),y=p(t),m=p(r),b=p(s),E=p(i),w=p(n),v=p(o),S=p(a),k=p(h),A=p(c),T=p(l),L=p(f),x=p(u);function B(e){var t={exports:{}};return e(t,t.exports),t.exports}function C(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.')}for(var I=function(e){var t=H(e),r=t[0],s=t[1];return 3*(r+s)/4-s},O=function(e){var t,r,s=H(e),i=s[0],n=s[1],o=new M(function(e,t,r){return 3*(t+r)/4-r}(0,i,n)),a=0,h=n>0?i-4:i;for(r=0;r>16&255,o[a++]=t>>8&255,o[a++]=255&t;2===n&&(t=U[e.charCodeAt(r)]<<2|U[e.charCodeAt(r+1)]>>4,o[a++]=255&t);1===n&&(t=U[e.charCodeAt(r)]<<10|U[e.charCodeAt(r+1)]<<4|U[e.charCodeAt(r+2)]>>2,o[a++]=t>>8&255,o[a++]=255&t);return o},R=function(e){for(var t,r=e.length,s=r%3,i=[],n=16383,o=0,a=r-s;oa?a:o+n));1===s?(t=e[r-1],i.push(N[t>>2]+N[t<<4&63]+"==")):2===s&&(t=(e[r-2]<<8)+e[r-1],i.push(N[t>>10]+N[t>>4&63]+N[t<<2&63]+"="));return i.join("")},N=[],U=[],M="undefined"!=typeof Uint8Array?Uint8Array:Array,P="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",D=0;D<64;++D)N[D]=P[D],U[P.charCodeAt(D)]=D;function H(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function $(e,t,r){for(var s,i,n=[],o=t;o>18&63]+N[i>>12&63]+N[i>>6&63]+N[63&i]);return n.join("")}U["-".charCodeAt(0)]=62,U["_".charCodeAt(0)]=63;var F={byteLength:I,toByteArray:O,fromByteArray:R},j=function(e,t,r,s,i){var n,o,a=8*i-s-1,h=(1<>1,l=-7,f=r?i-1:0,u=r?-1:1,d=e[t+f];for(f+=u,n=d&(1<<-l)-1,d>>=-l,l+=a;l>0;n=256*n+e[t+f],f+=u,l-=8);for(o=n&(1<<-l)-1,n>>=-l,l+=s;l>0;o=256*o+e[t+f],f+=u,l-=8);if(0===n)n=1-c;else{if(n===h)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,s),n-=c}return(d?-1:1)*o*Math.pow(2,n-s)},z=function(e,t,r,s,i,n){var o,a,h,c=8*n-i-1,l=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=s?0:n-1,p=s?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=l):(o=Math.floor(Math.log(t)/Math.LN2),t*(h=Math.pow(2,-o))<1&&(o--,h*=2),(t+=o+f>=1?u/h:u*Math.pow(2,1-f))*h>=2&&(o++,h/=2),o+f>=l?(a=0,o=l):o+f>=1?(a=(t*h-1)*Math.pow(2,i),o+=f):(a=t*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;e[r+d]=255&a,d+=p,a/=256,i-=8);for(o=o<0;e[r+d]=255&o,d+=p,o/=256,c-=8);e[r+d-p]|=128*g},W=B((function(e,t){const r="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=n,t.SlowBuffer=function(e){+e!=e&&(e=0);return n.alloc(+e)},t.INSPECT_MAX_BYTES=50;const s=2147483647;function i(e){if(e>s)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,n.prototype),t}function n(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return h(e)}return o(e,t,r)}function o(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!n.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|u(e,t);let s=i(r);const o=s.write(e,t);o!==r&&(s=s.slice(0,o));return s}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Q(e,Uint8Array)){const t=new Uint8Array(e);return l(t.buffer,t.byteOffset,t.byteLength)}return c(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Q(e,ArrayBuffer)||e&&Q(e.buffer,ArrayBuffer))return l(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Q(e,SharedArrayBuffer)||e&&Q(e.buffer,SharedArrayBuffer)))return l(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const s=e.valueOf&&e.valueOf();if(null!=s&&s!==e)return n.from(s,t,r);const o=function(e){if(n.isBuffer(e)){const t=0|f(e.length),r=i(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||K(e.length)?i(0):c(e);if("Buffer"===e.type&&Array.isArray(e.data))return c(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return n.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function a(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function h(e){return a(e),i(e<0?0:0|f(e))}function c(e){const t=e.length<0?0:0|f(e.length),r=i(t);for(let s=0;s=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|e}function u(e,t){if(n.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Q(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,s=arguments.length>2&&!0===arguments[2];if(!s&&0===r)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(e).length;default:if(i)return s?-1:V(e).length;t=(""+t).toLowerCase(),i=!0}}function d(e,t,r){let s=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,t,r);case"utf8":case"utf-8":return S(this,t,r);case"ascii":return A(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return v(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,r);default:if(s)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),s=!0}}function p(e,t,r){const s=e[t];e[t]=e[r],e[r]=s}function g(e,t,r,s,i){if(0===e.length)return-1;if("string"==typeof r?(s=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),K(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=n.from(t,s)),n.isBuffer(t))return 0===t.length?-1:_(e,t,r,s,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_(e,[t],r,s,i);throw new TypeError("val must be string, number or Buffer")}function _(e,t,r,s,i){let n,o=1,a=e.length,h=t.length;if(void 0!==s&&("ucs2"===(s=String(s).toLowerCase())||"ucs-2"===s||"utf16le"===s||"utf-16le"===s)){if(e.length<2||t.length<2)return-1;o=2,a/=2,h/=2,r/=2}function c(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){let s=-1;for(n=r;na&&(r=a-h),n=r;n>=0;n--){let r=!0;for(let s=0;si&&(s=i):s=i;const n=t.length;let o;for(s>n/2&&(s=n/2),o=0;o>8,i=r%256,n.push(i),n.push(s);return n}(t,e.length-r),e,r,s)}function v(e,t,r){return 0===t&&r===e.length?F.fromByteArray(e):F.fromByteArray(e.slice(t,r))}function S(e,t,r){r=Math.min(e.length,r);const s=[];let i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+o<=r){let r,s,a,h;switch(o){case 1:t<128&&(n=t);break;case 2:r=e[i+1],128==(192&r)&&(h=(31&t)<<6|63&r,h>127&&(n=h));break;case 3:r=e[i+1],s=e[i+2],128==(192&r)&&128==(192&s)&&(h=(15&t)<<12|(63&r)<<6|63&s,h>2047&&(h<55296||h>57343)&&(n=h));break;case 4:r=e[i+1],s=e[i+2],a=e[i+3],128==(192&r)&&128==(192&s)&&128==(192&a)&&(h=(15&t)<<18|(63&r)<<12|(63&s)<<6|63&a,h>65535&&h<1114112&&(n=h))}}null===n?(n=65533,o=1):n>65535&&(n-=65536,s.push(n>>>10&1023|55296),n=56320|1023&n),s.push(n),i+=o}return function(e){const t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);let r="",s=0;for(;ss.length?(n.isBuffer(t)||(t=n.from(t)),t.copy(s,i)):Uint8Array.prototype.set.call(s,t,i);else{if(!n.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(s,i)}i+=t.length}return s},n.byteLength=u,n.prototype._isBuffer=!0,n.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},r&&(n.prototype[r]=n.prototype.inspect),n.prototype.compare=function(e,t,r,s,i){if(Q(e,Uint8Array)&&(e=n.from(e,e.offset,e.byteLength)),!n.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===s&&(s=0),void 0===i&&(i=this.length),t<0||r>e.length||s<0||i>this.length)throw new RangeError("out of range index");if(s>=i&&t>=r)return 0;if(s>=i)return-1;if(t>=r)return 1;if(this===e)return 0;let o=(i>>>=0)-(s>>>=0),a=(r>>>=0)-(t>>>=0);const h=Math.min(o,a),c=this.slice(s,i),l=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===s&&(s="utf8")):(s=r,r=void 0)}const i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");s||(s="utf8");let n=!1;for(;;)switch(s){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return m(this,e,t,r);case"ascii":case"latin1":case"binary":return b(this,e,t,r);case"base64":return E(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,e,t,r);default:if(n)throw new TypeError("Unknown encoding: "+s);s=(""+s).toLowerCase(),n=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const k=4096;function A(e,t,r){let s="";r=Math.min(e.length,r);for(let i=t;is)&&(r=s);let i="";for(let s=t;sr)throw new RangeError("Trying to access beyond buffer length")}function C(e,t,r,s,i,o){if(!n.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function I(e,t,r,s,i){H(t,s,i,e,r,7);let n=Number(t&BigInt(4294967295));e[r++]=n,n>>=8,e[r++]=n,n>>=8,e[r++]=n,n>>=8,e[r++]=n;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,r}function O(e,t,r,s,i){H(t,s,i,e,r,7);let n=Number(t&BigInt(4294967295));e[r+7]=n,n>>=8,e[r+6]=n,n>>=8,e[r+5]=n,n>>=8,e[r+4]=n;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=o,o>>=8,e[r+2]=o,o>>=8,e[r+1]=o,o>>=8,e[r]=o,r+8}function R(e,t,r,s,i,n){if(r+s>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(e,t,r,s,i){return t=+t,r>>>=0,i||R(e,0,r,4),z(e,t,r,s,23,4),r+4}function U(e,t,r,s,i){return t=+t,r>>>=0,i||R(e,0,r,8),z(e,t,r,s,52,8),r+8}n.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||B(e,t,this.length);let s=this[e],i=1,n=0;for(;++n>>=0,t>>>=0,r||B(e,t,this.length);let s=this[e+--t],i=1;for(;t>0&&(i*=256);)s+=this[e+--t]*i;return s},n.prototype.readUint8=n.prototype.readUInt8=function(e,t){return e>>>=0,t||B(e,1,this.length),this[e]},n.prototype.readUint16LE=n.prototype.readUInt16LE=function(e,t){return e>>>=0,t||B(e,2,this.length),this[e]|this[e+1]<<8},n.prototype.readUint16BE=n.prototype.readUInt16BE=function(e,t){return e>>>=0,t||B(e,2,this.length),this[e]<<8|this[e+1]},n.prototype.readUint32LE=n.prototype.readUInt32LE=function(e,t){return e>>>=0,t||B(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},n.prototype.readUint32BE=n.prototype.readUInt32BE=function(e,t){return e>>>=0,t||B(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},n.prototype.readBigUInt64LE=X((function(e){$(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const s=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,i=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(s)+(BigInt(i)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const s=t*2**24+65536*this[++e]+256*this[++e]+this[++e],i=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(s)<>>=0,t>>>=0,r||B(e,t,this.length);let s=this[e],i=1,n=0;for(;++n=i&&(s-=Math.pow(2,8*t)),s},n.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||B(e,t,this.length);let s=t,i=1,n=this[e+--s];for(;s>0&&(i*=256);)n+=this[e+--s]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*t)),n},n.prototype.readInt8=function(e,t){return e>>>=0,t||B(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},n.prototype.readInt16LE=function(e,t){e>>>=0,t||B(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt16BE=function(e,t){e>>>=0,t||B(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt32LE=function(e,t){return e>>>=0,t||B(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},n.prototype.readInt32BE=function(e,t){return e>>>=0,t||B(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},n.prototype.readBigInt64LE=X((function(e){$(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const s=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(s)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const s=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(s)<>>=0,t||B(e,4,this.length),j(this,e,!0,23,4)},n.prototype.readFloatBE=function(e,t){return e>>>=0,t||B(e,4,this.length),j(this,e,!1,23,4)},n.prototype.readDoubleLE=function(e,t){return e>>>=0,t||B(e,8,this.length),j(this,e,!0,52,8)},n.prototype.readDoubleBE=function(e,t){return e>>>=0,t||B(e,8,this.length),j(this,e,!1,52,8)},n.prototype.writeUintLE=n.prototype.writeUIntLE=function(e,t,r,s){if(e=+e,t>>>=0,r>>>=0,!s){C(this,e,t,r,Math.pow(2,8*r)-1,0)}let i=1,n=0;for(this[t]=255&e;++n>>=0,r>>>=0,!s){C(this,e,t,r,Math.pow(2,8*r)-1,0)}let i=r-1,n=1;for(this[t+i]=255&e;--i>=0&&(n*=256);)this[t+i]=e/n&255;return t+r},n.prototype.writeUint8=n.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,255,0),this[t]=255&e,t+1},n.prototype.writeUint16LE=n.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeUint16BE=n.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeUint32LE=n.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},n.prototype.writeUint32BE=n.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeBigUInt64LE=X((function(e,t=0){return I(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),n.prototype.writeBigUInt64BE=X((function(e,t=0){return O(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),n.prototype.writeIntLE=function(e,t,r,s){if(e=+e,t>>>=0,!s){const s=Math.pow(2,8*r-1);C(this,e,t,r,s-1,-s)}let i=0,n=1,o=0;for(this[t]=255&e;++i>0)-o&255;return t+r},n.prototype.writeIntBE=function(e,t,r,s){if(e=+e,t>>>=0,!s){const s=Math.pow(2,8*r-1);C(this,e,t,r,s-1,-s)}let i=r-1,n=1,o=0;for(this[t+i]=255&e;--i>=0&&(n*=256);)e<0&&0===o&&0!==this[t+i+1]&&(o=1),this[t+i]=(e/n>>0)-o&255;return t+r},n.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},n.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},n.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeBigInt64LE=X((function(e,t=0){return I(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),n.prototype.writeBigInt64BE=X((function(e,t=0){return O(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),n.prototype.writeFloatLE=function(e,t,r){return N(this,e,t,!0,r)},n.prototype.writeFloatBE=function(e,t,r){return N(this,e,t,!1,r)},n.prototype.writeDoubleLE=function(e,t,r){return U(this,e,t,!0,r)},n.prototype.writeDoubleBE=function(e,t,r){return U(this,e,t,!1,r)},n.prototype.copy=function(e,t,r,s){if(!n.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),s||0===s||(s=this.length),t>=e.length&&(t=e.length),t||(t=0),s>0&&s=this.length)throw new RangeError("Index out of range");if(s<0)throw new RangeError("sourceEnd out of bounds");s>this.length&&(s=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i=s+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function H(e,t,r,s,i,n){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${s} and < 2${s} ** ${8*(n+1)}${s}`:`>= -(2${s} ** ${8*(n+1)-1}${s}) and < 2 ** ${8*(n+1)-1}${s}`:`>= ${t}${s} and <= ${r}${s}`,new M.ERR_OUT_OF_RANGE("value",i,e)}!function(e,t,r){$(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||W(t,e.length-(r+1))}(s,i,n)}function $(e,t){if("number"!=typeof e)throw new M.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,r){if(Math.floor(e)!==e)throw $(e,r),new M.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new M.ERR_BUFFER_OUT_OF_BOUNDS;throw new M.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}P("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),P("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),P("ERR_OUT_OF_RANGE",(function(e,t,r){let s=`The value of "${e}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=D(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=D(i)),i+="n"),s+=` It must be ${t}. Received ${i}`,s}),RangeError);const G=/[^+/0-9A-Za-z-_]/g;function V(e,t){let r;t=t||1/0;const s=e.length;let i=null;const n=[];for(let o=0;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&n.push(239,191,189);continue}if(o+1===s){(t-=3)>-1&&n.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&n.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&n.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;n.push(r)}else if(r<2048){if((t-=2)<0)break;n.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;n.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;n.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return n}function q(e){return F.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function Y(e,t,r,s){let i;for(i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function Q(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function K(e){return e!=e}const J=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const s=16*r;for(let i=0;i<16;++i)t[s+i]=e[r]+e[i]}return t}();function X(e){return"undefined"==typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}})); -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */const G=new TextEncoder,V=new TextDecoder,q=Y;function Y(e,t=0){let r;if(void 0===e||"string"!=typeof e||"number"!=typeof t)throw TypeError("invlaid init variablie type name. ");return(e=e.toUpperCase()).includes("8")?(r=W.Buffer.alloc(1),e.includes("I")?r.writeInt8(t):r.writeUint8(t)):e.includes("16")?(r=W.Buffer.alloc(2),e.includes("I")?e.includes("L")?r.writeInt16LE(t):r.writeInt16BE(t):e.includes("L")?r.writeUint16LE(t):r.writeUint16BE(t)):e.includes("32")?(r=W.Buffer.alloc(4),e.includes("I")?e.includes("L")?r.writeInt32LE(t):r.writeInt32BE(t):e.includes("L")?r.writeUint32LE(t):r.writeUint32BE(t)):e.includes("F")?(r=W.Buffer.alloc(4),e.includes("L")?r.writeFloatLE(t):r.writeFloatBE(t)):e.includes("N")?r=W.Buffer.from(String(t)):console.log(`invalid type: ${e} or initvalue: ${t}`),r}const Q=K;function K(e,t,r){let s,i="B";if("number"==typeof t)"number"==typeof r?(s=W.Buffer.alloc(t),0!==r&&s.fill(r),i="B"):(s=W.Buffer.from(String(t)),i="N");else if("string"==typeof t&&"number"==typeof r)i=t.toUpperCase(),s=Y(t,r);else if("string"==typeof t&&void 0===r)s=W.Buffer.from(t),i="S";else if(t instanceof Uint8Array&&void 0===r)s=t instanceof W.Buffer?t:W.Buffer.from(t);else if(t instanceof ArrayBuffer&&void 0===r)s=W.Buffer.from(t);else if(ArrayBuffer.isView(t))s=W.Buffer.from(t.buffer,t.byteOffset,t.byteLength);else if("object"==typeof t&&void 0===r)s=W.Buffer.from(JSON.stringify(t)),i="O";else{if("boolean"!=typeof t||void 0!==r)throw TypeError("invalid meta buffer type");{const e=t?1:0;s=W.Buffer.from([e]),i="!"}}return"string"==typeof e&&e.includes("#")&&(e=""),[e,i,s]}const J=X;function X(...e){let t=0;return e.map((e=>{const r=t++;return"number"==typeof e?Q(r,"N",e):Q(r,e)}))}function Z(e){if((e=e.toUpperCase()).includes("8"))return e.includes("I")?"int8":"uint8";if(e.includes("16"))return e.includes("I")?e.includes("L")?"int16_le":"int16_be":e.includes("L")?"uint16_le":"uint16_be";if(e.includes("32"))return e.includes("I")?e.includes("L")?"int32_le":"int32_be":e.includes("L")?"uint32_le":"uint32_be";if(e.includes("F"))return e.includes("L")?"float_le":"float_be";if("B"===e)return"buffer";if("S"===e)return"string";if("N"===e)return"number";if("O"===e)return"object";if("!"===e)return"boolean";throw TypeError("invalid data type")}function ee(e,t,r,s){try{const i=Z(e);if("int8"==i)return t.readInt8(r);if("uint8"===i)return t.readUint8(r);if("int16_le"===i)return t.readInt16LE(r);if("int16_be"===i)return t.readInt16BE(r);if("uint16_le"===i)return t.readUint16LE(r);if("uint16_be"===i)return t.readUint16BE(r);if("int32_le"===i)return t.readInt32LE(r);if("int32_be"===i)return t.readInt32BE(r);if("uint32_le"===i)return t.readUint32LE(r);if("uint32_be"===i)return t.readUint32BE(r);if("float_le"===i)return t.readFloatLE(r);if("float_be"===i)return t.readFloatBE(r);if("buffer"===i)return t.subarray(r,r+s);if("string"===i){const e=t.subarray(r,r+s);return V.decode(e)}if("number"===i){const e=t.subarray(r,r+s);return Number(V.decode(e))}if("object"===i){const e=t.subarray(r,r+s);return JSON.parse(V.decode(e))}if("boolean"===i){return 1===t.readInt8(r)}return}catch(e){}}function te(...e){const t=function(e){let t=[];return e.filter((e=>{if(!Array.isArray(e[0]))return e;t=t.concat(e)})).concat(t)}(e);let r=0;const s=[];let i,n,o=0;if(t.forEach((e=>{const[t,i,n]=e;r+=n.byteLength,("number"==typeof t||t.length>0)&&s.push([t,i,o,n.byteLength]),o=r})),s.length>0){let e=JSON.stringify(s);i=G.encode(e),n=i.byteLength,r=r+n+2}const a=W.Buffer.alloc(r);if(o=0,t.forEach((e=>{const t=e[2];a.set(t,o),o+=t.byteLength})),s.length>0){a.set(i,o);const e=q("16",n);return a.set(e,o+n),a}return a}function re(e,t){const r=t||me(e);if(!r)return;const s=W.Buffer.from(e),i={};let n=0;if(r.forEach((e=>{const[t,r,o,a]=e;let h=ee(r,s,o,a);null!=h&&(i[t]=h,a&&(n+=a))})),t&&s.byteLength!==n){let e=s.byteLength-n,t=ee("b",s,n,e);if(null==t)return;i.$OTHERS=t}let o=0,a=[];for(;i[o];)a.push(i[o++]);return a.length>0&&(i.args=a,i.$=i.args),i}const se=ie;function ie(e,t=!1){if(void 0===e)throw TypeError("Invalid data type: Undefined");if("string"==typeof e)return G.encode(e);if("number"==typeof e)return Uint8Array.from([e]);if(e instanceof ArrayBuffer){if(t)return new Uint8Array(e);{const t=new Uint8Array(e),r=new Uint8Array(e.byteLength);return r.set(t),r}}if(ArrayBuffer.isView(e)){if(t)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);{const t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=new Uint8Array(e.byteLength);return r.set(t),r}}return G.encode(JSON.stringify(e))}const ne=oe;function oe(e,t=!1){const r=ie(e,t);return t?W.Buffer.from(r.buffer,r.byteOffset,r.byteLength):W.Buffer.from(r)}const ae=he;function he(...e){const t=e.map((e=>oe(e)));return W.Buffer.concat(t)}const ce=le;function le(...e){try{let t=0,r=0;const s=e.map((e=>ie(e)));s.forEach((e=>{t+=e.byteLength}));const i=new Uint8Array(t);return s.forEach((e=>{i.set(e,r),r+=e.byteLength})),i}catch(e){console.log(e)}}function fe(e,t){if(e.byteLength!==t.byteLength)return!1;for(let r=0;rt)return 0;return de(e,r)?r:0}return 0}function ye(e){const t=ue(e);return e.subarray(0,t)}function me(e,t=!1){e instanceof ArrayBuffer&&(e=W.Buffer.from(e));const r=ge(e);if(0===r)return;let s=de(e,r);return s?t?(s.forEach((e=>{null==e[3]&&(e[1].includes("8")?e[3]=1:e[1].includes("16")?e[3]=2:e[1].includes("32")||e[1].includes("F")?e[3]=4:e[1].includes("!")&&(e[3]=1)),e[4]=Z(e[1])})),s):s:void 0}function be(...e){return ye(te(...e))}function Ee(...e){return me(te(...e))}var we=Object.freeze({__proto__:null,Buffer:W.Buffer,NB:q,numberBuffer:Y,MB:Q,metaBuffer:K,MBA:J,metaBufferArguments:X,parseTypeName:Z,readTypedBuffer:ee,pack:te,unpack:re,U8:se,parseUint8Array:ie,B8:ne,parseBuffer:oe,B8pack:ae,parseBufferThenConcat:he,U8pack:ce,parseUint8ThenConcat:le,hex:function(e){return Array.prototype.map.call(new Uint8Array(e),(e=>("00"+e.toString(16)).slice(-2))).join("")},equal:fe,getBufferSize:ue,parseMetaInfo:de,TAIL_LEN:pe,readTail:ge,getMetaSize:_e,getBuffer:ye,getMeta:me,rawPack:be,meta:Ee,metaDetail:function(...e){return me(te(...e),!0)},getMetaDetail:function(e){return me(e,!0)}}),ve=B((function(e){var t=Object.prototype.hasOwnProperty,r="~";function s(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function n(e,t,s,n,o){if("function"!=typeof s)throw new TypeError("The listener must be a function");var a=new i(s,n||e,o),h=r?r+t:t;return e._events[h]?e._events[h].fn?e._events[h]=[e._events[h],a]:e._events[h].push(a):(e._events[h]=a,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new s:delete e._events[t]}function a(){this._events=new s,this._eventsCount=0}Object.create&&(s.prototype=Object.create(null),(new s).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,s,i=[];if(0===this._eventsCount)return i;for(s in e=this._events)t.call(e,s)&&i.push(r?s.slice(1):s);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},a.prototype.listeners=function(e){var t=r?r+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var i=0,n=s.length,o=new Array(n);i=64;){for(n=t[0],o=t[1],a=t[2],h=t[3],c=t[4],l=t[5],f=t[6],u=t[7],p=0;p<16;p++)g=s+4*p,e[p]=(255&r[g])<<24|(255&r[g+1])<<16|(255&r[g+2])<<8|255&r[g+3];for(p=16;p<64;p++)d=e[p-2],_=(d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10,d=e[p-15],y=(d>>>7|d<<25)^(d>>>18|d<<14)^d>>>3,e[p]=(_+e[p-7]|0)+(y+e[p-16]|0);for(p=0;p<64;p++)_=(((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&l^~c&f)|0)+(u+(Se[p]+e[p]|0)|0)|0,y=((n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10))+(n&o^n&a^o&a)|0,u=f,f=l,l=c,c=h+_|0,h=a,a=o,o=n,n=_+y|0;t[0]+=n,t[1]+=o,t[2]+=a,t[3]+=h,t[4]+=c,t[5]+=l,t[6]+=f,t[7]+=u,s+=64,i-=64}return s}const Ae=function(){function e(){this.digestLength=32,this.blockSize=64,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var e=0;e0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[r++],t--;64===this.bufferLength&&(ke(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(r=ke(this.temp,this.state,e,r,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[r++],t--;return this},e.prototype.finish=function(e){if(!this.finished){const e=this.bytesHashed,r=this.bufferLength,s=e/536870912|0,i=e<<3,n=e%64<56?64:128;this.buffer[r]=128;for(var t=r+1;t>>24&255,this.buffer[n-7]=s>>>16&255,this.buffer[n-6]=s>>>8&255,this.buffer[n-5]=s>>>0&255,this.buffer[n-4]=i>>>24&255,this.buffer[n-3]=i>>>16&255,this.buffer[n-2]=i>>>8&255,this.buffer[n-1]=i>>>0&255,ke(this.temp,this.state,this.buffer,0,n),this.finished=!0}for(t=0;t<8;t++)e[4*t+0]=this.state[t]>>>24&255,e[4*t+1]=this.state[t]>>>16&255,e[4*t+2]=this.state[t]>>>8&255,e[4*t+3]=this.state[t]>>>0&255;return this},e.prototype.digest=function(){const e=new Uint8Array(this.digestLength);return this.finish(e),e},e.prototype._saveState=function(e){for(let t=0;tthis.blockSize)(new Ae).update(e).finish(t).clean();else for(var r=0;r0;){o=s<32?s:32;let t=this.getIndexOTP(++i);for(let r=0;r{(ArrayBuffer.isView(e)||e instanceof ArrayBuffer)&&(s=!0)})),s?t=Fe.MBA:(t=Fe.MJSON,r=We.encode(JSON.stringify(e)))}return{type:t,buffer:r}}(t);if(i.type==Fe.EMPTY)r=te(Q("#MsgType","8",je.SIGNAL),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",i.type));else if(i.type==Fe.MBA){let e=te(J(...t));r=te(Q("#MsgType","8",je.SIGNAL),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",i.type),Q("#mbaBuffer",e))}else r=te(Q("#MsgType","8",je.SIGNAL),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",i.type),Q("#payload",i.buffer));return r}const Ve=new TextEncoder,qe=new TextDecoder;class Ye extends ve{constructor(e){super(),this.cid="",this.ip="",this.socket=null,this.url=e,this.state=Pe.CLOSED,this.stateName=this.getStateName(),this.txCounter=0,this.rxCounter=0,this.txBytes=0,this.rxBytes=0,this.lastTxRxTime=Date.now(),this.connectionCheckerPeriod=$e.CONNECTION_CHECKER_PERIOD,this.connectionCheckerIntervalID=null,this.boho=new Me,this.TLS=!1,this.encMode=He.AUTO,this.useAuth=!1,this.nick="",this.channels=new Set,this.promiseMap=new Map,this.promiseTimeOut=$e.PROMISE_TIMEOUT,this.mid=0,this.level=0,this.quota=ze[this.level],this.serverSet={},this.linkMap=new Map,this.on("open",this.onOpen.bind(this)),this.on("close",this.onClose.bind(this)),this.on("socket_data",this.onData.bind(this))}redirect(e){this.close(),this.stateChange("redirecting"),this.createConnection(e)}open(e){if(e||this.url){if(e)if(this.url){if(e!==this.url&&(this.url=e,this.socket))return void this.close()}else this.url=e;this.createConnection(this.url),this.connectionCheckerIntervalID||(this.connectionCheckerIntervalID=setInterval(this.keepAlive.bind(this),this.connectionCheckerPeriod))}}onOpen(){this.url.includes("wss://")?this.TLS=!0:this.TLS=!1,this.stateChange("open")}onClose(){this.boho.isAuthorized=!1,this.cid="",this.stateChange("closed")}login(e,t){if(!e&&!t)return void console.log("no id and key.");if(console.log("manual login: ",e),!t&&e.includes("."))this.boho.set_id_key(e);else{if(!e||!t)return void console.log("no id or key.");this.boho.set_id8(e),this.boho.set_key(t)}this.useAuth=!0;let r=this.boho.auth_req();this.send(r)}auth(e,t){if(e||t){if(!t&&e.includes("."))this.boho.set_id_key(e);else{if(!e||!t)return void console.log("no id or key.");this.boho.set_id8(e),this.boho.set_key(t)}this.useAuth=!0}else console.log("no id and key.")}onData(e){let t,r=e[0];if(r===Ce.ENC_488)t=this.boho.decrypt_488(e),t&&(r=t[0],e=t);else if(r===Ce.ENC_E2E)try{if(t=this.boho.decrypt_488(e),!t)return;r=t[0],e.set(t,Re.ENC_488),e=e.subarray(Re.ENC_488)}catch(e){return}let s=je[r];switch(s||(s=Ce[r]),r){case je.OVER_SIZE:console.log("## server sent: over_size event."),this.emit("over_size","over_size");break;case je.PING:this.pong();break;case je.PONG:break;case je.IAM_RES:try{let t=qe.decode(e.subarray(1)),r=JSON.parse(t);r.ip&&(this.ip=r.ip),console.log("",JSON.stringify(r))}catch(e){}break;case je.CID_RES:let r=qe.decode(e.subarray(1));this.cid=r,this.stateChange("ready","cid_ready"),this.subscribe_memory_channels();break;case je.QUOTA_LEVEL:let s=e[1];this.level=s,this.quota=ze[s],console.log("## QUOTA:",s,JSON.stringify(this.quota));break;case je.SERVER_CLEAR_AUTH:this.useAuth=!1,this.boho.clearAuth(),this.stop();break;case je.SERVER_REDIRECT:let i,n,o;7==e.byteLength?(i=function(e){if(6!=e.byteLength)return;return e[0].toString()+"."+e[1].toString()+"."+e[2].toString()+"."+e[3].toString()+":"+((e[4]<<8)+e[5]).toString()}(e.subarray(1)),o="cong://"):(i=qe.decode(e.subarray(1)),o=""),n=o+i,this.redirect(n);break;case je.SERVER_READY:this.stateChange("server_ready","server_ready"),this.useAuth?this.send(this.boho.auth_req()):this.send(W.Buffer.from([je.CID_REQ]));break;case je.SERVER_SIGNAL:try{let t=qe.decode(e.subarray(1)),r=JSON.parse(t);r.event&&r.data&&(this.serverSet=r.data,this.emit(r.event,r.data))}catch(e){}break;case je.SET:try{let t=re(e);t&&this.emit(t.topic,...t.args)}catch(e){}break;case je.SIGNAL_E2E:case je.SIGNAL:try{let t=e.readUint8(1),r=e.subarray(2,2+t),s=qe.decode(r),i=e.readUint8(2+t),n=e.subarray(3+t);switch(i){case Fe.EMPTY:0===s.indexOf("@")?this.emit("@",null,s):this.emit(s,null,s);break;case Fe.TEXT:let e=n.subarray(0,n.byteLength-1),t=qe.decode(e);0===s.indexOf("@")&&this.emit("@",t,s),"@"!==s&&this.emit(s,t,s);break;case Fe.BINARY:0===s.indexOf("@")&&this.emit("@",n,s),"@"!==s&&this.emit(s,n,s);break;case Fe.OBJECT:let r=qe.decode(n),i=JSON.parse(r);0===s.indexOf("@")&&this.emit("@",i,s),"@"!==s&&this.emit(s,i,s);break;case Fe.MJSON:let o=qe.decode(n),a=JSON.parse(o);0===s.indexOf("@")&&this.emit("@",...a,s),"@"!==s&&this.emit(s,...a,s);break;case Fe.MBA:let h=re(n);0===s.indexOf("@")&&this.emit("@",...h.args,s),"@"!==s&&this.emit(s,...h.args,s)}}catch(e){}break;case je.RESPONSE_MBP:this.testPromise(e);break;case Ce.AUTH_NONCE:let a=this.boho.auth_hmac(e);a?this.send(a):this.stateChange("auth_fail","Invalid local auth_hmac.");break;case Ce.AUTH_FAIL:this.stateChange("auth_fail","server reject auth.");break;case Ce.AUTH_ACK:this.boho.check_auth_ack_hmac(e)?(this.stateChange("auth_ready","server sent auth_ack"),this.send(W.Buffer.from([je.CID_REQ]))):this.stateChange("auth_fail","invalid server_hmac");break;default:try{t=qe.decode(e),this.emit("text_message",t)}catch(e){}}}iam(e){e?this.send_enc_mode(te(Q("#MsgType","8",je.IAM),Q("#",e))):this.send_enc_mode(te(Q("#MsgType","8",je.IAM)))}ping(){this.send(W.Buffer.from([je.PING]))}pong(){this.send(W.Buffer.from([je.PONG]))}echo(e){e?(console.log("echo args:",e),this.send_enc_mode(te(Q("#MsgType","8",je.ECHO),Q("#msg",e)))):this.send(W.Buffer.from([je.ECHO]))}bin(...e){this.send(ce(...e))}send(e){if(e.byteLength>this.quota.signalSize)return this.emit("over_size"),console.log("## QUOTA LIMIT OVER!! \nsignal message.byteLength: ",e.byteLength),void console.log("## your maximum signalSize(bytes) is:",this.quota.signalSize);this.socket_send(e)}getEncryptionMode(){return!(this.encMode!==He.YES&&(this.encMode!==He.AUTO||this.TLS||!this.boho.isAuthorized))}send_enc_mode(e,t){if(void 0===t&&(t=this.getEncryptionMode()),e[0]==je.SIGNAL_E2E&&t){let t=e[1],r=this.boho.encrypt_488(e.subarray(0,3+t));r[0]=Ce.ENC_E2E,this.send(W.Buffer.concat([r,e.subarray(3+t)]))}else if(t){let t=this.boho.encrypt_488(e);this.send(t)}else this.send(e)}setMsgPromise(e){return new Promise(((t,r)=>{this.promiseMap.set(e,[t,r]),setTimeout((t=>{this.promiseMap.has(e)&&(r("timeout"),this.promiseMap.delete(e))}),this.promiseTimeOut)}))}testPromise(e){let t=re(e);if(t)if(this.promiseMap.has(t.mid)){let[e,r]=this.promiseMap.get(t.mid);this.promiseMap.delete(t.mid),t.status<128?(t.ok=!0,e(t)):(t.ok=!1,r(t))}else console.log("no promise id")}publish(...e){this.signal(...e)}signal(e,...t){if("string"!=typeof e)throw TypeError("tag should be string.");let r=Ge(e,...t);this.send_enc_mode(r)}decrypt_e2e(e,t){return this.boho.decrypt_e2e(e,t)}signal_e2e(e,t,r){if("string"!=typeof e)throw TypeError("tag should be string.");let s=Ve.encode(e),i=ne(t),n=this.boho.encrypt_e2e(i,r),o=te(Q("#MsgType","8",je.SIGNAL_E2E),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",Fe.BINARY),Q("#payload",n));this.send_enc_mode(o)}set(e,...t){return e&&0!=t.length?this.req("store","set",e,...t):Promise.reject(new Error("set need storeName and value)"))}async get(e){if(!e)return Promise.reject(new Error("store get need storeName)"));let t=await this.req("store","get",e),{$:r}=re(t.body);return r}req(e,t,...r){if(!e||!t)return Promise.reject(new Error("request need target and topic)"));let s;return s=r.length>0?te(Q("#MsgType","8",je.REQUEST),Q("mid","16",++this.mid),Q("target",e),Q("topic",t),J(...r)):te(Q("#MsgType","8",je.REQUEST),Q("mid","16",++this.mid),Q("target",e),Q("topic",t)),this.send_enc_mode(s),this.setMsgPromise(this.mid)}subscribe(e){if("string"!=typeof e)throw TypeError("tag should be string.");if(this.state!==Pe.READY)return;e.split(",").forEach((e=>{this.channels.add(e)}));let t=Ve.encode(e);if(t.byteLength>$e.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+$e.TAG_LEN1);this.send_enc_mode(W.Buffer.concat([q("8",je.SUBSCRIBE),q("8",t.byteLength),t]))}subscribe_promise(e){if("string"!=typeof e)throw TypeError("tag should be string.");if(this.state!==Pe.READY)return Promise.reject("subscribe_promise:: connection is not ready");let t=Ve.encode(e);if(t.byteLength>$e.TAG_LEN2)throw TypeError("please use tag string bytelength: "+$e.TAG_LEN2);return this.send_enc_mode(W.Buffer.concat([q("8",je.SUBSCRIBE_REQ),q("16",++this.mid),q("16",t.byteLength),t])),this.setMsgPromise(this.mid)}subscribe_memory_channels(){if(0==this.channels.size)return;let e=Array.from(this.channels).join(",");this.subscribe_promise(e).then((e=>{})).catch((e=>{console.log(">> SUBSCRIBE FAIL:",e)}))}unsubscribe(e=""){if("string"!=typeof e)throw TypeError("tag should be string.");if(""==e)this.channels.clear();else{e.split(",").forEach((e=>{this.channels.delete(e)}))}let t=Ve.encode(e);if(t.byteLength>$e.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+$e.TAG_LEN1);this.send_enc_mode(W.Buffer.concat([q("8",je.UNSUBSCRIBE),q("8",t.byteLength),t]))}listen(e,t){if("string"!=typeof e)throw TypeError("tag should be string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof t)throw TypeError("handler is not a function.");0!==e.indexOf("@")&&this.channels.add(e),this.on(e,t)}link(e,t,r){if("string"!=typeof e)throw TypeError("to(local link target) is not a string.");if("string"!=typeof t)throw TypeError("tag is not a string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof r)throw TypeError("handler is not a function.");let s;0!==t.indexOf("@")&&this.channels.add(t),s=this.linkMap.has(e)?this.linkMap.get(e):new Set,s.add(t),this.linkMap.set(e,s),this.on(t,r),this.subscribe(t)}unlink(e,t){if("string"!=typeof e)throw TypeError("to(local link target) is not a string.");if("string"!=typeof t)throw TypeError("tag is not a string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if(!this.linkMap.has(e))return;let r=this.linkMap.get(e),s=Array.from(r);for(let i=0;i0&&(this.frames.forEach((e=>{this.push(e)})),this.frames=[]),r()}addData(e){let t=e.byteLength,r=0;for(;t--;)this.rxi++,0==e[r++]&&this.rxi_zero++;this.buffer.byteLength>0?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.parse()}parse(){let e,t,r=this.buffer[0];if(r==Qe){if(e=2,this.buffer.byteLength{}},rt="function"==typeof __webpack_require__?__non_webpack_require__:C,st=process.config&&process.config.variables||{},it=!!process.env.PREBUILDS_ONLY,nt=process.versions.modules,ot=!(!process.versions||!process.versions.electron)||!!process.env.ELECTRON_RUN_AS_NODE||"undefined"!=typeof window&&window.process&&"renderer"===window.process.type?"electron":process.versions&&process.versions.nw?"node-webkit":"node",at=process.env.npm_config_arch||v.default.arch(),ht=process.env.npm_config_platform||v.default.platform(),ct=process.env.LIBC||(function(e){return"linux"===e&&E.default.existsSync("/etc/alpine-release")}(ht)?"musl":"glibc"),lt=process.env.ARM_VERSION||("arm64"===at?"8":st.arm_version)||"",ft=(process.versions.uv||"").split(".")[0],ut=dt;function dt(e){return rt(dt.resolve(e))}function pt(e){try{return E.default.readdirSync(e)}catch(e){return[]}}function gt(e,t){var r=pt(e).filter(t);return r[0]&&w.default.join(e,r[0])}function _t(e){return/\.node$/.test(e)}function yt(e){var t=e.split("-");if(2===t.length){var r=t[0],s=t[1].split("+");if(r&&s.length&&s.every(Boolean))return{name:e,platform:r,architectures:s}}}function mt(e,t){return function(r){return null!=r&&(r.platform===e&&r.architectures.includes(t))}}function bt(e,t){return e.architectures.length-t.architectures.length}function Et(e){var t=e.split("."),r={file:e,specificity:0};if("node"===t.pop()){for(var s=0;sr.specificity?-1:1:0}}dt.resolve=dt.path=function(e){e=w.default.resolve(e||".");try{var t=rt(w.default.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");process.env[t+"_PREBUILD"]&&(e=process.env[t+"_PREBUILD"])}catch(e){}if(!it){var r=gt(w.default.join(e,"build/Release"),_t);if(r)return r;var s=gt(w.default.join(e,"build/Debug"),_t);if(s)return s}var i=a(e);if(i)return i;var n=a(w.default.dirname(process.execPath));if(n)return n;var o=["platform="+ht,"arch="+at,"runtime="+ot,"abi="+nt,"uv="+ft,lt?"armv="+lt:"","libc="+ct,"node="+process.versions.node,process.versions.electron?"electron="+process.versions.electron:"","function"==typeof __webpack_require__?"webpack=true":""].filter(Boolean).join(" ");throw new Error("No native build was found for "+o+"\n loaded from: "+e+"\n");function a(e){var t=pt(w.default.join(e,"prebuilds")).map(yt).filter(mt(ht,at)).sort(bt)[0];if(t){var r=w.default.join(e,"prebuilds",t.name),s=pt(r).map(Et).filter(wt(ot,nt)).sort(vt(ot))[0];return s?w.default.join(r,s.file):void 0}}},dt.parseTags=Et,dt.matchTags=wt,dt.compareTags=vt,dt.parseTuple=yt,dt.matchTuple=mt,dt.compareTuples=bt;var St=B((function(e){const t="function"==typeof __webpack_require__?__non_webpack_require__:C;"function"==typeof t.addon?e.exports=t.addon.bind(t):e.exports=ut}));var kt={mask:(e,t,r,s,i)=>{for(var n=0;n{const r=e.length;for(var s=0;s{this.pending--,this[xt]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[xt]()}[xt](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[Lt])}}};const{kStatusCode:Ct}=tt,It=Buffer[Symbol.species],Ot=Buffer.from([0,0,255,255]),Rt=Symbol("permessage-deflate"),Nt=Symbol("total-length"),Ut=Symbol("callback"),Mt=Symbol("buffers"),Pt=Symbol("error");let Dt;var Ht=class{constructor(e,t,r){if(this._maxPayload=0|r,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!Dt){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;Dt=new Bt(e)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){const e=this._deflate[Ut];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){const t=this._options,r=e.find((e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits)));if(!r)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(r.server_no_context_takeover=!0),t.clientNoContextTakeover&&(r.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(r.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?r.client_max_window_bits=t.clientMaxWindowBits:!0!==r.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete r.client_max_window_bits,r}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach((e=>{Object.keys(e).forEach((t=>{let r=e[t];if(r.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(r=r[0],"client_max_window_bits"===t){if(!0!==r){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}else if("server_max_window_bits"===t){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==r)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}e[t]=r}))})),e}decompress(e,t,r){Dt.add((s=>{this._decompress(e,t,((e,t)=>{s(),r(e,t)}))}))}compress(e,t,r){Dt.add((s=>{this._compress(e,t,((e,t)=>{s(),r(e,t)}))}))}_decompress(e,t,r){const s=this._isServer?"client":"server";if(!this._inflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?b.default.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=b.default.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[Rt]=this,this._inflate[Nt]=0,this._inflate[Mt]=[],this._inflate.on("error",jt),this._inflate.on("data",Ft)}this._inflate[Ut]=r,this._inflate.write(e),t&&this._inflate.write(Ot),this._inflate.flush((()=>{const e=this._inflate[Pt];if(e)return this._inflate.close(),this._inflate=null,void r(e);const i=Tt.concat(this._inflate[Mt],this._inflate[Nt]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Nt]=0,this._inflate[Mt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,i)}))}_compress(e,t,r){const s=this._isServer?"server":"client";if(!this._deflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?b.default.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=b.default.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[Nt]=0,this._deflate[Mt]=[],this._deflate.on("data",$t)}this._deflate[Ut]=r,this._deflate.write(e),this._deflate.flush(b.default.Z_SYNC_FLUSH,(()=>{if(!this._deflate)return;let e=Tt.concat(this._deflate[Mt],this._deflate[Nt]);t&&(e=new It(e.buffer,e.byteOffset,e.length-4)),this._deflate[Ut]=null,this._deflate[Nt]=0,this._deflate[Mt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,e)}))}};function $t(e){this[Mt].push(e),this[Nt]+=e.length}function Ft(e){this[Nt]+=e.length,this[Rt]._maxPayload<1||this[Nt]<=this[Rt]._maxPayload?this[Mt].push(e):(this[Pt]=new RangeError("Max payload size exceeded"),this[Pt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Pt][Ct]=1009,this.removeListener("data",Ft),this.reset())}function jt(e){this[Rt]._inflate=null,e[Ct]=1007,this[Ut](e)}var zt=function(e){const t=e.length;let r=0;for(;r=t||128!=(192&e[r+1])||128!=(192&e[r+2])||224===e[r]&&128==(224&e[r+1])||237===e[r]&&160==(224&e[r+1]))return!1;r+=3}else{if(240!=(248&e[r]))return!1;if(r+3>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||128!=(192&e[r+3])||240===e[r]&&128==(240&e[r+1])||244===e[r]&&e[r+1]>143||e[r]>244)return!1;r+=4}return!0},Wt=B((function(e){try{e.exports=St(__dirname)}catch(t){e.exports=zt}})),Gt=B((function(e){const{isUtf8:t}=S.default;function r(e){const t=e.length;let r=0;for(;r=t||128!=(192&e[r+1])||128!=(192&e[r+2])||224===e[r]&&128==(224&e[r+1])||237===e[r]&&160==(224&e[r+1]))return!1;r+=3}else{if(240!=(248&e[r]))return!1;if(r+3>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||128!=(192&e[r+3])||240===e[r]&&128==(240&e[r+1])||244===e[r]&&e[r+1]>143||e[r]>244)return!1;r+=4}return!0}if(e.exports={isValidStatusCode:function(e){return e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999},isValidUTF8:r,tokenChars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0]},t)e.exports.isValidUTF8=function(e){return e.length<24?r(e):t(e)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{const t=Wt;e.exports.isValidUTF8=function(e){return e.length<32?r(e):t(e)}}catch(e){}}));const{Writable:Vt}=y.default,{BINARY_TYPES:qt,EMPTY_BUFFER:Yt,kStatusCode:Qt,kWebSocket:Kt}=tt,{concat:Jt,toArrayBuffer:Xt,unmask:Zt}=Tt,{isValidStatusCode:er,isValidUTF8:tr}=Gt,rr=Buffer[Symbol.species],sr=Promise.resolve(),ir="function"==typeof queueMicrotask?queueMicrotask:function(e){sr.then(e).catch(ar)};var nr=class extends Vt{constructor(e={}){super(),this._allowSynchronousEvents=!!e.allowSynchronousEvents,this._binaryType=e.binaryType||qt[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=0|e.maxPayload,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Kt]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(e,t,r){if(8===this._opcode&&0==this._state)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e=r.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new rr(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return t}startLoop(e){this._loop=!0;do{switch(this._state){case 0:this.getInfo(e);break;case 1:this.getPayloadLength16(e);break;case 2:this.getPayloadLength64(e);break;case 3:this.getMask();break;case 4:this.getData(e);break;case 5:case 6:return void(this._loop=!1)}}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2)return void(this._loop=!1);const t=this.consume(2);if(0!=(48&t[0])){return void e(this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3"))}const r=64==(64&t[0]);if(!r||this._extensions[Ht.extensionName]){if(this._fin=128==(128&t[0]),this._opcode=15&t[0],this._payloadLength=127&t[1],0===this._opcode){if(r){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(!this._fragmented){return void e(this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE"))}this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented){return void e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"))}this._compressed=r}else{if(!(this._opcode>7&&this._opcode<11)){return void e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"))}if(!this._fin){return void e(this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN"))}if(r){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(this._payloadLength>125||8===this._opcode&&1===this._payloadLength){return void e(this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH"))}}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&t[1]),this._isServer){if(!this._masked){return void e(this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK"))}}else if(this._masked){return void e(this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK"))}126===this._payloadLength?this._state=1:127===this._payloadLength?this._state=2:this.haveLength(e)}else{e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}}getPayloadLength16(e){this._bufferedBytes<2?this._loop=!1:(this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e))}getPayloadLength64(e){if(this._bufferedBytes<8)return void(this._loop=!1);const t=this.consume(8),r=t.readUInt32BE(0);if(r>Math.pow(2,21)-1){e(this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH"))}else this._payloadLength=r*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){e(this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"))}else this._masked?this._state=3:this._state=4}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=4)}getData(e){let t=Yt;if(this._payloadLength){if(this._bufferedBytes7)this.controlMessage(t,e);else{if(this._compressed)return this._state=5,void this.decompress(t,e);t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}}decompress(e,t){this._extensions[Ht.extensionName].decompress(e,this._fin,((e,r)=>{if(e)return t(e);if(r.length){if(this._messageLength+=r.length,this._messageLength>this._maxPayload&&this._maxPayload>0){const e=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");return void t(e)}this._fragments.push(r)}this.dataMessage(t),0===this._state&&this.startLoop(t)}))}dataMessage(e){if(!this._fin)return void(this._state=0);const t=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],2===this._opcode){let s;s="nodebuffer"===this._binaryType?Jt(r,t):"arraybuffer"===this._binaryType?Xt(Jt(r,t)):r,5===this._state||this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=0):(this._state=6,ir((()=>{this.emit("message",s,!0),this._state=0,this.startLoop(e)})))}else{const s=Jt(r,t);if(!this._skipUTF8Validation&&!tr(s)){const t=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");return void e(t)}5===this._state||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=0):(this._state=6,ir((()=>{this.emit("message",s,!1),this._state=0,this.startLoop(e)})))}}controlMessage(e,t){if(8!==this._opcode)this._allowSynchronousEvents?(this.emit(9===this._opcode?"ping":"pong",e),this._state=0):(this._state=6,ir((()=>{this.emit(9===this._opcode?"ping":"pong",e),this._state=0,this.startLoop(t)})));else{if(0===e.length)this._loop=!1,this.emit("conclude",1005,Yt),this.end();else{const r=e.readUInt16BE(0);if(!er(r)){const e=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");return void t(e)}const s=new rr(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!tr(s)){const e=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");return void t(e)}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=0}}createError(e,t,r,s,i){this._loop=!1,this._errored=!0;const n=new e(r?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(n,this.createError),n.code=i,n[Qt]=s,n}};function or(e){throw e}function ar(e){process.nextTick(or,e)}const{randomFillSync:hr}=_.default,{EMPTY_BUFFER:cr}=tt,{isValidStatusCode:lr}=Gt,{mask:fr,toBuffer:ur}=Tt,dr=Symbol("kByteLength"),pr=Buffer.alloc(4);class gr{constructor(e,t,r){this._extensions=t||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){let r,s,i=!1,n=2,o=!1;t.mask&&(r=t.maskBuffer||pr,t.generateMask?t.generateMask(r):hr(r,0,4),o=0==(r[0]|r[1]|r[2]|r[3]),n=6),"string"==typeof e?s=t.mask&&!o||void 0===t[dr]?(e=Buffer.from(e)).length:t[dr]:(s=e.length,i=t.mask&&t.readOnly&&!o);let a=s;s>=65536?(n+=8,a=127):s>125&&(n+=2,a=126);const h=Buffer.allocUnsafe(i?s+n:n);return h[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(h[0]|=64),h[1]=a,126===a?h.writeUInt16BE(s,2):127===a&&(h[2]=h[3]=0,h.writeUIntBE(s,4,6)),t.mask?(h[1]|=128,h[n-4]=r[0],h[n-3]=r[1],h[n-2]=r[2],h[n-1]=r[3],o?[h,e]:i?(fr(e,r,h,n,s),[h]):(fr(e,r,e,0,s),[h,e])):[h,e]}close(e,t,r,s){let i;if(void 0===e)i=cr;else{if("number"!=typeof e||!lr(e))throw new TypeError("First argument must be a valid error code number");if(void 0!==t&&t.length){const r=Buffer.byteLength(t);if(r>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+r),i.writeUInt16BE(e,0),"string"==typeof t?i.write(t,2):i.set(t,2)}else i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0)}const n={[dr]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._deflating?this.enqueue([this.dispatch,i,!1,n,s]):this.sendFrame(gr.frame(i,n),s)}ping(e,t,r){let s,i;if("string"==typeof e?(s=Buffer.byteLength(e),i=!1):(s=(e=ur(e)).length,i=ur.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const n={[dr]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,n,r]):this.sendFrame(gr.frame(e,n),r)}pong(e,t,r){let s,i;if("string"==typeof e?(s=Buffer.byteLength(e),i=!1):(s=(e=ur(e)).length,i=ur.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const n={[dr]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,n,r]):this.sendFrame(gr.frame(e,n),r)}send(e,t,r){const s=this._extensions[Ht.extensionName];let i,n,o=t.binary?2:1,a=t.compress;if("string"==typeof e?(i=Buffer.byteLength(e),n=!1):(i=(e=ur(e)).length,n=ur.readOnly),this._firstFragment?(this._firstFragment=!1,a&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(a=i>=s._threshold),this._compress=a):(a=!1,o=0),t.fin&&(this._firstFragment=!0),s){const s={[dr]:i,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:n,rsv1:a};this._deflating?this.enqueue([this.dispatch,e,this._compress,s,r]):this.dispatch(e,this._compress,s,r)}else this.sendFrame(gr.frame(e,{[dr]:i,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:n,rsv1:!1}),r)}dispatch(e,t,r,s){if(!t)return void this.sendFrame(gr.frame(e,r),s);const i=this._extensions[Ht.extensionName];this._bufferedBytes+=r[dr],this._deflating=!0,i.compress(e,r.fin,((e,t)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");"function"==typeof s&&s(e);for(let t=0;t{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>[t].concat(Object.keys(e).map((t=>{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>!0===e?t:`${t}=${e}`)).join("; ")}))).join("; "))).join(", ")})).join(", ")},parse:function(e){const t=Object.create(null);let r,s,i=Object.create(null),n=!1,o=!1,a=!1,h=-1,c=-1,l=-1,f=0;for(;f0&&e.unshift(t),e.on("close",bs),e.on("data",Es),e.on("end",ws),e.on("error",vs),this._readyState=ss.OPEN,this.emit("open")}emitClose(){if(!this._socket)return this._readyState=ss.CLOSED,void this.emit("close",this._closeCode,this._closeMessage);this._extensions[Ht.extensionName]&&this._extensions[Ht.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=ss.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==ss.CLOSED)if(this.readyState!==ss.CONNECTING)this.readyState!==ss.CLOSING?(this._readyState=ss.CLOSING,this._sender.close(e,t,!this._isServer,(e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())})),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),3e4)):this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();else{const e="WebSocket was closed before the connection was established";cs(this,this._req,e)}}pause(){this.readyState!==ss.CONNECTING&&this.readyState!==ss.CLOSED&&(this._paused=!0,this._socket.pause())}ping(e,t,r){if(this.readyState===ss.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===ss.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||Fr,t,r)):ls(this,e,r)}pong(e,t,r){if(this.readyState===ss.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===ss.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||Fr,t,r)):ls(this,e,r)}resume(){this.readyState!==ss.CONNECTING&&this.readyState!==ss.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,r){if(this.readyState===ss.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(r=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==ss.OPEN)return void ls(this,e,r);const s={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Ht.extensionName]||(s.compress=!1),this._sender.send(e||Fr,s,r)}terminate(){if(this.readyState!==ss.CLOSED)if(this.readyState!==ss.CONNECTING)this._socket&&(this._readyState=ss.CLOSING,this._socket.destroy());else{const e="WebSocket was closed before the connection was established";cs(this,this._req,e)}}}Object.defineProperty(ss,"CONNECTING",{enumerable:!0,value:ts.indexOf("CONNECTING")}),Object.defineProperty(ss.prototype,"CONNECTING",{enumerable:!0,value:ts.indexOf("CONNECTING")}),Object.defineProperty(ss,"OPEN",{enumerable:!0,value:ts.indexOf("OPEN")}),Object.defineProperty(ss.prototype,"OPEN",{enumerable:!0,value:ts.indexOf("OPEN")}),Object.defineProperty(ss,"CLOSING",{enumerable:!0,value:ts.indexOf("CLOSING")}),Object.defineProperty(ss.prototype,"CLOSING",{enumerable:!0,value:ts.indexOf("CLOSING")}),Object.defineProperty(ss,"CLOSED",{enumerable:!0,value:ts.indexOf("CLOSED")}),Object.defineProperty(ss.prototype,"CLOSED",{enumerable:!0,value:ts.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((e=>{Object.defineProperty(ss.prototype,e,{enumerable:!0})})),["open","error","close","message"].forEach((e=>{Object.defineProperty(ss.prototype,`on${e}`,{enumerable:!0,get(){for(const t of this.listeners(e))if(t[zr])return t[Wr];return null},set(t){for(const t of this.listeners(e))if(t[zr]){this.removeListener(e,t);break}"function"==typeof t&&this.addEventListener(e,t,{[zr]:!0})}})})),ss.prototype.addEventListener=Yr,ss.prototype.removeEventListener=Qr;var is=ss;function ns(e,t,r,s){const i={allowSynchronousEvents:!1,autoPong:!0,protocolVersion:es[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(e._autoPong=i.autoPong,!es.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${es.join(", ")})`);let n;if(t instanceof Hr)n=t;else try{n=new Hr(t)}catch(e){throw new SyntaxError(`Invalid URL: ${t}`)}"http:"===n.protocol?n.protocol="ws:":"https:"===n.protocol&&(n.protocol="wss:"),e._url=n.href;const o="wss:"===n.protocol,a="ws+unix:"===n.protocol;let h;if("ws:"===n.protocol||o||a?a&&!n.pathname?h="The URL's pathname is empty":n.hash&&(h="The URL contains a fragment identifier"):h='The URL\'s protocol must be one of "ws:", "wss:", "http:", "https", or "ws+unix:"',h){const t=new SyntaxError(h);if(0===e._redirects)throw t;return void os(e,t)}const c=o?443:80,l=Pr(16).toString("base64"),f=o?A.default.request:T.default.request,u=new Set;let d,p;if(i.createConnection=o?hs:as,i.defaultPort=i.defaultPort||c,i.port=n.port||c,i.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":l,Connection:"Upgrade",Upgrade:"websocket"},i.path=n.pathname+n.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(d=new Ht(!0!==i.perMessageDeflate?i.perMessageDeflate:{},!1,i.maxPayload),i.headers["Sec-WebSocket-Extensions"]=Kr({[Ht.extensionName]:d.offer()})),r.length){for(const e of r){if("string"!=typeof e||!rs.test(e)||u.has(e))throw new SyntaxError("An invalid or duplicated subprotocol was specified");u.add(e)}i.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(n.username||n.password)&&(i.auth=`${n.username}:${n.password}`),a){const e=i.path.split(":");i.socketPath=e[0],i.path=e[1]}if(i.followRedirects){if(0===e._redirects){e._originalIpc=a,e._originalSecure=o,e._originalHostOrSocketPath=a?i.socketPath:n.host;const t=s&&s.headers;if(s={...s,headers:{}},t)for(const[e,r]of Object.entries(t))s.headers[e.toLowerCase()]=r}else if(0===e.listenerCount("redirect")){const t=a?!!e._originalIpc&&i.socketPath===e._originalHostOrSocketPath:!e._originalIpc&&n.host===e._originalHostOrSocketPath;(!t||e._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,t||delete i.headers.host,i.auth=void 0)}i.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),p=e._req=f(i),e._redirects&&e.emit("redirect",e.url,p)}else p=e._req=f(i);i.timeout&&p.on("timeout",(()=>{cs(e,p,"Opening handshake has timed out")})),p.on("error",(t=>{null===p||p[Zr]||(p=e._req=null,os(e,t))})),p.on("response",(n=>{const o=n.headers.location,a=n.statusCode;if(o&&i.followRedirects&&a>=300&&a<400){if(++e._redirects>i.maxRedirects)return void cs(e,p,"Maximum redirects exceeded");let n;p.abort();try{n=new Hr(o,t)}catch(t){const r=new SyntaxError(`Invalid URL: ${o}`);return void os(e,r)}ns(e,n,r,s)}else e.emit("unexpected-response",p,n)||cs(e,p,`Unexpected server response: ${n.statusCode}`)})),p.on("upgrade",((t,r,s)=>{if(e.emit("upgrade",t),e.readyState!==ss.CONNECTING)return;if(p=e._req=null,"websocket"!==t.headers.upgrade.toLowerCase())return void cs(e,r,"Invalid Upgrade header");const n=Dr("sha1").update(l+jr).digest("base64");if(t.headers["sec-websocket-accept"]!==n)return void cs(e,r,"Invalid Sec-WebSocket-Accept header");const o=t.headers["sec-websocket-protocol"];let a;if(void 0!==o?u.size?u.has(o)||(a="Server sent an invalid subprotocol"):a="Server sent a subprotocol but none was requested":u.size&&(a="Server sent no subprotocol"),a)return void cs(e,r,a);o&&(e._protocol=o);const h=t.headers["sec-websocket-extensions"];if(void 0!==h){if(!d){return void cs(e,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested")}let t;try{t=Jr(h)}catch(t){return void cs(e,r,"Invalid Sec-WebSocket-Extensions header")}const s=Object.keys(t);if(1!==s.length||s[0]!==Ht.extensionName){return void cs(e,r,"Server indicated an extension that was not requested")}try{d.accept(t[Ht.extensionName])}catch(t){return void cs(e,r,"Invalid Sec-WebSocket-Extensions header")}e._extensions[Ht.extensionName]=d}e.setSocket(r,s,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation})})),i.finishRequest?i.finishRequest(p,e):p.end()}function os(e,t){e._readyState=ss.CLOSING,e.emit("error",t),e.emitClose()}function as(e){return e.path=e.socketPath,m.default.connect(e)}function hs(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=m.default.isIP(e.host)?"":e.host),L.default.connect(e)}function cs(e,t,r){e._readyState=ss.CLOSING;const s=new Error(r);Error.captureStackTrace(s,cs),t.setHeader?(t[Zr]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(os,e,s)):(t.destroy(s),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function ls(e,t,r){if(t){const r=Xr(t).length;e._socket?e._sender._bufferedBytes+=r:e._bufferedAmount+=r}if(r){const t=new Error(`WebSocket is not open: readyState ${e.readyState} (${ts[e.readyState]})`);process.nextTick(r,t)}}function fs(e,t){const r=this[Vr];r._closeFrameReceived=!0,r._closeMessage=t,r._closeCode=e,void 0!==r._socket[Vr]&&(r._socket.removeListener("data",Es),process.nextTick(ms,r._socket),1005===e?r.close():r.close(e,t))}function us(){const e=this[Vr];e.isPaused||e._socket.resume()}function ds(e){const t=this[Vr];void 0!==t._socket[Vr]&&(t._socket.removeListener("data",Es),process.nextTick(ms,t._socket),t.close(e[Gr])),t.emit("error",e)}function ps(){this[Vr].emitClose()}function gs(e,t){this[Vr].emit("message",e,t)}function _s(e){const t=this[Vr];t._autoPong&&t.pong(e,!this._isServer,qr),t.emit("ping",e)}function ys(e){this[Vr].emit("pong",e)}function ms(e){e.resume()}function bs(){const e=this[Vr];let t;this.removeListener("close",bs),this.removeListener("data",Es),this.removeListener("end",ws),e._readyState=ss.CLOSING,this._readableState.endEmitted||e._closeFrameReceived||e._receiver._writableState.errorEmitted||null===(t=e._socket.read())||e._receiver.write(t),e._receiver.end(),this[Vr]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",ps),e._receiver.on("finish",ps))}function Es(e){this[Vr]._receiver.write(e)||this.pause()}function ws(){const e=this[Vr];e._readyState=ss.CLOSING,e._receiver.end(),this.end()}function vs(){const e=this[Vr];this.removeListener("error",vs),this.on("error",qr),e&&(e._readyState=ss.CLOSING,this.destroy())}const{tokenChars:Ss}=Gt;var ks={parse:function(e){const t=new Set;let r=-1,s=-1,i=0;for(;i{const r=T.default.STATUS_CODES[426];t.writeHead(426,{"Content-Length":r.length,"Content-Type":"text/plain"}),t.end(r)})),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){const e=this.emit.bind(this,"connection");this._removeListeners=function(e,t){for(const r of Object.keys(t))e.on(r,t[r]);return function(){for(const r of Object.keys(t))e.removeListener(r,t[r])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,r,s)=>{this.handleUpgrade(t,r,s,e)}})}!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(2===this._state)return e&&this.once("close",(()=>{e(new Error("The server is not running"))})),void process.nextTick(Is,this);if(e&&this.once("close",e),1!==this._state)if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(Is,this);else{const e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close((()=>{Is(this)}))}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,r,s){t.on("error",Os);const i=e.headers["sec-websocket-key"],n=+e.headers["sec-websocket-version"];if("GET"!==e.method){return void Ns(this,e,t,405,"Invalid HTTP method")}if("websocket"!==e.headers.upgrade.toLowerCase()){return void Ns(this,e,t,400,"Invalid Upgrade header")}if(!i||!xs.test(i)){return void Ns(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header")}if(8!==n&&13!==n){return void Ns(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header")}if(!this.shouldHandle(e))return void Rs(t,400);const o=e.headers["sec-websocket-protocol"];let a=new Set;if(void 0!==o)try{a=ks.parse(o)}catch(r){return void Ns(this,e,t,400,"Invalid Sec-WebSocket-Protocol header")}const h=e.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&void 0!==h){const r=new Ht(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const e=Mr.parse(h);e[Ht.extensionName]&&(r.accept(e[Ht.extensionName]),c[Ht.extensionName]=r)}catch(r){return void Ns(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header")}}if(this.options.verifyClient){const o={origin:e.headers[""+(8===n?"sec-websocket-origin":"origin")],secure:!(!e.socket.authorized&&!e.socket.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(o,((n,o,h,l)=>{if(!n)return Rs(t,o||401,h,l);this.completeUpgrade(c,i,a,e,t,r,s)}));if(!this.options.verifyClient(o))return Rs(t,401)}this.completeUpgrade(c,i,a,e,t,r,s)}completeUpgrade(e,t,r,s,i,n,o){if(!i.readable||!i.writable)return i.destroy();if(i[Ls])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return Rs(i,503);const a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${As("sha1").update(t+Ts).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(r.size){const e=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;e&&(a.push(`Sec-WebSocket-Protocol: ${e}`),h._protocol=e)}if(e[Ht.extensionName]){const t=e[Ht.extensionName].params,r=Mr.format({[Ht.extensionName]:[t]});a.push(`Sec-WebSocket-Extensions: ${r}`),h._extensions=e}this.emit("headers",a,s),i.write(a.concat("\r\n").join("\r\n")),i.removeListener("error",Os),h.setSocket(i,n,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(h),h.on("close",(()=>{this.clients.delete(h),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Is,this)}))),o(h,s)}}var Cs=Bs;function Is(e){e._state=2,e.emit("close")}function Os(){this.destroy()}function Rs(e,t,r,s){r=r||T.default.STATUS_CODES[t],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},e.once("finish",e.destroy),e.end(`HTTP/1.1 ${t} ${T.default.STATUS_CODES[t]}\r\n`+Object.keys(s).map((e=>`${e}: ${s[e]}`)).join("\r\n")+"\r\n\r\n"+r)}function Ns(e,t,r,s,i){if(e.listenerCount("wsClientError")){const s=new Error(i);Error.captureStackTrace(s,Ns),e.emit("wsClientError",s,r,t)}else Rs(r,s,i)}let Us={clientTracking:!1,port:0,congPort:0,timeout:5e4,showMessage:"none",showMetric:0,showChannel:0,monitorPeriod:5e3,fileLogger:{connection:{use:!1,path:"connection.log"},auth:{use:!1,path:"auth.log"},attack:{use:!1,path:"attack.log"}},useQuota:{signalSize:!1,publishCounter:!1,trafficRate:!1,disconnect:!1},defaultQuotaIndex:0,adminLevel:255,debug:{slow:!1,delay:500,showAuthInfo:!1},retain:{isAvailable:!0,limitSize:1e5,limitCounter:1e3},auth:{delay_auth_fail:1e3},memberOnly:!1};const Ms=new TextDecoder,Ps=Q;class Ds{constructor(e,t){this.socket=e,e.isAlive=!0,e.txCounter=0,e.rxCounter=0,e.openTime=Date.now(),this.boho=new Me,this.encMode=He.AUTO,this.channels=new Set,this.retain_signal=new Map,this.ssid=Ds.ssid++,this.manager=t,this.cid,this.did,this.uid,this.nick="",this.lastEchoMessage="N",this.privateNode=!1,this.HOME_CHANNEL="",this.level=Us.defaultQuotaIndex,this.quota=ze[this.level],this.isAdmin=!1,this.state,this.stateLog=[],this.setState(De.INIT)}static ssid=1;setState(e){this.state=e,Us.debug.showAuthInfo&&(this.stateLog.push(e),console.log(this.stateLog.join(">")))}getState(){return this.state}getStateName(){return De[this.state].toLowerCase()}showMessageLog(e,t){let r=this.boho.isAuthorized?`did: ${this.did} ${this.cid}@`:`${this.cid}@`;if(t){let t=je[e[0]];t||(t=Ce[e[0]]),t=" ["+t+"]",e.byteLength>40?console.log(r+t+" LEN:",e.length):console.log(r+t,e)}else console.log(r+" [TEXT] %s",e)}rxQuotaChecker(e){let t=e.byteLength;return this.manager.rxBytes+=t,!(Us.useQuota.signalSize&&t>this.quota.signalSize)||(console.log("## quota: size over"),this.send(Buffer.from([je.OVER_SIZE])),Us.useQuota.disconnect&&this.close(),!1)}onTimeDelayMessage(e,t=!0){setTimeout((()=>{this.onSocketMessage(e,t)}),Us.debug.delay)}onSocketMessage(t,r=!0){if(this.receiveMonitor(),!this.rxQuotaChecker(t))return;let s,i;if("message"===Us.showMessage&&this.showMessageLog(t,r),r){if(s=t[0],s===Ce.ENC_488){try{i=this.boho.decrypt_488(t)}catch(e){return void console.log("-- E488 DEC_FAIL",e)}if(!i)return;s=i[0],t=i}else if(s===Ce.ENC_E2E){try{i=this.boho.decrypt_488(t)}catch(e){return void console.log("-- E2E DEC_FAIL",e)}if(!i)return;s=i[0],t.set(i,Re.ENC_488),t=t.subarray(Re.ENC_488)}switch(s){case je.PING:this.pong();break;case je.PONG:break;case je.CID_REQ:this.state1){let e=t.subarray(1);this.nick=Ms.decode(e),console.log("iam nick reset",this.nick)}this.iamResponse();break;case je.SIGNAL_E2E:case je.SIGNAL:if(t.byteLength>=3){let e=t.readUInt8(1);if(t.byteLength>=e+2){let r=t.subarray(2,2+e);r=Ms.decode(r),this.manager.sender(r,this,t)}}break;case je.UNSUBSCRIBE:if(2==t.byteLength)this.manager.unsubscribe([""],this);else if(t.byteLength>=3){let e=t.readUInt8(1);if(t.byteLength==e+2){let r=t.subarray(2,2+e);r=Ms.decode(r);let s=r.split(",");this.manager.unsubscribe(s,this)}}break;case je.SUBSCRIBE:if(t.byteLength>=3){let e=t.readUInt8(1);if(t.byteLength==e+2){let r=t.subarray(2,2+e);r=Ms.decode(r);let s=r.split(",");this.manager.subscribe(s,this)}}break;case je.SUBSCRIBE_REQ:if(t.byteLength>=6){let e=t.readUInt16BE(1),r=t.readUInt16BE(3);if(t.byteLength==r+5){let s=t.subarray(5,5+r);s=Ms.decode(s);let i=s.split(",");this.manager.subscribe(i,this),this.response(e,0)}else this.response(e,255)}break;case je.REQUEST:try{let e=re(t);if(e){if(!e.target||!e.topic)return;this.manager.server.apiNames.has(e.target)?this.manager.server.emit(e.target,this,e):console.log("UnKnown API req: ",e.target)}}catch(e){console.log("request catch error",e)}break;case je.CLOSE:if(t.byteLength>1){let e=Ms.decode(t.subarray(1));console.log(">> CLOSE reason:",e),this.close()}break;case Ce.AUTH_REQ:if(!this.manager.authManager)return;this.state{e&&this.manager.deligateSignal(remote,"@$name",e.name)})).catch((e=>{}))}}else try{let e=Ms.decode(t);this.manager.server.emit("text_message",e,this)}catch(e){}}response(e,t,r){r?this.send_enc_mode(te(Ps("#type","8",je.RESPONSE_MBP),Ps("status","8",t),Ps("mid","16",e),Ps("body",r))):this.send_enc_mode(te(Ps("#type","8",je.RESPONSE_MBP),Ps("status","8",t),Ps("mid","16",e)))}send_enc_mode(e,t=!1){if((this.encMode===He.YES||this.encMode===He.AUTO&&!this.TLS&&this.boho.isAuthorized)&&(t=!0),t&&e[0]==je.SIGNAL_E2E){let t=e[1],r=this.boho.encrypt_488(e.subarray(0,3+t));r[0]=Ce.ENC_E2E;let s=Buffer.concat([r,e.subarray(3+t)]);this.send(s)}else if(t){let t=this.boho.encrypt_488(e);t?this.send(t):console.log("encryption FAIL: NO DATA TRANSIT")}else this.send(e)}iamResponse(e=""){if(""==e){let t=[];for(let e of this.channels.keys())t.push(e);e={ssid:this.ssid,uid:this.uid,cid:this.cid,did:this.did,nick:this.nick,ip:this.ip,tag:t}}let t=te(Ps("#MsgType","8",je.IAM_RES),Ps("#info",e));this.send_enc_mode(t)}}const Hs=new TextDecoder;class $s extends Ds{constructor(e,t,r){super(e,r),this.socketType=e.socketType,"websocket"===this.socketType?(this.TLS="https"===t.headers["x-forwarded-proto"],this.ip=this.getRemoteIP(t)):(this.TLS=!1,this.ip=this.getRemoteIP(e.remoteAddress)),!function(e){if(0===e.indexOf("0.0.0.0"))return!0;if(0===e.indexOf("127.0.0.1"))return!0;if(0===e.indexOf("192.168."))return!0;if(0===e.indexOf("10."))return!0;if(0===e.indexOf("172.")){if(0===e.indexOf("172.16."))return!0;if(0===e.indexOf("172.17."))return!0;if(0===e.indexOf("172.18."))return!0;if(0===e.indexOf("172.19."))return!0;if(0===e.indexOf("172.20."))return!0;if(0===e.indexOf("172.21."))return!0;if(0===e.indexOf("172.22."))return!0;if(0===e.indexOf("172.23."))return!0;if(0===e.indexOf("172.24."))return!0;if(0===e.indexOf("172.25."))return!0;if(0===e.indexOf("172.26."))return!0;if(0===e.indexOf("172.27."))return!0;if(0===e.indexOf("172.28."))return!0;if(0===e.indexOf("172.29."))return!0;if(0===e.indexOf("172.30."))return!0;if(0===e.indexOf("172.31."))return!0}return!1}(this.ip)?this.HOME_CHANNEL="IP:"+function(e){let t=e.split(".");return Buffer.from(t).toString("hex")}(this.ip):(this.HOME_CHANNEL="PRIVATE:",this.privateNode=!0),"websocket"===this.socketType?(Us.debug.slow?e.on("message",this.onTimeDelayMessage.bind(this)):e.on("message",this.onSocketMessage.bind(this)),e.on("pong",this.receiveMonitor.bind(this)),e.on("ping",this.receiveMonitor.bind(this)),e.on("error",(e=>{console.log("Websocket error",e,e.code)})),e.onclose=e=>{this.manager.removeRemote(this)}):(this.congRx=new et,e.on("data",(e=>{this.congRx.write(e)})),this.congRx.on("wrong",this.onWrongCongPacketMessage.bind(this)),Us.debug.slow?this.congRx.on("data",this.onTimeDelayMessage.bind(this)):this.congRx.on("data",this.onSocketMessage.bind(this)),e.on("error",(e=>{console.log("TCP Socket error",e)})),e.on("close",(e=>{this.manager.removeRemote(this)})))}onWrongCongPacketMessage(e){if(this.cid)console.log("wrong congpack from user:",Date(),this.ip,this.ssid,this.cid);else{let t="";try{t=Hs.decode(e)}catch(r){t+="Len: "+e.byteLength}if(this.manager.attackLogger){let e=`> ${this.ssid} ${this.ip} ${t}`;this.manager.attackLogger.log(e)}this.close(!0)}}permissionChecker(){this.socket.bytesWritten||this.socket._socket,this.socket.bytesRead||this.socket._socket}receiveMonitor(){this.socket.rxCounter++,this.socket.isAlive=!0}isConnectionHTTPS(e){return e.headers["x-forwarded-proto"]}getRemoteIP(e){let t;return e&&e.headers?(t=e.headers["x-forwarded-for"],null==t&&(t=e.socket.remoteAddress)):t=e,t?(0==t.indexOf("::ffff:")&&(t=t.substring(7)),"::1"==t&&(t="127.0.0.1")):t="0.0.0.0",t}ping(){"websocket"===this.socketType?(this.socket.ping(),this.socket.txCounter++):this.send(Buffer.from([je.PING]))}pong(){"websocket"===this.socketType?(this.socket.pong(),this.socket.txCounter++):this.send(Buffer.from([je.PONG]))}getTraffic(){this.socket.bytesWritten||this.socket._socket,this.socket.bytesRead||this.socket._socket,this.socket.txCounter,this.socket.rxCounter}close(e=!1){this.getTraffic(),"websocket"===this.socketType?e?this.socket.terminate():this.socket.close():e?this.socket.destroy():this.socket.end()}send(e,t){this.manager.txBytes+=e.byteLength,this.socket.txCounter++,"websocket"===this.socketType?1===this.socket.readyState?null!=t?this.socket.send(e,{binary:t}):this.socket.send(e):this.close(!0):"open"==this.socket.readyState?this.socket.write(Ze(e)):this.close(!0)}}const Fs=new Intl.DateTimeFormat("ko-KR",{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",hour12:!1,timeZone:"Asia/Seoul"});class js{constructor(e){this.file=E.default.openSync(e,"a+"),console.log("new logFile",e,this.file)}log(e){let t=Fs.format(new Date)+" "+e+"\n";E.default.write(this.file,t,(e=>{if(e)throw e}))}}class zs{constructor(e){this.manager=e,this.metricsPack={remotes:[0],channels:[0],txBytes:[0],rxBytes:[0],unixTime:[Math.floor(Date.now()/1e3)],period:0},this.tickId=setInterval((e=>{this.metricsPack.remotes.push(this.manager.remotes.size),this.metricsPack.remotes.length>10&&this.metricsPack.remotes.shift(),this.metricsPack.channels.push(this.manager.channel_map.size),this.metricsPack.channels.length>10&&this.metricsPack.channels.shift(),this.metricsPack.txBytes.push(this.manager.txBytes),this.metricsPack.txBytes.length>10&&this.metricsPack.txBytes.shift(),this.metricsPack.rxBytes.push(this.manager.rxBytes),this.metricsPack.rxBytes.length>10&&this.metricsPack.rxBytes.shift(),this.metricsPack.unixTime=Math.floor(Date.now()/1e3),this.metricsPack.period=1e4,this.manager.txBytes=0,this.manager.rxBytes=0}),1e4)}oneline(e){let t=[{...d.memoryUsage()}];e&&console.table(t,["rss","heapTotal","heapUsed","external","arrayBuffers"]);let r=[{lastSSID:this.manager.lastSSID,remotes:this.manager.remotes.size,channels:this.manager.channel_map.size,txBytes:this.manager.txBytes,rxBytes:this.manager.rxBytes}];return e&&console.table(r,["lastSSID","remotes","channels","txBytes","rxBytes"]),r[0]}getRemotes(e){let t=Array.from(this.manager.remotes.values()).map((e=>"#"+e.ssid+":"+e.cid+"("+e.state+")"));return e&&console.table(t),t}getCIdList(e){let t=Array.from(this.manager.cid2remote.keys());return e&&console.table(t),t}getChannelList(e){let t=Array.from(this.manager.channel_map.keys());return e&&console.table(t),t}getSubscribers(e){let t=[];if(this.manager.channel_map.has(e)){this.manager.channel_map.get(e).forEach((e=>{t.push(e.cid)}))}return t}getRemoteByCId(e,t=1){if(!this.manager.cid2remote.has(e))return{result:"nop"};{let r=this.manager.cid2remote.get(e);if(1==t)return{ip:r.ip,id:r.cid,ssid:r.ssid,cid:r.cid,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),tx:r.socket.txCounter,rx:r.socket.rxCounter,txBytes:r.socket.bytesWritten||r.socket._socket?.bytesWritten,rxBytes:r.socket.bytesRead||r.socket._socket?.bytesRead};if(2==t)return{ip:r.ip,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),nick:r.nick,ssid:r.ssid,echo:r.lastEchoMessage};if(3==t)return{ip:r.ip,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),nick:r.nick,ssid:r.ssid,isSecure:r.TLS,isAuth:r.boho.isAuthorized,encMode:He[r.encMode]};if(4==t){let e=Array.from(r.channels.keys()),t=Array.from(r.memory.keys()),s=Array.from(r.retain_signal.keys());return{ip:r.ip,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),channels:e,set:t,retain:s}}}}}const Ws=new TextEncoder,Gs=new TextDecoder;class Vs{constructor(e,t,r){this.server=e,this.txBytes=0,this.rxBytes=0,this.authManager=t,r?(this.remoteManager=r,r.manager=this):this.remoteManager=null,this.connectionLogger,Us.fileLogger.connection.use&&(this.connectionLogger=new js(Us.fileLogger.connection.path),console.log("Manager: begin file logger [connection]")),this.attackLogger,Us.fileLogger.attack.use&&(this.attackLogger=new js(Us.fileLogger.attack.path),console.log("Manager: begin file logger.[attack]")),this.remotes=new Set,this.channel_map=new Map,this.CHANNEL_PREFIX="CH:",this.CID_PREFIX="CID:",this.cid2remote=new Map,this.retain_messages=new Map,this.metric=new zs(this),this.lastSSID=0,this.pingIntervalID=setInterval((e=>{this.remotes.forEach((function(e){let t=e.socket;!1===t.isAlive&&(console.log("## timeout. cid:",e.cid),e.close()),t.txCounter++,t.isAlive=!1,"websocket"===e.socketType?t.ping():e.ping()}))}),Us.timeout),Us.showMetric&&(this.monitIntervalID=setInterval((e=>{this.monitor()}),Us.monitorPeriod))}addRemote(e,t){e.isAlive=!0;let r=new $s(e,t,this);this.remotes.add(r),r.send(Buffer.from([je.SERVER_READY])),r.setState(De.SENT_SERVER_READY),this.lastSSID=r.ssid;let s=`+ IP:${r.ip} #${r.ssid} ${"websocket"===e.socketType?"WS":"CS"} `;this.connectionLogger&&this.connectionLogger.log(s)}removeRemote(e){let t=`- IP:${e.ip} #${e.ssid} cid:${e.cid} ${"websocket"===e?.socket.socketType?"WS":"CS"} `;this.connectionLogger&&this.connectionLogger.log(t),this.deligateSignal(e,"@state","close"),this.deligateSignal(e,"@$state","close");for(let t of e.channels.keys())if(this.channel_map.has(t)){const r=this.channel_map.get(t);r.delete(e),0==r.size&&this.channel_map.delete(t)}if(e.boho.isAuthorized);else for(let t of e.retain_signal.keys())t=this.CID_PREFIX+e.cid+"@"+t,this.channel_map.has(t)&&this.channel_map.delete(t);if(e.uid&&this.server.apiNames.has("account")){let t={topic:"detachUserRemote",args:["caller:manager.removeRemote"]};this.server.emit("account",e,t)}this.remotes.delete(e),this.cid2remote.delete(e.cid),e=null}serverSignal(e){let t=te(Q("#MsgType","8",je.SERVER_SIGNAL),Q("#signalObject",e));this.remotes.forEach((e=>{e.send_enc_mode(t)}))}getSignalTag(e){let t=e.readUint8(1),r=e.subarray(2,2+t);return Gs.decode(r)}getNewSignalTagMessage(e,t){let r=e[0],s=e.readUint8(1),i=Ws.encode(t),n=i.byteLength,o=e.subarray(2+s);return Buffer.concat([Buffer.from([r,n]),i,o])}deligateSignal(e,t,...r){let s=Ge(t,...r);this.sender(t,e,s)}adminSignal(e,t){return this.cid2remote.has(e)?void this.cid2remote.get(e).send_enc_mode(t):"no cid"}serverSignalTo(e,...t){let r=e.split("@")[0],s=Ge("@"+e.split("@")[1],...t);if(r&&this.cid2remote.has(r)){let e=this.cid2remote.get(r);return console.log("target",e.state,e.cid),void e.send_enc_mode(s)}return"no cid"}sender(e,t,r){if(Us.memberOnly&&!t.boho.isAuthorized)return t.send(Buffer.from([je.SERVER_CLEAR_AUTH])),t.close(),["err","not autrized"];if(0==e.indexOf("$"))return["err","prefix $ is reserved for userSet tag."];let s=e.indexOf("@");if(0===s)e=t.cid+e,r=this.getNewSignalTagMessage(r,e);else if(s>0){let t=e.split("@")[0];if(this.cid2remote.has(t)){let s="@"+e.split("@")[1];return r=this.getNewSignalTagMessage(r,s),this.cid2remote.get(t).send_enc_mode(r),["ok",1]}return["err","Invalid cid"]}if((e=0===e.indexOf("#")?t.HOME_CHANNEL+e:e.includes("@")?this.CID_PREFIX+e:this.CHANNEL_PREFIX+e).includes("$")&&Us.retain.isAvailable&&Us.retain.limitCounter>this.retain_messages.size&&Us.retain.limitSize>r.byteLength)if(e.includes("@")){let s=e.split("@")[1];t.retain_signal.set(s,r)}else this.retain_messages.set(e,r);let i=0;if(this.channel_map.has(e)){let s=this.channel_map.get(e);if(s.size>=1){let e;e=Us.useQuota.publishCounter?Math.min(t.quota.publishCounter,s.size):s.size;let n=s.values();for(;i{if(e=0===e.indexOf("#")?t.HOME_CHANNEL+e:e.includes("@")?this.CID_PREFIX+e:this.CHANNEL_PREFIX+e,this.channel_map.has(e)?this.channel_map.get(e).add(t):this.channel_map.set(e,new Set([t])),t.channels.add(e),e.includes("$")&&Us.retain.isAvailable){let r;if(e.includes("@")){let t=e.split("@")[0];t=t.split(this.CID_PREFIX)[1];let s=e.split("@")[1];if(!this.cid2remote.has(t))return;r=this.cid2remote.get(t).retain_signal.get(s)}else this.retain_messages.has(e)&&(r=this.retain_messages.get(e));r&&t.send_enc_mode(r)}})),t.channels.size}unsubscribe(e,t){1==e.length&&""==e[0]?(t.channels.forEach((e=>{if(this.channel_map.has(e)){let r=this.channel_map.get(e);r.delete(t),0==r.size&&this.channel_map.delete(e)}})),t.channels.clear()):e.forEach((e=>{if(e=0===e.indexOf("#")?t.HOME_CHANNEL+e:e.includes("@")?this.CID_PREFIX+e:this.CHANNEL_PREFIX+e,this.channel_map.has(e)){let r=this.channel_map.get(e);r.delete(t),0==r.size&&this.channel_map.delete(e)}t.channels.delete(e)}))}monitor(){process.stdout.isTTY&&(process.stdout.cursorTo(0,0),process.stdout.clearScreenDown()),Us.showChannel>0&&this.metric.channels(Us.showChannel);let e=parseInt(Us.showMetric);switch(console.log("monitor metric type:",e),e){case 1:this.metric.oneline(!0);break;case 2:this.metric.getRemotes(!0);break;case 3:this.metric.getChannelList(!0)}}closeRemoteByCId(e){return this.cid2remote.has(e)?(this.cid2remote.get(e).close(),1):0}}const qs=0,Ys=255;class Qs extends k.default{constructor(e,t,r){if(super(),this.apiNames=new Set,e.timeout){let t=parseInt(e.timeout);t&&t>=1e3&&(Us.timeout=t)}if(e.monitorPeriod){let t=parseInt(e.monitorPeriod);t&&t>=1e3&&(Us.monitorPeriod=t)}e.showMessage&&(Us.showMessage=e.showMessage),e.showMetric&&(Us.showMetric=e.showMetric),e.timeout&&(Us.timeout=e.timeout),e.port&&(Us.port=parseInt(e.port)),e.congPort&&(Us.congPort=parseInt(e.congPort)),this.manager=new Vs(this,t,r),Us.port&&this.startWSServer(Us.port),Us.congPort&&this.startCongServer(Us.congPort)}startWSServer(e){console.log("opening WebSocket Server:",e),this.wss=new Cs({port:e}),this.wss.on("error",(e=>{console.error("### ws server error:",e.message),"EADDRINUSE"==e.code&&process.exit()})),this.wss.on("close",(e=>{console.log("### WS server closed.",e)})),this.wss.on("connection",((e,t)=>{e.socketType="websocket",this.manager.addRemote(e,t)}))}startCongServer(e){console.log("opening CongSocket Server:",e),this.congServer=m.default.createServer((e=>{this.manager.addRemote(e)})).on("error",(e=>{console.log("### cong server error:",e.message),"EADDRINUSE"==e.code&&process.exit()})).listen(e,(()=>{}))}api(e,t){if(this.apiNames.add(e),!t.checkPermission||"function"!=typeof t.checkPermission)throw new Error("wrong api interface. no checkPermission function.");if("function"==typeof t.request&&Array.isArray(t.commands))console.log(`API TYPE1. A Class with one request function. target: ${e} list: ${t.commands}`),this.on(e,((e,r)=>{t.checkPermission(e,r)?t.request(e,r):e.response(r.mid,Ys,"NO_PERMISSION.")}));else{let r=[];Object.keys(t).forEach((e=>{"function"==typeof t[e]&&r.push(e),console.log("api list",typeof t[e],e)})),console.log(`API TYPE2. Multiple function list. target: ${e} list:${r}`),this.on(e,((r,s)=>{let i;if(t.checkPermission(r,s)){if(t[s.topic])return console.log(`API TYPE2. request target: ${e} has topic:${s.topic}`),void t[s.topic](r,s);i=`target: ${s.target} has not topic name: ${s.topic}`}else i="NO_PERMISSION.";r.response(s.mid,Ys,i)}))}return this}}const Ks=new TextDecoder;class Js{constructor(){this.authLogger,Us.fileLogger.auth.use&&(this.authLogger=new js(Us.fileLogger.auth.path),console.log("Auth: begin file logger.[auth]"))}send_auth_fail(e,t){if(this.authLogger){let r=`FAIL #${e.ssid} reason:${t} `;this.authLogger.log(r)}console.log("## AUTH_FAIL reason:",t),e.setState(De.AUTH_FAIL),setTimeout((t=>{e.send(Buffer.from([Ce.AUTH_FAIL]))}),Us.auth.delay_auth_fail)}async verify_auth_hmac(e,t){try{let r=re(e,Ie.AUTH_HMAC);if(!r)return void this.send_auth_fail(t,"unpack auth_pack fail");let s="";s=r.id8.includes(0)?Ks.decode(r.id8.subarray(0,r.id8.indexOf(0))):Ks.decode(r.id8);let i,n=await this.getAuth(s);if(Us.debug.showAuthInfo,!n)return void this.send_auth_fail(t,"NO ID:"+s);t.boho.copy_id8(r.id8);const o=44;n.key.length==o?(i=Buffer.from(n.key,"base64"),t.boho.copy_key(i)):t.boho.set_key(n.key);let a=t.boho.check_auth_hmac(r);if(!a)return void this.send_auth_fail(t,"hmac dismatched");if(t.manager.cid2remote.has(n.cid)){let e=t.manager.cid2remote.get(n.cid);return e==t?void console.log("## trying RELOGIN with SAME ID. ignored."):(console.log("### clear_auth and close old connection:",e.cid),e.send(Buffer.from([je.SERVER_CLEAR_AUTH])),e.close(),void t.close())}t.cid&&t.manager.cid2remote.delete(t.cid),t.did=s,t.cid=n.cid,t.nick=n.cid;let h=Us.defaultQuotaIndex;n.level&&(h=n.level),h=parseInt(h);let c=ze[h];if(!c){let e="no index quotaTable for auth.level: "+h;return console.log("##AUTH:DATA ERROR##",e),void this.send_auth_fail(t,e)}if(t.level=h,t.quota=c,t.level===Us.adminLevel&&(console.log("## LOGIN ADMIN CID:",t.cid),t.isAdmin=!0),t.send(Buffer.from([je.QUOTA_LEVEL,h])),t.manager.cid2remote.set(t.cid,t),t.send(a),t.setState(De.AUTH_READY),this.authLogger){let e=`OK #${t.ssid} cid: ${t.cid} did:${t.did}`;t.isAdmin&&(e="#ADMIN# "+e),this.authLogger.log(e)}return n}catch(e){this.send_auth_fail(t,"caught: unknown error"+e)}}}const Xs="device:";var Zs=Object.freeze({__proto__:null,checkPermission:function(e){return e.level>=0},echo:async function(e,t){t.args?e.response(t.mid,qs,t.args):e.response(t.mid,Ys,"no message to echo")},date:async function(e,t){let r=(new Date).toUTCString();e.response(t.mid,qs,r)},unixtime:async function(e,t){let r=Math.floor(Date.now()/1e3);e.response(t.mid,qs,r)}});var ei=Object.freeze({__proto__:null,commands:["cid","remotes","clients","channels","subscribers","remote","client","close","addauth","getauth","delauth","getauthidlist","getdevicelist","adddevice","getdevice","deldevice"],checkPermission:function(e){return e.level>=255},request:async function(e,t){let r,s=0;try{let i=t.topic;if(i=i.toLowerCase(),"cid"==i)r=e.manager.metric.getCIdList();else if("remotes"==i||"clients"==i)r=e.manager.metric.getRemotes();else if("channels"==i)r=e.manager.metric.getChannelList();else if("subscribers"==i){let s=t.$[0];s&&(r=e.manager.metric.getSubscribers(s))}else if("remote"==i||"client"==i){let s=t.$[0],i=t.$[1];s&&(r=e.manager.metric.getRemoteByCId(s,i))}else if("close"==i)t.$[0]&&(r=e.manager.closeRemoteByCId(t.$[0]));else if("addauth"==i||"adddevice"==i){if(e.manager.authManager&&4==t.$.length&&e.manager.authManager.addAuth){let s=t.$[0],i=t.$[1],n=t.$[2],o=t.$[3];r=await e.manager.authManager.addAuth(s,i,n,o)}}else if("delauth"==i||"deldevice"==i){if(e.manager.authManager&&1==t.$.length&&e.manager.authManager.delAuth){let s=t.$[0];r=await e.manager.authManager.delAuth(s)}}else if("getauth"==i||"getdevice"==i){if(e.manager.authManager&&1==t.$.length&&e.manager.authManager.getAuth){let s=t.$[0];r=await e.manager.authManager.getAuth(s)}}else"getauthidlist"==i||"getdevicelist"==i?e.manager.authManager&&e.manager.authManager.getAuthIdList&&(r=await e.manager.authManager.getAuthIdList()):(s=Ys,r="api sudo: no such a cmd: "+i);e.response(t.mid,s,r)}catch(r){e.response(t.mid,Ys,r.message)}}});const ti=["GET","SET","HGETALL","HGET","HSET","SADD","SISMEMBER","SMEMBERS","EXISTS","SREM","DEL","KEYS","SAVE"];exports.API_TYPE={REQUEST_RESPONSE:"requet_response",ONE_WAY:"one_way"},exports.Auth_Env=class extends Js{constructor(e){let t;super(),e?t=e.split(","):process.env.BOHO_AUTH?(e=process.env.BOHO_AUTH,t=process.env.BOHO_AUTH.split(",")):(console.log("Auth_Env: None of process.env.BOHO_AUTH or authInfo"),process.exit()),this.AUTH=new Map,t.length>=1?t.forEach((e=>{let t=e.split(".")[0],r=e.split(".")[1],s=e.split(".")[2];if(s=parseInt(s),t&&r&&"number"==typeof s){let e=t;this.addAuth(t,r,e,s)}else console.log("Wrong process.env.BOHO_AUTH authentication value.",id,r,s),process.exit()})):(console.log("Wrong process.env.BOHO_AUTH authentication value."),process.exit())}async getAuth(e){return this.AUTH.get(e)}async getAuthIdList(){return Array.from(this.AUTH.keys())}addAuth(e,t,r,s=0){let i=Buffer.from(xe.hash(t)).toString("base64");this.AUTH.set(e,{key:i,cid:r,level:s})}},exports.Auth_File=class extends Js{constructor(e){super(),this.AUTH=new Map;let t=w.default.parse(e);this.path=w.default.resolve(e),console.log("auth from file path:",this.path);let r=t.ext;".js"==r.toLowerCase()||".mjs"==r.toLowerCase()?(console.log("#JS path:",this.path),this.loadAuthInfoFile_JS(this.path)):".json"==r.toLowerCase()?(console.log("#JSON path:",this.path),this.loadAuthInfoFile_JSON(this.path)):console.log("no authinfofile path.")}async getAuth(e){return this.AUTH.get(e)}async getAuthIdList(){return Array.from(this.AUTH.keys())}loadAuthInfoFile_JS(e){var t;(t=e,Promise.resolve().then((function(){return g(require(t))}))).then((e=>{console.log(e.authInfo),e.authInfo.forEach((e=>{this.addAuth(...e)})),console.log("total AUTH INFO size: ",this.AUTH.size)})).catch((e=>{console.log(e)}))}loadAuthInfoFile_JSON(e){let t=i.readFileSync(e);t=(new TextDecoder).decode(t),JSON.parse(t).forEach((e=>{this.addAuth(...e)})),console.log("total AUTH INFO size: ",this.AUTH.size)}addAuth(e,t,r,s=0){let i=Buffer.from(xe.hash(t)).toString("base64");this.AUTH.set(e,{key:i,cid:r,level:s})}},exports.Auth_Redis=class extends Js{constructor(e){if(super(),!e)throw new Error("AuthRedis constructor: no redisClient");this.redis=e}async getAuth(e){let t=await this.redis.hGetAll(Xs+e);if(t.key)return t}async getAuthIdList(){let e=await this.redis.keys(Xs+"*");if(e=e.map((e=>e.split(":")[1])),e)return e}async addAuth(e,t,r="",s=0){let i=Buffer.from(xe.hash(t)).toString("base64");return this.redis.hSet(Xs+e,{key:i,cid:r,level:s})}async delAuth(e){return this.redis.del(Xs+e)}async save(e){return this.redis.save()}},exports.Boho=Me,exports.BohoAuth=Js,exports.BohoMsg=Ce,exports.Buffer=W.Buffer,exports.CLIENT_STATE=De,exports.CongRx=et,exports.ENC_MODE=He,exports.FileLogger=js,exports.IO=class extends Ye{constructor(e){super(e),e&&this.open()}close(){this.socket&&(this.socket.onclose=null,this.socket.onmessage=null,this.socket.onerror=null,this.socket.close(),this.socket=null),this.emit("close")}stop(){this.close(),clearInterval(this.connectionCheckerIntervalID),this.connectionCheckerIntervalID=null}keepAlive(){this.socket&&3!==this.socket?.readyState||this.open()}createConnection(e){this.socket=new is(e),this.stateChange("opening"),this.socket.onopen=()=>{this.socket.on("message",this.onWebSocketMessage.bind(this)),this.emit("open")},this.socket.onerror=e=>{this.emit("error",e)},this.socket.onclose=()=>{this.emit("close")}}onWebSocketMessage(e){this.rxCounter++,this.lastTxRxTime=Date.now(),this.rxBytes+=e.byteLength,this.emit("socket_data",e)}socket_send(e){1===this.socket?.readyState?(this.socket.send(e),this.txCounter++,this.txBytes+=e.byteLength,this.lastTxRxTime=Date.now()):console.log("")}},exports.IOCongSocket=class extends Ye{constructor(e){super(e),e&&this.open()}close(){this.socket?.end(),this.socket=null}stop(){this.close(),clearInterval(this.connectionCheckerIntervalID),this.connectionCheckerIntervalID=null}keepAlive(){let e=this.socket?.readyState;(!this.socket||"open"!==e&&"opening"!==e)&&this.open()}createConnection(e){let t=new URL(e);"cong:"!=t.protocol&&(t=new URL("cong://"+e)),this.socket=m.default.createConnection(t.port,t.hostname),this.stateChange("opening"),this.socket.on("connect",(()=>{this.congRx=new et,this.socket.pipe(this.congRx),this.congRx.on("data",this.onTCPSocketMessage.bind(this)),this.emit("open")})),this.socket.on("error",(e=>{this.emit("error",e)})),this.socket.on("close",(()=>{this.emit("close")}))}onTCPSocketMessage(e){this.rxCounter++,this.rxBytes+=e.byteLength,this.lastTxRxTime=Date.now(),this.emit("socket_data",e)}socket_send(e){if("open"===this.socket?.readyState){let t=Ze(e);this.socket.write(t),this.txCounter++,this.txBytes+=t.byteLength,this.lastTxRxTime=Date.now()}else console.log(".")}},exports.IOMsg=je,exports.MBP=we,exports.Meta=Ie,exports.MetaSize=Re,exports.PAYLOAD_TYPE=Fe,exports.RAND=Ue,exports.RedisAPI=class{constructor(e,t){if(!e)throw new Error("RedisAPI constructor: no redisClient");this.redisClient=e,this.minLevel=t||200,this.commands=ti}checkPermission(e,t){return console.log("checkPermission",e.level,"vs",this.minLevel),e.level>=this.minLevel}async request(e,t){let r,s=qs;try{let i=t.topic;i=i.toUpperCase(),ti.includes(i)?(console.log("RedisAPI call:",i,t.args),r=t.args.length>0?await this.redisClient[i](...t.args):await this.redisClient[i]()):s=Ys,e.response(t.mid,s,r)}catch(r){e.response(t.mid,Ys,r.message)}}},exports.SIZE_LIMIT=$e,exports.STATES=Pe,exports.STATUS={OK:0,ERROR:255},exports.Server=Qs,exports.api_reply=Zs,exports.api_sudo=ei,exports.pack=Ze,exports.serverOption=Us,exports.sha256=xe; +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */const G=new TextEncoder,V=new TextDecoder,q=Y;function Y(e,t=0){let r;if(void 0===e||"string"!=typeof e||"number"!=typeof t)throw TypeError("invlaid init variablie type name. ");return(e=e.toUpperCase()).includes("8")?(r=W.Buffer.alloc(1),e.includes("I")?r.writeInt8(t):r.writeUint8(t)):e.includes("16")?(r=W.Buffer.alloc(2),e.includes("I")?e.includes("L")?r.writeInt16LE(t):r.writeInt16BE(t):e.includes("L")?r.writeUint16LE(t):r.writeUint16BE(t)):e.includes("32")?(r=W.Buffer.alloc(4),e.includes("I")?e.includes("L")?r.writeInt32LE(t):r.writeInt32BE(t):e.includes("L")?r.writeUint32LE(t):r.writeUint32BE(t)):e.includes("F")?(r=W.Buffer.alloc(4),e.includes("L")?r.writeFloatLE(t):r.writeFloatBE(t)):e.includes("N")?r=W.Buffer.from(String(t)):console.log(`invalid type: ${e} or initvalue: ${t}`),r}const Q=K;function K(e,t,r){let s,i="B";if("number"==typeof t)"number"==typeof r?(s=W.Buffer.alloc(t),0!==r&&s.fill(r),i="B"):(s=W.Buffer.from(String(t)),i="N");else if("string"==typeof t&&"number"==typeof r)i=t.toUpperCase(),s=Y(t,r);else if("string"==typeof t&&void 0===r)s=W.Buffer.from(t),i="S";else if(t instanceof Uint8Array&&void 0===r)s=t instanceof W.Buffer?t:W.Buffer.from(t);else if(t instanceof ArrayBuffer&&void 0===r)s=W.Buffer.from(t);else if(ArrayBuffer.isView(t))s=W.Buffer.from(t.buffer,t.byteOffset,t.byteLength);else if("object"==typeof t&&void 0===r)s=W.Buffer.from(JSON.stringify(t)),i="O";else{if("boolean"!=typeof t||void 0!==r)throw TypeError("invalid meta buffer type");{const e=t?1:0;s=W.Buffer.from([e]),i="!"}}return"string"==typeof e&&e.includes("#")&&(e=""),[e,i,s]}const J=X;function X(...e){let t=0;return e.map((e=>{const r=t++;return"number"==typeof e?Q(r,"N",e):Q(r,e)}))}function Z(e){if((e=e.toUpperCase()).includes("8"))return e.includes("I")?"int8":"uint8";if(e.includes("16"))return e.includes("I")?e.includes("L")?"int16_le":"int16_be":e.includes("L")?"uint16_le":"uint16_be";if(e.includes("32"))return e.includes("I")?e.includes("L")?"int32_le":"int32_be":e.includes("L")?"uint32_le":"uint32_be";if(e.includes("F"))return e.includes("L")?"float_le":"float_be";if("B"===e)return"buffer";if("S"===e)return"string";if("N"===e)return"number";if("O"===e)return"object";if("!"===e)return"boolean";throw TypeError("invalid data type")}function ee(e,t,r,s){try{const i=Z(e);if("int8"==i)return t.readInt8(r);if("uint8"===i)return t.readUint8(r);if("int16_le"===i)return t.readInt16LE(r);if("int16_be"===i)return t.readInt16BE(r);if("uint16_le"===i)return t.readUint16LE(r);if("uint16_be"===i)return t.readUint16BE(r);if("int32_le"===i)return t.readInt32LE(r);if("int32_be"===i)return t.readInt32BE(r);if("uint32_le"===i)return t.readUint32LE(r);if("uint32_be"===i)return t.readUint32BE(r);if("float_le"===i)return t.readFloatLE(r);if("float_be"===i)return t.readFloatBE(r);if("buffer"===i)return t.subarray(r,r+s);if("string"===i){const e=t.subarray(r,r+s);return V.decode(e)}if("number"===i){const e=t.subarray(r,r+s);return Number(V.decode(e))}if("object"===i){const e=t.subarray(r,r+s);return JSON.parse(V.decode(e))}if("boolean"===i){return 1===t.readInt8(r)}return}catch(e){}}function te(...e){const t=function(e){let t=[];return e.filter((e=>{if(!Array.isArray(e[0]))return e;t=t.concat(e)})).concat(t)}(e);let r=0;const s=[];let i,n,o=0;if(t.forEach((e=>{const[t,i,n]=e;r+=n.byteLength,("number"==typeof t||t.length>0)&&s.push([t,i,o,n.byteLength]),o=r})),s.length>0){let e=JSON.stringify(s);i=G.encode(e),n=i.byteLength,r=r+n+2}const a=W.Buffer.alloc(r);if(o=0,t.forEach((e=>{const t=e[2];a.set(t,o),o+=t.byteLength})),s.length>0){a.set(i,o);const e=q("16",n);return a.set(e,o+n),a}return a}function re(e,t){const r=t||me(e);if(!r)return;const s=W.Buffer.from(e),i={};let n=0;if(r.forEach((e=>{const[t,r,o,a]=e;let h=ee(r,s,o,a);null!=h&&(i[t]=h,a&&(n+=a))})),t&&s.byteLength!==n){let e=s.byteLength-n,t=ee("b",s,n,e);if(null==t)return;i.$OTHERS=t}let o=0,a=[];for(;i[o];)a.push(i[o++]);return a.length>0&&(i.args=a,i.$=i.args),i}const se=ie;function ie(e,t=!1){if(void 0===e)throw TypeError("Invalid data type: Undefined");if("string"==typeof e)return G.encode(e);if("number"==typeof e)return Uint8Array.from([e]);if(e instanceof ArrayBuffer){if(t)return new Uint8Array(e);{const t=new Uint8Array(e),r=new Uint8Array(e.byteLength);return r.set(t),r}}if(ArrayBuffer.isView(e)){if(t)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);{const t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=new Uint8Array(e.byteLength);return r.set(t),r}}return G.encode(JSON.stringify(e))}const ne=oe;function oe(e,t=!1){const r=ie(e,t);return t?W.Buffer.from(r.buffer,r.byteOffset,r.byteLength):W.Buffer.from(r)}const ae=he;function he(...e){const t=e.map((e=>oe(e)));return W.Buffer.concat(t)}const ce=le;function le(...e){try{let t=0,r=0;const s=e.map((e=>ie(e)));s.forEach((e=>{t+=e.byteLength}));const i=new Uint8Array(t);return s.forEach((e=>{i.set(e,r),r+=e.byteLength})),i}catch(e){console.log(e)}}function fe(e,t){if(e.byteLength!==t.byteLength)return!1;for(let r=0;rt)return 0;return de(e,r)?r:0}return 0}function ye(e){const t=ue(e);return e.subarray(0,t)}function me(e,t=!1){e instanceof ArrayBuffer&&(e=W.Buffer.from(e));const r=ge(e);if(0===r)return;let s=de(e,r);return s?t?(s.forEach((e=>{null==e[3]&&(e[1].includes("8")?e[3]=1:e[1].includes("16")?e[3]=2:e[1].includes("32")||e[1].includes("F")?e[3]=4:e[1].includes("!")&&(e[3]=1)),e[4]=Z(e[1])})),s):s:void 0}function be(...e){return ye(te(...e))}function Ee(...e){return me(te(...e))}var we=Object.freeze({__proto__:null,Buffer:W.Buffer,NB:q,numberBuffer:Y,MB:Q,metaBuffer:K,MBA:J,metaBufferArguments:X,parseTypeName:Z,readTypedBuffer:ee,pack:te,unpack:re,U8:se,parseUint8Array:ie,B8:ne,parseBuffer:oe,B8pack:ae,parseBufferThenConcat:he,U8pack:ce,parseUint8ThenConcat:le,hex:function(e){return Array.prototype.map.call(new Uint8Array(e),(e=>("00"+e.toString(16)).slice(-2))).join("")},equal:fe,getBufferSize:ue,parseMetaInfo:de,TAIL_LEN:pe,readTail:ge,getMetaSize:_e,getBuffer:ye,getMeta:me,rawPack:be,meta:Ee,metaDetail:function(...e){return me(te(...e),!0)},getMetaDetail:function(e){return me(e,!0)}}),ve=B((function(e){var t=Object.prototype.hasOwnProperty,r="~";function s(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function n(e,t,s,n,o){if("function"!=typeof s)throw new TypeError("The listener must be a function");var a=new i(s,n||e,o),h=r?r+t:t;return e._events[h]?e._events[h].fn?e._events[h]=[e._events[h],a]:e._events[h].push(a):(e._events[h]=a,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new s:delete e._events[t]}function a(){this._events=new s,this._eventsCount=0}Object.create&&(s.prototype=Object.create(null),(new s).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,s,i=[];if(0===this._eventsCount)return i;for(s in e=this._events)t.call(e,s)&&i.push(r?s.slice(1):s);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},a.prototype.listeners=function(e){var t=r?r+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var i=0,n=s.length,o=new Array(n);i=64;){for(n=t[0],o=t[1],a=t[2],h=t[3],c=t[4],l=t[5],f=t[6],u=t[7],p=0;p<16;p++)g=s+4*p,e[p]=(255&r[g])<<24|(255&r[g+1])<<16|(255&r[g+2])<<8|255&r[g+3];for(p=16;p<64;p++)d=e[p-2],_=(d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10,d=e[p-15],y=(d>>>7|d<<25)^(d>>>18|d<<14)^d>>>3,e[p]=(_+e[p-7]|0)+(y+e[p-16]|0);for(p=0;p<64;p++)_=(((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&l^~c&f)|0)+(u+(Se[p]+e[p]|0)|0)|0,y=((n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10))+(n&o^n&a^o&a)|0,u=f,f=l,l=c,c=h+_|0,h=a,a=o,o=n,n=_+y|0;t[0]+=n,t[1]+=o,t[2]+=a,t[3]+=h,t[4]+=c,t[5]+=l,t[6]+=f,t[7]+=u,s+=64,i-=64}return s}const Ae=function(){function e(){this.digestLength=32,this.blockSize=64,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var e=0;e0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[r++],t--;64===this.bufferLength&&(ke(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(r=ke(this.temp,this.state,e,r,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[r++],t--;return this},e.prototype.finish=function(e){if(!this.finished){const e=this.bytesHashed,r=this.bufferLength,s=e/536870912|0,i=e<<3,n=e%64<56?64:128;this.buffer[r]=128;for(var t=r+1;t>>24&255,this.buffer[n-7]=s>>>16&255,this.buffer[n-6]=s>>>8&255,this.buffer[n-5]=s>>>0&255,this.buffer[n-4]=i>>>24&255,this.buffer[n-3]=i>>>16&255,this.buffer[n-2]=i>>>8&255,this.buffer[n-1]=i>>>0&255,ke(this.temp,this.state,this.buffer,0,n),this.finished=!0}for(t=0;t<8;t++)e[4*t+0]=this.state[t]>>>24&255,e[4*t+1]=this.state[t]>>>16&255,e[4*t+2]=this.state[t]>>>8&255,e[4*t+3]=this.state[t]>>>0&255;return this},e.prototype.digest=function(){const e=new Uint8Array(this.digestLength);return this.finish(e),e},e.prototype._saveState=function(e){for(let t=0;tthis.blockSize)(new Ae).update(e).finish(t).clean();else for(var r=0;r0;){o=s<32?s:32;let t=this.getIndexOTP(++i);for(let r=0;r{(ArrayBuffer.isView(e)||e instanceof ArrayBuffer)&&(s=!0)})),s?t=Fe.MBA:(t=Fe.MJSON,r=We.encode(JSON.stringify(e)))}return{type:t,buffer:r}}(t);if(i.type==Fe.EMPTY)r=te(Q("#MsgType","8",je.SIGNAL),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",i.type));else if(i.type==Fe.MBA){let e=te(J(...t));r=te(Q("#MsgType","8",je.SIGNAL),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",i.type),Q("#mbaBuffer",e))}else r=te(Q("#MsgType","8",je.SIGNAL),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",i.type),Q("#payload",i.buffer));return r}const Ve=new TextEncoder,qe=new TextDecoder;class Ye extends ve{constructor(e){super(),this.cid="",this.ip="",this.socket=null,this.url=e,this.state=Pe.CLOSED,this.stateName=this.getStateName(),this.txCounter=0,this.rxCounter=0,this.txBytes=0,this.rxBytes=0,this.lastTxRxTime=Date.now(),this.connectionCheckerPeriod=$e.CONNECTION_CHECKER_PERIOD,this.connectionCheckerIntervalID=null,this.boho=new Me,this.TLS=!1,this.encMode=He.AUTO,this.useAuth=!1,this.nick="",this.channels=new Set,this.promiseMap=new Map,this.promiseTimeOut=$e.PROMISE_TIMEOUT,this.mid=0,this.level=3,this.quota=ze[this.level],this.serverSet={},this.linkMap=new Map,this.on("open",this.onOpen.bind(this)),this.on("close",this.onClose.bind(this)),this.on("socket_data",this.onData.bind(this))}redirect(e){this.close(),this.stateChange("redirecting"),this.createConnection(e)}open(e){if(e||this.url){if(e)if(this.url){if(e!==this.url&&(this.url=e,this.socket))return void this.close()}else this.url=e;this.createConnection(this.url),this.connectionCheckerIntervalID||(this.connectionCheckerIntervalID=setInterval(this.keepAlive.bind(this),this.connectionCheckerPeriod))}}onOpen(){this.url.includes("wss://")?this.TLS=!0:this.TLS=!1,this.stateChange("open")}onClose(){this.boho.isAuthorized=!1,this.cid="",this.stateChange("closed")}login(e,t){if(!e&&!t)return void console.log("no id and key.");if(console.log("manual login: ",e),!t&&e.includes("."))this.boho.set_id_key(e);else{if(!e||!t)return void console.log("no id or key.");this.boho.set_id8(e),this.boho.set_key(t)}this.useAuth=!0;let r=this.boho.auth_req();this.send(r)}auth(e,t){if(e||t){if(!t&&e.includes("."))this.boho.set_id_key(e);else{if(!e||!t)return void console.log("no id or key.");this.boho.set_id8(e),this.boho.set_key(t)}this.useAuth=!0}else console.log("no id and key.")}onData(e){let t,r=e[0];if(r===Ce.ENC_488)t=this.boho.decrypt_488(e),t&&(r=t[0],e=t);else if(r===Ce.ENC_E2E)try{if(t=this.boho.decrypt_488(e),!t)return;r=t[0],e.set(t,Re.ENC_488),e=e.subarray(Re.ENC_488)}catch(e){return}let s=je[r];switch(s||(s=Ce[r]),r){case je.OVER_SIZE:console.log("## server sent: over_size event."),this.emit("over_size","over_size");break;case je.PING:this.pong();break;case je.PONG:break;case je.IAM_RES:try{let t=qe.decode(e.subarray(1)),r=JSON.parse(t);r.ip&&(this.ip=r.ip),console.log("",JSON.stringify(r))}catch(e){}break;case je.CID_RES:let r=qe.decode(e.subarray(1));this.cid=r,this.stateChange("ready","cid_ready"),this.subscribe_memory_channels();break;case je.QUOTA_LEVEL:let s=e[1];this.level=s,this.quota=ze[s],console.log("## QUOTA:",s,JSON.stringify(this.quota));break;case je.SERVER_CLEAR_AUTH:this.useAuth=!1,this.boho.clearAuth(),this.stop();break;case je.SERVER_REDIRECT:let i,n,o;7==e.byteLength?(i=function(e){if(6!=e.byteLength)return;return e[0].toString()+"."+e[1].toString()+"."+e[2].toString()+"."+e[3].toString()+":"+((e[4]<<8)+e[5]).toString()}(e.subarray(1)),o="cong://"):(i=qe.decode(e.subarray(1)),o=""),n=o+i,this.redirect(n);break;case je.SERVER_READY:this.stateChange("server_ready","server_ready"),this.useAuth?this.send(this.boho.auth_req()):this.send(W.Buffer.from([je.CID_REQ]));break;case je.SERVER_SIGNAL:try{let t=qe.decode(e.subarray(1)),r=JSON.parse(t);r.event&&r.data&&(this.serverSet=r.data,this.emit(r.event,r.data))}catch(e){}break;case je.SET:try{let t=re(e);t&&this.emit(t.topic,...t.args)}catch(e){}break;case je.SIGNAL_E2E:case je.SIGNAL:try{let t=e.readUint8(1),r=e.subarray(2,2+t),s=qe.decode(r),i=e.readUint8(2+t),n=e.subarray(3+t);switch(i){case Fe.EMPTY:0===s.indexOf("@")?this.emit("@",null,s):this.emit(s,null,s);break;case Fe.TEXT:let e=n.subarray(0,n.byteLength-1),t=qe.decode(e);0===s.indexOf("@")&&this.emit("@",t,s),"@"!==s&&this.emit(s,t,s);break;case Fe.BINARY:0===s.indexOf("@")&&this.emit("@",n,s),"@"!==s&&this.emit(s,n,s);break;case Fe.OBJECT:let r=qe.decode(n),i=JSON.parse(r);0===s.indexOf("@")&&this.emit("@",i,s),"@"!==s&&this.emit(s,i,s);break;case Fe.MJSON:let o=qe.decode(n),a=JSON.parse(o);0===s.indexOf("@")&&this.emit("@",...a,s),"@"!==s&&this.emit(s,...a,s);break;case Fe.MBA:let h=re(n);0===s.indexOf("@")&&this.emit("@",...h.args,s),"@"!==s&&this.emit(s,...h.args,s)}}catch(e){}break;case je.RESPONSE_MBP:this.testPromise(e);break;case Ce.AUTH_NONCE:let a=this.boho.auth_hmac(e);a?this.send(a):this.stateChange("auth_fail","Invalid local auth_hmac.");break;case Ce.AUTH_FAIL:this.stateChange("auth_fail","server reject auth.");break;case Ce.AUTH_ACK:this.boho.check_auth_ack_hmac(e)?(this.stateChange("auth_ready","server sent auth_ack"),this.send(W.Buffer.from([je.CID_REQ]))):this.stateChange("auth_fail","invalid server_hmac");break;default:try{t=qe.decode(e),this.emit("text_message",t)}catch(e){}}}iam(e){e?this.send_enc_mode(te(Q("#MsgType","8",je.IAM),Q("#",e))):this.send_enc_mode(te(Q("#MsgType","8",je.IAM)))}ping(){this.send(W.Buffer.from([je.PING]))}pong(){this.send(W.Buffer.from([je.PONG]))}echo(e){e?(console.log("echo args:",e),this.send_enc_mode(te(Q("#MsgType","8",je.ECHO),Q("#msg",e)))):this.send(W.Buffer.from([je.ECHO]))}bin(...e){this.send(ce(...e))}send(e){if(e.byteLength>this.quota.signalSize)return this.emit("over_size"),console.log("## QUOTA LIMIT OVER!! \nsignal message.byteLength: ",e.byteLength),void console.log("## your maximum signalSize(bytes) is:",this.quota.signalSize);this.socket_send(e)}getEncryptionMode(){return!(this.encMode!==He.YES&&(this.encMode!==He.AUTO||this.TLS||!this.boho.isAuthorized))}send_enc_mode(e,t){if(void 0===t&&(t=this.getEncryptionMode()),e[0]==je.SIGNAL_E2E&&t){let t=e[1],r=this.boho.encrypt_488(e.subarray(0,3+t));r[0]=Ce.ENC_E2E,this.send(W.Buffer.concat([r,e.subarray(3+t)]))}else if(t){let t=this.boho.encrypt_488(e);this.send(t)}else this.send(e)}setMsgPromise(e){return new Promise(((t,r)=>{this.promiseMap.set(e,[t,r]),setTimeout((t=>{this.promiseMap.has(e)&&(r("timeout"),this.promiseMap.delete(e))}),this.promiseTimeOut)}))}testPromise(e){let t=re(e);if(t)if(this.promiseMap.has(t.mid)){let[e,r]=this.promiseMap.get(t.mid);this.promiseMap.delete(t.mid),t.status<128?(t.ok=!0,e(t)):(t.ok=!1,r(t))}else console.log("no promise id")}publish(...e){this.signal(...e)}signal(e,...t){if("string"!=typeof e)throw TypeError("tag should be string.");let r=Ge(e,...t);this.send_enc_mode(r)}decrypt_e2e(e,t){return this.boho.decrypt_e2e(e,t)}signal_e2e(e,t,r){if("string"!=typeof e)throw TypeError("tag should be string.");let s=Ve.encode(e),i=ne(t),n=this.boho.encrypt_e2e(i,r),o=te(Q("#MsgType","8",je.SIGNAL_E2E),Q("#tagLen","8",s.byteLength),Q("#tag",s),Q("#payloadType","8",Fe.BINARY),Q("#payload",n));this.send_enc_mode(o)}set(e,...t){return e&&0!=t.length?this.req("store","set",e,...t):Promise.reject(new Error("set need storeName and value)"))}async get(e){if(!e)return Promise.reject(new Error("store get need storeName)"));let t=await this.req("store","get",e),{$:r}=re(t.body);return r}req(e,t,...r){if(!e||!t)return Promise.reject(new Error("request need target and topic)"));let s;return s=r.length>0?te(Q("#MsgType","8",je.REQUEST),Q("mid","16",++this.mid),Q("target",e),Q("topic",t),J(...r)):te(Q("#MsgType","8",je.REQUEST),Q("mid","16",++this.mid),Q("target",e),Q("topic",t)),this.send_enc_mode(s),this.setMsgPromise(this.mid)}subscribe(e){if("string"!=typeof e)throw TypeError("tag should be string.");if(this.state!==Pe.READY)return;e.split(",").forEach((e=>{this.channels.add(e)}));let t=Ve.encode(e);if(t.byteLength>$e.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+$e.TAG_LEN1);this.send_enc_mode(W.Buffer.concat([q("8",je.SUBSCRIBE),q("8",t.byteLength),t]))}subscribe_promise(e){if("string"!=typeof e)throw TypeError("tag should be string.");if(this.state!==Pe.READY)return Promise.reject("subscribe_promise:: connection is not ready");let t=Ve.encode(e);if(t.byteLength>$e.TAG_LEN2)throw TypeError("please use tag string bytelength: "+$e.TAG_LEN2);return this.send_enc_mode(W.Buffer.concat([q("8",je.SUBSCRIBE_REQ),q("16",++this.mid),q("16",t.byteLength),t])),this.setMsgPromise(this.mid)}subscribe_memory_channels(){if(0==this.channels.size)return;let e=Array.from(this.channels).join(",");this.subscribe_promise(e).then((e=>{})).catch((e=>{console.log(">> SUBSCRIBE FAIL:",e)}))}unsubscribe(e=""){if("string"!=typeof e)throw TypeError("tag should be string.");if(""==e)this.channels.clear();else{e.split(",").forEach((e=>{this.channels.delete(e)}))}let t=Ve.encode(e);if(t.byteLength>$e.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+$e.TAG_LEN1);this.send_enc_mode(W.Buffer.concat([q("8",je.UNSUBSCRIBE),q("8",t.byteLength),t]))}listen(e,t){if("string"!=typeof e)throw TypeError("tag should be string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof t)throw TypeError("handler is not a function.");0!==e.indexOf("@")&&this.channels.add(e),this.on(e,t)}link(e,t,r){if("string"!=typeof e)throw TypeError("to(local link target) is not a string.");if("string"!=typeof t)throw TypeError("tag is not a string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof r)throw TypeError("handler is not a function.");let s;0!==t.indexOf("@")&&this.channels.add(t),s=this.linkMap.has(e)?this.linkMap.get(e):new Set,s.add(t),this.linkMap.set(e,s),this.on(t,r),this.subscribe(t)}unlink(e,t){if("string"!=typeof e)throw TypeError("to(local link target) is not a string.");if("string"!=typeof t)throw TypeError("tag is not a string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if(!this.linkMap.has(e))return;let r=this.linkMap.get(e),s=Array.from(r);for(let i=0;i0&&(this.frames.forEach((e=>{this.push(e)})),this.frames=[]),r()}addData(e){let t=e.byteLength,r=0;for(;t--;)this.rxi++,0==e[r++]&&this.rxi_zero++;this.buffer.byteLength>0?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.parse()}parse(){let e,t,r=this.buffer[0];if(r==Qe){if(e=2,this.buffer.byteLength{}},rt="function"==typeof __webpack_require__?__non_webpack_require__:C,st=process.config&&process.config.variables||{},it=!!process.env.PREBUILDS_ONLY,nt=process.versions.modules,ot=!(!process.versions||!process.versions.electron)||!!process.env.ELECTRON_RUN_AS_NODE||"undefined"!=typeof window&&window.process&&"renderer"===window.process.type?"electron":process.versions&&process.versions.nw?"node-webkit":"node",at=process.env.npm_config_arch||v.default.arch(),ht=process.env.npm_config_platform||v.default.platform(),ct=process.env.LIBC||(function(e){return"linux"===e&&E.default.existsSync("/etc/alpine-release")}(ht)?"musl":"glibc"),lt=process.env.ARM_VERSION||("arm64"===at?"8":st.arm_version)||"",ft=(process.versions.uv||"").split(".")[0],ut=dt;function dt(e){return rt(dt.resolve(e))}function pt(e){try{return E.default.readdirSync(e)}catch(e){return[]}}function gt(e,t){var r=pt(e).filter(t);return r[0]&&w.default.join(e,r[0])}function _t(e){return/\.node$/.test(e)}function yt(e){var t=e.split("-");if(2===t.length){var r=t[0],s=t[1].split("+");if(r&&s.length&&s.every(Boolean))return{name:e,platform:r,architectures:s}}}function mt(e,t){return function(r){return null!=r&&(r.platform===e&&r.architectures.includes(t))}}function bt(e,t){return e.architectures.length-t.architectures.length}function Et(e){var t=e.split("."),r={file:e,specificity:0};if("node"===t.pop()){for(var s=0;sr.specificity?-1:1:0}}dt.resolve=dt.path=function(e){e=w.default.resolve(e||".");try{var t=rt(w.default.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");process.env[t+"_PREBUILD"]&&(e=process.env[t+"_PREBUILD"])}catch(e){}if(!it){var r=gt(w.default.join(e,"build/Release"),_t);if(r)return r;var s=gt(w.default.join(e,"build/Debug"),_t);if(s)return s}var i=a(e);if(i)return i;var n=a(w.default.dirname(process.execPath));if(n)return n;var o=["platform="+ht,"arch="+at,"runtime="+ot,"abi="+nt,"uv="+ft,lt?"armv="+lt:"","libc="+ct,"node="+process.versions.node,process.versions.electron?"electron="+process.versions.electron:"","function"==typeof __webpack_require__?"webpack=true":""].filter(Boolean).join(" ");throw new Error("No native build was found for "+o+"\n loaded from: "+e+"\n");function a(e){var t=pt(w.default.join(e,"prebuilds")).map(yt).filter(mt(ht,at)).sort(bt)[0];if(t){var r=w.default.join(e,"prebuilds",t.name),s=pt(r).map(Et).filter(wt(ot,nt)).sort(vt(ot))[0];return s?w.default.join(r,s.file):void 0}}},dt.parseTags=Et,dt.matchTags=wt,dt.compareTags=vt,dt.parseTuple=yt,dt.matchTuple=mt,dt.compareTuples=bt;var St=B((function(e){const t="function"==typeof __webpack_require__?__non_webpack_require__:C;"function"==typeof t.addon?e.exports=t.addon.bind(t):e.exports=ut}));var kt={mask:(e,t,r,s,i)=>{for(var n=0;n{const r=e.length;for(var s=0;s{this.pending--,this[xt]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[xt]()}[xt](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[Lt])}}};const{kStatusCode:Ct}=tt,It=Buffer[Symbol.species],Ot=Buffer.from([0,0,255,255]),Rt=Symbol("permessage-deflate"),Nt=Symbol("total-length"),Ut=Symbol("callback"),Mt=Symbol("buffers"),Pt=Symbol("error");let Dt;var Ht=class{constructor(e,t,r){if(this._maxPayload=0|r,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!Dt){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;Dt=new Bt(e)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){const e=this._deflate[Ut];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){const t=this._options,r=e.find((e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits)));if(!r)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(r.server_no_context_takeover=!0),t.clientNoContextTakeover&&(r.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(r.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?r.client_max_window_bits=t.clientMaxWindowBits:!0!==r.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete r.client_max_window_bits,r}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach((e=>{Object.keys(e).forEach((t=>{let r=e[t];if(r.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(r=r[0],"client_max_window_bits"===t){if(!0!==r){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}else if("server_max_window_bits"===t){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==r)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}e[t]=r}))})),e}decompress(e,t,r){Dt.add((s=>{this._decompress(e,t,((e,t)=>{s(),r(e,t)}))}))}compress(e,t,r){Dt.add((s=>{this._compress(e,t,((e,t)=>{s(),r(e,t)}))}))}_decompress(e,t,r){const s=this._isServer?"client":"server";if(!this._inflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?b.default.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=b.default.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[Rt]=this,this._inflate[Nt]=0,this._inflate[Mt]=[],this._inflate.on("error",jt),this._inflate.on("data",Ft)}this._inflate[Ut]=r,this._inflate.write(e),t&&this._inflate.write(Ot),this._inflate.flush((()=>{const e=this._inflate[Pt];if(e)return this._inflate.close(),this._inflate=null,void r(e);const i=Tt.concat(this._inflate[Mt],this._inflate[Nt]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Nt]=0,this._inflate[Mt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,i)}))}_compress(e,t,r){const s=this._isServer?"server":"client";if(!this._deflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?b.default.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=b.default.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[Nt]=0,this._deflate[Mt]=[],this._deflate.on("data",$t)}this._deflate[Ut]=r,this._deflate.write(e),this._deflate.flush(b.default.Z_SYNC_FLUSH,(()=>{if(!this._deflate)return;let e=Tt.concat(this._deflate[Mt],this._deflate[Nt]);t&&(e=new It(e.buffer,e.byteOffset,e.length-4)),this._deflate[Ut]=null,this._deflate[Nt]=0,this._deflate[Mt]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,e)}))}};function $t(e){this[Mt].push(e),this[Nt]+=e.length}function Ft(e){this[Nt]+=e.length,this[Rt]._maxPayload<1||this[Nt]<=this[Rt]._maxPayload?this[Mt].push(e):(this[Pt]=new RangeError("Max payload size exceeded"),this[Pt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Pt][Ct]=1009,this.removeListener("data",Ft),this.reset())}function jt(e){this[Rt]._inflate=null,e[Ct]=1007,this[Ut](e)}var zt=function(e){const t=e.length;let r=0;for(;r=t||128!=(192&e[r+1])||128!=(192&e[r+2])||224===e[r]&&128==(224&e[r+1])||237===e[r]&&160==(224&e[r+1]))return!1;r+=3}else{if(240!=(248&e[r]))return!1;if(r+3>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||128!=(192&e[r+3])||240===e[r]&&128==(240&e[r+1])||244===e[r]&&e[r+1]>143||e[r]>244)return!1;r+=4}return!0},Wt=B((function(e){try{e.exports=St(__dirname)}catch(t){e.exports=zt}})),Gt=B((function(e){const{isUtf8:t}=S.default;function r(e){const t=e.length;let r=0;for(;r=t||128!=(192&e[r+1])||128!=(192&e[r+2])||224===e[r]&&128==(224&e[r+1])||237===e[r]&&160==(224&e[r+1]))return!1;r+=3}else{if(240!=(248&e[r]))return!1;if(r+3>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||128!=(192&e[r+3])||240===e[r]&&128==(240&e[r+1])||244===e[r]&&e[r+1]>143||e[r]>244)return!1;r+=4}return!0}if(e.exports={isValidStatusCode:function(e){return e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999},isValidUTF8:r,tokenChars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0]},t)e.exports.isValidUTF8=function(e){return e.length<24?r(e):t(e)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{const t=Wt;e.exports.isValidUTF8=function(e){return e.length<32?r(e):t(e)}}catch(e){}}));const{Writable:Vt}=y.default,{BINARY_TYPES:qt,EMPTY_BUFFER:Yt,kStatusCode:Qt,kWebSocket:Kt}=tt,{concat:Jt,toArrayBuffer:Xt,unmask:Zt}=Tt,{isValidStatusCode:er,isValidUTF8:tr}=Gt,rr=Buffer[Symbol.species],sr=Promise.resolve(),ir="function"==typeof queueMicrotask?queueMicrotask:function(e){sr.then(e).catch(ar)};var nr=class extends Vt{constructor(e={}){super(),this._allowSynchronousEvents=!!e.allowSynchronousEvents,this._binaryType=e.binaryType||qt[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=0|e.maxPayload,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Kt]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(e,t,r){if(8===this._opcode&&0==this._state)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e=r.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=new rr(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return t}startLoop(e){this._loop=!0;do{switch(this._state){case 0:this.getInfo(e);break;case 1:this.getPayloadLength16(e);break;case 2:this.getPayloadLength64(e);break;case 3:this.getMask();break;case 4:this.getData(e);break;case 5:case 6:return void(this._loop=!1)}}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2)return void(this._loop=!1);const t=this.consume(2);if(0!=(48&t[0])){return void e(this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3"))}const r=64==(64&t[0]);if(!r||this._extensions[Ht.extensionName]){if(this._fin=128==(128&t[0]),this._opcode=15&t[0],this._payloadLength=127&t[1],0===this._opcode){if(r){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(!this._fragmented){return void e(this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE"))}this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented){return void e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"))}this._compressed=r}else{if(!(this._opcode>7&&this._opcode<11)){return void e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"))}if(!this._fin){return void e(this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN"))}if(r){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(this._payloadLength>125||8===this._opcode&&1===this._payloadLength){return void e(this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH"))}}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&t[1]),this._isServer){if(!this._masked){return void e(this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK"))}}else if(this._masked){return void e(this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK"))}126===this._payloadLength?this._state=1:127===this._payloadLength?this._state=2:this.haveLength(e)}else{e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}}getPayloadLength16(e){this._bufferedBytes<2?this._loop=!1:(this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e))}getPayloadLength64(e){if(this._bufferedBytes<8)return void(this._loop=!1);const t=this.consume(8),r=t.readUInt32BE(0);if(r>Math.pow(2,21)-1){e(this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH"))}else this._payloadLength=r*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){e(this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"))}else this._masked?this._state=3:this._state=4}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=4)}getData(e){let t=Yt;if(this._payloadLength){if(this._bufferedBytes7)this.controlMessage(t,e);else{if(this._compressed)return this._state=5,void this.decompress(t,e);t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}}decompress(e,t){this._extensions[Ht.extensionName].decompress(e,this._fin,((e,r)=>{if(e)return t(e);if(r.length){if(this._messageLength+=r.length,this._messageLength>this._maxPayload&&this._maxPayload>0){const e=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");return void t(e)}this._fragments.push(r)}this.dataMessage(t),0===this._state&&this.startLoop(t)}))}dataMessage(e){if(!this._fin)return void(this._state=0);const t=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],2===this._opcode){let s;s="nodebuffer"===this._binaryType?Jt(r,t):"arraybuffer"===this._binaryType?Xt(Jt(r,t)):r,5===this._state||this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=0):(this._state=6,ir((()=>{this.emit("message",s,!0),this._state=0,this.startLoop(e)})))}else{const s=Jt(r,t);if(!this._skipUTF8Validation&&!tr(s)){const t=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");return void e(t)}5===this._state||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=0):(this._state=6,ir((()=>{this.emit("message",s,!1),this._state=0,this.startLoop(e)})))}}controlMessage(e,t){if(8!==this._opcode)this._allowSynchronousEvents?(this.emit(9===this._opcode?"ping":"pong",e),this._state=0):(this._state=6,ir((()=>{this.emit(9===this._opcode?"ping":"pong",e),this._state=0,this.startLoop(t)})));else{if(0===e.length)this._loop=!1,this.emit("conclude",1005,Yt),this.end();else{const r=e.readUInt16BE(0);if(!er(r)){const e=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");return void t(e)}const s=new rr(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!tr(s)){const e=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");return void t(e)}this._loop=!1,this.emit("conclude",r,s),this.end()}this._state=0}}createError(e,t,r,s,i){this._loop=!1,this._errored=!0;const n=new e(r?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(n,this.createError),n.code=i,n[Qt]=s,n}};function or(e){throw e}function ar(e){process.nextTick(or,e)}const{randomFillSync:hr}=_.default,{EMPTY_BUFFER:cr}=tt,{isValidStatusCode:lr}=Gt,{mask:fr,toBuffer:ur}=Tt,dr=Symbol("kByteLength"),pr=Buffer.alloc(4);class gr{constructor(e,t,r){this._extensions=t||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){let r,s,i=!1,n=2,o=!1;t.mask&&(r=t.maskBuffer||pr,t.generateMask?t.generateMask(r):hr(r,0,4),o=0==(r[0]|r[1]|r[2]|r[3]),n=6),"string"==typeof e?s=t.mask&&!o||void 0===t[dr]?(e=Buffer.from(e)).length:t[dr]:(s=e.length,i=t.mask&&t.readOnly&&!o);let a=s;s>=65536?(n+=8,a=127):s>125&&(n+=2,a=126);const h=Buffer.allocUnsafe(i?s+n:n);return h[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(h[0]|=64),h[1]=a,126===a?h.writeUInt16BE(s,2):127===a&&(h[2]=h[3]=0,h.writeUIntBE(s,4,6)),t.mask?(h[1]|=128,h[n-4]=r[0],h[n-3]=r[1],h[n-2]=r[2],h[n-1]=r[3],o?[h,e]:i?(fr(e,r,h,n,s),[h]):(fr(e,r,e,0,s),[h,e])):[h,e]}close(e,t,r,s){let i;if(void 0===e)i=cr;else{if("number"!=typeof e||!lr(e))throw new TypeError("First argument must be a valid error code number");if(void 0!==t&&t.length){const r=Buffer.byteLength(t);if(r>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+r),i.writeUInt16BE(e,0),"string"==typeof t?i.write(t,2):i.set(t,2)}else i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0)}const n={[dr]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._deflating?this.enqueue([this.dispatch,i,!1,n,s]):this.sendFrame(gr.frame(i,n),s)}ping(e,t,r){let s,i;if("string"==typeof e?(s=Buffer.byteLength(e),i=!1):(s=(e=ur(e)).length,i=ur.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const n={[dr]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,n,r]):this.sendFrame(gr.frame(e,n),r)}pong(e,t,r){let s,i;if("string"==typeof e?(s=Buffer.byteLength(e),i=!1):(s=(e=ur(e)).length,i=ur.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const n={[dr]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,n,r]):this.sendFrame(gr.frame(e,n),r)}send(e,t,r){const s=this._extensions[Ht.extensionName];let i,n,o=t.binary?2:1,a=t.compress;if("string"==typeof e?(i=Buffer.byteLength(e),n=!1):(i=(e=ur(e)).length,n=ur.readOnly),this._firstFragment?(this._firstFragment=!1,a&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(a=i>=s._threshold),this._compress=a):(a=!1,o=0),t.fin&&(this._firstFragment=!0),s){const s={[dr]:i,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:n,rsv1:a};this._deflating?this.enqueue([this.dispatch,e,this._compress,s,r]):this.dispatch(e,this._compress,s,r)}else this.sendFrame(gr.frame(e,{[dr]:i,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:n,rsv1:!1}),r)}dispatch(e,t,r,s){if(!t)return void this.sendFrame(gr.frame(e,r),s);const i=this._extensions[Ht.extensionName];this._bufferedBytes+=r[dr],this._deflating=!0,i.compress(e,r.fin,((e,t)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");"function"==typeof s&&s(e);for(let t=0;t{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>[t].concat(Object.keys(e).map((t=>{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>!0===e?t:`${t}=${e}`)).join("; ")}))).join("; "))).join(", ")})).join(", ")},parse:function(e){const t=Object.create(null);let r,s,i=Object.create(null),n=!1,o=!1,a=!1,h=-1,c=-1,l=-1,f=0;for(;f0&&e.unshift(t),e.on("close",bs),e.on("data",Es),e.on("end",ws),e.on("error",vs),this._readyState=ss.OPEN,this.emit("open")}emitClose(){if(!this._socket)return this._readyState=ss.CLOSED,void this.emit("close",this._closeCode,this._closeMessage);this._extensions[Ht.extensionName]&&this._extensions[Ht.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=ss.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==ss.CLOSED)if(this.readyState!==ss.CONNECTING)this.readyState!==ss.CLOSING?(this._readyState=ss.CLOSING,this._sender.close(e,t,!this._isServer,(e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())})),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),3e4)):this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();else{const e="WebSocket was closed before the connection was established";cs(this,this._req,e)}}pause(){this.readyState!==ss.CONNECTING&&this.readyState!==ss.CLOSED&&(this._paused=!0,this._socket.pause())}ping(e,t,r){if(this.readyState===ss.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===ss.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||Fr,t,r)):ls(this,e,r)}pong(e,t,r){if(this.readyState===ss.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===ss.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||Fr,t,r)):ls(this,e,r)}resume(){this.readyState!==ss.CONNECTING&&this.readyState!==ss.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,r){if(this.readyState===ss.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(r=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==ss.OPEN)return void ls(this,e,r);const s={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[Ht.extensionName]||(s.compress=!1),this._sender.send(e||Fr,s,r)}terminate(){if(this.readyState!==ss.CLOSED)if(this.readyState!==ss.CONNECTING)this._socket&&(this._readyState=ss.CLOSING,this._socket.destroy());else{const e="WebSocket was closed before the connection was established";cs(this,this._req,e)}}}Object.defineProperty(ss,"CONNECTING",{enumerable:!0,value:ts.indexOf("CONNECTING")}),Object.defineProperty(ss.prototype,"CONNECTING",{enumerable:!0,value:ts.indexOf("CONNECTING")}),Object.defineProperty(ss,"OPEN",{enumerable:!0,value:ts.indexOf("OPEN")}),Object.defineProperty(ss.prototype,"OPEN",{enumerable:!0,value:ts.indexOf("OPEN")}),Object.defineProperty(ss,"CLOSING",{enumerable:!0,value:ts.indexOf("CLOSING")}),Object.defineProperty(ss.prototype,"CLOSING",{enumerable:!0,value:ts.indexOf("CLOSING")}),Object.defineProperty(ss,"CLOSED",{enumerable:!0,value:ts.indexOf("CLOSED")}),Object.defineProperty(ss.prototype,"CLOSED",{enumerable:!0,value:ts.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((e=>{Object.defineProperty(ss.prototype,e,{enumerable:!0})})),["open","error","close","message"].forEach((e=>{Object.defineProperty(ss.prototype,`on${e}`,{enumerable:!0,get(){for(const t of this.listeners(e))if(t[zr])return t[Wr];return null},set(t){for(const t of this.listeners(e))if(t[zr]){this.removeListener(e,t);break}"function"==typeof t&&this.addEventListener(e,t,{[zr]:!0})}})})),ss.prototype.addEventListener=Yr,ss.prototype.removeEventListener=Qr;var is=ss;function ns(e,t,r,s){const i={allowSynchronousEvents:!1,autoPong:!0,protocolVersion:es[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(e._autoPong=i.autoPong,!es.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${es.join(", ")})`);let n;if(t instanceof Hr)n=t;else try{n=new Hr(t)}catch(e){throw new SyntaxError(`Invalid URL: ${t}`)}"http:"===n.protocol?n.protocol="ws:":"https:"===n.protocol&&(n.protocol="wss:"),e._url=n.href;const o="wss:"===n.protocol,a="ws+unix:"===n.protocol;let h;if("ws:"===n.protocol||o||a?a&&!n.pathname?h="The URL's pathname is empty":n.hash&&(h="The URL contains a fragment identifier"):h='The URL\'s protocol must be one of "ws:", "wss:", "http:", "https", or "ws+unix:"',h){const t=new SyntaxError(h);if(0===e._redirects)throw t;return void os(e,t)}const c=o?443:80,l=Pr(16).toString("base64"),f=o?A.default.request:T.default.request,u=new Set;let d,p;if(i.createConnection=o?hs:as,i.defaultPort=i.defaultPort||c,i.port=n.port||c,i.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":l,Connection:"Upgrade",Upgrade:"websocket"},i.path=n.pathname+n.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(d=new Ht(!0!==i.perMessageDeflate?i.perMessageDeflate:{},!1,i.maxPayload),i.headers["Sec-WebSocket-Extensions"]=Kr({[Ht.extensionName]:d.offer()})),r.length){for(const e of r){if("string"!=typeof e||!rs.test(e)||u.has(e))throw new SyntaxError("An invalid or duplicated subprotocol was specified");u.add(e)}i.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(n.username||n.password)&&(i.auth=`${n.username}:${n.password}`),a){const e=i.path.split(":");i.socketPath=e[0],i.path=e[1]}if(i.followRedirects){if(0===e._redirects){e._originalIpc=a,e._originalSecure=o,e._originalHostOrSocketPath=a?i.socketPath:n.host;const t=s&&s.headers;if(s={...s,headers:{}},t)for(const[e,r]of Object.entries(t))s.headers[e.toLowerCase()]=r}else if(0===e.listenerCount("redirect")){const t=a?!!e._originalIpc&&i.socketPath===e._originalHostOrSocketPath:!e._originalIpc&&n.host===e._originalHostOrSocketPath;(!t||e._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,t||delete i.headers.host,i.auth=void 0)}i.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),p=e._req=f(i),e._redirects&&e.emit("redirect",e.url,p)}else p=e._req=f(i);i.timeout&&p.on("timeout",(()=>{cs(e,p,"Opening handshake has timed out")})),p.on("error",(t=>{null===p||p[Zr]||(p=e._req=null,os(e,t))})),p.on("response",(n=>{const o=n.headers.location,a=n.statusCode;if(o&&i.followRedirects&&a>=300&&a<400){if(++e._redirects>i.maxRedirects)return void cs(e,p,"Maximum redirects exceeded");let n;p.abort();try{n=new Hr(o,t)}catch(t){const r=new SyntaxError(`Invalid URL: ${o}`);return void os(e,r)}ns(e,n,r,s)}else e.emit("unexpected-response",p,n)||cs(e,p,`Unexpected server response: ${n.statusCode}`)})),p.on("upgrade",((t,r,s)=>{if(e.emit("upgrade",t),e.readyState!==ss.CONNECTING)return;if(p=e._req=null,"websocket"!==t.headers.upgrade.toLowerCase())return void cs(e,r,"Invalid Upgrade header");const n=Dr("sha1").update(l+jr).digest("base64");if(t.headers["sec-websocket-accept"]!==n)return void cs(e,r,"Invalid Sec-WebSocket-Accept header");const o=t.headers["sec-websocket-protocol"];let a;if(void 0!==o?u.size?u.has(o)||(a="Server sent an invalid subprotocol"):a="Server sent a subprotocol but none was requested":u.size&&(a="Server sent no subprotocol"),a)return void cs(e,r,a);o&&(e._protocol=o);const h=t.headers["sec-websocket-extensions"];if(void 0!==h){if(!d){return void cs(e,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested")}let t;try{t=Jr(h)}catch(t){return void cs(e,r,"Invalid Sec-WebSocket-Extensions header")}const s=Object.keys(t);if(1!==s.length||s[0]!==Ht.extensionName){return void cs(e,r,"Server indicated an extension that was not requested")}try{d.accept(t[Ht.extensionName])}catch(t){return void cs(e,r,"Invalid Sec-WebSocket-Extensions header")}e._extensions[Ht.extensionName]=d}e.setSocket(r,s,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation})})),i.finishRequest?i.finishRequest(p,e):p.end()}function os(e,t){e._readyState=ss.CLOSING,e.emit("error",t),e.emitClose()}function as(e){return e.path=e.socketPath,m.default.connect(e)}function hs(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=m.default.isIP(e.host)?"":e.host),L.default.connect(e)}function cs(e,t,r){e._readyState=ss.CLOSING;const s=new Error(r);Error.captureStackTrace(s,cs),t.setHeader?(t[Zr]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(os,e,s)):(t.destroy(s),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function ls(e,t,r){if(t){const r=Xr(t).length;e._socket?e._sender._bufferedBytes+=r:e._bufferedAmount+=r}if(r){const t=new Error(`WebSocket is not open: readyState ${e.readyState} (${ts[e.readyState]})`);process.nextTick(r,t)}}function fs(e,t){const r=this[Vr];r._closeFrameReceived=!0,r._closeMessage=t,r._closeCode=e,void 0!==r._socket[Vr]&&(r._socket.removeListener("data",Es),process.nextTick(ms,r._socket),1005===e?r.close():r.close(e,t))}function us(){const e=this[Vr];e.isPaused||e._socket.resume()}function ds(e){const t=this[Vr];void 0!==t._socket[Vr]&&(t._socket.removeListener("data",Es),process.nextTick(ms,t._socket),t.close(e[Gr])),t.emit("error",e)}function ps(){this[Vr].emitClose()}function gs(e,t){this[Vr].emit("message",e,t)}function _s(e){const t=this[Vr];t._autoPong&&t.pong(e,!this._isServer,qr),t.emit("ping",e)}function ys(e){this[Vr].emit("pong",e)}function ms(e){e.resume()}function bs(){const e=this[Vr];let t;this.removeListener("close",bs),this.removeListener("data",Es),this.removeListener("end",ws),e._readyState=ss.CLOSING,this._readableState.endEmitted||e._closeFrameReceived||e._receiver._writableState.errorEmitted||null===(t=e._socket.read())||e._receiver.write(t),e._receiver.end(),this[Vr]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",ps),e._receiver.on("finish",ps))}function Es(e){this[Vr]._receiver.write(e)||this.pause()}function ws(){const e=this[Vr];e._readyState=ss.CLOSING,e._receiver.end(),this.end()}function vs(){const e=this[Vr];this.removeListener("error",vs),this.on("error",qr),e&&(e._readyState=ss.CLOSING,this.destroy())}const{tokenChars:Ss}=Gt;var ks={parse:function(e){const t=new Set;let r=-1,s=-1,i=0;for(;i{const r=T.default.STATUS_CODES[426];t.writeHead(426,{"Content-Length":r.length,"Content-Type":"text/plain"}),t.end(r)})),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){const e=this.emit.bind(this,"connection");this._removeListeners=function(e,t){for(const r of Object.keys(t))e.on(r,t[r]);return function(){for(const r of Object.keys(t))e.removeListener(r,t[r])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,r,s)=>{this.handleUpgrade(t,r,s,e)}})}!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(2===this._state)return e&&this.once("close",(()=>{e(new Error("The server is not running"))})),void process.nextTick(Is,this);if(e&&this.once("close",e),1!==this._state)if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(Is,this);else{const e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close((()=>{Is(this)}))}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,r,s){t.on("error",Os);const i=e.headers["sec-websocket-key"],n=+e.headers["sec-websocket-version"];if("GET"!==e.method){return void Ns(this,e,t,405,"Invalid HTTP method")}if("websocket"!==e.headers.upgrade.toLowerCase()){return void Ns(this,e,t,400,"Invalid Upgrade header")}if(!i||!xs.test(i)){return void Ns(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header")}if(8!==n&&13!==n){return void Ns(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header")}if(!this.shouldHandle(e))return void Rs(t,400);const o=e.headers["sec-websocket-protocol"];let a=new Set;if(void 0!==o)try{a=ks.parse(o)}catch(r){return void Ns(this,e,t,400,"Invalid Sec-WebSocket-Protocol header")}const h=e.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&void 0!==h){const r=new Ht(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const e=Mr.parse(h);e[Ht.extensionName]&&(r.accept(e[Ht.extensionName]),c[Ht.extensionName]=r)}catch(r){return void Ns(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header")}}if(this.options.verifyClient){const o={origin:e.headers[""+(8===n?"sec-websocket-origin":"origin")],secure:!(!e.socket.authorized&&!e.socket.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(o,((n,o,h,l)=>{if(!n)return Rs(t,o||401,h,l);this.completeUpgrade(c,i,a,e,t,r,s)}));if(!this.options.verifyClient(o))return Rs(t,401)}this.completeUpgrade(c,i,a,e,t,r,s)}completeUpgrade(e,t,r,s,i,n,o){if(!i.readable||!i.writable)return i.destroy();if(i[Ls])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return Rs(i,503);const a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${As("sha1").update(t+Ts).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(r.size){const e=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;e&&(a.push(`Sec-WebSocket-Protocol: ${e}`),h._protocol=e)}if(e[Ht.extensionName]){const t=e[Ht.extensionName].params,r=Mr.format({[Ht.extensionName]:[t]});a.push(`Sec-WebSocket-Extensions: ${r}`),h._extensions=e}this.emit("headers",a,s),i.write(a.concat("\r\n").join("\r\n")),i.removeListener("error",Os),h.setSocket(i,n,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(h),h.on("close",(()=>{this.clients.delete(h),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Is,this)}))),o(h,s)}}var Cs=Bs;function Is(e){e._state=2,e.emit("close")}function Os(){this.destroy()}function Rs(e,t,r,s){r=r||T.default.STATUS_CODES[t],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},e.once("finish",e.destroy),e.end(`HTTP/1.1 ${t} ${T.default.STATUS_CODES[t]}\r\n`+Object.keys(s).map((e=>`${e}: ${s[e]}`)).join("\r\n")+"\r\n\r\n"+r)}function Ns(e,t,r,s,i){if(e.listenerCount("wsClientError")){const s=new Error(i);Error.captureStackTrace(s,Ns),e.emit("wsClientError",s,r,t)}else Rs(r,s,i)}let Us={clientTracking:!1,port:0,congPort:0,timeout:5e4,showMessage:"none",showMetric:0,showChannel:0,monitorPeriod:5e3,fileLogger:{connection:{use:!1,path:"connection.log"},auth:{use:!1,path:"auth.log"},attack:{use:!1,path:"attack.log"}},useQuota:{signalSize:!1,publishCounter:!1,trafficRate:!1,disconnect:!1},defaultQuotaIndex:3,adminLevel:255,debug:{slow:!1,delay:500,showAuthInfo:!1},retain:{isAvailable:!0,limitSize:1e5,limitCounter:1e3},auth:{delay_auth_fail:1e3},memberOnly:!1};const Ms=new TextDecoder,Ps=Q;class Ds{constructor(e,t){this.socket=e,e.isAlive=!0,e.txCounter=0,e.rxCounter=0,e.openTime=Date.now(),this.boho=new Me,this.encMode=He.AUTO,this.channels=new Set,this.retain_signal=new Map,this.ssid=Ds.ssid++,this.manager=t,this.cid,this.did,this.uid,this.nick="",this.lastEchoMessage="N",this.privateNode=!1,this.HOME_CHANNEL="",this.level=Us.defaultQuotaIndex,this.quota=ze[this.level],this.isAdmin=!1,this.state,this.stateLog=[],this.setState(De.INIT)}static ssid=1;setState(e){this.state=e,Us.debug.showAuthInfo&&(this.stateLog.push(e),console.log(this.stateLog.join(">")))}getState(){return this.state}getStateName(){return De[this.state].toLowerCase()}showMessageLog(e,t){let r=this.boho.isAuthorized?`did: ${this.did} ${this.cid}@`:`${this.cid}@`;if(t){let t=je[e[0]];t||(t=Ce[e[0]]),t=" ["+t+"]",e.byteLength>40?console.log(r+t+" LEN:",e.length):console.log(r+t,e)}else console.log(r+" [TEXT] %s",e)}rxQuotaChecker(e){let t=e.byteLength;return this.manager.rxBytes+=t,!(Us.useQuota.signalSize&&t>this.quota.signalSize)||(console.log("## quota: size over"),this.send(Buffer.from([je.OVER_SIZE])),Us.useQuota.disconnect&&this.close(),!1)}onTimeDelayMessage(e,t=!0){setTimeout((()=>{this.onSocketMessage(e,t)}),Us.debug.delay)}onSocketMessage(t,r=!0){if(this.receiveMonitor(),!this.rxQuotaChecker(t))return;let s,i;if("message"===Us.showMessage&&this.showMessageLog(t,r),r){if(s=t[0],s===Ce.ENC_488){try{i=this.boho.decrypt_488(t)}catch(e){return void console.log("-- E488 DEC_FAIL",e)}if(!i)return;s=i[0],t=i}else if(s===Ce.ENC_E2E){try{i=this.boho.decrypt_488(t)}catch(e){return void console.log("-- E2E DEC_FAIL",e)}if(!i)return;s=i[0],t.set(i,Re.ENC_488),t=t.subarray(Re.ENC_488)}switch(s){case je.PING:this.pong();break;case je.PONG:break;case je.CID_REQ:this.state1){let e=t.subarray(1);this.nick=Ms.decode(e),console.log("iam nick reset",this.nick)}this.iamResponse();break;case je.SIGNAL_E2E:case je.SIGNAL:if(t.byteLength>=3){let e=t.readUInt8(1);if(t.byteLength>=e+2){let r=t.subarray(2,2+e);r=Ms.decode(r),this.manager.sender(r,this,t)}}break;case je.UNSUBSCRIBE:if(2==t.byteLength)this.manager.unsubscribe([""],this);else if(t.byteLength>=3){let e=t.readUInt8(1);if(t.byteLength==e+2){let r=t.subarray(2,2+e);r=Ms.decode(r);let s=r.split(",");this.manager.unsubscribe(s,this)}}break;case je.SUBSCRIBE:if(t.byteLength>=3){let e=t.readUInt8(1);if(t.byteLength==e+2){let r=t.subarray(2,2+e);r=Ms.decode(r);let s=r.split(",");this.manager.subscribe(s,this)}}break;case je.SUBSCRIBE_REQ:if(t.byteLength>=6){let e=t.readUInt16BE(1),r=t.readUInt16BE(3);if(t.byteLength==r+5){let s=t.subarray(5,5+r);s=Ms.decode(s);let i=s.split(",");this.manager.subscribe(i,this),this.response(e,0)}else this.response(e,255)}break;case je.REQUEST:try{let e=re(t);if(e){if(!e.target||!e.topic)return;this.manager.server.apiNames.has(e.target)?this.manager.server.emit(e.target,this,e):console.log("UnKnown API req: ",e.target)}}catch(e){console.log("request catch error",e)}break;case je.CLOSE:if(t.byteLength>1){let e=Ms.decode(t.subarray(1));console.log(">> CLOSE reason:",e),this.close()}break;case Ce.AUTH_REQ:if(!this.manager.authManager)return;this.state{e&&this.manager.deligateSignal(remote,"@$name",e.name)})).catch((e=>{}))}}else try{let e=Ms.decode(t);this.manager.server.emit("text_message",e,this)}catch(e){}}response(e,t,r){r?this.send_enc_mode(te(Ps("#type","8",je.RESPONSE_MBP),Ps("status","8",t),Ps("mid","16",e),Ps("body",r))):this.send_enc_mode(te(Ps("#type","8",je.RESPONSE_MBP),Ps("status","8",t),Ps("mid","16",e)))}send_enc_mode(e,t=!1){if((this.encMode===He.YES||this.encMode===He.AUTO&&!this.TLS&&this.boho.isAuthorized)&&(t=!0),t&&e[0]==je.SIGNAL_E2E){let t=e[1],r=this.boho.encrypt_488(e.subarray(0,3+t));r[0]=Ce.ENC_E2E;let s=Buffer.concat([r,e.subarray(3+t)]);this.send(s)}else if(t){let t=this.boho.encrypt_488(e);t?this.send(t):console.log("encryption FAIL: NO DATA TRANSIT")}else this.send(e)}iamResponse(e=""){if(""==e){let t=[];for(let e of this.channels.keys())t.push(e);e={ssid:this.ssid,uid:this.uid,cid:this.cid,did:this.did,nick:this.nick,ip:this.ip,tag:t}}let t=te(Ps("#MsgType","8",je.IAM_RES),Ps("#info",e));this.send_enc_mode(t)}}const Hs=new TextDecoder;class $s extends Ds{constructor(e,t,r){super(e,r),this.socketType=e.socketType,"websocket"===this.socketType?(this.TLS="https"===t.headers["x-forwarded-proto"],this.ip=this.getRemoteIP(t)):(this.TLS=!1,this.ip=this.getRemoteIP(e.remoteAddress)),!function(e){if(0===e.indexOf("0.0.0.0"))return!0;if(0===e.indexOf("127.0.0.1"))return!0;if(0===e.indexOf("192.168."))return!0;if(0===e.indexOf("10."))return!0;if(0===e.indexOf("172.")){if(0===e.indexOf("172.16."))return!0;if(0===e.indexOf("172.17."))return!0;if(0===e.indexOf("172.18."))return!0;if(0===e.indexOf("172.19."))return!0;if(0===e.indexOf("172.20."))return!0;if(0===e.indexOf("172.21."))return!0;if(0===e.indexOf("172.22."))return!0;if(0===e.indexOf("172.23."))return!0;if(0===e.indexOf("172.24."))return!0;if(0===e.indexOf("172.25."))return!0;if(0===e.indexOf("172.26."))return!0;if(0===e.indexOf("172.27."))return!0;if(0===e.indexOf("172.28."))return!0;if(0===e.indexOf("172.29."))return!0;if(0===e.indexOf("172.30."))return!0;if(0===e.indexOf("172.31."))return!0}return!1}(this.ip)?this.HOME_CHANNEL="IP:"+function(e){let t=e.split(".");return Buffer.from(t).toString("hex")}(this.ip):(this.HOME_CHANNEL="PRIVATE:",this.privateNode=!0),"websocket"===this.socketType?(Us.debug.slow?e.on("message",this.onTimeDelayMessage.bind(this)):e.on("message",this.onSocketMessage.bind(this)),e.on("pong",this.receiveMonitor.bind(this)),e.on("ping",this.receiveMonitor.bind(this)),e.on("error",(e=>{console.log("Websocket error",e,e.code)})),e.onclose=e=>{this.manager.removeRemote(this)}):(this.congRx=new et,e.on("data",(e=>{this.congRx.write(e)})),this.congRx.on("wrong",this.onWrongCongPacketMessage.bind(this)),Us.debug.slow?this.congRx.on("data",this.onTimeDelayMessage.bind(this)):this.congRx.on("data",this.onSocketMessage.bind(this)),e.on("error",(e=>{console.log("TCP Socket error",e)})),e.on("close",(e=>{this.manager.removeRemote(this)})))}onWrongCongPacketMessage(e){if(this.cid)console.log("wrong congpack from user:",Date(),this.ip,this.ssid,this.cid);else{let t="";try{t=Hs.decode(e)}catch(r){t+="Len: "+e.byteLength}if(this.manager.attackLogger){let e=`> ${this.ssid} ${this.ip} ${t}`;this.manager.attackLogger.log(e)}this.close(!0)}}permissionChecker(){this.socket.bytesWritten||this.socket._socket,this.socket.bytesRead||this.socket._socket}receiveMonitor(){this.socket.rxCounter++,this.socket.isAlive=!0}isConnectionHTTPS(e){return e.headers["x-forwarded-proto"]}getRemoteIP(e){let t;return e&&e.headers?(t=e.headers["x-forwarded-for"],null==t&&(t=e.socket.remoteAddress)):t=e,t?(0==t.indexOf("::ffff:")&&(t=t.substring(7)),"::1"==t&&(t="127.0.0.1")):t="0.0.0.0",t}ping(){"websocket"===this.socketType?(this.socket.ping(),this.socket.txCounter++):this.send(Buffer.from([je.PING]))}pong(){"websocket"===this.socketType?(this.socket.pong(),this.socket.txCounter++):this.send(Buffer.from([je.PONG]))}getTraffic(){this.socket.bytesWritten||this.socket._socket,this.socket.bytesRead||this.socket._socket,this.socket.txCounter,this.socket.rxCounter}close(e=!1){this.getTraffic(),"websocket"===this.socketType?e?this.socket.terminate():this.socket.close():e?this.socket.destroy():this.socket.end()}send(e,t){this.manager.txBytes+=e.byteLength,this.socket.txCounter++,"websocket"===this.socketType?1===this.socket.readyState?null!=t?this.socket.send(e,{binary:t}):this.socket.send(e):this.close(!0):"open"==this.socket.readyState?this.socket.write(Ze(e)):this.close(!0)}}const Fs=new Intl.DateTimeFormat("ko-KR",{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",hour12:!1,timeZone:"Asia/Seoul"});class js{constructor(e){this.file=E.default.openSync(e,"a+"),console.log("new logFile",e,this.file)}log(e){let t=Fs.format(new Date)+" "+e+"\n";E.default.write(this.file,t,(e=>{if(e)throw e}))}}class zs{constructor(e){this.manager=e,this.metricsPack={remotes:[0],channels:[0],txBytes:[0],rxBytes:[0],unixTime:[Math.floor(Date.now()/1e3)],period:0},this.tickId=setInterval((e=>{this.metricsPack.remotes.push(this.manager.remotes.size),this.metricsPack.remotes.length>10&&this.metricsPack.remotes.shift(),this.metricsPack.channels.push(this.manager.channel_map.size),this.metricsPack.channels.length>10&&this.metricsPack.channels.shift(),this.metricsPack.txBytes.push(this.manager.txBytes),this.metricsPack.txBytes.length>10&&this.metricsPack.txBytes.shift(),this.metricsPack.rxBytes.push(this.manager.rxBytes),this.metricsPack.rxBytes.length>10&&this.metricsPack.rxBytes.shift(),this.metricsPack.unixTime=Math.floor(Date.now()/1e3),this.metricsPack.period=1e4,this.manager.txBytes=0,this.manager.rxBytes=0}),1e4)}oneline(e){let t=[{...d.memoryUsage()}];e&&console.table(t,["rss","heapTotal","heapUsed","external","arrayBuffers"]);let r=[{lastSSID:this.manager.lastSSID,remotes:this.manager.remotes.size,channels:this.manager.channel_map.size,txBytes:this.manager.txBytes,rxBytes:this.manager.rxBytes}];return e&&console.table(r,["lastSSID","remotes","channels","txBytes","rxBytes"]),r[0]}getRemotes(e){let t=Array.from(this.manager.remotes.values()).map((e=>"#"+e.ssid+":"+e.cid+"("+e.state+")"));return e&&console.table(t),t}getCIdList(e){let t=Array.from(this.manager.cid2remote.keys());return e&&console.table(t),t}getChannelList(e){let t=Array.from(this.manager.channel_map.keys());return e&&console.table(t),t}getSubscribers(e){let t=[];if(this.manager.channel_map.has(e)){this.manager.channel_map.get(e).forEach((e=>{t.push(e.cid)}))}return t}getRemoteByCId(e,t=1){if(!this.manager.cid2remote.has(e))return{result:"nop"};{let r=this.manager.cid2remote.get(e);if(1==t)return{ip:r.ip,id:r.cid,ssid:r.ssid,cid:r.cid,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),tx:r.socket.txCounter,rx:r.socket.rxCounter,txBytes:r.socket.bytesWritten||r.socket._socket?.bytesWritten,rxBytes:r.socket.bytesRead||r.socket._socket?.bytesRead};if(2==t)return{ip:r.ip,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),nick:r.nick,ssid:r.ssid,echo:r.lastEchoMessage};if(3==t)return{ip:r.ip,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),nick:r.nick,ssid:r.ssid,isSecure:r.TLS,isAuth:r.boho.isAuthorized,encMode:He[r.encMode]};if(4==t){let e=Array.from(r.channels.keys()),t=Array.from(r.memory.keys()),s=Array.from(r.retain_signal.keys());return{ip:r.ip,uptime:Math.trunc((Date.now()-r.socket.openTime)/1e3),channels:e,set:t,retain:s}}}}}const Ws=new TextEncoder,Gs=new TextDecoder;class Vs{constructor(e,t,r){this.server=e,this.txBytes=0,this.rxBytes=0,this.authManager=t,r?(this.remoteManager=r,r.manager=this):this.remoteManager=null,this.connectionLogger,Us.fileLogger.connection.use&&(this.connectionLogger=new js(Us.fileLogger.connection.path),console.log("Manager: begin file logger [connection]")),this.attackLogger,Us.fileLogger.attack.use&&(this.attackLogger=new js(Us.fileLogger.attack.path),console.log("Manager: begin file logger.[attack]")),this.remotes=new Set,this.channel_map=new Map,this.CHANNEL_PREFIX="CH:",this.CID_PREFIX="CID:",this.cid2remote=new Map,this.retain_messages=new Map,this.metric=new zs(this),this.lastSSID=0,this.pingIntervalID=setInterval((e=>{this.remotes.forEach((function(e){let t=e.socket;!1===t.isAlive&&(console.log("## timeout. cid:",e.cid),e.close()),t.txCounter++,t.isAlive=!1,"websocket"===e.socketType?t.ping():e.ping()}))}),Us.timeout),Us.showMetric&&(this.monitIntervalID=setInterval((e=>{this.monitor()}),Us.monitorPeriod))}addRemote(e,t){e.isAlive=!0;let r=new $s(e,t,this);this.remotes.add(r),r.send(Buffer.from([je.SERVER_READY])),r.setState(De.SENT_SERVER_READY),this.lastSSID=r.ssid;let s=`+ IP:${r.ip} #${r.ssid} ${"websocket"===e.socketType?"WS":"CS"} `;this.connectionLogger&&this.connectionLogger.log(s)}removeRemote(e){let t=`- IP:${e.ip} #${e.ssid} cid:${e.cid} ${"websocket"===e?.socket.socketType?"WS":"CS"} `;this.connectionLogger&&this.connectionLogger.log(t),this.deligateSignal(e,"@state","close"),this.deligateSignal(e,"@$state","close");for(let t of e.channels.keys())if(this.channel_map.has(t)){const r=this.channel_map.get(t);r.delete(e),0==r.size&&this.channel_map.delete(t)}if(e.boho.isAuthorized);else for(let t of e.retain_signal.keys())t=this.CID_PREFIX+e.cid+"@"+t,this.channel_map.has(t)&&this.channel_map.delete(t);if(e.uid&&this.server.apiNames.has("account")){let t={topic:"detachUserRemote",args:["caller:manager.removeRemote"]};this.server.emit("account",e,t)}this.remotes.delete(e),this.cid2remote.delete(e.cid),e=null}serverSignal(e){let t=te(Q("#MsgType","8",je.SERVER_SIGNAL),Q("#signalObject",e));this.remotes.forEach((e=>{e.send_enc_mode(t)}))}getSignalTag(e){let t=e.readUint8(1),r=e.subarray(2,2+t);return Gs.decode(r)}getNewSignalTagMessage(e,t){let r=e[0],s=e.readUint8(1),i=Ws.encode(t),n=i.byteLength,o=e.subarray(2+s);return Buffer.concat([Buffer.from([r,n]),i,o])}deligateSignal(e,t,...r){let s=Ge(t,...r);this.sender(t,e,s)}adminSignal(e,t){return this.cid2remote.has(e)?void this.cid2remote.get(e).send_enc_mode(t):"no cid"}serverSignalTo(e,...t){let r=e.split("@")[0],s=Ge("@"+e.split("@")[1],...t);if(r&&this.cid2remote.has(r)){let e=this.cid2remote.get(r);return console.log("target",e.state,e.cid),void e.send_enc_mode(s)}return"no cid"}sender(e,t,r){if(Us.memberOnly&&!t.boho.isAuthorized)return t.send(Buffer.from([je.SERVER_CLEAR_AUTH])),t.close(),["err","not autrized"];if(0==e.indexOf("$"))return["err","prefix $ is reserved for userSet tag."];let s=e.indexOf("@");if(0===s)e=t.cid+e,r=this.getNewSignalTagMessage(r,e);else if(s>0){let t=e.split("@")[0];if(this.cid2remote.has(t)){let s="@"+e.split("@")[1];return r=this.getNewSignalTagMessage(r,s),this.cid2remote.get(t).send_enc_mode(r),["ok",1]}return["err","Invalid cid"]}if((e=0===e.indexOf("#")?t.HOME_CHANNEL+e:e.includes("@")?this.CID_PREFIX+e:this.CHANNEL_PREFIX+e).includes("$")&&Us.retain.isAvailable&&Us.retain.limitCounter>this.retain_messages.size&&Us.retain.limitSize>r.byteLength)if(e.includes("@")){let s=e.split("@")[1];t.retain_signal.set(s,r)}else this.retain_messages.set(e,r);let i=0;if(this.channel_map.has(e)){let s=this.channel_map.get(e);if(s.size>=1){let e;e=Us.useQuota.publishCounter?Math.min(t.quota.publishCounter,s.size):s.size;let n=s.values();for(;i{if(e=0===e.indexOf("#")?t.HOME_CHANNEL+e:e.includes("@")?this.CID_PREFIX+e:this.CHANNEL_PREFIX+e,this.channel_map.has(e)?this.channel_map.get(e).add(t):this.channel_map.set(e,new Set([t])),t.channels.add(e),e.includes("$")&&Us.retain.isAvailable){let r;if(e.includes("@")){let t=e.split("@")[0];t=t.split(this.CID_PREFIX)[1];let s=e.split("@")[1];if(!this.cid2remote.has(t))return;r=this.cid2remote.get(t).retain_signal.get(s)}else this.retain_messages.has(e)&&(r=this.retain_messages.get(e));r&&t.send_enc_mode(r)}})),t.channels.size}unsubscribe(e,t){1==e.length&&""==e[0]?(t.channels.forEach((e=>{if(this.channel_map.has(e)){let r=this.channel_map.get(e);r.delete(t),0==r.size&&this.channel_map.delete(e)}})),t.channels.clear()):e.forEach((e=>{if(e=0===e.indexOf("#")?t.HOME_CHANNEL+e:e.includes("@")?this.CID_PREFIX+e:this.CHANNEL_PREFIX+e,this.channel_map.has(e)){let r=this.channel_map.get(e);r.delete(t),0==r.size&&this.channel_map.delete(e)}t.channels.delete(e)}))}monitor(){process.stdout.isTTY&&(process.stdout.cursorTo(0,0),process.stdout.clearScreenDown()),Us.showChannel>0&&this.metric.channels(Us.showChannel);let e=parseInt(Us.showMetric);switch(console.log("monitor metric type:",e),e){case 1:this.metric.oneline(!0);break;case 2:this.metric.getRemotes(!0);break;case 3:this.metric.getChannelList(!0)}}closeRemoteByCId(e){return this.cid2remote.has(e)?(this.cid2remote.get(e).close(),1):0}}const qs=0,Ys=255;class Qs extends k.default{constructor(e,t,r){if(super(),this.apiNames=new Set,e.timeout){let t=parseInt(e.timeout);t&&t>=1e3&&(Us.timeout=t)}if(e.monitorPeriod){let t=parseInt(e.monitorPeriod);t&&t>=1e3&&(Us.monitorPeriod=t)}e.showMessage&&(Us.showMessage=e.showMessage),e.showMetric&&(Us.showMetric=e.showMetric),e.timeout&&(Us.timeout=e.timeout),e.port&&(Us.port=parseInt(e.port)),e.congPort&&(Us.congPort=parseInt(e.congPort)),this.manager=new Vs(this,t,r),Us.port&&this.startWSServer(Us.port),Us.congPort&&this.startCongServer(Us.congPort)}startWSServer(e){console.log("opening WebSocket Server:",e),this.wss=new Cs({port:e}),this.wss.on("error",(e=>{console.error("### ws server error:",e.message),"EADDRINUSE"==e.code&&process.exit()})),this.wss.on("close",(e=>{console.log("### WS server closed.",e)})),this.wss.on("connection",((e,t)=>{e.socketType="websocket",this.manager.addRemote(e,t)}))}startCongServer(e){console.log("opening CongSocket Server:",e),this.congServer=m.default.createServer((e=>{this.manager.addRemote(e)})).on("error",(e=>{console.log("### cong server error:",e.message),"EADDRINUSE"==e.code&&process.exit()})).listen(e,(()=>{}))}api(e,t){if(this.apiNames.add(e),!t.checkPermission||"function"!=typeof t.checkPermission)throw new Error("wrong api interface. no checkPermission function.");if("function"==typeof t.request&&Array.isArray(t.commands))console.log(`API TYPE1. A Class with one request function. target: ${e} list: ${t.commands}`),this.on(e,((e,r)=>{t.checkPermission(e,r)?t.request(e,r):e.response(r.mid,Ys,"NO_PERMISSION.")}));else{let r=[];Object.keys(t).forEach((e=>{"function"==typeof t[e]&&r.push(e),console.log("api list",typeof t[e],e)})),console.log(`API TYPE2. Multiple function list. target: ${e} list:${r}`),this.on(e,((r,s)=>{let i;if(t.checkPermission(r,s)){if(t[s.topic])return console.log(`API TYPE2. request target: ${e} has topic:${s.topic}`),void t[s.topic](r,s);i=`target: ${s.target} has not topic name: ${s.topic}`}else i="NO_PERMISSION.";r.response(s.mid,Ys,i)}))}return this}}const Ks=new TextDecoder;class Js{constructor(){this.authLogger,Us.fileLogger.auth.use&&(this.authLogger=new js(Us.fileLogger.auth.path),console.log("Auth: begin file logger.[auth]"))}send_auth_fail(e,t){if(this.authLogger){let r=`FAIL #${e.ssid} reason:${t} `;this.authLogger.log(r)}console.log("## AUTH_FAIL reason:",t),e.setState(De.AUTH_FAIL),setTimeout((t=>{e.send(Buffer.from([Ce.AUTH_FAIL]))}),Us.auth.delay_auth_fail)}async verify_auth_hmac(e,t){try{let r=re(e,Ie.AUTH_HMAC);if(!r)return void this.send_auth_fail(t,"unpack auth_pack fail");let s="";s=r.id8.includes(0)?Ks.decode(r.id8.subarray(0,r.id8.indexOf(0))):Ks.decode(r.id8);let i,n=await this.getAuth(s);if(Us.debug.showAuthInfo,!n)return void this.send_auth_fail(t,"NO ID:"+s);t.boho.copy_id8(r.id8);const o=44;n.key.length==o?(i=Buffer.from(n.key,"base64"),t.boho.copy_key(i)):t.boho.set_key(n.key);let a=t.boho.check_auth_hmac(r);if(!a)return void this.send_auth_fail(t,"hmac dismatched");if(t.manager.cid2remote.has(n.cid)){let e=t.manager.cid2remote.get(n.cid);return e==t?void console.log("## trying RELOGIN with SAME ID. ignored."):(console.log("### clear_auth and close old connection:",e.cid),e.send(Buffer.from([je.SERVER_CLEAR_AUTH])),e.close(),void t.close())}t.cid&&t.manager.cid2remote.delete(t.cid),t.did=s,t.cid=n.cid,t.nick=n.cid;let h=Us.defaultQuotaIndex;n.level&&(h=n.level),h=parseInt(h);let c=ze[h];if(!c){let e="no index quotaTable for auth.level: "+h;return console.log("##AUTH:DATA ERROR##",e),void this.send_auth_fail(t,e)}if(t.level=h,t.quota=c,t.level===Us.adminLevel&&(console.log("## LOGIN ADMIN CID:",t.cid),t.isAdmin=!0),t.send(Buffer.from([je.QUOTA_LEVEL,h])),t.manager.cid2remote.set(t.cid,t),t.send(a),t.setState(De.AUTH_READY),this.authLogger){let e=`OK #${t.ssid} cid: ${t.cid} did:${t.did}`;t.isAdmin&&(e="#ADMIN# "+e),this.authLogger.log(e)}return n}catch(e){this.send_auth_fail(t,"caught: unknown error"+e)}}}const Xs="device:";var Zs=Object.freeze({__proto__:null,checkPermission:function(e){return e.level>=0},echo:async function(e,t){t.args?e.response(t.mid,qs,t.args):e.response(t.mid,Ys,"no message to echo")},date:async function(e,t){let r=(new Date).toUTCString();e.response(t.mid,qs,r)},unixtime:async function(e,t){let r=Math.floor(Date.now()/1e3);e.response(t.mid,qs,r)}});var ei=Object.freeze({__proto__:null,commands:["cid","remotes","clients","channels","subscribers","remote","client","close","addauth","getauth","delauth","getauthidlist","getdevicelist","adddevice","getdevice","deldevice"],checkPermission:function(e){return e.level>=255},request:async function(e,t){let r,s=0;try{let i=t.topic;if(i=i.toLowerCase(),"cid"==i)r=e.manager.metric.getCIdList();else if("remotes"==i||"clients"==i)r=e.manager.metric.getRemotes();else if("channels"==i)r=e.manager.metric.getChannelList();else if("subscribers"==i){let s=t.$[0];s&&(r=e.manager.metric.getSubscribers(s))}else if("remote"==i||"client"==i){let s=t.$[0],i=t.$[1];s&&(r=e.manager.metric.getRemoteByCId(s,i))}else if("close"==i)t.$[0]&&(r=e.manager.closeRemoteByCId(t.$[0]));else if("addauth"==i||"adddevice"==i){if(e.manager.authManager&&4==t.$.length&&e.manager.authManager.addAuth){let s=t.$[0],i=t.$[1],n=t.$[2],o=t.$[3];r=await e.manager.authManager.addAuth(s,i,n,o)}}else if("delauth"==i||"deldevice"==i){if(e.manager.authManager&&1==t.$.length&&e.manager.authManager.delAuth){let s=t.$[0];r=await e.manager.authManager.delAuth(s)}}else if("getauth"==i||"getdevice"==i){if(e.manager.authManager&&1==t.$.length&&e.manager.authManager.getAuth){let s=t.$[0];r=await e.manager.authManager.getAuth(s)}}else"getauthidlist"==i||"getdevicelist"==i?e.manager.authManager&&e.manager.authManager.getAuthIdList&&(r=await e.manager.authManager.getAuthIdList()):(s=Ys,r="api sudo: no such a cmd: "+i);e.response(t.mid,s,r)}catch(r){e.response(t.mid,Ys,r.message)}}});const ti=["GET","SET","HGETALL","HGET","HSET","SADD","SISMEMBER","SMEMBERS","EXISTS","SREM","DEL","KEYS","SAVE"];exports.API_TYPE={REQUEST_RESPONSE:"requet_response",ONE_WAY:"one_way"},exports.Auth_Env=class extends Js{constructor(e){let t;super(),e?t=e.split(","):process.env.BOHO_AUTH?(e=process.env.BOHO_AUTH,t=process.env.BOHO_AUTH.split(",")):(console.log("Auth_Env: None of process.env.BOHO_AUTH or authInfo"),process.exit()),this.AUTH=new Map,t.length>=1?t.forEach((e=>{let t=e.split(".")[0],r=e.split(".")[1],s=e.split(".")[2];if(s=parseInt(s),t&&r&&"number"==typeof s){let e=t;this.addAuth(t,r,e,s)}else console.log("Wrong process.env.BOHO_AUTH authentication value.",id,r,s),process.exit()})):(console.log("Wrong process.env.BOHO_AUTH authentication value."),process.exit())}async getAuth(e){return this.AUTH.get(e)}async getAuthIdList(){return Array.from(this.AUTH.keys())}addAuth(e,t,r,s=0){let i=Buffer.from(xe.hash(t)).toString("base64");this.AUTH.set(e,{key:i,cid:r,level:s})}},exports.Auth_File=class extends Js{constructor(e){super(),this.AUTH=new Map;let t=w.default.parse(e);this.path=w.default.resolve(e),console.log("auth from file path:",this.path);let r=t.ext;".js"==r.toLowerCase()||".mjs"==r.toLowerCase()?(console.log("#JS path:",this.path),this.loadAuthInfoFile_JS(this.path)):".json"==r.toLowerCase()?(console.log("#JSON path:",this.path),this.loadAuthInfoFile_JSON(this.path)):console.log("no authinfofile path.")}async getAuth(e){return this.AUTH.get(e)}async getAuthIdList(){return Array.from(this.AUTH.keys())}loadAuthInfoFile_JS(e){var t;(t=e,Promise.resolve().then((function(){return g(require(t))}))).then((e=>{console.log(e.authInfo),e.authInfo.forEach((e=>{this.addAuth(...e)})),console.log("total AUTH INFO size: ",this.AUTH.size)})).catch((e=>{console.log(e)}))}loadAuthInfoFile_JSON(e){let t=i.readFileSync(e);t=(new TextDecoder).decode(t),JSON.parse(t).forEach((e=>{this.addAuth(...e)})),console.log("total AUTH INFO size: ",this.AUTH.size)}addAuth(e,t,r,s=0){let i=Buffer.from(xe.hash(t)).toString("base64");this.AUTH.set(e,{key:i,cid:r,level:s})}},exports.Auth_Redis=class extends Js{constructor(e){if(super(),!e)throw new Error("AuthRedis constructor: no redisClient");this.redis=e}async getAuth(e){let t=await this.redis.hGetAll(Xs+e);if(t.key)return t}async getAuthIdList(){let e=await this.redis.keys(Xs+"*");if(e=e.map((e=>e.split(":")[1])),e)return e}async addAuth(e,t,r="",s=0){let i=Buffer.from(xe.hash(t)).toString("base64");return this.redis.hSet(Xs+e,{key:i,cid:r,level:s})}async delAuth(e){return this.redis.del(Xs+e)}async save(e){return this.redis.save()}},exports.Boho=Me,exports.BohoAuth=Js,exports.BohoMsg=Ce,exports.Buffer=W.Buffer,exports.CLIENT_STATE=De,exports.CongRx=et,exports.ENC_MODE=He,exports.FileLogger=js,exports.IO=class extends Ye{constructor(e){super(e),e&&this.open()}close(){this.socket&&(this.socket.onclose=null,this.socket.onmessage=null,this.socket.onerror=null,this.socket.close(),this.socket=null),this.emit("close")}stop(){this.close(),clearInterval(this.connectionCheckerIntervalID),this.connectionCheckerIntervalID=null}keepAlive(){this.socket&&3!==this.socket?.readyState||this.open()}createConnection(e){this.socket=new is(e),this.stateChange("opening"),this.socket.onopen=()=>{this.socket.on("message",this.onWebSocketMessage.bind(this)),this.emit("open")},this.socket.onerror=e=>{this.emit("error",e)},this.socket.onclose=()=>{this.emit("close")}}onWebSocketMessage(e){this.rxCounter++,this.lastTxRxTime=Date.now(),this.rxBytes+=e.byteLength,this.emit("socket_data",e)}socket_send(e){1===this.socket?.readyState?(this.socket.send(e),this.txCounter++,this.txBytes+=e.byteLength,this.lastTxRxTime=Date.now()):console.log("")}},exports.IOCongSocket=class extends Ye{constructor(e){super(e),e&&this.open()}close(){this.socket?.end(),this.socket=null}stop(){this.close(),clearInterval(this.connectionCheckerIntervalID),this.connectionCheckerIntervalID=null}keepAlive(){let e=this.socket?.readyState;(!this.socket||"open"!==e&&"opening"!==e)&&this.open()}createConnection(e){let t=new URL(e);"cong:"!=t.protocol&&(t=new URL("cong://"+e)),this.socket=m.default.createConnection(t.port,t.hostname),this.stateChange("opening"),this.socket.on("connect",(()=>{this.congRx=new et,this.socket.pipe(this.congRx),this.congRx.on("data",this.onTCPSocketMessage.bind(this)),this.emit("open")})),this.socket.on("error",(e=>{this.emit("error",e)})),this.socket.on("close",(()=>{this.emit("close")}))}onTCPSocketMessage(e){this.rxCounter++,this.rxBytes+=e.byteLength,this.lastTxRxTime=Date.now(),this.emit("socket_data",e)}socket_send(e){if("open"===this.socket?.readyState){let t=Ze(e);this.socket.write(t),this.txCounter++,this.txBytes+=t.byteLength,this.lastTxRxTime=Date.now()}else console.log(".")}},exports.IOMsg=je,exports.MBP=we,exports.Meta=Ie,exports.MetaSize=Re,exports.PAYLOAD_TYPE=Fe,exports.RAND=Ue,exports.RedisAPI=class{constructor(e,t){if(!e)throw new Error("RedisAPI constructor: no redisClient");this.redisClient=e,this.minLevel=t||200,this.commands=ti}checkPermission(e,t){return console.log("checkPermission",e.level,"vs",this.minLevel),e.level>=this.minLevel}async request(e,t){let r,s=qs;try{let i=t.topic;i=i.toUpperCase(),ti.includes(i)?(console.log("RedisAPI call:",i,t.args),r=t.args.length>0?await this.redisClient[i](...t.args):await this.redisClient[i]()):s=Ys,e.response(t.mid,s,r)}catch(r){e.response(t.mid,Ys,r.message)}}},exports.SIZE_LIMIT=$e,exports.STATES=Pe,exports.STATUS={OK:0,ERROR:255},exports.Server=Qs,exports.api_reply=Zs,exports.api_sudo=ei,exports.pack=Ze,exports.serverOption=Us,exports.sha256=xe; diff --git a/dist/iosignal.esm.js b/dist/iosignal.esm.js index 91ca086..89b28f6 100644 --- a/dist/iosignal.esm.js +++ b/dist/iosignal.esm.js @@ -1,3 +1,3 @@ function t(t){var e={exports:{}};return t(e,e.exports),e.exports}for(var e=function(t){var e=u(t),r=e[0],n=e[1];return 3*(r+n)/4-n},r=function(t){var e,r,n=u(t),i=n[0],f=n[1],h=new s(function(t,e,r){return 3*(e+r)/4-r}(0,i,f)),a=0,c=f>0?i-4:i;for(r=0;r>16&255,h[a++]=e>>8&255,h[a++]=255&e;2===f&&(e=o[t.charCodeAt(r)]<<2|o[t.charCodeAt(r+1)]>>4,h[a++]=255&e);1===f&&(e=o[t.charCodeAt(r)]<<10|o[t.charCodeAt(r+1)]<<4|o[t.charCodeAt(r+2)]>>2,h[a++]=e>>8&255,h[a++]=255&e);return h},n=function(t){for(var e,r=t.length,n=r%3,o=[],s=16383,f=0,h=r-n;fh?h:f+s));1===n?(e=t[r-1],o.push(i[e>>2]+i[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],o.push(i[e>>10]+i[e>>4&63]+i[e<<2&63]+"="));return o.join("")},i=[],o=[],s="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0;h<64;++h)i[h]=f[h],o[f.charCodeAt(h)]=h;function u(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function a(t,e,r){for(var n,o,s=[],f=e;f>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return s.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63;var c={byteLength:e,toByteArray:r,fromByteArray:n},l=function(t,e,r,n,i){var o,s,f=8*i-n-1,h=(1<>1,a=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,o=p&(1<<-a)-1,p>>=-a,a+=f;a>0;o=256*o+t[e+c],c+=l,a-=8);for(s=o&(1<<-a)-1,o>>=-a,a+=n;a>0;s=256*s+t[e+c],c+=l,a-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},p=function(t,e,r,n,i,o){var s,f,h,u=8*o-i-1,a=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(f=isNaN(e)?1:0,s=a):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?l/h:l*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=a?(f=0,s=a):s+c>=1?(f=(e*h-1)*Math.pow(2,i),s+=c):(f=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&f,p+=y,f/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=y,s/=256,u-=8);t[r+p-y]|=128*g},y=t((function(t,e){const r="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=o,e.SlowBuffer=function(t){+t!=t&&(t=0);return o.alloc(+t)},e.INSPECT_MAX_BYTES=50;const n=2147483647;function i(t){if(t>n)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,o.prototype),e}function o(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return h(t)}return s(t,e,r)}function s(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!o.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=i(r);const s=n.write(t,e);s!==r&&(n=n.slice(0,s));return n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(K(t,Uint8Array)){const e=new Uint8Array(t);return a(e.buffer,e.byteOffset,e.byteLength)}return u(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(K(t,ArrayBuffer)||t&&K(t.buffer,ArrayBuffer))return a(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(K(t,SharedArrayBuffer)||t&&K(t.buffer,SharedArrayBuffer)))return a(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return o.from(n,e,r);const s=function(t){if(o.isBuffer(t)){const e=0|y(t.length),r=i(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return"number"!=typeof t.length||q(t.length)?i(0):u(t);if("Buffer"===t.type&&Array.isArray(t.data))return u(t.data)}(t);if(s)return s;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function f(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function h(t){return f(t),i(t<0?0:0|y(t))}function u(t){const e=t.length<0?0:0|y(t.length),r=i(e);for(let n=0;n=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+" bytes");return 0|t}function g(t,e){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||K(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return J(t).length;default:if(i)return n?-1:Y(t).length;e=(""+e).toLowerCase(),i=!0}}function d(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return U(this,e,r);case"utf8":case"utf-8":return L(this,e,r);case"ascii":return v(this,e,r);case"latin1":case"binary":return C(this,e,r);case"base64":return S(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function b(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function E(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),q(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=o.from(e,n)),o.isBuffer(e))return 0===e.length?-1:_(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):_(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){let o,s=1,f=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,f/=2,h/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){let n=-1;for(o=r;of&&(r=f-h),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=e.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function S(t,e,r){return 0===e&&r===t.length?c.fromByteArray(t):c.fromByteArray(t.slice(e,r))}function L(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+s<=r){let r,n,f,h;switch(s){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(h=(31&e)<<6|63&r,h>127&&(o=h));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(h=(15&e)<<12|(63&r)<<6|63&n,h>2047&&(h<55296||h>57343)&&(o=h));break;case 4:r=t[i+1],n=t[i+2],f=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&f)&&(h=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&f,h>65535&&h<1114112&&(o=h))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(o.isBuffer(e)||(e=o.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!o.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},o.byteLength=g,o.prototype._isBuffer=!0,o.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},r&&(o.prototype[r]=o.prototype.inspect),o.prototype.compare=function(t,e,r,n,i){if(K(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let s=(i>>>=0)-(n>>>=0),f=(r>>>=0)-(e>>>=0);const h=Math.min(s,f),u=this.slice(n,i),a=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return m(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":case"latin1":case"binary":return A(this,t,e,r);case"base64":return B(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function v(t,e,r){let n="";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function O(t,e,r,n,i,s){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function k(t,e,r,n,i){j(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,r}function M(t,e,r,n,i){j(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=s,s>>=8,t[r+2]=s,s>>=8,t[r+1]=s,s>>=8,t[r]=s,r+8}function x(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function P(t,e,r,n,i){return e=+e,r>>>=0,i||x(t,0,r,4),p(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||x(t,0,r,8),p(t,e,r,n,52,8),r+8}o.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||N(t,e,this.length);let n=this[t],i=1,o=0;for(;++o>>=0,e>>>=0,r||N(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},o.prototype.readUint8=o.prototype.readUInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),this[t]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readBigUInt64LE=X((function(t){G(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||N(t,e,this.length);let n=this[t],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*e)),n},o.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||N(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){t>>>=0,e||N(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,e){t>>>=0,e||N(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readBigInt64LE=X((function(t){G(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||N(t,4,this.length),l(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return t>>>=0,e||N(t,4,this.length),l(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return t>>>=0,e||N(t,8,this.length),l(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return t>>>=0,e||N(t,8,this.length),l(this,t,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){O(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!n){O(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},o.prototype.writeUint8=o.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,1,255,0),this[e]=255&t,e+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigUInt64LE=X((function(t,e=0){return k(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeBigUInt64BE=X((function(t,e=0){return M(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);O(this,t,e,r,n-1,-n)}let i=0,o=1,s=0;for(this[e]=255&t;++i>0)-s&255;return e+r},o.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);O(this,t,e,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},o.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},o.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigInt64LE=X((function(t,e=0){return k(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeBigInt64BE=X((function(t,e=0){return M(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeFloatLE=function(t,e,r){return P(this,t,e,!0,r)},o.prototype.writeFloatBE=function(t,e,r){return P(this,t,e,!1,r)},o.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},o.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},o.prototype.copy=function(t,e,r,n){if(!o.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function j(t,e,r,n,i,o){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new D.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,r){G(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||V(e,t.length-(r+1))}(n,i,o)}function G(t,e){if("number"!=typeof t)throw new D.ERR_INVALID_ARG_TYPE(e,"number",t)}function V(t,e,r){if(Math.floor(t)!==t)throw G(t,r),new D.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new D.ERR_BUFFER_OUT_OF_BOUNDS;throw new D.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=$(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=$(i)),i+="n"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const F=/[^+/0-9A-Za-z-_]/g;function Y(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function J(t){return c.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(F,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Q(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function K(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function q(t){return t!=t}const W=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function X(t){return"undefined"==typeof BigInt?Z:t}function Z(){throw new Error("BigInt not supported")}})); -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */const g=new TextEncoder,d=new TextDecoder,b=E;function E(t,e=0){let r;if(void 0===t||"string"!=typeof t||"number"!=typeof e)throw TypeError("invlaid init variablie type name. ");return(t=t.toUpperCase()).includes("8")?(r=y.Buffer.alloc(1),t.includes("I")?r.writeInt8(e):r.writeUint8(e)):t.includes("16")?(r=y.Buffer.alloc(2),t.includes("I")?t.includes("L")?r.writeInt16LE(e):r.writeInt16BE(e):t.includes("L")?r.writeUint16LE(e):r.writeUint16BE(e)):t.includes("32")?(r=y.Buffer.alloc(4),t.includes("I")?t.includes("L")?r.writeInt32LE(e):r.writeInt32BE(e):t.includes("L")?r.writeUint32LE(e):r.writeUint32BE(e)):t.includes("F")?(r=y.Buffer.alloc(4),t.includes("L")?r.writeFloatLE(e):r.writeFloatBE(e)):t.includes("N")?r=y.Buffer.from(String(e)):console.log(`invalid type: ${t} or initvalue: ${e}`),r}const _=m;function m(t,e,r){let n,i="B";if("number"==typeof e)"number"==typeof r?(n=y.Buffer.alloc(e),0!==r&&n.fill(r),i="B"):(n=y.Buffer.from(String(e)),i="N");else if("string"==typeof e&&"number"==typeof r)i=e.toUpperCase(),n=E(e,r);else if("string"==typeof e&&void 0===r)n=y.Buffer.from(e),i="S";else if(e instanceof Uint8Array&&void 0===r)n=e instanceof y.Buffer?e:y.Buffer.from(e);else if(e instanceof ArrayBuffer&&void 0===r)n=y.Buffer.from(e);else if(ArrayBuffer.isView(e))n=y.Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if("object"==typeof e&&void 0===r)n=y.Buffer.from(JSON.stringify(e)),i="O";else{if("boolean"!=typeof e||void 0!==r)throw TypeError("invalid meta buffer type");{const t=e?1:0;n=y.Buffer.from([t]),i="!"}}return"string"==typeof t&&t.includes("#")&&(t=""),[t,i,n]}const w=A;function A(...t){let e=0;return t.map((t=>{const r=e++;return"number"==typeof t?_(r,"N",t):_(r,t)}))}function B(t){if((t=t.toUpperCase()).includes("8"))return t.includes("I")?"int8":"uint8";if(t.includes("16"))return t.includes("I")?t.includes("L")?"int16_le":"int16_be":t.includes("L")?"uint16_le":"uint16_be";if(t.includes("32"))return t.includes("I")?t.includes("L")?"int32_le":"int32_be":t.includes("L")?"uint32_le":"uint32_be";if(t.includes("F"))return t.includes("L")?"float_le":"float_be";if("B"===t)return"buffer";if("S"===t)return"string";if("N"===t)return"number";if("O"===t)return"object";if("!"===t)return"boolean";throw TypeError("invalid data type")}function T(t,e,r,n){try{const i=B(t);if("int8"==i)return e.readInt8(r);if("uint8"===i)return e.readUint8(r);if("int16_le"===i)return e.readInt16LE(r);if("int16_be"===i)return e.readInt16BE(r);if("uint16_le"===i)return e.readUint16LE(r);if("uint16_be"===i)return e.readUint16BE(r);if("int32_le"===i)return e.readInt32LE(r);if("int32_be"===i)return e.readInt32BE(r);if("uint32_le"===i)return e.readUint32LE(r);if("uint32_be"===i)return e.readUint32BE(r);if("float_le"===i)return e.readFloatLE(r);if("float_be"===i)return e.readFloatBE(r);if("buffer"===i)return e.subarray(r,r+n);if("string"===i){const t=e.subarray(r,r+n);return d.decode(t)}if("number"===i){const t=e.subarray(r,r+n);return Number(d.decode(t))}if("object"===i){const t=e.subarray(r,r+n);return JSON.parse(d.decode(t))}if("boolean"===i){return 1===e.readInt8(r)}return}catch(t){}}function S(...t){const e=function(t){let e=[];return t.filter((t=>{if(!Array.isArray(t[0]))return t;e=e.concat(t)})).concat(e)}(t);let r=0;const n=[];let i,o,s=0;if(e.forEach((t=>{const[e,i,o]=t;r+=o.byteLength,("number"==typeof e||e.length>0)&&n.push([e,i,s,o.byteLength]),s=r})),n.length>0){let t=JSON.stringify(n);i=g.encode(t),o=i.byteLength,r=r+o+2}const f=y.Buffer.alloc(r);if(s=0,e.forEach((t=>{const e=t[2];f.set(e,s),s+=e.byteLength})),n.length>0){f.set(i,s);const t=b("16",o);return f.set(t,s+o),f}return f}function L(t,e){const r=e||j(t);if(!r)return;const n=y.Buffer.from(t),i={};let o=0;if(r.forEach((t=>{const[e,r,s,f]=t;let h=T(r,n,s,f);null!=h&&(i[e]=h,f&&(o+=f))})),e&&n.byteLength!==o){let t=n.byteLength-o,e=T("b",n,o,t);if(null==e)return;i.$OTHERS=e}let s=0,f=[];for(;i[s];)f.push(i[s++]);return f.length>0&&(i.args=f,i.$=i.args),i}const I=v;function v(t,e=!1){if(void 0===t)throw TypeError("Invalid data type: Undefined");if("string"==typeof t)return g.encode(t);if("number"==typeof t)return Uint8Array.from([t]);if(t instanceof ArrayBuffer){if(e)return new Uint8Array(t);{const e=new Uint8Array(t),r=new Uint8Array(t.byteLength);return r.set(e),r}}if(ArrayBuffer.isView(t)){if(e)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);{const e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new Uint8Array(t.byteLength);return r.set(e),r}}return g.encode(JSON.stringify(t))}const C=U;function U(t,e=!1){const r=v(t,e);return e?y.Buffer.from(r.buffer,r.byteOffset,r.byteLength):y.Buffer.from(r)}const R=N;function N(...t){const e=t.map((t=>U(t)));return y.Buffer.concat(e)}const O=k;function k(...t){try{let e=0,r=0;const n=t.map((t=>v(t)));n.forEach((t=>{e+=t.byteLength}));const i=new Uint8Array(e);return n.forEach((t=>{i.set(t,r),r+=t.byteLength})),i}catch(t){console.log(t)}}function M(t,e){if(t.byteLength!==e.byteLength)return!1;for(let r=0;re)return 0;return P(t,r)?r:0}return 0}function $(t){const e=x(t);return t.subarray(0,e)}function j(t,e=!1){t instanceof ArrayBuffer&&(t=y.Buffer.from(t));const r=D(t);if(0===r)return;let n=P(t,r);return n?e?(n.forEach((t=>{null==t[3]&&(t[1].includes("8")?t[3]=1:t[1].includes("16")?t[3]=2:t[1].includes("32")||t[1].includes("F")?t[3]=4:t[1].includes("!")&&(t[3]=1)),t[4]=B(t[1])})),n):n:void 0}function G(...t){return $(S(...t))}function V(...t){return j(S(...t))}var F=Object.freeze({__proto__:null,Buffer:y.Buffer,NB:b,numberBuffer:E,MB:_,metaBuffer:m,MBA:w,metaBufferArguments:A,parseTypeName:B,readTypedBuffer:T,pack:S,unpack:L,U8:I,parseUint8Array:v,B8:C,parseBuffer:U,B8pack:R,parseBufferThenConcat:N,U8pack:O,parseUint8ThenConcat:k,hex:function(t){return Array.prototype.map.call(new Uint8Array(t),(t=>("00"+t.toString(16)).slice(-2))).join("")},equal:M,getBufferSize:x,parseMetaInfo:P,TAIL_LEN:H,readTail:D,getMetaSize:z,getBuffer:$,getMeta:j,rawPack:G,meta:V,metaDetail:function(...t){return j(S(...t),!0)},getMetaDetail:function(t){return j(t,!0)}}),Y=t((function(t){var e=Object.prototype.hasOwnProperty,r="~";function n(){}function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function o(t,e,n,o,s){if("function"!=typeof n)throw new TypeError("The listener must be a function");var f=new i(n,o||t,s),h=r?r+e:e;return t._events[h]?t._events[h].fn?t._events[h]=[t._events[h],f]:t._events[h].push(f):(t._events[h]=f,t._eventsCount++),t}function s(t,e){0==--t._eventsCount?t._events=new n:delete t._events[e]}function f(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),f.prototype.eventNames=function(){var t,n,i=[];if(0===this._eventsCount)return i;for(n in t=this._events)e.call(t,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(t)):i},f.prototype.listeners=function(t){var e=r?r+t:t,n=this._events[e];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i=64;){for(o=e[0],s=e[1],f=e[2],h=e[3],u=e[4],a=e[5],c=e[6],l=e[7],y=0;y<16;y++)g=n+4*y,t[y]=(255&r[g])<<24|(255&r[g+1])<<16|(255&r[g+2])<<8|255&r[g+3];for(y=16;y<64;y++)p=t[y-2],d=(p>>>17|p<<15)^(p>>>19|p<<13)^p>>>10,p=t[y-15],b=(p>>>7|p<<25)^(p>>>18|p<<14)^p>>>3,t[y]=(d+t[y-7]|0)+(b+t[y-16]|0);for(y=0;y<64;y++)d=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&a^~u&c)|0)+(l+(J[y]+t[y]|0)|0)|0,b=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&s^o&f^s&f)|0,l=c,c=a,a=u,u=h+d|0,h=f,f=s,s=o,o=d+b|0;e[0]+=o,e[1]+=s,e[2]+=f,e[3]+=h,e[4]+=u,e[5]+=a,e[6]+=c,e[7]+=l,n+=64,i-=64}return n}const K=function(){function t(){this.digestLength=32,this.blockSize=64,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var t=0;t0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[r++],e--;64===this.bufferLength&&(Q(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(r=Q(this.temp,this.state,t,r,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[r++],e--;return this},t.prototype.finish=function(t){if(!this.finished){const t=this.bytesHashed,r=this.bufferLength,n=t/536870912|0,i=t<<3,o=t%64<56?64:128;this.buffer[r]=128;for(var e=r+1;e>>24&255,this.buffer[o-7]=n>>>16&255,this.buffer[o-6]=n>>>8&255,this.buffer[o-5]=n>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,Q(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(e=0;e<8;e++)t[4*e+0]=this.state[e]>>>24&255,t[4*e+1]=this.state[e]>>>16&255,t[4*e+2]=this.state[e]>>>8&255,t[4*e+3]=this.state[e]>>>0&255;return this},t.prototype.digest=function(){const t=new Uint8Array(this.digestLength);return this.finish(t),t},t.prototype._saveState=function(t){for(let e=0;ethis.blockSize)(new K).update(t).finish(e).clean();else for(var r=0;r0;){s=n<32?n:32;let e=this.getIndexOTP(++i);for(let r=0;r{(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)&&(n=!0)})),n?e=ct.MBA:(e=ct.MJSON,r=dt.encode(JSON.stringify(t)))}return{type:e,buffer:r}}(e);if(i.type==ct.EMPTY)r=S(_("#MsgType","8",lt.SIGNAL),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",i.type));else if(i.type==ct.MBA){let t=S(w(...e));r=S(_("#MsgType","8",lt.SIGNAL),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",i.type),_("#mbaBuffer",t))}else r=S(_("#MsgType","8",lt.SIGNAL),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",i.type),_("#payload",i.buffer));return r}const Et=new TextEncoder,_t=new TextDecoder;class mt extends Y{constructor(t){super(),this.cid="",this.ip="",this.socket=null,this.url=t,this.state=ft.CLOSED,this.stateName=this.getStateName(),this.txCounter=0,this.rxCounter=0,this.txBytes=0,this.rxBytes=0,this.lastTxRxTime=Date.now(),this.connectionCheckerPeriod=at.CONNECTION_CHECKER_PERIOD,this.connectionCheckerIntervalID=null,this.boho=new st,this.TLS=!1,this.encMode=ut.AUTO,this.useAuth=!1,this.nick="",this.channels=new Set,this.promiseMap=new Map,this.promiseTimeOut=at.PROMISE_TIMEOUT,this.mid=0,this.level=0,this.quota=gt[this.level],this.serverSet={},this.linkMap=new Map,this.on("open",this.onOpen.bind(this)),this.on("close",this.onClose.bind(this)),this.on("socket_data",this.onData.bind(this))}redirect(t){this.close(),this.stateChange("redirecting"),this.createConnection(t)}open(t){if(t||this.url){if(t)if(this.url){if(t!==this.url&&(this.url=t,this.socket))return void this.close()}else this.url=t;this.createConnection(this.url),this.connectionCheckerIntervalID||(this.connectionCheckerIntervalID=setInterval(this.keepAlive.bind(this),this.connectionCheckerPeriod))}}onOpen(){this.url.includes("wss://")?this.TLS=!0:this.TLS=!1,this.stateChange("open")}onClose(){this.boho.isAuthorized=!1,this.cid="",this.stateChange("closed")}login(t,e){if(!t&&!e)return void console.log("no id and key.");if(console.log("manual login: ",t),!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0;let r=this.boho.auth_req();this.send(r)}auth(t,e){if(t||e){if(!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0}else console.log("no id and key.")}onData(t){let e,r=t[0];if(r===tt.ENC_488)e=this.boho.decrypt_488(t),e&&(r=e[0],t=e);else if(r===tt.ENC_E2E)try{if(e=this.boho.decrypt_488(t),!e)return;r=e[0],t.set(e,nt.ENC_488),t=t.subarray(nt.ENC_488)}catch(t){return}let n=lt[r];switch(n||(n=tt[r]),r){case lt.OVER_SIZE:console.log("## server sent: over_size event."),this.emit("over_size","over_size");break;case lt.PING:this.pong();break;case lt.PONG:break;case lt.IAM_RES:try{let e=_t.decode(t.subarray(1)),r=JSON.parse(e);r.ip&&(this.ip=r.ip),console.log("",JSON.stringify(r))}catch(t){}break;case lt.CID_RES:let r=_t.decode(t.subarray(1));this.cid=r,this.stateChange("ready","cid_ready"),this.subscribe_memory_channels();break;case lt.QUOTA_LEVEL:let n=t[1];this.level=n,this.quota=gt[n],console.log("## QUOTA:",n,JSON.stringify(this.quota));break;case lt.SERVER_CLEAR_AUTH:this.useAuth=!1,this.boho.clearAuth(),this.stop();break;case lt.SERVER_REDIRECT:let i,o,s;7==t.byteLength?(i=function(t){if(6!=t.byteLength)return;return t[0].toString()+"."+t[1].toString()+"."+t[2].toString()+"."+t[3].toString()+":"+((t[4]<<8)+t[5]).toString()}(t.subarray(1)),s="cong://"):(i=_t.decode(t.subarray(1)),s=""),o=s+i,this.redirect(o);break;case lt.SERVER_READY:this.stateChange("server_ready","server_ready"),this.useAuth?this.send(this.boho.auth_req()):this.send(y.Buffer.from([lt.CID_REQ]));break;case lt.SERVER_SIGNAL:try{let e=_t.decode(t.subarray(1)),r=JSON.parse(e);r.event&&r.data&&(this.serverSet=r.data,this.emit(r.event,r.data))}catch(t){}break;case lt.SET:try{let e=L(t);e&&this.emit(e.topic,...e.args)}catch(t){}break;case lt.SIGNAL_E2E:case lt.SIGNAL:try{let e=t.readUint8(1),r=t.subarray(2,2+e),n=_t.decode(r),i=t.readUint8(2+e),o=t.subarray(3+e);switch(i){case ct.EMPTY:0===n.indexOf("@")?this.emit("@",null,n):this.emit(n,null,n);break;case ct.TEXT:let t=o.subarray(0,o.byteLength-1),e=_t.decode(t);0===n.indexOf("@")&&this.emit("@",e,n),"@"!==n&&this.emit(n,e,n);break;case ct.BINARY:0===n.indexOf("@")&&this.emit("@",o,n),"@"!==n&&this.emit(n,o,n);break;case ct.OBJECT:let r=_t.decode(o),i=JSON.parse(r);0===n.indexOf("@")&&this.emit("@",i,n),"@"!==n&&this.emit(n,i,n);break;case ct.MJSON:let s=_t.decode(o),f=JSON.parse(s);0===n.indexOf("@")&&this.emit("@",...f,n),"@"!==n&&this.emit(n,...f,n);break;case ct.MBA:let h=L(o);0===n.indexOf("@")&&this.emit("@",...h.args,n),"@"!==n&&this.emit(n,...h.args,n)}}catch(t){}break;case lt.RESPONSE_MBP:this.testPromise(t);break;case tt.AUTH_NONCE:let f=this.boho.auth_hmac(t);f?this.send(f):this.stateChange("auth_fail","Invalid local auth_hmac.");break;case tt.AUTH_FAIL:this.stateChange("auth_fail","server reject auth.");break;case tt.AUTH_ACK:this.boho.check_auth_ack_hmac(t)?(this.stateChange("auth_ready","server sent auth_ack"),this.send(y.Buffer.from([lt.CID_REQ]))):this.stateChange("auth_fail","invalid server_hmac");break;default:try{e=_t.decode(t),this.emit("text_message",e)}catch(t){}}}iam(t){t?this.send_enc_mode(S(_("#MsgType","8",lt.IAM),_("#",t))):this.send_enc_mode(S(_("#MsgType","8",lt.IAM)))}ping(){this.send(y.Buffer.from([lt.PING]))}pong(){this.send(y.Buffer.from([lt.PONG]))}echo(t){t?(console.log("echo args:",t),this.send_enc_mode(S(_("#MsgType","8",lt.ECHO),_("#msg",t)))):this.send(y.Buffer.from([lt.ECHO]))}bin(...t){this.send(O(...t))}send(t){if(t.byteLength>this.quota.signalSize)return this.emit("over_size"),console.log("## QUOTA LIMIT OVER!! \nsignal message.byteLength: ",t.byteLength),void console.log("## your maximum signalSize(bytes) is:",this.quota.signalSize);this.socket_send(t)}getEncryptionMode(){return!(this.encMode!==ut.YES&&(this.encMode!==ut.AUTO||this.TLS||!this.boho.isAuthorized))}send_enc_mode(t,e){if(void 0===e&&(e=this.getEncryptionMode()),t[0]==lt.SIGNAL_E2E&&e){let e=t[1],r=this.boho.encrypt_488(t.subarray(0,3+e));r[0]=tt.ENC_E2E,this.send(y.Buffer.concat([r,t.subarray(3+e)]))}else if(e){let e=this.boho.encrypt_488(t);this.send(e)}else this.send(t)}setMsgPromise(t){return new Promise(((e,r)=>{this.promiseMap.set(t,[e,r]),setTimeout((e=>{this.promiseMap.has(t)&&(r("timeout"),this.promiseMap.delete(t))}),this.promiseTimeOut)}))}testPromise(t){let e=L(t);if(e)if(this.promiseMap.has(e.mid)){let[t,r]=this.promiseMap.get(e.mid);this.promiseMap.delete(e.mid),e.status<128?(e.ok=!0,t(e)):(e.ok=!1,r(e))}else console.log("no promise id")}publish(...t){this.signal(...t)}signal(t,...e){if("string"!=typeof t)throw TypeError("tag should be string.");let r=bt(t,...e);this.send_enc_mode(r)}decrypt_e2e(t,e){return this.boho.decrypt_e2e(t,e)}signal_e2e(t,e,r){if("string"!=typeof t)throw TypeError("tag should be string.");let n=Et.encode(t),i=C(e),o=this.boho.encrypt_e2e(i,r),s=S(_("#MsgType","8",lt.SIGNAL_E2E),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",ct.BINARY),_("#payload",o));this.send_enc_mode(s)}set(t,...e){return t&&0!=e.length?this.req("store","set",t,...e):Promise.reject(new Error("set need storeName and value)"))}async get(t){if(!t)return Promise.reject(new Error("store get need storeName)"));let e=await this.req("store","get",t),{$:r}=L(e.body);return r}req(t,e,...r){if(!t||!e)return Promise.reject(new Error("request need target and topic)"));let n;return n=r.length>0?S(_("#MsgType","8",lt.REQUEST),_("mid","16",++this.mid),_("target",t),_("topic",e),w(...r)):S(_("#MsgType","8",lt.REQUEST),_("mid","16",++this.mid),_("target",t),_("topic",e)),this.send_enc_mode(n),this.setMsgPromise(this.mid)}subscribe(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return;t.split(",").forEach((t=>{this.channels.add(t)}));let e=Et.encode(t);if(e.byteLength>at.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+at.TAG_LEN1);this.send_enc_mode(y.Buffer.concat([b("8",lt.SUBSCRIBE),b("8",e.byteLength),e]))}subscribe_promise(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return Promise.reject("subscribe_promise:: connection is not ready");let e=Et.encode(t);if(e.byteLength>at.TAG_LEN2)throw TypeError("please use tag string bytelength: "+at.TAG_LEN2);return this.send_enc_mode(y.Buffer.concat([b("8",lt.SUBSCRIBE_REQ),b("16",++this.mid),b("16",e.byteLength),e])),this.setMsgPromise(this.mid)}subscribe_memory_channels(){if(0==this.channels.size)return;let t=Array.from(this.channels).join(",");this.subscribe_promise(t).then((t=>{})).catch((t=>{console.log(">> SUBSCRIBE FAIL:",t)}))}unsubscribe(t=""){if("string"!=typeof t)throw TypeError("tag should be string.");if(""==t)this.channels.clear();else{t.split(",").forEach((t=>{this.channels.delete(t)}))}let e=Et.encode(t);if(e.byteLength>at.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+at.TAG_LEN1);this.send_enc_mode(y.Buffer.concat([b("8",lt.UNSUBSCRIBE),b("8",e.byteLength),e]))}listen(t,e){if("string"!=typeof t)throw TypeError("tag should be string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof e)throw TypeError("handler is not a function.");0!==t.indexOf("@")&&this.channels.add(t),this.on(t,e)}link(t,e,r){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof r)throw TypeError("handler is not a function.");let n;0!==e.indexOf("@")&&this.channels.add(e),n=this.linkMap.has(t)?this.linkMap.get(t):new Set,n.add(e),this.linkMap.set(t,n),this.on(e,r),this.subscribe(e)}unlink(t,e){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if(!this.linkMap.has(t))return;let r=this.linkMap.get(t),n=Array.from(r);for(let i=0;i{this.socket.onmessage=this.onWebSocketMessage.bind(this),this.emit("open")},this.socket.onerror=t=>{this.emit("error",t)},this.socket.onclose=()=>{this.emit("close")}}onWebSocketMessage(t){let e;this.rxCounter++,this.lastTxRxTime=Date.now(),e=y.Buffer.from(t.data),this.rxBytes+=e.byteLength,this.emit("socket_data",e)}socket_send(t){1===this.socket?.readyState?(this.socket.send(t),this.txCounter++,this.txBytes+=t.byteLength,this.lastTxRxTime=Date.now()):console.log(".")}}var At=y.Buffer;export{pt as API_TYPE,st as Boho,tt as BohoMsg,At as Buffer,ht as CLIENT_STATE,ut as ENC_MODE,wt as IO,lt as IOMsg,F as MBP,et as Meta,nt as MetaSize,ct as PAYLOAD_TYPE,ot as RAND,at as SIZE_LIMIT,ft as STATES,yt as STATUS,X as sha256}; +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */const g=new TextEncoder,d=new TextDecoder,b=E;function E(t,e=0){let r;if(void 0===t||"string"!=typeof t||"number"!=typeof e)throw TypeError("invlaid init variablie type name. ");return(t=t.toUpperCase()).includes("8")?(r=y.Buffer.alloc(1),t.includes("I")?r.writeInt8(e):r.writeUint8(e)):t.includes("16")?(r=y.Buffer.alloc(2),t.includes("I")?t.includes("L")?r.writeInt16LE(e):r.writeInt16BE(e):t.includes("L")?r.writeUint16LE(e):r.writeUint16BE(e)):t.includes("32")?(r=y.Buffer.alloc(4),t.includes("I")?t.includes("L")?r.writeInt32LE(e):r.writeInt32BE(e):t.includes("L")?r.writeUint32LE(e):r.writeUint32BE(e)):t.includes("F")?(r=y.Buffer.alloc(4),t.includes("L")?r.writeFloatLE(e):r.writeFloatBE(e)):t.includes("N")?r=y.Buffer.from(String(e)):console.log(`invalid type: ${t} or initvalue: ${e}`),r}const _=m;function m(t,e,r){let n,i="B";if("number"==typeof e)"number"==typeof r?(n=y.Buffer.alloc(e),0!==r&&n.fill(r),i="B"):(n=y.Buffer.from(String(e)),i="N");else if("string"==typeof e&&"number"==typeof r)i=e.toUpperCase(),n=E(e,r);else if("string"==typeof e&&void 0===r)n=y.Buffer.from(e),i="S";else if(e instanceof Uint8Array&&void 0===r)n=e instanceof y.Buffer?e:y.Buffer.from(e);else if(e instanceof ArrayBuffer&&void 0===r)n=y.Buffer.from(e);else if(ArrayBuffer.isView(e))n=y.Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if("object"==typeof e&&void 0===r)n=y.Buffer.from(JSON.stringify(e)),i="O";else{if("boolean"!=typeof e||void 0!==r)throw TypeError("invalid meta buffer type");{const t=e?1:0;n=y.Buffer.from([t]),i="!"}}return"string"==typeof t&&t.includes("#")&&(t=""),[t,i,n]}const w=A;function A(...t){let e=0;return t.map((t=>{const r=e++;return"number"==typeof t?_(r,"N",t):_(r,t)}))}function B(t){if((t=t.toUpperCase()).includes("8"))return t.includes("I")?"int8":"uint8";if(t.includes("16"))return t.includes("I")?t.includes("L")?"int16_le":"int16_be":t.includes("L")?"uint16_le":"uint16_be";if(t.includes("32"))return t.includes("I")?t.includes("L")?"int32_le":"int32_be":t.includes("L")?"uint32_le":"uint32_be";if(t.includes("F"))return t.includes("L")?"float_le":"float_be";if("B"===t)return"buffer";if("S"===t)return"string";if("N"===t)return"number";if("O"===t)return"object";if("!"===t)return"boolean";throw TypeError("invalid data type")}function T(t,e,r,n){try{const i=B(t);if("int8"==i)return e.readInt8(r);if("uint8"===i)return e.readUint8(r);if("int16_le"===i)return e.readInt16LE(r);if("int16_be"===i)return e.readInt16BE(r);if("uint16_le"===i)return e.readUint16LE(r);if("uint16_be"===i)return e.readUint16BE(r);if("int32_le"===i)return e.readInt32LE(r);if("int32_be"===i)return e.readInt32BE(r);if("uint32_le"===i)return e.readUint32LE(r);if("uint32_be"===i)return e.readUint32BE(r);if("float_le"===i)return e.readFloatLE(r);if("float_be"===i)return e.readFloatBE(r);if("buffer"===i)return e.subarray(r,r+n);if("string"===i){const t=e.subarray(r,r+n);return d.decode(t)}if("number"===i){const t=e.subarray(r,r+n);return Number(d.decode(t))}if("object"===i){const t=e.subarray(r,r+n);return JSON.parse(d.decode(t))}if("boolean"===i){return 1===e.readInt8(r)}return}catch(t){}}function S(...t){const e=function(t){let e=[];return t.filter((t=>{if(!Array.isArray(t[0]))return t;e=e.concat(t)})).concat(e)}(t);let r=0;const n=[];let i,o,s=0;if(e.forEach((t=>{const[e,i,o]=t;r+=o.byteLength,("number"==typeof e||e.length>0)&&n.push([e,i,s,o.byteLength]),s=r})),n.length>0){let t=JSON.stringify(n);i=g.encode(t),o=i.byteLength,r=r+o+2}const f=y.Buffer.alloc(r);if(s=0,e.forEach((t=>{const e=t[2];f.set(e,s),s+=e.byteLength})),n.length>0){f.set(i,s);const t=b("16",o);return f.set(t,s+o),f}return f}function L(t,e){const r=e||j(t);if(!r)return;const n=y.Buffer.from(t),i={};let o=0;if(r.forEach((t=>{const[e,r,s,f]=t;let h=T(r,n,s,f);null!=h&&(i[e]=h,f&&(o+=f))})),e&&n.byteLength!==o){let t=n.byteLength-o,e=T("b",n,o,t);if(null==e)return;i.$OTHERS=e}let s=0,f=[];for(;i[s];)f.push(i[s++]);return f.length>0&&(i.args=f,i.$=i.args),i}const I=v;function v(t,e=!1){if(void 0===t)throw TypeError("Invalid data type: Undefined");if("string"==typeof t)return g.encode(t);if("number"==typeof t)return Uint8Array.from([t]);if(t instanceof ArrayBuffer){if(e)return new Uint8Array(t);{const e=new Uint8Array(t),r=new Uint8Array(t.byteLength);return r.set(e),r}}if(ArrayBuffer.isView(t)){if(e)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);{const e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new Uint8Array(t.byteLength);return r.set(e),r}}return g.encode(JSON.stringify(t))}const C=U;function U(t,e=!1){const r=v(t,e);return e?y.Buffer.from(r.buffer,r.byteOffset,r.byteLength):y.Buffer.from(r)}const R=N;function N(...t){const e=t.map((t=>U(t)));return y.Buffer.concat(e)}const O=k;function k(...t){try{let e=0,r=0;const n=t.map((t=>v(t)));n.forEach((t=>{e+=t.byteLength}));const i=new Uint8Array(e);return n.forEach((t=>{i.set(t,r),r+=t.byteLength})),i}catch(t){console.log(t)}}function M(t,e){if(t.byteLength!==e.byteLength)return!1;for(let r=0;re)return 0;return P(t,r)?r:0}return 0}function $(t){const e=x(t);return t.subarray(0,e)}function j(t,e=!1){t instanceof ArrayBuffer&&(t=y.Buffer.from(t));const r=D(t);if(0===r)return;let n=P(t,r);return n?e?(n.forEach((t=>{null==t[3]&&(t[1].includes("8")?t[3]=1:t[1].includes("16")?t[3]=2:t[1].includes("32")||t[1].includes("F")?t[3]=4:t[1].includes("!")&&(t[3]=1)),t[4]=B(t[1])})),n):n:void 0}function G(...t){return $(S(...t))}function V(...t){return j(S(...t))}var F=Object.freeze({__proto__:null,Buffer:y.Buffer,NB:b,numberBuffer:E,MB:_,metaBuffer:m,MBA:w,metaBufferArguments:A,parseTypeName:B,readTypedBuffer:T,pack:S,unpack:L,U8:I,parseUint8Array:v,B8:C,parseBuffer:U,B8pack:R,parseBufferThenConcat:N,U8pack:O,parseUint8ThenConcat:k,hex:function(t){return Array.prototype.map.call(new Uint8Array(t),(t=>("00"+t.toString(16)).slice(-2))).join("")},equal:M,getBufferSize:x,parseMetaInfo:P,TAIL_LEN:H,readTail:D,getMetaSize:z,getBuffer:$,getMeta:j,rawPack:G,meta:V,metaDetail:function(...t){return j(S(...t),!0)},getMetaDetail:function(t){return j(t,!0)}}),Y=t((function(t){var e=Object.prototype.hasOwnProperty,r="~";function n(){}function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function o(t,e,n,o,s){if("function"!=typeof n)throw new TypeError("The listener must be a function");var f=new i(n,o||t,s),h=r?r+e:e;return t._events[h]?t._events[h].fn?t._events[h]=[t._events[h],f]:t._events[h].push(f):(t._events[h]=f,t._eventsCount++),t}function s(t,e){0==--t._eventsCount?t._events=new n:delete t._events[e]}function f(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),f.prototype.eventNames=function(){var t,n,i=[];if(0===this._eventsCount)return i;for(n in t=this._events)e.call(t,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(t)):i},f.prototype.listeners=function(t){var e=r?r+t:t,n=this._events[e];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i=64;){for(o=e[0],s=e[1],f=e[2],h=e[3],u=e[4],a=e[5],c=e[6],l=e[7],y=0;y<16;y++)g=n+4*y,t[y]=(255&r[g])<<24|(255&r[g+1])<<16|(255&r[g+2])<<8|255&r[g+3];for(y=16;y<64;y++)p=t[y-2],d=(p>>>17|p<<15)^(p>>>19|p<<13)^p>>>10,p=t[y-15],b=(p>>>7|p<<25)^(p>>>18|p<<14)^p>>>3,t[y]=(d+t[y-7]|0)+(b+t[y-16]|0);for(y=0;y<64;y++)d=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&a^~u&c)|0)+(l+(J[y]+t[y]|0)|0)|0,b=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&s^o&f^s&f)|0,l=c,c=a,a=u,u=h+d|0,h=f,f=s,s=o,o=d+b|0;e[0]+=o,e[1]+=s,e[2]+=f,e[3]+=h,e[4]+=u,e[5]+=a,e[6]+=c,e[7]+=l,n+=64,i-=64}return n}const K=function(){function t(){this.digestLength=32,this.blockSize=64,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var t=0;t0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[r++],e--;64===this.bufferLength&&(Q(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(r=Q(this.temp,this.state,t,r,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[r++],e--;return this},t.prototype.finish=function(t){if(!this.finished){const t=this.bytesHashed,r=this.bufferLength,n=t/536870912|0,i=t<<3,o=t%64<56?64:128;this.buffer[r]=128;for(var e=r+1;e>>24&255,this.buffer[o-7]=n>>>16&255,this.buffer[o-6]=n>>>8&255,this.buffer[o-5]=n>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,Q(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(e=0;e<8;e++)t[4*e+0]=this.state[e]>>>24&255,t[4*e+1]=this.state[e]>>>16&255,t[4*e+2]=this.state[e]>>>8&255,t[4*e+3]=this.state[e]>>>0&255;return this},t.prototype.digest=function(){const t=new Uint8Array(this.digestLength);return this.finish(t),t},t.prototype._saveState=function(t){for(let e=0;ethis.blockSize)(new K).update(t).finish(e).clean();else for(var r=0;r0;){s=n<32?n:32;let e=this.getIndexOTP(++i);for(let r=0;r{(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)&&(n=!0)})),n?e=ct.MBA:(e=ct.MJSON,r=dt.encode(JSON.stringify(t)))}return{type:e,buffer:r}}(e);if(i.type==ct.EMPTY)r=S(_("#MsgType","8",lt.SIGNAL),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",i.type));else if(i.type==ct.MBA){let t=S(w(...e));r=S(_("#MsgType","8",lt.SIGNAL),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",i.type),_("#mbaBuffer",t))}else r=S(_("#MsgType","8",lt.SIGNAL),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",i.type),_("#payload",i.buffer));return r}const Et=new TextEncoder,_t=new TextDecoder;class mt extends Y{constructor(t){super(),this.cid="",this.ip="",this.socket=null,this.url=t,this.state=ft.CLOSED,this.stateName=this.getStateName(),this.txCounter=0,this.rxCounter=0,this.txBytes=0,this.rxBytes=0,this.lastTxRxTime=Date.now(),this.connectionCheckerPeriod=at.CONNECTION_CHECKER_PERIOD,this.connectionCheckerIntervalID=null,this.boho=new st,this.TLS=!1,this.encMode=ut.AUTO,this.useAuth=!1,this.nick="",this.channels=new Set,this.promiseMap=new Map,this.promiseTimeOut=at.PROMISE_TIMEOUT,this.mid=0,this.level=3,this.quota=gt[this.level],this.serverSet={},this.linkMap=new Map,this.on("open",this.onOpen.bind(this)),this.on("close",this.onClose.bind(this)),this.on("socket_data",this.onData.bind(this))}redirect(t){this.close(),this.stateChange("redirecting"),this.createConnection(t)}open(t){if(t||this.url){if(t)if(this.url){if(t!==this.url&&(this.url=t,this.socket))return void this.close()}else this.url=t;this.createConnection(this.url),this.connectionCheckerIntervalID||(this.connectionCheckerIntervalID=setInterval(this.keepAlive.bind(this),this.connectionCheckerPeriod))}}onOpen(){this.url.includes("wss://")?this.TLS=!0:this.TLS=!1,this.stateChange("open")}onClose(){this.boho.isAuthorized=!1,this.cid="",this.stateChange("closed")}login(t,e){if(!t&&!e)return void console.log("no id and key.");if(console.log("manual login: ",t),!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0;let r=this.boho.auth_req();this.send(r)}auth(t,e){if(t||e){if(!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0}else console.log("no id and key.")}onData(t){let e,r=t[0];if(r===tt.ENC_488)e=this.boho.decrypt_488(t),e&&(r=e[0],t=e);else if(r===tt.ENC_E2E)try{if(e=this.boho.decrypt_488(t),!e)return;r=e[0],t.set(e,nt.ENC_488),t=t.subarray(nt.ENC_488)}catch(t){return}let n=lt[r];switch(n||(n=tt[r]),r){case lt.OVER_SIZE:console.log("## server sent: over_size event."),this.emit("over_size","over_size");break;case lt.PING:this.pong();break;case lt.PONG:break;case lt.IAM_RES:try{let e=_t.decode(t.subarray(1)),r=JSON.parse(e);r.ip&&(this.ip=r.ip),console.log("",JSON.stringify(r))}catch(t){}break;case lt.CID_RES:let r=_t.decode(t.subarray(1));this.cid=r,this.stateChange("ready","cid_ready"),this.subscribe_memory_channels();break;case lt.QUOTA_LEVEL:let n=t[1];this.level=n,this.quota=gt[n],console.log("## QUOTA:",n,JSON.stringify(this.quota));break;case lt.SERVER_CLEAR_AUTH:this.useAuth=!1,this.boho.clearAuth(),this.stop();break;case lt.SERVER_REDIRECT:let i,o,s;7==t.byteLength?(i=function(t){if(6!=t.byteLength)return;return t[0].toString()+"."+t[1].toString()+"."+t[2].toString()+"."+t[3].toString()+":"+((t[4]<<8)+t[5]).toString()}(t.subarray(1)),s="cong://"):(i=_t.decode(t.subarray(1)),s=""),o=s+i,this.redirect(o);break;case lt.SERVER_READY:this.stateChange("server_ready","server_ready"),this.useAuth?this.send(this.boho.auth_req()):this.send(y.Buffer.from([lt.CID_REQ]));break;case lt.SERVER_SIGNAL:try{let e=_t.decode(t.subarray(1)),r=JSON.parse(e);r.event&&r.data&&(this.serverSet=r.data,this.emit(r.event,r.data))}catch(t){}break;case lt.SET:try{let e=L(t);e&&this.emit(e.topic,...e.args)}catch(t){}break;case lt.SIGNAL_E2E:case lt.SIGNAL:try{let e=t.readUint8(1),r=t.subarray(2,2+e),n=_t.decode(r),i=t.readUint8(2+e),o=t.subarray(3+e);switch(i){case ct.EMPTY:0===n.indexOf("@")?this.emit("@",null,n):this.emit(n,null,n);break;case ct.TEXT:let t=o.subarray(0,o.byteLength-1),e=_t.decode(t);0===n.indexOf("@")&&this.emit("@",e,n),"@"!==n&&this.emit(n,e,n);break;case ct.BINARY:0===n.indexOf("@")&&this.emit("@",o,n),"@"!==n&&this.emit(n,o,n);break;case ct.OBJECT:let r=_t.decode(o),i=JSON.parse(r);0===n.indexOf("@")&&this.emit("@",i,n),"@"!==n&&this.emit(n,i,n);break;case ct.MJSON:let s=_t.decode(o),f=JSON.parse(s);0===n.indexOf("@")&&this.emit("@",...f,n),"@"!==n&&this.emit(n,...f,n);break;case ct.MBA:let h=L(o);0===n.indexOf("@")&&this.emit("@",...h.args,n),"@"!==n&&this.emit(n,...h.args,n)}}catch(t){}break;case lt.RESPONSE_MBP:this.testPromise(t);break;case tt.AUTH_NONCE:let f=this.boho.auth_hmac(t);f?this.send(f):this.stateChange("auth_fail","Invalid local auth_hmac.");break;case tt.AUTH_FAIL:this.stateChange("auth_fail","server reject auth.");break;case tt.AUTH_ACK:this.boho.check_auth_ack_hmac(t)?(this.stateChange("auth_ready","server sent auth_ack"),this.send(y.Buffer.from([lt.CID_REQ]))):this.stateChange("auth_fail","invalid server_hmac");break;default:try{e=_t.decode(t),this.emit("text_message",e)}catch(t){}}}iam(t){t?this.send_enc_mode(S(_("#MsgType","8",lt.IAM),_("#",t))):this.send_enc_mode(S(_("#MsgType","8",lt.IAM)))}ping(){this.send(y.Buffer.from([lt.PING]))}pong(){this.send(y.Buffer.from([lt.PONG]))}echo(t){t?(console.log("echo args:",t),this.send_enc_mode(S(_("#MsgType","8",lt.ECHO),_("#msg",t)))):this.send(y.Buffer.from([lt.ECHO]))}bin(...t){this.send(O(...t))}send(t){if(t.byteLength>this.quota.signalSize)return this.emit("over_size"),console.log("## QUOTA LIMIT OVER!! \nsignal message.byteLength: ",t.byteLength),void console.log("## your maximum signalSize(bytes) is:",this.quota.signalSize);this.socket_send(t)}getEncryptionMode(){return!(this.encMode!==ut.YES&&(this.encMode!==ut.AUTO||this.TLS||!this.boho.isAuthorized))}send_enc_mode(t,e){if(void 0===e&&(e=this.getEncryptionMode()),t[0]==lt.SIGNAL_E2E&&e){let e=t[1],r=this.boho.encrypt_488(t.subarray(0,3+e));r[0]=tt.ENC_E2E,this.send(y.Buffer.concat([r,t.subarray(3+e)]))}else if(e){let e=this.boho.encrypt_488(t);this.send(e)}else this.send(t)}setMsgPromise(t){return new Promise(((e,r)=>{this.promiseMap.set(t,[e,r]),setTimeout((e=>{this.promiseMap.has(t)&&(r("timeout"),this.promiseMap.delete(t))}),this.promiseTimeOut)}))}testPromise(t){let e=L(t);if(e)if(this.promiseMap.has(e.mid)){let[t,r]=this.promiseMap.get(e.mid);this.promiseMap.delete(e.mid),e.status<128?(e.ok=!0,t(e)):(e.ok=!1,r(e))}else console.log("no promise id")}publish(...t){this.signal(...t)}signal(t,...e){if("string"!=typeof t)throw TypeError("tag should be string.");let r=bt(t,...e);this.send_enc_mode(r)}decrypt_e2e(t,e){return this.boho.decrypt_e2e(t,e)}signal_e2e(t,e,r){if("string"!=typeof t)throw TypeError("tag should be string.");let n=Et.encode(t),i=C(e),o=this.boho.encrypt_e2e(i,r),s=S(_("#MsgType","8",lt.SIGNAL_E2E),_("#tagLen","8",n.byteLength),_("#tag",n),_("#payloadType","8",ct.BINARY),_("#payload",o));this.send_enc_mode(s)}set(t,...e){return t&&0!=e.length?this.req("store","set",t,...e):Promise.reject(new Error("set need storeName and value)"))}async get(t){if(!t)return Promise.reject(new Error("store get need storeName)"));let e=await this.req("store","get",t),{$:r}=L(e.body);return r}req(t,e,...r){if(!t||!e)return Promise.reject(new Error("request need target and topic)"));let n;return n=r.length>0?S(_("#MsgType","8",lt.REQUEST),_("mid","16",++this.mid),_("target",t),_("topic",e),w(...r)):S(_("#MsgType","8",lt.REQUEST),_("mid","16",++this.mid),_("target",t),_("topic",e)),this.send_enc_mode(n),this.setMsgPromise(this.mid)}subscribe(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return;t.split(",").forEach((t=>{this.channels.add(t)}));let e=Et.encode(t);if(e.byteLength>at.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+at.TAG_LEN1);this.send_enc_mode(y.Buffer.concat([b("8",lt.SUBSCRIBE),b("8",e.byteLength),e]))}subscribe_promise(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return Promise.reject("subscribe_promise:: connection is not ready");let e=Et.encode(t);if(e.byteLength>at.TAG_LEN2)throw TypeError("please use tag string bytelength: "+at.TAG_LEN2);return this.send_enc_mode(y.Buffer.concat([b("8",lt.SUBSCRIBE_REQ),b("16",++this.mid),b("16",e.byteLength),e])),this.setMsgPromise(this.mid)}subscribe_memory_channels(){if(0==this.channels.size)return;let t=Array.from(this.channels).join(",");this.subscribe_promise(t).then((t=>{})).catch((t=>{console.log(">> SUBSCRIBE FAIL:",t)}))}unsubscribe(t=""){if("string"!=typeof t)throw TypeError("tag should be string.");if(""==t)this.channels.clear();else{t.split(",").forEach((t=>{this.channels.delete(t)}))}let e=Et.encode(t);if(e.byteLength>at.TAG_LEN1)throw TypeError("please use tag string bytelength below:"+at.TAG_LEN1);this.send_enc_mode(y.Buffer.concat([b("8",lt.UNSUBSCRIBE),b("8",e.byteLength),e]))}listen(t,e){if("string"!=typeof t)throw TypeError("tag should be string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof e)throw TypeError("handler is not a function.");0!==t.indexOf("@")&&this.channels.add(t),this.on(t,e)}link(t,e,r){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof r)throw TypeError("handler is not a function.");let n;0!==e.indexOf("@")&&this.channels.add(e),n=this.linkMap.has(t)?this.linkMap.get(t):new Set,n.add(e),this.linkMap.set(t,n),this.on(e,r),this.subscribe(e)}unlink(t,e){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if(!this.linkMap.has(t))return;let r=this.linkMap.get(t),n=Array.from(r);for(let i=0;i{this.socket.onmessage=this.onWebSocketMessage.bind(this),this.emit("open")},this.socket.onerror=t=>{this.emit("error",t)},this.socket.onclose=()=>{this.emit("close")}}onWebSocketMessage(t){let e;this.rxCounter++,this.lastTxRxTime=Date.now(),e=y.Buffer.from(t.data),this.rxBytes+=e.byteLength,this.emit("socket_data",e)}socket_send(t){1===this.socket?.readyState?(this.socket.send(t),this.txCounter++,this.txBytes+=t.byteLength,this.lastTxRxTime=Date.now()):console.log(".")}}var At=y.Buffer;export{pt as API_TYPE,st as Boho,tt as BohoMsg,At as Buffer,ht as CLIENT_STATE,ut as ENC_MODE,wt as IO,lt as IOMsg,F as MBP,et as Meta,nt as MetaSize,ct as PAYLOAD_TYPE,ot as RAND,at as SIZE_LIMIT,ft as STATES,yt as STATUS,X as sha256}; //# sourceMappingURL=iosignal.esm.js.map diff --git a/dist/iosignal.esm.js.map b/dist/iosignal.esm.js.map index b6d5735..866f069 100644 --- a/dist/iosignal.esm.js.map +++ b/dist/iosignal.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"iosignal.esm.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/meta-buffer-pack/src/meta-buffer-pack.js","../node_modules/eventemitter3/index.js","../node_modules/boho/lib/fast-sha256.js","../node_modules/boho/src/sha256-mbp.js","../node_modules/boho/src/constants.js","../node_modules/boho/src/boho.js","../src/common/constants.js","../src/common/quotaTable.js","../src/common/payload.js","../src/client/IOCore.js","../src/client/IOWebSocket.js"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer/index.js'\nexport { Buffer } // for iife reference MBP.Buffer\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nexport const NB = numberBuffer\nexport function numberBuffer(type, initValue = 0) {\n let buffer\n if (type === undefined || typeof type !== 'string' || typeof initValue !== 'number') {\n throw TypeError('invlaid init variablie type name. ')\n }\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n buffer = Buffer.alloc(1)\n if (type.includes('I')) buffer.writeInt8(initValue)\n else buffer.writeUint8(initValue)\n } else if (type.includes('16')) {\n buffer = Buffer.alloc(2)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt16LE(initValue)\n else buffer.writeInt16BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint16LE(initValue)\n else buffer.writeUint16BE(initValue)\n }\n } else if (type.includes('32')) {\n buffer = Buffer.alloc(4)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt32LE(initValue)\n else buffer.writeInt32BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint32LE(initValue)\n else buffer.writeUint32BE(initValue)\n }\n } else if (type.includes('F')) {\n buffer = Buffer.alloc(4)\n if (type.includes('L')) {\n buffer.writeFloatLE(initValue)\n } else {\n buffer.writeFloatBE(initValue)\n }\n } else if (type.includes('N')) { // number as string\n buffer = Buffer.from(String(initValue))\n } else {\n console.log(`invalid type: ${type} or initvalue: ${initValue}`)\n }\n return buffer\n}\n\n\nexport const MB = metaBuffer\nexport function metaBuffer(name, typeOrData, initValue) {\n let buffer\n let bufferType = 'B'\n if (typeof typeOrData === 'number') {\n if (typeof initValue === 'number') { // initValue 0 should be passed.\n buffer = Buffer.alloc(typeOrData)\n if (initValue !== 0) buffer.fill(initValue)\n bufferType = 'B'\n } else {\n buffer = Buffer.from(String(typeOrData))\n bufferType = 'N'\n }\n } else if (typeof typeOrData === 'string' && typeof initValue === 'number') { // number with type.\n bufferType = typeOrData.toUpperCase() // use explicit type name\n buffer = numberBuffer(typeOrData, initValue) // notice. two categories. n: number string. 8, 16, 32: typed number.\n } else if (typeof typeOrData === 'string' && initValue === undefined) { // string buffer\n buffer = Buffer.from(typeOrData)\n bufferType = 'S'\n } else if (typeOrData instanceof Uint8Array && initValue === undefined) { // buffer | Uint8Array\n // Buffer.from: Copies the passed buffer data onto a new Buffer instance.\n // typecasting Uint8Array to Buffer.\n buffer = (typeOrData instanceof Buffer) ? typeOrData : Buffer.from(typeOrData)\n } else if (typeOrData instanceof ArrayBuffer && initValue === undefined) { // arrayBuffer\n // Notice. typedArray is recommended instead of arrayBuffer\n buffer = Buffer.from(typeOrData)\n } else if (ArrayBuffer.isView(typeOrData)) { // typedarray buffer\n buffer = Buffer.from(typeOrData.buffer, typeOrData.byteOffset, typeOrData.byteLength)\n } else if (typeof typeOrData === 'object' && initValue === undefined) { // object. like array. stringify\n buffer = Buffer.from(JSON.stringify(typeOrData))\n bufferType = 'O'\n } else if (typeof typeOrData === 'boolean' && initValue === undefined) { // object. like array. stringify\n const v = typeOrData ? 1 : 0\n buffer = Buffer.from([v])\n bufferType = '!'\n } else {\n throw TypeError('invalid meta buffer type')\n }\n\n if (typeof name === 'string' && name.includes('#')) name = '' //\n\n return [name, bufferType, buffer]\n}\n\nexport const MBA = metaBufferArguments\nexport function metaBufferArguments(...args) {\n let i = 0\n const mba = args.map(\n data => {\n const argsIndex = i++\n // tip. MBA use index number as metabuffer's property name.\n if (typeof data === 'number') {\n // * JS's primitive Number stored as string.\n return MB(argsIndex, 'N', data)\n } else {\n // typedarray, dataview, array, object, boolean\n return MB(argsIndex, data)\n }\n })\n\n return mba\n}\n\nexport function parseTypeName(type) {\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n if (type.includes('I')) {\n return 'int8'\n } else {\n return 'uint8'\n }\n } else if (type.includes('16')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int16_le'\n } else {\n return 'int16_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint16_le'\n } else {\n return 'uint16_be'\n }\n }\n } else if (type.includes('32')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int32_le'\n } else {\n return 'int32_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint32_le'\n } else {\n return 'uint32_be'\n }\n }\n } else if (type.includes('F')) {\n if (type.includes('L')) {\n return 'float_le'\n } else {\n return 'float_be'\n }\n } else if (type === 'B') {\n return 'buffer'\n } else if (type === 'S') { // string or arguments\n return 'string'\n } else if (type === 'N') { // number encoded as string\n return 'number'\n } else if (type === 'O') { // object encoded string\n return 'object'\n } else if (type === '!') { // boolean 1:true 0:false\n return 'boolean'\n } else {\n throw TypeError('invalid data type')\n }\n\n}\n\nexport function readTypedBuffer(simpleType, buffer, offset, length) {\n try {\n const type = parseTypeName(simpleType)\n if (type == 'int8') return buffer.readInt8(offset)\n else if (type === 'uint8') return buffer.readUint8(offset)\n else if (type === 'int16_le') return buffer.readInt16LE(offset)\n else if (type === 'int16_be') return buffer.readInt16BE(offset)\n else if (type === 'uint16_le') return buffer.readUint16LE(offset)\n else if (type === 'uint16_be') return buffer.readUint16BE(offset)\n else if (type === 'int32_le') return buffer.readInt32LE(offset)\n else if (type === 'int32_be') return buffer.readInt32BE(offset)\n else if (type === 'uint32_le') return buffer.readUint32LE(offset)\n else if (type === 'uint32_be') return buffer.readUint32BE(offset)\n else if (type === 'float_le') return buffer.readFloatLE(offset)\n else if (type === 'float_be') return buffer.readFloatBE(offset)\n\n else if (type === 'buffer') {\n return buffer.subarray(offset, offset + length)\n } else if (type === 'string') {\n const strBuffer = buffer.subarray(offset, offset + length)\n return decoder.decode(strBuffer)\n } else if (type === 'number') {\n const strNumber = buffer.subarray(offset, offset + length)\n return Number(decoder.decode(strNumber))\n } else if (type === 'object') {\n const objEncoded = buffer.subarray(offset, offset + length)\n return JSON.parse(decoder.decode(objEncoded))\n } else if (type === 'boolean') {\n const v = buffer.readInt8(offset)\n return v === 1\n } else {\n return\n }\n } catch (error) {\n // console.log('MBP:readTypedBuffer obj decoding error.', error)\n }\n // any error and invalid data return undefined \n return\n}\n\n// to join MBA or MB meta list.\nfunction flatArray(args) {\n let subArr = []\n const mainArr = args.filter(item => {\n if (Array.isArray(item[0])) subArr = subArr.concat(item)\n else return item\n })\n return mainArr.concat(subArr)\n}\n\nexport function pack(...args) {\n const bufArr = flatArray(args)\n // console.log('MBP.pack: flat MB or MBA list', bufArr)\n let size = 0\n const info = []\n let offset = 0\n\n bufArr.forEach(bufPack => {\n const [name, type, data] = bufPack\n size += data.byteLength\n\n if (typeof name === 'number' || name.length > 0) {\n // if the item has property name then add meta JSON info.\n // type of name is Number in MBA.(index number)\n // type of name is String in MB. except null string.\n // add additional informative meta info. \n info.push([name, type, offset, data.byteLength])\n }\n offset = size\n })\n\n\n // console.log('MBP.pack meta:', info )\n let infoEncoded\n let infoSize\n\n if (info.length > 0) {\n let infoStr = JSON.stringify(info)\n // console.log('pack infoStr , size:', infoStr , infoStr.length )\n infoEncoded = encoder.encode(infoStr)\n infoSize = infoEncoded.byteLength\n size = size + infoSize + 2\n }\n\n const buffer = Buffer.alloc(size)\n offset = 0\n bufArr.forEach(bufPack => {\n const buf = bufPack[2]\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n\n if (info.length > 0) {\n buffer.set(infoEncoded, offset)\n const infoSizeBuff = NB('16', infoSize)\n buffer.set(infoSizeBuff, offset + infoSize)\n return buffer\n } else {\n return buffer\n }\n}\n\n\n/**\n * unpack() will use embeded meta info from the binary pack. \n * You can specify (optional) meta obejct. \n * (It's useful to read pure buffer data.)\n * \n * You can get the meta object from: getFrame(pack) , meta()\n * @param {Buffer|Uint8Array} binPack binaryData\n * @param {Object} meta *OPTION* \n * @returns {Object|undefined} success: return Object (include buffer data). fail: return undefined\n */\nexport function unpack(binPack, meta) {\n\n const infoArr = meta || getMeta(binPack)\n if (!infoArr) return\n\n const buffer = Buffer.from(binPack)\n const binObj = {}\n let readCounter = 0\n infoArr.forEach(bufPack => {\n const [name, type, offset, length] = bufPack\n let result = readTypedBuffer(type, buffer, offset, length)\n if (result == undefined) return\n binObj[name] = result\n if (length) readCounter += length\n })\n\n // Can not define meta for variable size buffer \n // unpacker support automatic property to read left(did't read) buffers.\n // console.log(\"######, unpack: buffer \" , readCounter, buffer ,buffer.byteLength)\n if (meta && buffer.byteLength !== readCounter) {\n let leftSize = buffer.byteLength - readCounter\n // console.log('total,left buffer size', buffer.byteLength, leftSize )\n let result = readTypedBuffer('b', buffer, readCounter, leftSize)\n if (result == undefined) return\n binObj[\"$OTHERS\"] = result\n }\n\n // set args with values if exist.\n let mbaIndex = 0;\n let args = [];\n while (binObj[mbaIndex]) {\n args.push(binObj[mbaIndex++])\n }\n\n if (args.length > 0) {\n binObj.args = args\n binObj.$ = binObj.args\n }\n return binObj\n}\n\n\nexport const U8 = parseUint8Array //alias\n/**\n * \n * @param {any} data \n * @param {Boolean} shareArrayBuffer false(default): return new( or copied) ArrayBuffer. true: share the input data's arrayBuffer.\n * @returns {Uint8Array}\n */\nexport function parseUint8Array(data, shareArrayBuffer = false) {\n if (data === undefined) throw TypeError('Invalid data type: Undefined')\n if (typeof data === 'string') {\n return encoder.encode(data)\n } else if (typeof data === 'number') { // number -> 1 byte uint8array(number)\n return Uint8Array.from([data])\n } else if (data instanceof ArrayBuffer) { // arraybuffer -> wrap uint8array(ab)\n if (shareArrayBuffer) {\n return new Uint8Array(data)\n } else {\n const originData = new Uint8Array(data)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else if (ArrayBuffer.isView(data)) { // accept Buffer too.\n if (shareArrayBuffer) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength) // DataView, TypedArray > uint8array( use offset, length )\n } else {\n // new memory to protect origin arraybuffer.\n const originData = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else { // array, object\n return encoder.encode(JSON.stringify(data)) // object(array.. ) > JSON.str > encode > unint8array\n }\n}\n\nexport const B8 = parseBuffer\nexport function parseBuffer(data, shareArrayBuffer = false) {\n\n const u8 = parseUint8Array(data, shareArrayBuffer)\n if (shareArrayBuffer) {\n return Buffer.from(u8.buffer, u8.byteOffset, u8.byteLength)\n } else {\n return Buffer.from(u8)\n }\n}\n\nexport const B8pack = parseBufferThenConcat\nexport function parseBufferThenConcat(...dataArray) {\n const buffers = dataArray.map(data => parseBuffer(data))\n return Buffer.concat(buffers)\n}\n\n\nexport const U8pack = parseUint8ThenConcat // alias\n/**\n * 1. parse list of data into U8 list\n * 2. return new Uint8Array merged.\n * @param {...any} dataArray \n * @returns \n */\nexport function parseUint8ThenConcat(...dataArray) {\n try {\n let bufferSize = 0\n let offset = 0\n const buffers = dataArray.map(data => parseUint8Array(data))\n buffers.forEach(buf => { bufferSize += buf.byteLength })\n const buffer = new Uint8Array(bufferSize)\n buffers.forEach(buf => {\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n return buffer\n } catch (error) {\n console.log(error)\n }\n}\n\nexport function hex(buffer) {\n return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('')\n}\n\nexport function equal(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) return false\n for (let i = 0; i < buf1.byteLength; i++) {\n if (buf1[i] !== buf2[i]) return false\n }\n return true\n}\n\n\nexport function getBufferSize(binPack) {\n if (getMetaSize(binPack) === 0) {\n return binPack.byteLength\n } else {\n return binPack.byteLength - getMetaSize(binPack) - TAIL_LEN\n }\n}\n\n// MB and MBA \nexport function parseMetaInfo(binPack, infoSize) {\n let info;\n try {\n const buffer = new Uint8Array(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoFrom = buffer.byteLength - infoSize - 2\n const infoEncoded = buffer.subarray(infoFrom, buffer.byteLength - 2)\n const decoded = decoder.decode(infoEncoded)\n const info = JSON.parse(decoded)\n\n if (!Array.isArray(info) || !Array.isArray(info[0])) return\n\n let firstItem = info[0]\n if (!firstItem) return\n\n if (firstItem.length < 3) return\n const [name, type, offset] = firstItem\n\n if (typeof type !== 'string' || typeof offset !== 'number') return\n\n return info\n } catch (error) {\n // return undefined\n }\n}\n\n\n/** \n * Meta buffer pack Tail:\n * binary Pack include TAIL(two bytes size) info at the end if it has JSON info.\n * not include TAIL if it has not JSON.\n */\nexport const TAIL_LEN = 2\n\n/**\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @returns {Number} last two byte value( read Uint16 bigendian )\n */\nexport function readTail(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n if (binPack.byteLength <= TAIL_LEN) return 0\n\n const dv = new DataView(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoSize = dv.getUint16(binPack.byteLength - TAIL_LEN) // last 2 bytes for json-info-length.\n return infoSize\n\n } else {\n // throw TypeError('invalid data type.')\n return 0\n }\n\n}\n\n\n// binay data pack is not always Buffer. \n// It should accept Uint8Array binPack.\n// This function don't use Buffer method.\n\nexport function getMetaSize(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n\n const size = binPack.byteLength\n if (size <= TAIL_LEN) return 0\n\n //1. tail size check\n const infoSize = readTail(binPack)\n if (infoSize === 0 || infoSize > size) return 0\n //2. try parse JSON \n const success = parseMetaInfo(binPack, infoSize)\n //3. return success: jsonInfoSize, fail: 0\n if (success) return infoSize\n else return 0\n } else {\n return 0\n }\n}\n\n\n/**\n * \n * @param {Buffer|Uint8Array} binPack \n * @returns {Buffer} \n */\nexport function getBuffer(binPack) {\n const rawBufferSize = getBufferSize(binPack)\n return binPack.subarray(0, rawBufferSize)\n}\n\n\n\n/**\n * extract Meta info object if it has.\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @param {Boolean} showDetail add additional item info: full data type name and bytelength.\n * @returns {Object|undefined} success: return MetaInfo Object. fail: return undefined.(No valid JSON included.)\n */\nexport function getMeta(binPack, showDetail = false) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n const infoSize = readTail(binPack)\n if (infoSize === 0) return\n\n // check valid Meta\n let metaInfo = parseMetaInfo(binPack, infoSize)\n if (!metaInfo) return\n\n if (!showDetail) {\n return metaInfo\n } else {\n // add additional info\n metaInfo.forEach(bufPack => {\n const len = bufPack[3]\n if (len == undefined) { // add size info.\n if (bufPack[1].includes('8')) bufPack[3] = 1\n else if (bufPack[1].includes('16')) bufPack[3] = 2\n else if (bufPack[1].includes('32')) bufPack[3] = 4\n else if (bufPack[1].includes('F')) bufPack[3] = 4\n else if (bufPack[1].includes('!')) bufPack[3] = 1\n }\n bufPack[4] = parseTypeName(bufPack[1]) // add full-type-name.\n })\n return metaInfo\n }\n}\n\nexport function rawPack(...args) {\n return getBuffer(pack(...args))\n}\n\nexport function meta(...args) {\n return getMeta(pack(...args))\n}\n\nexport function metaDetail(...args) {\n return getMeta(pack(...args), true)\n}\n\nexport function getMetaDetail(binPack) {\n return getMeta(binPack, true)\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexport var digestLength = 32\nexport var blockSize = 64\n// SHA-256 constants\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\nfunction hashBlocks (w, v, p, pos, len) {\n let a, b, c, d, e, f, g, h, u, i, j, t1, t2\n while (len >= 64) {\n a = v[0]\n b = v[1]\n c = v[2]\n d = v[3]\n e = v[4]\n f = v[5]\n g = v[6]\n h = v[7]\n for (i = 0; i < 16; i++) {\n j = pos + i * 4\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff))\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2]\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10)\n u = w[i - 15]\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3)\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0)\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0\n h = g\n g = f\n f = e\n e = (d + t1) | 0\n d = c\n c = b\n b = a\n a = (t1 + t2) | 0\n }\n v[0] += a\n v[1] += b\n v[2] += c\n v[3] += d\n v[4] += e\n v[5] += f\n v[6] += g\n v[7] += h\n pos += 64\n len -= 64\n }\n return pos\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash () {\n this.digestLength = digestLength\n this.blockSize = blockSize\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8) // hash state\n this.temp = new Int32Array(64) // temporary state\n this.buffer = new Uint8Array(128) // buffer for data to hash\n this.bufferLength = 0 // number of bytes in buffer\n this.bytesHashed = 0 // number of total bytes hashed\n this.finished = false // indicates whether the hash was finalized\n this.reset()\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667\n this.state[1] = 0xbb67ae85\n this.state[2] = 0x3c6ef372\n this.state[3] = 0xa54ff53a\n this.state[4] = 0x510e527f\n this.state[5] = 0x9b05688c\n this.state[6] = 0x1f83d9ab\n this.state[7] = 0x5be0cd19\n this.bufferLength = 0\n this.bytesHashed = 0\n this.finished = false\n return this\n }\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0\n }\n this.reset()\n }\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\")\n }\n let dataPos = 0\n this.bytesHashed += dataLength\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64)\n this.bufferLength = 0\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength)\n dataLength %= 64\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n return this\n }\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed\n const left = this.bufferLength\n const bitLenHi = (bytesHashed / 0x20000000) | 0\n const bitLenLo = bytesHashed << 3\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128\n this.buffer[left] = 0x80\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength)\n this.finished = true\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff\n }\n return this\n }\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i]\n }\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i]\n }\n this.bytesHashed = bytesHashed\n this.finished = false\n this.bufferLength = 0\n }\n return Hash\n}())\nexport { Hash }\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC (key) {\n this.inner = new Hash()\n this.outer = new Hash()\n this.blockSize = this.inner.blockSize\n this.digestLength = this.inner.digestLength\n const pad = new Uint8Array(this.blockSize)\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean()\n } else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i]\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36\n }\n this.inner.update(pad)\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c\n }\n this.outer.update(pad)\n this.istate = new Uint32Array(8)\n this.ostate = new Uint32Array(8)\n this.inner._saveState(this.istate)\n this.outer._saveState(this.ostate)\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize)\n this.outer._restoreState(this.ostate, this.outer.blockSize)\n return this\n }\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0\n }\n this.inner.clean()\n this.outer.clean()\n }\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data)\n return this\n }\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out)\n } else {\n this.inner.finish(out)\n this.outer.update(out, this.digestLength).finish(out)\n }\n return this\n }\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n return HMAC\n}())\nexport { HMAC }\n// Returns SHA256 hash of data.\nexport function hash (data) {\n const h = (new Hash()).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Function hash is both available as module.hash and as default export.\n// export default hash\n// Returns HMAC-SHA256 of data under the key.\nexport function hmac (key, data) {\n const h = (new HMAC(key)).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer (buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0]\n if (num === 0) {\n throw new Error('hkdf: cannot expand more')\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset()\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer)\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info)\n }\n // Hash in the counter.\n hmac.update(counter)\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer)\n // Increment counter inside typed array, this works properly.\n counter[0]++\n}\nconst hkdfSalt = new Uint8Array(digestLength) // Filled with zeroes.\nexport function hkdf (key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt }\n if (length === void 0) { length = 32 }\n const counter = new Uint8Array([1])\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key)\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm)\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength)\n let bufpos = buffer.length\n const out = new Uint8Array(length)\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter)\n bufpos = 0\n }\n out[i] = buffer[bufpos++]\n }\n hmac_.clean()\n buffer.fill(0)\n counter.fill(0)\n return out\n}\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nexport function pbkdf2 (password, salt, iterations, dkLen) {\n const prf = new HMAC(password)\n const len = prf.digestLength\n const ctr = new Uint8Array(4)\n const t = new Uint8Array(len)\n const u = new Uint8Array(len)\n const dk = new Uint8Array(dkLen)\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1\n ctr[0] = (c >>> 24) & 0xff\n ctr[1] = (c >>> 16) & 0xff\n ctr[2] = (c >>> 8) & 0xff\n ctr[3] = (c >>> 0) & 0xff\n prf.reset()\n prf.update(salt)\n prf.update(ctr)\n prf.finish(u)\n for (var j = 0; j < len; j++) {\n t[j] = u[j]\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset()\n prf.update(u).finish(u)\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k]\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j]\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0\n }\n prf.clean()\n return dk\n}\n","import { hash, hmac } from '../lib/fast-sha256.js'\nimport { MBP } from 'meta-buffer-pack'\n\n/*\nTip.\n fast-sha256 use data:8Uint8Array\n sha256-mbp use data:any ( internal type converter )\n\n MBP.U8( any ) return Uint8Array\n MBP.B8( any ) reutn Buffer instance\n\n*/\nconst sha256 = {};\n\nsha256.hash = function (data) {\n return hash(MBP.U8(data))\n}\n\nsha256.hex = function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('hex')\n}\n\nsha256.base64= function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('base64')\n}\n\nsha256.hmac = function (key, data) {\n return hmac(MBP.U8(key), MBP.U8(data))\n}\n\nexport { sha256 }\n","import{ MBP, Buffer} from \"meta-buffer-pack\"\nconst MB = MBP.MB\n\n\n// remocon message pack one byte header. \nexport let BohoMsg = {\n AUTH_REQ : 0xB0, \n AUTH_NONCE: 0xB1,\n AUTH_HMAC: 0xB2,\n AUTH_ACK: 0xB3,\n AUTH_FAIL: 0xB4,\n AUTH_EXT: 0xB5,\n ENC_PACK : 0xB6, \n ENC_E2E : 0xB7, \n ENC_488 : 0xB8\n}\n\nfor (let c in BohoMsg) { BohoMsg[BohoMsg[c]] = c }\n\nexport const Meta = {\n\n AUTH_REQ: MBP.meta( // 2\n MB('header','8', 0),\n MB('reserved','8', 0)\n ),\n\n AUTH_NONCE: MBP.meta( // 13\n MB('header','8', 0),\n MB('unixTime','32L', 0),\n MB('milTime','32L', 0 ),\n MB('nonce', Buffer.alloc(4))\n ),\n\n AUTH_HMAC: MBP.meta( // 45\n MB('header','8', 0),\n MB('id8',Buffer.alloc(8)),\n MB('nonce', Buffer.alloc(4)),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n AUTH_ACK: MBP.meta( // 33\n MB('header','8', 0),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n\n ENC_PACK: MBP.meta( //25 + payload\n MB('type','8',0),\n MB('len','32L',0), // pure xdata size. \n MB('salt12', Buffer.alloc(12)), // sec,mil,rand\n MB('hmac',8,0)\n // MB( 'xdata', encData )\n ),\n\n\n ENC_488: MBP.meta( // 21 + payload\n MB('type','8', 0 ),\n MB('len','32L', 0 ),\n MB('otpSrc8', Buffer.alloc(8) ),\n MB('hmac8', Buffer.alloc(8) )\n // MB('xdata', encData ) \n )\n\n\n }\n\n\n function getMetaSize(meta){\n let lastItem = meta[ meta.length - 1]\n return lastItem[2] + lastItem[3]\n }\n\n export const MetaSize = {\n AUTH_REQ: getMetaSize( Meta.AUTH_REQ ),\n AUTH_NONCE: getMetaSize( Meta.AUTH_NONCE ),\n AUTH_HMAC: getMetaSize( Meta.AUTH_HMAC ),\n AUTH_ACK: getMetaSize( Meta.AUTH_ACK ),\n ENC_PACK: getMetaSize( Meta.ENC_PACK ),\n ENC_488: getMetaSize( Meta.ENC_488 )\n }\n\n// console.log( 'boho MetaSize', MetaSize )\n// boho MetaSize {\n// AUTH_REQ: 2,\n// AUTH_NONCE: 13,\n// AUTH_HMAC: 45,\n// AUTH_ACK: 33,\n// ENC_PACK: 25,\n// ENC_488: 21\n// }","import { sha256 } from './sha256-mbp.js'\nimport { MBP, Buffer } from 'meta-buffer-pack'\nexport { sha256, MBP, Buffer }\n\nimport { webcrypto } from 'crypto'\nimport { BohoMsg, Meta, MetaSize } from \"./constants.js\"\nexport { BohoMsg, Meta, MetaSize }\n\nlet isNode = false\ntry {\n isNode = Object.prototype.toString.call(global.process) === '[object process]'\n} catch (e) { }\n\n\nexport function RAND(size) {\n if( isNode ){\n return webcrypto.getRandomValues(Buffer.alloc(size))\n }else{\n return self.crypto.getRandomValues(Buffer.alloc(size))\n }\n}\n\n\n\nexport class Boho {\n // A. Core\n constructor() {\n\n this._id8 = Buffer.alloc(8)\n this._otpSrc44 = Buffer.alloc(44)\n this._otp36 = Buffer.alloc(36)\n this._hmac = Buffer.alloc(32)\n\n this.auth_salt12 = Buffer.alloc(12)\n this.localNonce = Buffer.alloc(4)\n this.remoteNonce = Buffer.alloc(4)\n this.isAuthorized = false\n\n }\n\n clearAuth(){\n this._id8.fill(0)\n this._otpSrc44.fill(0)\n this._otp36.fill(0)\n this._hmac.fill(0)\n this.auth_salt12.fill(0)\n this.localNonce.fill(0)\n this.remoteNonce.fill(0)\n this.isAuthorized = false\n }\n\n // for the self\n set_hash_id8(data) {\n let idSum = MBP.B8(sha256.hash(data))\n idSum.copy(this._id8, 0, 0, 8)\n }\n\n set_id8(data) {\n let encStr = MBP.B8(data)\n this._id8.fill(0)\n encStr.copy(this._id8, 0, 0, 8)\n }\n\n set_key(data) {\n let keySum = MBP.B8(sha256.hash(data))\n keySum.copy(this._otpSrc44, 0, 0, 32)\n }\n\n // id_key == 'id' + '.' + 'key' \n set_id_key(id_key) {\n let delimiterPosition = id_key.indexOf('.')\n if( delimiterPosition == -1 ) return\n let id = id_key.substring(0, delimiterPosition)\n let key = id_key.substring(delimiterPosition + 1)\n this.set_id8(id)\n this.set_key(key)\n }\n\n copy_id8(data) {\n data.copy(this._id8, 0, 0, 8)\n }\n\n copy_key(data) {\n data.copy(this._otpSrc44, 0, 0, 32)\n }\n\n\n sha256_n(srcData, n) {\n let hashSum = sha256.hash(srcData)\n for (let i = 0; i < n; i++) hashSum = sha256.hash(hashSum)\n return hashSum\n }\n\n\n // useful general encryption i.e. enc_pack\n set_clock_rand() {\n\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n RAND(4)\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n // for secure communication sender. \n set_clock_nonce(nonce) {\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n nonce\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n\n set_salt12(salt12) {\n salt12.copy(this._otpSrc44, 32)\n }\n\n resetOTP() {\n let otp32 = MBP.B8(sha256.hash(this._otpSrc44))\n otp32.copy(this._otp36, 0, 0, 32)\n }\n\n getIndexOTP(otpIndex) {\n this._otp36.writeUInt32LE(otpIndex, 32)\n return sha256.hash(this._otp36)\n }\n\n\n generateHMAC(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n }\n\n // return 8 bytes of hash\n getHMAC8(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n return this._hmac.subarray(0, 8)\n }\n\n xotp(data, otpStartIndex = 0, shareDataBuffer = false) {\n\n data = MBP.B8(data, shareDataBuffer)\n\n let len = data.byteLength\n let otpIndex = otpStartIndex\n let dataOffset = 0\n let xorCalcLen = 0\n\n while (len > 0) {\n xorCalcLen = len < 32 ? len : 32\n let iotp = this.getIndexOTP(++otpIndex);\n for (let i = 0; i < xorCalcLen; i++) {\n data[dataOffset++] ^= iotp[i]\n }\n len -= 32\n }\n return data\n }\n\n // B. AUTH process\n\n // step 1\n // client send AUTH_REQ\n auth_req() {\n return MBP.pack(\n MBP.MB('#type', '8', BohoMsg.AUTH_REQ),\n MBP.MB('#reserved', '8', 0)\n )\n }\n\n // step 2\n // server send AUTH_NONCE\n auth_nonce() {\n let now = Date.now()\n let unixTime = Math.floor(now / 1000)\n let milTime = now % 1000\n this.localNonce = RAND(4)\n this.auth_salt12 = Buffer.concat([\n MBP.NB('32L', unixTime),\n MBP.NB('32L', milTime),\n this.localNonce\n ])\n\n let infoPack = Buffer.concat([\n MBP.NB('8', BohoMsg.AUTH_NONCE),\n this.auth_salt12\n ])\n return infoPack\n }\n\n\n // step 3\n // client send AUTH_HMAC\n // input : auth_nonce buffer\n auth_hmac(buffer) {\n let auth_nonce = MBP.unpack(buffer, Meta.AUTH_NONCE)\n if (auth_nonce) {\n // console.log(' auth nonce', auth_nonce )\n\n // let now = Date.now()\n // let localUTC= Math.floor( now/ 1000 )\n // let localMilTime = now % 1000\n\n // console.log('time server [sec]', auth_nonce.unixTime, auth_nonce.milTime )\n // console.log('time client [sec]', localUTC , localMilTime )\n // console.log('time diff client and server[sec]', auth_nonce.unixTime - localUTC )\n\n // let serverSecMil = auth_nonce.unixTime * 1000 + auth_nonce.milTime\n // console.log('time diff msec client and server[msec]', serverSecMil - now )\n\n let salt12 = Buffer.concat([\n MBP.NB('32L', auth_nonce.unixTime),\n MBP.NB('32L', auth_nonce.milTime),\n auth_nonce.nonce\n ])\n\n this.set_salt12(salt12)\n\n this.localNonce = RAND(4)\n // hmac( key, sec,mil,serverNonce, localNonce)\n this.generateHMAC(this.localNonce)\n\n // let hmac8 = this._hmac.subarray(0, 8)\n\n this.remoteNonce = auth_nonce.nonce\n\n let auth_hmac_buffer = MBP.pack( // 21 -> 45\n MBP.MB('#header', '8', BohoMsg.AUTH_HMAC),\n MBP.MB('#id8', this._id8),\n MBP.MB('#nonce', this.localNonce),\n MBP.MB('#hmac32', this._hmac ), //full 32bytes hash\n )\n\n return auth_hmac_buffer\n }\n return false\n }\n\n /* \n step 4. for server\n \n step 4-1. check client's auth_hmac\n step 4-2. reply result\n send AUTH_ACK with another HMAC for client.\n or send AUTH_FAIL when fail.\n */\n\n // input: unpack object or buffer of auth_hmac\n check_auth_hmac(data) {\n let infoPack\n if (data instanceof Uint8Array) {\n infoPack = MBP.unpack(data, Meta.AUTH_HMAC)\n if (!infoPack) {\n // console.log('auth_hamc unpack fail.')\n return\n }\n } else {\n infoPack = data;\n\n }\n // console.log('auth_hamc infoObj', infoPack )\n\n this.set_salt12(this.auth_salt12)\n\n // hmac( key, sec,mil,serverNonce, clientNonce)\n this.generateHMAC(infoPack.nonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n\n if (MBP.equal(infoPack.hmac32, hmac32)) {\n //Auth success then store client nonce.\n this.remoteNonce = infoPack.nonce\n\n let salt12 = Buffer.concat([\n this.localNonce,\n this.remoteNonce,\n this.localNonce\n ])\n this.set_salt12(salt12)\n this.generateHMAC(infoPack.nonce)\n let replyHMAC = this._hmac\n\n let auth_ack = MBP.rawPack( \n MBP.MB('header', '8', BohoMsg.AUTH_ACK),\n MBP.MB('hmac32', replyHMAC)\n )\n this.isAuthorized = true\n return auth_ack\n }\n return false\n }\n\n\n\n // step 5. cross check\n // client check server's hmac. \n check_auth_ack_hmac(buffer) {\n // server response has hmac ( key + clientNonce)\n let auth_ack = MBP.unpack(buffer, Meta.AUTH_ACK)\n if (auth_ack) {\n let salt12 = Buffer.concat([\n this.remoteNonce,\n this.localNonce,\n this.remoteNonce,\n ])\n this.set_salt12(salt12)\n this.generateHMAC(this.localNonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n //server side hmac using client nonce.\n if (MBP.equal(hmac32, auth_ack.hmac32)) {\n this.isAuthorized = true\n return true\n }\n }\n // server hmac error\n return\n }\n\n // C. Secure Communication\n\n // Must AUTH first.\n encrypt_488(data) { // payload max about 2^32 bytes.\n if (!this.isAuthorized) return\n\n data = MBP.B8(data)\n\n this.set_clock_nonce(this.remoteNonce)\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_488),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#otpSrc8', this._otpSrc44.subarray(32, 40)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n // console.log('enc pack result', pack )\n return pack\n }\n\n\n decrypt_488(data) {\n data = MBP.B8(data)\n\n let pack = MBP.unpack(data, Meta.ENC_488)\n\n if (pack) {\n\n let salt12 = Buffer.concat([\n pack.otpSrc8,\n this.localNonce\n ])\n\n this.set_salt12(salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS.subarray(0, pack.len)\n let decData = this.xotp(xdata)\n\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(hmac8, pack.hmac8)) return decData\n\n // console.log('hmac dismatch', decData )\n } else {\n // console.log('unpack fail')\n }\n }\n\n\n // maxium data size is 2**32 -1 bytes.\n encryptPack(data) {\n data = MBP.B8(data)\n\n this.set_clock_rand()\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_PACK),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#salt12', this._otpSrc44.subarray(32)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n return pack\n }\n\n\n decryptPack(data) {\n\n if (data[0] !== BohoMsg.ENC_PACK) {\n // console.log('Boho: Invalid packType')\n return\n }\n\n // packLength\n let readPackLen = data.readUint32LE(1);\n if (readPackLen != data.byteLength - MetaSize.ENC_PACK) {\n // console.log('Boho: Invalid LEN data_len: data.byteLen' , readPackLen, data.byteLength)\n return\n }\n\n try {\n let pack = MBP.unpack(data, Meta.ENC_PACK)\n // console.log('unpack result', pack )\n if (!pack) return\n\n this.set_salt12(pack.salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS\n let decData = this.xotp(xdata)\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(pack.hmac, hmac8)) {\n pack.data = decData\n return pack\n }\n // console.log('Invalid HMAC', pack.hmac, hmac8 )\n\n } catch (error) {\n // console.log('Boho: unpack err', error )\n\n }\n }\n\n encrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let pack = this.encryptPack(data)\n this._otpSrc44.set(baseKey)\n return pack;\n }\n\n decrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let decPack = this.decryptPack(data)\n this._otpSrc44.set(baseKey)\n return decPack\n }\n\n}\n","\n// IOclient state\nexport const STATES = {\n OPENING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n SERVER_READY: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n READY: 7,\n REDIRECTING: 8\n}\nfor (let c in STATES) { STATES[STATES[c]] = c }\n\n// server side client state\nexport const CLIENT_STATE = {\n INIT: 0,\n SENT_SERVER_READY: 1,\n RECV_AUTH_REQ: 2,\n SENT_SERVER_NONCE: 3,\n RECV_AUTH_HMAC: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n CID_READY: 7\n}\nfor (let c in CLIENT_STATE) { CLIENT_STATE[CLIENT_STATE[c]] = c }\n\nexport let ENC_MODE = {\n NO: 0,\n YES: 1,\n AUTO: 2\n}\n\nfor (let c in ENC_MODE) { ENC_MODE[ENC_MODE[c]] = c }\n\n\nexport const SIZE_LIMIT = {\n TAG_LEN1: 255,\n TAG_LEN2: 65535,\n CONNECTION_CHECKER_PERIOD: 3000,\n PROMISE_TIMEOUT: 5000,\n DID: 8,\n CID: 12\n}\n\nexport let PAYLOAD_TYPE = {\n EMPTY: 0, \n TEXT: 1,\n BINARY: 2, \n OBJECT: 3, // one stringify able object. no buffer.\n MJSON: 4, // multiple stringify able obejct. JSON string. with top levle array , no buffer\n MBA: 5 // \"meta_buffer_arguments\" arbitary types. buffer included.\n}\nfor (let c in PAYLOAD_TYPE) { PAYLOAD_TYPE[PAYLOAD_TYPE[c]] = c }\n// console.log( PAYLOAD_TYPE )\n\n// MJSON: multiple arguments \n// accepet only string, number, root depth js primittive object, \n// unpack and will send to receiver handler with multiple params.\n\n// MBA: buffer pack of multiple arguments. check \"meta-buffer-pack\" module. \n// MBA: when armuents includes raw Buffer( TypedArray )\n\n// IO message pack one byte header. \nexport let IOMsg = {\n\n /* \n * 0~127dec. reserved. for text stream.\n * 0~31: control code\n * 32~126: ascii charactor\n * 127: DEL\n */\n \n // ADMIN_REQ: 0xA0,\n\n // DO NOT USE: 0xB0~ 0xBF\n // Boho module using this numbers.\n // AUTH_REQ : 0xB0, \n // AUTH_NONCE: 0xB1,\n // AUTH_HMAC: 0xB2,\n // AUTH_ACK: 0xB3,\n // AUTH_FAIL: 0xB4,\n // AUTH_EXT: 0xB5,\n // ENC_PACK : 0xB6, \n // ENC_E2E : 0xB7, \n // ENC_488 : 0xB8\n // reserved ~0xBF\n\n // C. IO status contorl.\n SERVER_READY: 0xC0,\n CID_REQ: 0xC1, \n CID_RES: 0xC2, \n QUOTA_LEVEL: 0xC3,\n SERVER_CLEAR_AUTH: 0xC4, \n SERVER_REDIRECT: 0xC5,\n\n // ..\n LOOP: 0xCB,\n ECHO: 0xCC,\n PING: 0xCD, \n PONG: 0xCE,\n CLOSE: 0xCF,\n // ~CF\n\n\n // D. IO data signaling\n SIGNAL: 0xD0, \n SIGNAL_REQ: 0xD1, \n SIGNAL_E2E: 0xD2, \n SUBSCRIBE: 0xD3,\n SUBSCRIBE_REQ: 0xD4, \n UNSUBSCRIBE: 0xD5, \n SERVER_SIGNAL: 0xD6, \n\n // ..\n IAM: 0xD9,\n IAM_RES: 0xDA,\n \n //.. \n SET: 0xDB, //\n RESPONSE_CODE: 0xDC, \n RESPONSE_MBP: 0xDD, \n\n REQUEST: 0xDE, //client public\n RESPONSE: 0xDF,\n // ~DF\n\n\n // F. Framing Flow control related framing protocol.(CongPacket)\n FLOW_MODE: 0xF0,\n WAIT: 0xF1,\n RESUME: 0xF2,\n //..\n TIME_OUT: 0xFD,\n OVER_SIZE: 0xFE,\n OVER_FLOW: 0xFF\n\n}\n\nfor (let c in IOMsg) { IOMsg[IOMsg[c]] = c }\n\n// console.log( IOMsg );\n\n\nexport const API_TYPE = {\n 'REQUEST_RESPONSE': 'requet_response',\n 'ONE_WAY': 'one_way'\n}\n\n\n\n// api response status code\nexport const STATUS = {\n OK: 0,\n //0~127: success\n //128~255: fail\n ERROR: 255\n}\n","// table index related with:\n// - AUTH database level\n// - serverOption.defaultQuotaIndex\n\n// quota example\n// index range: 0~255.\nexport let quotaTable = {\n // CongSocket\n 0: { // default. anonymouse:\n signalSize: 1500,\n publishCounter: 10,\n trafficRate: 10000\n },\n 1: { // auth_ultralight: eg. Arduino Uno.\n signalSize: 255,\n publishCounter: 10,\n trafficRate: 100000\n },\n 2: { // auth_light: eg. authorized ESP.\n signalSize: 65535,\n publishCounter: 10,\n trafficRate: 1048576\n },\n\n // WebSocket (browser and node app)\n 3: { // authorized basic.\n signalSize: 1048576, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n\n // WebSocket (browser and node app)\n 10: { // anonymouse\n signalSize: 1500, \n publishCounter: 5,\n trafficRate: 1048576 * 20\n },\n\n 11: { // authorized basic.\n signalSize: 65535, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n \n 12: { // authorized power.\n signalSize: 1048576, \n publishCounter: 100,\n trafficRate: 1048576 * 20\n },\n \n // you can add your custom quota level.\n\n // Remote service node\n // High Quota, No root permission.\n 200: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n },\n // super admin or root user.\n // to monitor, metric, sudo command, db acess\n 255: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n }\n}\n\n","import { MBP } from 'meta-buffer-pack'\nimport { PAYLOAD_TYPE, IOMsg } from \"./constants.js\";\nconst encoder = new TextEncoder()\n\n\nexport function getSignalPack( tag, ...args ){\n if( typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode( tag)\n let payload = parsePayload( args )\n\n let sigPack;\n if( payload.type == PAYLOAD_TYPE.EMPTY ){\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type )\n )\n }else if( payload.type == PAYLOAD_TYPE.MBA ){\n let mbaBuffer = MBP.pack( MBP.MBA(...args))\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#mbaBuffer', mbaBuffer )\n )\n }else { \n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#payload', payload.buffer )\n )\n }\n return sigPack\n}\n\n\nexport function parsePayload( args){\n let type, pack;\n if( args.length == 0){\n type = PAYLOAD_TYPE.EMPTY \n pack = null\n }else if( args.length == 1){\n if( typeof args[0] === 'string' || typeof args[0] === 'number'){\n type = PAYLOAD_TYPE.TEXT\n pack = encoder.encode( args[0] + \".\") // add null area.\n pack[pack.byteLength - 1 ] = 0 // set null.\n\n }else if( ArrayBuffer.isView( args[0]) || args[0] instanceof ArrayBuffer ){ //one buffer\n type = PAYLOAD_TYPE.BINARY\n pack = MBP.B8( args[0 ] )\n }else if(typeof args[0] === 'object'){ \n type = PAYLOAD_TYPE.OBJECT\n pack = encoder.encode( JSON.stringify( args[0]) )\n }else{\n throw new Error('unknown payload arguments')\n }\n }else{ // args 2 and more\n let containsBuffer = false\n args.forEach( item =>{\n if( ArrayBuffer.isView( item ) || item instanceof ArrayBuffer ) containsBuffer = true;\n })\n\n if( containsBuffer ){\n type = PAYLOAD_TYPE.MBA;\n }else{\n type = PAYLOAD_TYPE.MJSON;\n // args is array\n pack = encoder.encode( JSON.stringify( args ) )\n }\n \n }\n \n return { type: type, buffer: pack }\n}\n\nexport function getPayloadFromSignalPack( signalPack ){\n let tagLen = signalPack.readUint8(1)\n return signalPack.subarray(3 + tagLen)\n}","import { MBP, Buffer } from 'meta-buffer-pack'\nimport EventEmitter from \"eventemitter3\";\nimport { Boho, BohoMsg, MetaSize } from \"boho\";\nimport { IOMsg, PAYLOAD_TYPE, SIZE_LIMIT, ENC_MODE, STATES } from '../common/constants.js'\nimport { quotaTable } from '../common/quotaTable.js'\nimport { getSignalPack } from '../common/payload.js';\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nfunction byteToUrl(buffer) {\n //ipv4(4bytes) , port(2bytes)\n if (buffer.byteLength != 6) return\n let address = buffer[0].toString() + \".\" + buffer[1].toString()\n + \".\" + buffer[2].toString() + \".\" + buffer[3].toString();\n let port = (buffer[4] << 8) + buffer[5]\n return address + ':' + port.toString()\n}\n\nexport class IOCore extends EventEmitter {\n constructor(url) {\n super();\n this.cid = \"\" // get from the server CID_RES\n this.ip = \"\" // get from the server IAM_RES message.\n this.socket = null;\n this.url = url; // init default server url\n this.state = STATES.CLOSED; // Number type\n this.stateName = this.getStateName() // String type\n\n this.txCounter = 0;\n this.rxCounter = 0;\n this.txBytes = 0;\n this.rxBytes = 0;\n\n this.lastTxRxTime = Date.now();\n this.connectionCheckerPeriod = SIZE_LIMIT.CONNECTION_CHECKER_PERIOD;\n this.connectionCheckerIntervalID = null;\n\n this.boho = new Boho()\n this.TLS = false // true if protocol is wss(TLS)\n this.encMode = ENC_MODE.AUTO;\n this.useAuth = false;\n\n this.nick = \"\";\n this.channels = new Set()\n this.promiseMap = new Map()\n this.promiseTimeOut = SIZE_LIMIT.PROMISE_TIMEOUT\n this.mid = 0 // promise message id \n\n this.level = 0; // also defaultQuotaLevel\n this.quota = quotaTable[this.level];\n this.serverSet = {}\n this.linkMap = new Map()\n\n this.on('open', this.onOpen.bind(this))\n this.on('close', this.onClose.bind(this))\n this.on('socket_data', this.onData.bind(this))\n }\n\n\n redirect(url2) {\n this.close()\n this.stateChange('redirecting')\n this.createConnection(url2)\n }\n\n open(url) {\n if (!url && !this.url) return;\n\n if (url) {\n if (!this.url) { // default host url\n this.url = url\n } else if (url !== this.url) { // default host url change\n this.url = url;\n if (this.socket) {\n this.close()\n return\n }\n }\n }\n\n this.createConnection(this.url)\n\n if (!this.connectionCheckerIntervalID) {\n this.connectionCheckerIntervalID = setInterval(this.keepAlive.bind(this), this.connectionCheckerPeriod);\n }\n }\n\n onOpen() {\n if (this.url.includes(\"wss://\")) {\n this.TLS = true;\n } else {\n this.TLS = false;\n }\n this.stateChange('open')\n }\n\n onClose() {\n this.boho.isAuthorized = false;\n this.cid = \"\"\n this.stateChange('closed')\n }\n\n // manual login\n login(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n console.log('manual login: ', id)\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n let auth_pack = this.boho.auth_req()\n // console.log('auth_req_pack', auth_pack )\n this.send(auth_pack)\n }\n\n // auto login\n auth(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n }\n\n onData(buffer) {\n // console.log('remote rcv socket_message', buffer )\n //check first byte (remote message type)\n let msgType = buffer[0];\n let decoded;\n\n if (msgType === BohoMsg.ENC_488) {\n decoded = this.boho.decrypt_488(buffer)\n if (decoded) {\n // console.log( decoded )\n msgType = decoded[0]\n buffer = decoded\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('DEC_FAIL', buffer.byteLength)\n }\n } else if (msgType === BohoMsg.ENC_E2E) {\n // console.log('rcv ENC_E2E' )\n\n try {\n decoded = this.boho.decrypt_488(buffer)\n //헤더를 읽고 헤더크기만큼만 해석한다.\n if (decoded) {\n // console.log( 'ENC_E2E decoded ', decoded )\n msgType = decoded[0]\n // decoded has msg_header only. \n buffer.set(decoded, MetaSize.ENC_488) // set decoded signal_e2e headaer.\n buffer = buffer.subarray(MetaSize.ENC_488) // reset offset.\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('488 DEC_FAIL', buffer)\n return\n }\n\n } catch (err) {\n // console.log('E2E DEC_FAIL decryption error', err)\n return\n }\n\n }\n\n let type = IOMsg[msgType]\n if (!type) type = BohoMsg[msgType]\n\n // console.log( \"MsgType: \", type , \" LEN \", buffer.byteLength)\n\n switch (msgType) {\n case IOMsg.OVER_SIZE:\n console.log('## server sent: over_size event.')\n this.emit('over_size', 'over_size')\n break;\n case IOMsg.PING:\n this.pong();\n break;\n\n case IOMsg.PONG:\n break;\n\n case IOMsg.IAM_RES:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let jsonInfo = JSON.parse(str)\n if (jsonInfo.ip) {\n this.ip = jsonInfo.ip;\n }\n console.log('', JSON.stringify(jsonInfo))\n // console.log('', JSON.stringify(jsonInfo,null,2))\n } catch (error) {\n // console.log(' data error')\n }\n break;\n\n case IOMsg.CID_RES:\n let cidStr = decoder.decode(buffer.subarray(1))\n // console.log( '>> CID_RES: ' ,cidStr )\n this.cid = cidStr;\n // change state before subscribe.\n this.stateChange('ready', 'cid_ready')\n this.subscribe_memory_channels()\n break;\n\n case IOMsg.QUOTA_LEVEL:\n let quotaLevel = buffer[1]\n this.level = quotaLevel;\n this.quota = quotaTable[quotaLevel];\n console.log('## QUOTA:', quotaLevel, JSON.stringify(this.quota))\n break;\n\n case IOMsg.SERVER_CLEAR_AUTH:\n this.useAuth = false;\n this.boho.clearAuth();\n this.stop();\n break;\n\n case IOMsg.SERVER_REDIRECT:\n let host_port;\n let url;\n let protocol;\n let addressType;\n if (buffer.byteLength == 7) { // ipv4 ,port\n addressType = 'IPV4:PORT'\n host_port = byteToUrl(buffer.subarray(1))\n protocol = 'cong://'\n } else { // domain url\n addressType = 'URL'\n host_port = decoder.decode(buffer.subarray(1))\n protocol = ''\n }\n\n url = protocol + host_port\n this.redirect(url)\n break;\n\n case IOMsg.SERVER_READY:\n this.stateChange('server_ready', 'server_ready')\n if (this.useAuth) {\n this.send(this.boho.auth_req())\n // CID_REQ will be called, after auth_ack.\n } else {\n // CID_REQ here, if not using auth.\n this.send(Buffer.from([IOMsg.CID_REQ]))\n }\n break;\n\n case IOMsg.SERVER_SIGNAL:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let ss = JSON.parse(str)\n // console.log('SERVER_SIGNAL', JSON.stringify(ss))\n\n if (ss.event && ss.data) {\n this.serverSet = ss.data;\n this.emit(ss.event, ss.data)\n }\n\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SET:\n try {\n let setPack = MBP.unpack(buffer)\n if (setPack) {\n // console.log('[SET] topic: ', setPack.topic)\n this.emit(setPack.topic, ...setPack.args)\n }\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SIGNAL_E2E:\n case IOMsg.SIGNAL:\n try {\n let tagLen = buffer.readUint8(1)\n let tagBuf = buffer.subarray(2, 2 + tagLen)\n let tag = decoder.decode(tagBuf)\n\n let payloadType = buffer.readUint8(2 + tagLen)\n let payloadBuffer = buffer.subarray(3 + tagLen)\n\n /* three types of signal message.\n > unicast message to me: tag includes @, no cid: '@*'\n > cid_sub message: tag includes cid and @ both : 'cid@*'\n > ch_sub message: else.\n */\n switch (payloadType) {\n\n case PAYLOAD_TYPE.EMPTY: // 0\n if (tag.indexOf('@') === 0) this.emit('@', null, tag)\n else this.emit(tag, null, tag)\n break;\n\n case PAYLOAD_TYPE.TEXT: // 1\n // !! Must remove null char before decode in JS.\n // string payload contains null char for the c/cpp devices.\n let payloadStringWithoutNull = payloadBuffer.subarray(0, payloadBuffer.byteLength - 1)\n let oneString = decoder.decode(payloadStringWithoutNull)\n if (tag.indexOf('@') === 0) this.emit('@', oneString, tag)\n if (tag !== '@') this.emit(tag, oneString, tag)\n break;\n\n case PAYLOAD_TYPE.BINARY: // 2\n if (tag.indexOf('@') === 0) this.emit('@', payloadBuffer, tag)\n if (tag !== '@') this.emit(tag, payloadBuffer, tag)\n break;\n\n case PAYLOAD_TYPE.OBJECT:\n let oneObjectBuffer = decoder.decode(payloadBuffer)\n let oneJSONObject = JSON.parse(oneObjectBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', oneJSONObject, tag)\n if (tag !== '@') this.emit(tag, oneJSONObject, tag)\n break;\n\n case PAYLOAD_TYPE.MJSON:\n let mjsonBuffer = decoder.decode(payloadBuffer)\n let mjson = JSON.parse(mjsonBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mjson, tag)\n if (tag !== '@') this.emit(tag, ...mjson, tag)\n break;\n\n case PAYLOAD_TYPE.MBA:\n let mbaObject = MBP.unpack(payloadBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mbaObject.args, tag)\n if (tag !== '@') this.emit(tag, ...mbaObject.args, tag)\n break;\n\n default:\n // console.log('## Unkown payloadtype', payloadType)\n }\n\n } catch (err) {\n // console.log('## signal parse err', err)\n }\n break;\n\n case IOMsg.RESPONSE_MBP:\n this.testPromise(buffer)\n break;\n\n case BohoMsg.AUTH_NONCE:\n let auth_hmac = this.boho.auth_hmac(buffer)\n if (auth_hmac) {\n this.send(auth_hmac)\n } else {\n this.stateChange('auth_fail', 'Invalid local auth_hmac.')\n }\n break;\n\n case BohoMsg.AUTH_FAIL:\n this.stateChange('auth_fail', 'server reject auth.')\n break;\n\n case BohoMsg.AUTH_ACK:\n if (this.boho.check_auth_ack_hmac(buffer)) {\n this.stateChange('auth_ready', 'server sent auth_ack')\n this.send(Buffer.from([IOMsg.CID_REQ]))\n } else {\n this.stateChange('auth_fail', 'invalid server_hmac')\n }\n break;\n\n default:\n try {\n decoded = decoder.decode(buffer)\n // console.log('text message:', decoded)\n this.emit('text_message', decoded)\n } catch (error) {\n\n }\n\n break;\n\n }\n }\n\n iam(title) {\n // console.log('iam', title)\n if (title) {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM),\n MBP.MB('#', title)\n ))\n } else {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM)\n ))\n }\n }\n\n\n ping() {\n this.send(Buffer.from([IOMsg.PING]))\n }\n\n pong() {\n this.send(Buffer.from([IOMsg.PONG]))\n }\n\n\n // application level ping tool. \n // simple message sending and reply.\n echo(args) {\n if (args) {\n console.log('echo args:', args)\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.ECHO),\n MBP.MB('#msg', args)\n ))\n } else {\n // # do not encrypt blank echo #\n this.send(Buffer.from([IOMsg.ECHO]))\n }\n }\n\n\n bin(...data) {\n this.send(MBP.U8pack(...data))\n }\n\n send(data) {\n if (data.byteLength > this.quota.signalSize) {\n this.emit('over_size')\n console.log('## QUOTA LIMIT OVER!! \\nsignal message.byteLength: ', data.byteLength)\n console.log('## your maximum signalSize(bytes) is:', this.quota.signalSize)\n return\n }\n this.socket_send(data);\n }\n\n /*\n Policy. Should message do encrypt?\n\n if encMode == auto\n NO. if connection using TLS line.\n // ex. wss://url connection.\n YES. if no TLS line.\n // ex. ws://url connection.\n\n if encMode == YES\n YES. encrypt the message.\n\n if encMode == NO\n NO. do not ecnrypt message.\n\n */\n getEncryptionMode() {\n if (this.encMode === ENC_MODE.YES ||\n this.encMode === ENC_MODE.AUTO &&\n !this.TLS && this.boho.isAuthorized\n ) {\n return true;\n } else {\n return false\n }\n }\n\n send_enc_mode(data, useEncryption) {\n\n // use default policy.\n if (useEncryption === undefined) {\n useEncryption = this.getEncryptionMode()\n }\n\n if (data[0] == IOMsg.SIGNAL_E2E && useEncryption) {\n // input data: signal_header + e2ePayload\n // encrypt signal_header area only. payload is encrypted with e2e key already.\n let tagLen = data[1]\n let encHeader = this.boho.encrypt_488(data.subarray(0, 3 + tagLen))\n encHeader[0] = BohoMsg.ENC_E2E\n this.send(Buffer.concat([encHeader, data.subarray(3 + tagLen)]))\n // console.log('<< send_enc_mode [ ENC_E2E ]')\n\n } else if (useEncryption) {\n // console.log('<< send_enc_mode [ ENC_488 ]')\n let encPack = this.boho.encrypt_488(data)\n this.send(encPack)\n } else {\n // console.log('<< send_enc_mode [ PLAIN ]' )\n this.send(data)\n }\n\n }\n\n\n setMsgPromise(mid) {\n return new Promise((resolve, reject) => {\n this.promiseMap.set(mid, [resolve, reject])\n // console.log('set promise. mid, size', mid, this.promiseMap.size)\n setTimeout(e => {\n if (this.promiseMap.has(mid)) {\n reject('timeout');\n this.promiseMap.delete(mid)\n // console.log('promise timeout. mid, size:', mid, this.promiseMap.size)\n }\n }, this.promiseTimeOut);\n })\n }\n\n testPromise(buffer) {\n // console.log('mbp buffer : ', buffer , buffer.byteLength)\n // let mbp = ( buffer.byteLength > 4 ) ? buffer.subarray(4) : \"\"\n\n let res = MBP.unpack(buffer)\n if (!res) return\n // console.log( res )\n\n // console.log(`RESPONSE_MBP MID: ${mid} status: ${status} ,mbp: ${ buffer.subarray(4)} `)\n\n if (this.promiseMap.has(res.mid)) {\n // console.log('res promise msg', mid)\n let [resolve, reject] = this.promiseMap.get(res.mid)\n this.promiseMap.delete(res.mid)\n\n if (res.status < 128) {\n res.ok = true;\n // console.log( 'unpack meta:', meta)\n resolve(res)\n } else {\n res.ok = false;\n reject(res)\n }\n\n\n } else {\n console.log('no promise id')\n }\n }\n\n\n publish(...args) {\n this.signal(...args)\n }\n\n\n signal(tag, ...args) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n let signalPack = getSignalPack(tag, ...args)\n this.send_enc_mode(signalPack)\n }\n\n decrypt_e2e(data, key) {\n return this.boho.decrypt_e2e(data, key)\n }\n\n signal_e2e(tag, data, key) {\n\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode(tag)\n let dataPack = MBP.B8(data)\n\n //encrypt payload area with key\n let sercretPack = this.boho.encrypt_e2e(dataPack, key)\n\n //change signal MsgType header into SIGNAL_E2E\n let signalPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.SIGNAL_E2E),\n MBP.MB('#tagLen', '8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', PAYLOAD_TYPE.BINARY),\n MBP.MB('#payload', sercretPack)\n )\n\n this.send_enc_mode(signalPack)\n }\n\n\n\n set(storeName, ...args) {\n if (!storeName || args.length == 0) {\n return Promise.reject(new Error('set need storeName and value)'))\n }\n return this.req('store', 'set', storeName, ...args)\n }\n\n async get(storeName) {\n if (!storeName) {\n return Promise.reject(new Error('store get need storeName)'))\n }\n let pack = await this.req('store', 'get', storeName)\n let { $ } = MBP.unpack(pack.body)\n return $\n }\n\n\n req(target, topic, ...args) {\n // console.log('common_req args', args)\n if (!target || !topic)\n return Promise.reject(new Error('request need target and topic)'))\n let sigPack;\n if (args.length > 0) {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic),\n MBP.MBA(...args)\n )\n } else {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic)\n )\n }\n // console.log('<< adminPack', this.mid, sigPack)\n this.send_enc_mode(sigPack)\n return this.setMsgPromise(this.mid)\n }\n\n\n subscribe(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) return\n\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.add(tag)\n })\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n subscribe_promise(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) {\n // console.log('not ready state:', this.state )\n return Promise.reject('subscribe_promise:: connection is not ready')\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN2) throw TypeError('please use tag string bytelength: ' + SIZE_LIMIT.TAG_LEN2)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE_REQ),\n MBP.NB('16', ++this.mid),\n MBP.NB('16', tagEncoded.byteLength),\n tagEncoded]))\n return this.setMsgPromise(this.mid)\n }\n\n subscribe_memory_channels() { //local cache . auto_resubscribe\n if (this.channels.size == 0) return\n let chList = Array.from(this.channels).join(',')\n // console.log('<< subscibe memory channels by cid', chList , this.cid )\n\n this.subscribe_promise(chList)\n .then((res) => {\n // console.log('>> SUBSCRIBE_REQ result', res ) // return code == map.size\n }).catch((e) => {\n console.log('>> SUBSCRIBE FAIL:', e)\n })\n\n }\n\n unsubscribe(tag = \"\") {\n // console.log('unsub', tag)\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n if (tag == \"\") {\n // console.log('unsub all')\n this.channels.clear();\n } else {\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.delete(tag)\n })\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(Buffer.concat([\n MBP.NB('8', IOMsg.UNSUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n\n listen(tag, handler) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n // console.log('channels:', this.channels )\n this.on(tag, handler)\n // do not subscribe now.\n // will subscribe when receive CID_RES signal from server.\n\n }\n\n\n\n link(to, tag, handler) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n\n let linkSet;\n if (this.linkMap.has(to)) {\n linkSet = this.linkMap.get(to)\n } else {\n linkSet = new Set()\n }\n\n linkSet.add(tag)\n this.linkMap.set(to, linkSet)\n this.on(tag, handler)\n this.subscribe(tag)\n // console.log('link [to] linkMap:', to, this.linkMap )\n\n }\n\n\n unlink(to, tag) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n if (tags[i] == tag) {\n this.unsubscribe(tag)\n this.removeAllListeners(tag)\n linkSet.delete(tag)\n this.linkMap.set(to, linkSet)\n break;\n }\n }\n\n // console.log('unlink linkMap result:', this.linkMap )\n }\n\n unlinkAll(to) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n this.unsubscribe(tags[i])\n this.removeAllListeners(tags[i])\n linkSet.delete(tags[i])\n }\n this.linkMap.delete(to)\n\n // console.log('unlinkAll linkMap result:', this.linkMap )\n }\n\n\n\n getMetric() {\n return {\n tx: this.txCounter,\n rx: this.rxCounter,\n txb: this.txBytes,\n rxb: this.rxBytes,\n last: (Date.now() - this.lastTxRxTime) / 1000\n }\n\n }\n\n getState() {\n return this.state\n }\n\n getStateName() {\n //state \n //value of constant STATES.NAME < number >\n //type of constant STATES.NAME name < string uppercase >\n //stateName,eventName \n return (STATES[this.state]).toLowerCase()\n }\n\n getSecurity() {\n return {\n useAuth: this.useAuth,\n isTLS: this.TLS,\n isAuthorized: this.boho.isAuthorized,\n encMode: this.encMode,\n usingEncryption: this.getEncryptionMode()\n }\n }\n\n stateChange(state, emitEventAndMessage) {\n // STATES constant name : string upperCase\n // eventName, .stateName : string lowerCase\n // .state : number\n let eventName = state.toLowerCase()\n this.state = STATES[state.toUpperCase()] // state: number\n if (emitEventAndMessage) this.emit(eventName, emitEventAndMessage)\n\n if (this.stateName !== eventName) {\n // console.log(`state: ${this.stateName} => ${eventName}` )\n this.stateName = eventName\n this.emit('change', eventName)\n }\n }\n\n}\n\n\n\n\n","import { IOCore } from \"./IOCore.js\";\nimport { Buffer } from 'meta-buffer-pack'\nexport { Boho, RAND, BohoMsg, Meta, MetaSize , sha256, MBP, Buffer } from 'boho'\nexport * from '../common/constants.js'\n\n// Browser WebSocket\nexport class IO extends IOCore{\n constructor(url ) {\n super(url);\n document.addEventListener('visibilitychange', this.browserVisiblePing.bind(this));\n if(url) this.open();\n }\n\n browserVisiblePing(){\n if (document.visibilityState === 'visible') {\n this.ping()\n }\n }\n\n \n close() {\n if(this.socket ){\n this.socket.onclose = null\n this.socket.onmessage = null\n this.socket.onerror = null\n this.socket.close();\n this.socket = null;\n }\n this.emit('close')\n }\n\n\n stop(){\n this.close()\n clearInterval(this.connectionCheckerIntervalID);\n this.connectionCheckerIntervalID = null\n } \n \n \n keepAlive() {\n if ( !this.socket || this.socket?.readyState === 3 ) { //closed\n this.open();\n }\n }\n\n createConnection(url){\n // Web Browser WebSocket\n this.socket = new WebSocket (url );\n this.stateChange('opening')\n\n this.socket.binaryType = \"arraybuffer\"\n this.socket.onopen = () => {\n this.socket.onmessage = this.onWebSocketMessage.bind(this) ;\n this.emit('open' );\n };\n\n this.socket.onerror = (e)=>{ \n this.emit('error', e)\n }\n\n this.socket.onclose = ()=>{ \n this.emit('close' );\n }\n }\n\n onWebSocketMessage( event ) {\n this.rxCounter++;\n this.lastTxRxTime = Date.now();\n let buffer;\n\n // if( event.data instanceof ArrayBuffer ){\n // //binary frame\n // }else{\n // //text frame\n // }\n buffer = Buffer.from( event.data )\n this.rxBytes += buffer.byteLength\n\n this.emit('socket_data', buffer );\n }\n\n socket_send(data) { \n if( this.socket?.readyState === 1 ){ //open\n // console.log('websocket send', data)\n this.socket.send( data )\n this.txCounter++;\n this.txBytes += data.byteLength\n this.lastTxRxTime = Date.now();\n }else{\n console.log('.')\n }\n }\n \n}\n\n"],"names":["byteLength_1","b64","lens","getLens","validLen","placeHoldersLen","toByteArray_1","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray_1","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","value","c","rt","abs","isNaN","floor","log","LN2","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","byteLength","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64","fromByteArray","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","toByteArray","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","encoder","TextEncoder","decoder","TextDecoder","NB","numberBuffer","initValue","toUpperCase","MB","metaBuffer","typeOrData","bufferType","JSON","stringify","v","MBA","metaBufferArguments","args","map","argsIndex","parseTypeName","readTypedBuffer","simpleType","strBuffer","decode","strNumber","objEncoded","parse","pack","bufArr","subArr","filter","item","flatArray","info","infoEncoded","infoSize","forEach","bufPack","infoStr","encode","infoSizeBuff","unpack","binPack","meta","infoArr","getMeta","binObj","readCounter","result","leftSize","mbaIndex","$","U8","parseUint8Array","shareArrayBuffer","originData","dataCopy","B8","parseBuffer","u8","B8pack","parseBufferThenConcat","dataArray","buffers","U8pack","parseUint8ThenConcat","bufferSize","equal","buf1","buf2","getBufferSize","getMetaSize","TAIL_LEN","parseMetaInfo","infoFrom","decoded","firstItem","readTail","DataView","getUint16","getBuffer","rawBufferSize","showDetail","metaInfo","rawPack","has","hasOwnProperty","prefix","Events","EE","context","once","addListener","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","names","getOwnPropertySymbols","listeners","handlers","l","ee","listenerCount","emit","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","module","K","Uint32Array","hashBlocks","w","p","f","g","h","u","t1","t2","Hash","digestLength","blockSize","state","Int32Array","temp","bufferLength","bytesHashed","finished","reset","clean","update","dataLength","dataPos","finish","left","bitLenHi","bitLenLo","padLength","digest","_saveState","_restoreState","HMAC","key","inner","outer","pad","istate","ostate","hash","sha256","MBP.U8","MBP.B8","hmac","MBP.MB","BohoMsg","AUTH_REQ","AUTH_NONCE","AUTH_HMAC","AUTH_ACK","AUTH_FAIL","AUTH_EXT","ENC_PACK","ENC_E2E","ENC_488","Meta","MBP.meta","lastItem","MetaSize","isNode","global","process","RAND","webcrypto","getRandomValues","self","crypto","Boho","_id8","_otpSrc44","_otp36","_hmac","auth_salt12","localNonce","remoteNonce","isAuthorized","clearAuth","set_hash_id8","set_id8","encStr","set_key","set_id_key","id_key","delimiterPosition","id","substring","copy_id8","copy_key","sha256_n","srcData","hashSum","set_clock_rand","milTime","Date","now","secTime","MBP.NB","set_clock_nonce","nonce","set_salt12","salt12","resetOTP","getIndexOTP","otpIndex","generateHMAC","hmacSrc","getHMAC8","xotp","otpStartIndex","shareDataBuffer","dataOffset","xorCalcLen","iotp","auth_req","MBP.pack","auth_nonce","unixTime","auth_hmac","MBP.unpack","check_auth_hmac","infoPack","hmac32","MBP.equal","replyHMAC","auth_ack","MBP.rawPack","check_auth_ack_hmac","encrypt_488","hmac8","encData","decrypt_488","otpSrc8","xdata","$OTHERS","decData","encryptPack","decryptPack","encrypt_e2e","baseKey","decrypt_e2e","decPack","STATES","OPENING","OPEN","CLOSING","CLOSED","SERVER_READY","AUTH_READY","READY","REDIRECTING","CLIENT_STATE","INIT","SENT_SERVER_READY","RECV_AUTH_REQ","SENT_SERVER_NONCE","RECV_AUTH_HMAC","CID_READY","ENC_MODE","NO","YES","AUTO","SIZE_LIMIT","TAG_LEN1","TAG_LEN2","CONNECTION_CHECKER_PERIOD","PROMISE_TIMEOUT","DID","CID","PAYLOAD_TYPE","EMPTY","TEXT","BINARY","OBJECT","MJSON","IOMsg","CID_REQ","CID_RES","QUOTA_LEVEL","SERVER_CLEAR_AUTH","SERVER_REDIRECT","LOOP","ECHO","PING","PONG","CLOSE","SIGNAL","SIGNAL_REQ","SIGNAL_E2E","SUBSCRIBE","SUBSCRIBE_REQ","UNSUBSCRIBE","SERVER_SIGNAL","IAM","IAM_RES","SET","RESPONSE_CODE","RESPONSE_MBP","REQUEST","RESPONSE","FLOW_MODE","WAIT","RESUME","TIME_OUT","OVER_SIZE","OVER_FLOW","API_TYPE","REQUEST_RESPONSE","ONE_WAY","STATUS","OK","ERROR","quotaTable","signalSize","publishCounter","trafficRate","getSignalPack","tag","sigPack","tagEncoded","payload","containsBuffer","parsePayload","mbaBuffer","MBP.MBA","IOCore","url","cid","ip","socket","stateName","getStateName","txCounter","rxCounter","txBytes","rxBytes","lastTxRxTime","connectionCheckerPeriod","connectionCheckerIntervalID","boho","TLS","encMode","useAuth","nick","channels","Set","promiseMap","Map","promiseTimeOut","mid","level","quota","serverSet","linkMap","onOpen","bind","onClose","onData","redirect","url2","close","stateChange","createConnection","open","setInterval","keepAlive","login","auth_pack","send","auth","msgType","err","pong","jsonInfo","cidStr","subscribe_memory_channels","quotaLevel","stop","host_port","protocol","byteToUrl","ss","setPack","topic","tagLen","tagBuf","payloadType","payloadBuffer","payloadStringWithoutNull","oneString","oneObjectBuffer","oneJSONObject","mjsonBuffer","mjson","mbaObject","testPromise","iam","title","send_enc_mode","ping","echo","bin","MBP.U8pack","socket_send","getEncryptionMode","useEncryption","encHeader","encPack","setMsgPromise","Promise","resolve","reject","setTimeout","delete","status","ok","publish","signal","signalPack","signal_e2e","dataPack","sercretPack","storeName","req","body","subscribe","add","subscribe_promise","chList","then","catch","unsubscribe","clear","listen","handler","link","to","linkSet","unlink","tags","unlinkAll","getMetric","tx","rx","txb","rxb","getState","getSecurity","isTLS","usingEncryption","emitEventAndMessage","eventName","IO","document","addEventListener","browserVisiblePing","visibilityState","onclose","onmessage","onerror","clearInterval","readyState","WebSocket","binaryType","onopen","onWebSocketMessage"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iosignal.esm.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/meta-buffer-pack/src/meta-buffer-pack.js","../node_modules/eventemitter3/index.js","../node_modules/boho/lib/fast-sha256.js","../node_modules/boho/src/sha256-mbp.js","../node_modules/boho/src/constants.js","../node_modules/boho/src/boho.js","../src/common/constants.js","../src/common/quotaTable.js","../src/common/payload.js","../src/client/IOCore.js","../src/client/IOWebSocket.js"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer/index.js'\nexport { Buffer } // for iife reference MBP.Buffer\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nexport const NB = numberBuffer\nexport function numberBuffer(type, initValue = 0) {\n let buffer\n if (type === undefined || typeof type !== 'string' || typeof initValue !== 'number') {\n throw TypeError('invlaid init variablie type name. ')\n }\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n buffer = Buffer.alloc(1)\n if (type.includes('I')) buffer.writeInt8(initValue)\n else buffer.writeUint8(initValue)\n } else if (type.includes('16')) {\n buffer = Buffer.alloc(2)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt16LE(initValue)\n else buffer.writeInt16BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint16LE(initValue)\n else buffer.writeUint16BE(initValue)\n }\n } else if (type.includes('32')) {\n buffer = Buffer.alloc(4)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt32LE(initValue)\n else buffer.writeInt32BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint32LE(initValue)\n else buffer.writeUint32BE(initValue)\n }\n } else if (type.includes('F')) {\n buffer = Buffer.alloc(4)\n if (type.includes('L')) {\n buffer.writeFloatLE(initValue)\n } else {\n buffer.writeFloatBE(initValue)\n }\n } else if (type.includes('N')) { // number as string\n buffer = Buffer.from(String(initValue))\n } else {\n console.log(`invalid type: ${type} or initvalue: ${initValue}`)\n }\n return buffer\n}\n\n\nexport const MB = metaBuffer\nexport function metaBuffer(name, typeOrData, initValue) {\n let buffer\n let bufferType = 'B'\n if (typeof typeOrData === 'number') {\n if (typeof initValue === 'number') { // initValue 0 should be passed.\n buffer = Buffer.alloc(typeOrData)\n if (initValue !== 0) buffer.fill(initValue)\n bufferType = 'B'\n } else {\n buffer = Buffer.from(String(typeOrData))\n bufferType = 'N'\n }\n } else if (typeof typeOrData === 'string' && typeof initValue === 'number') { // number with type.\n bufferType = typeOrData.toUpperCase() // use explicit type name\n buffer = numberBuffer(typeOrData, initValue) // notice. two categories. n: number string. 8, 16, 32: typed number.\n } else if (typeof typeOrData === 'string' && initValue === undefined) { // string buffer\n buffer = Buffer.from(typeOrData)\n bufferType = 'S'\n } else if (typeOrData instanceof Uint8Array && initValue === undefined) { // buffer | Uint8Array\n // Buffer.from: Copies the passed buffer data onto a new Buffer instance.\n // typecasting Uint8Array to Buffer.\n buffer = (typeOrData instanceof Buffer) ? typeOrData : Buffer.from(typeOrData)\n } else if (typeOrData instanceof ArrayBuffer && initValue === undefined) { // arrayBuffer\n // Notice. typedArray is recommended instead of arrayBuffer\n buffer = Buffer.from(typeOrData)\n } else if (ArrayBuffer.isView(typeOrData)) { // typedarray buffer\n buffer = Buffer.from(typeOrData.buffer, typeOrData.byteOffset, typeOrData.byteLength)\n } else if (typeof typeOrData === 'object' && initValue === undefined) { // object. like array. stringify\n buffer = Buffer.from(JSON.stringify(typeOrData))\n bufferType = 'O'\n } else if (typeof typeOrData === 'boolean' && initValue === undefined) { // object. like array. stringify\n const v = typeOrData ? 1 : 0\n buffer = Buffer.from([v])\n bufferType = '!'\n } else {\n throw TypeError('invalid meta buffer type')\n }\n\n if (typeof name === 'string' && name.includes('#')) name = '' //\n\n return [name, bufferType, buffer]\n}\n\nexport const MBA = metaBufferArguments\nexport function metaBufferArguments(...args) {\n let i = 0\n const mba = args.map(\n data => {\n const argsIndex = i++\n // tip. MBA use index number as metabuffer's property name.\n if (typeof data === 'number') {\n // * JS's primitive Number stored as string.\n return MB(argsIndex, 'N', data)\n } else {\n // typedarray, dataview, array, object, boolean\n return MB(argsIndex, data)\n }\n })\n\n return mba\n}\n\nexport function parseTypeName(type) {\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n if (type.includes('I')) {\n return 'int8'\n } else {\n return 'uint8'\n }\n } else if (type.includes('16')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int16_le'\n } else {\n return 'int16_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint16_le'\n } else {\n return 'uint16_be'\n }\n }\n } else if (type.includes('32')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int32_le'\n } else {\n return 'int32_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint32_le'\n } else {\n return 'uint32_be'\n }\n }\n } else if (type.includes('F')) {\n if (type.includes('L')) {\n return 'float_le'\n } else {\n return 'float_be'\n }\n } else if (type === 'B') {\n return 'buffer'\n } else if (type === 'S') { // string or arguments\n return 'string'\n } else if (type === 'N') { // number encoded as string\n return 'number'\n } else if (type === 'O') { // object encoded string\n return 'object'\n } else if (type === '!') { // boolean 1:true 0:false\n return 'boolean'\n } else {\n throw TypeError('invalid data type')\n }\n\n}\n\nexport function readTypedBuffer(simpleType, buffer, offset, length) {\n try {\n const type = parseTypeName(simpleType)\n if (type == 'int8') return buffer.readInt8(offset)\n else if (type === 'uint8') return buffer.readUint8(offset)\n else if (type === 'int16_le') return buffer.readInt16LE(offset)\n else if (type === 'int16_be') return buffer.readInt16BE(offset)\n else if (type === 'uint16_le') return buffer.readUint16LE(offset)\n else if (type === 'uint16_be') return buffer.readUint16BE(offset)\n else if (type === 'int32_le') return buffer.readInt32LE(offset)\n else if (type === 'int32_be') return buffer.readInt32BE(offset)\n else if (type === 'uint32_le') return buffer.readUint32LE(offset)\n else if (type === 'uint32_be') return buffer.readUint32BE(offset)\n else if (type === 'float_le') return buffer.readFloatLE(offset)\n else if (type === 'float_be') return buffer.readFloatBE(offset)\n\n else if (type === 'buffer') {\n return buffer.subarray(offset, offset + length)\n } else if (type === 'string') {\n const strBuffer = buffer.subarray(offset, offset + length)\n return decoder.decode(strBuffer)\n } else if (type === 'number') {\n const strNumber = buffer.subarray(offset, offset + length)\n return Number(decoder.decode(strNumber))\n } else if (type === 'object') {\n const objEncoded = buffer.subarray(offset, offset + length)\n return JSON.parse(decoder.decode(objEncoded))\n } else if (type === 'boolean') {\n const v = buffer.readInt8(offset)\n return v === 1\n } else {\n return\n }\n } catch (error) {\n // console.log('MBP:readTypedBuffer obj decoding error.', error)\n }\n // any error and invalid data return undefined \n return\n}\n\n// to join MBA or MB meta list.\nfunction flatArray(args) {\n let subArr = []\n const mainArr = args.filter(item => {\n if (Array.isArray(item[0])) subArr = subArr.concat(item)\n else return item\n })\n return mainArr.concat(subArr)\n}\n\nexport function pack(...args) {\n const bufArr = flatArray(args)\n // console.log('MBP.pack: flat MB or MBA list', bufArr)\n let size = 0\n const info = []\n let offset = 0\n\n bufArr.forEach(bufPack => {\n const [name, type, data] = bufPack\n size += data.byteLength\n\n if (typeof name === 'number' || name.length > 0) {\n // if the item has property name then add meta JSON info.\n // type of name is Number in MBA.(index number)\n // type of name is String in MB. except null string.\n // add additional informative meta info. \n info.push([name, type, offset, data.byteLength])\n }\n offset = size\n })\n\n\n // console.log('MBP.pack meta:', info )\n let infoEncoded\n let infoSize\n\n if (info.length > 0) {\n let infoStr = JSON.stringify(info)\n // console.log('pack infoStr , size:', infoStr , infoStr.length )\n infoEncoded = encoder.encode(infoStr)\n infoSize = infoEncoded.byteLength\n size = size + infoSize + 2\n }\n\n const buffer = Buffer.alloc(size)\n offset = 0\n bufArr.forEach(bufPack => {\n const buf = bufPack[2]\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n\n if (info.length > 0) {\n buffer.set(infoEncoded, offset)\n const infoSizeBuff = NB('16', infoSize)\n buffer.set(infoSizeBuff, offset + infoSize)\n return buffer\n } else {\n return buffer\n }\n}\n\n\n/**\n * unpack() will use embeded meta info from the binary pack. \n * You can specify (optional) meta obejct. \n * (It's useful to read pure buffer data.)\n * \n * You can get the meta object from: getFrame(pack) , meta()\n * @param {Buffer|Uint8Array} binPack binaryData\n * @param {Object} meta *OPTION* \n * @returns {Object|undefined} success: return Object (include buffer data). fail: return undefined\n */\nexport function unpack(binPack, meta) {\n\n const infoArr = meta || getMeta(binPack)\n if (!infoArr) return\n\n const buffer = Buffer.from(binPack)\n const binObj = {}\n let readCounter = 0\n infoArr.forEach(bufPack => {\n const [name, type, offset, length] = bufPack\n let result = readTypedBuffer(type, buffer, offset, length)\n if (result == undefined) return\n binObj[name] = result\n if (length) readCounter += length\n })\n\n // Can not define meta for variable size buffer \n // unpacker support automatic property to read left(did't read) buffers.\n // console.log(\"######, unpack: buffer \" , readCounter, buffer ,buffer.byteLength)\n if (meta && buffer.byteLength !== readCounter) {\n let leftSize = buffer.byteLength - readCounter\n // console.log('total,left buffer size', buffer.byteLength, leftSize )\n let result = readTypedBuffer('b', buffer, readCounter, leftSize)\n if (result == undefined) return\n binObj[\"$OTHERS\"] = result\n }\n\n // set args with values if exist.\n let mbaIndex = 0;\n let args = [];\n while (binObj[mbaIndex]) {\n args.push(binObj[mbaIndex++])\n }\n\n if (args.length > 0) {\n binObj.args = args\n binObj.$ = binObj.args\n }\n return binObj\n}\n\n\nexport const U8 = parseUint8Array //alias\n/**\n * \n * @param {any} data \n * @param {Boolean} shareArrayBuffer false(default): return new( or copied) ArrayBuffer. true: share the input data's arrayBuffer.\n * @returns {Uint8Array}\n */\nexport function parseUint8Array(data, shareArrayBuffer = false) {\n if (data === undefined) throw TypeError('Invalid data type: Undefined')\n if (typeof data === 'string') {\n return encoder.encode(data)\n } else if (typeof data === 'number') { // number -> 1 byte uint8array(number)\n return Uint8Array.from([data])\n } else if (data instanceof ArrayBuffer) { // arraybuffer -> wrap uint8array(ab)\n if (shareArrayBuffer) {\n return new Uint8Array(data)\n } else {\n const originData = new Uint8Array(data)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else if (ArrayBuffer.isView(data)) { // accept Buffer too.\n if (shareArrayBuffer) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength) // DataView, TypedArray > uint8array( use offset, length )\n } else {\n // new memory to protect origin arraybuffer.\n const originData = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else { // array, object\n return encoder.encode(JSON.stringify(data)) // object(array.. ) > JSON.str > encode > unint8array\n }\n}\n\nexport const B8 = parseBuffer\nexport function parseBuffer(data, shareArrayBuffer = false) {\n\n const u8 = parseUint8Array(data, shareArrayBuffer)\n if (shareArrayBuffer) {\n return Buffer.from(u8.buffer, u8.byteOffset, u8.byteLength)\n } else {\n return Buffer.from(u8)\n }\n}\n\nexport const B8pack = parseBufferThenConcat\nexport function parseBufferThenConcat(...dataArray) {\n const buffers = dataArray.map(data => parseBuffer(data))\n return Buffer.concat(buffers)\n}\n\n\nexport const U8pack = parseUint8ThenConcat // alias\n/**\n * 1. parse list of data into U8 list\n * 2. return new Uint8Array merged.\n * @param {...any} dataArray \n * @returns \n */\nexport function parseUint8ThenConcat(...dataArray) {\n try {\n let bufferSize = 0\n let offset = 0\n const buffers = dataArray.map(data => parseUint8Array(data))\n buffers.forEach(buf => { bufferSize += buf.byteLength })\n const buffer = new Uint8Array(bufferSize)\n buffers.forEach(buf => {\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n return buffer\n } catch (error) {\n console.log(error)\n }\n}\n\nexport function hex(buffer) {\n return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('')\n}\n\nexport function equal(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) return false\n for (let i = 0; i < buf1.byteLength; i++) {\n if (buf1[i] !== buf2[i]) return false\n }\n return true\n}\n\n\nexport function getBufferSize(binPack) {\n if (getMetaSize(binPack) === 0) {\n return binPack.byteLength\n } else {\n return binPack.byteLength - getMetaSize(binPack) - TAIL_LEN\n }\n}\n\n// MB and MBA \nexport function parseMetaInfo(binPack, infoSize) {\n let info;\n try {\n const buffer = new Uint8Array(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoFrom = buffer.byteLength - infoSize - 2\n const infoEncoded = buffer.subarray(infoFrom, buffer.byteLength - 2)\n const decoded = decoder.decode(infoEncoded)\n const info = JSON.parse(decoded)\n\n if (!Array.isArray(info) || !Array.isArray(info[0])) return\n\n let firstItem = info[0]\n if (!firstItem) return\n\n if (firstItem.length < 3) return\n const [name, type, offset] = firstItem\n\n if (typeof type !== 'string' || typeof offset !== 'number') return\n\n return info\n } catch (error) {\n // return undefined\n }\n}\n\n\n/** \n * Meta buffer pack Tail:\n * binary Pack include TAIL(two bytes size) info at the end if it has JSON info.\n * not include TAIL if it has not JSON.\n */\nexport const TAIL_LEN = 2\n\n/**\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @returns {Number} last two byte value( read Uint16 bigendian )\n */\nexport function readTail(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n if (binPack.byteLength <= TAIL_LEN) return 0\n\n const dv = new DataView(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoSize = dv.getUint16(binPack.byteLength - TAIL_LEN) // last 2 bytes for json-info-length.\n return infoSize\n\n } else {\n // throw TypeError('invalid data type.')\n return 0\n }\n\n}\n\n\n// binay data pack is not always Buffer. \n// It should accept Uint8Array binPack.\n// This function don't use Buffer method.\n\nexport function getMetaSize(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n\n const size = binPack.byteLength\n if (size <= TAIL_LEN) return 0\n\n //1. tail size check\n const infoSize = readTail(binPack)\n if (infoSize === 0 || infoSize > size) return 0\n //2. try parse JSON \n const success = parseMetaInfo(binPack, infoSize)\n //3. return success: jsonInfoSize, fail: 0\n if (success) return infoSize\n else return 0\n } else {\n return 0\n }\n}\n\n\n/**\n * \n * @param {Buffer|Uint8Array} binPack \n * @returns {Buffer} \n */\nexport function getBuffer(binPack) {\n const rawBufferSize = getBufferSize(binPack)\n return binPack.subarray(0, rawBufferSize)\n}\n\n\n\n/**\n * extract Meta info object if it has.\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @param {Boolean} showDetail add additional item info: full data type name and bytelength.\n * @returns {Object|undefined} success: return MetaInfo Object. fail: return undefined.(No valid JSON included.)\n */\nexport function getMeta(binPack, showDetail = false) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n const infoSize = readTail(binPack)\n if (infoSize === 0) return\n\n // check valid Meta\n let metaInfo = parseMetaInfo(binPack, infoSize)\n if (!metaInfo) return\n\n if (!showDetail) {\n return metaInfo\n } else {\n // add additional info\n metaInfo.forEach(bufPack => {\n const len = bufPack[3]\n if (len == undefined) { // add size info.\n if (bufPack[1].includes('8')) bufPack[3] = 1\n else if (bufPack[1].includes('16')) bufPack[3] = 2\n else if (bufPack[1].includes('32')) bufPack[3] = 4\n else if (bufPack[1].includes('F')) bufPack[3] = 4\n else if (bufPack[1].includes('!')) bufPack[3] = 1\n }\n bufPack[4] = parseTypeName(bufPack[1]) // add full-type-name.\n })\n return metaInfo\n }\n}\n\nexport function rawPack(...args) {\n return getBuffer(pack(...args))\n}\n\nexport function meta(...args) {\n return getMeta(pack(...args))\n}\n\nexport function metaDetail(...args) {\n return getMeta(pack(...args), true)\n}\n\nexport function getMetaDetail(binPack) {\n return getMeta(binPack, true)\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexport var digestLength = 32\nexport var blockSize = 64\n// SHA-256 constants\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\nfunction hashBlocks (w, v, p, pos, len) {\n let a, b, c, d, e, f, g, h, u, i, j, t1, t2\n while (len >= 64) {\n a = v[0]\n b = v[1]\n c = v[2]\n d = v[3]\n e = v[4]\n f = v[5]\n g = v[6]\n h = v[7]\n for (i = 0; i < 16; i++) {\n j = pos + i * 4\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff))\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2]\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10)\n u = w[i - 15]\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3)\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0)\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0\n h = g\n g = f\n f = e\n e = (d + t1) | 0\n d = c\n c = b\n b = a\n a = (t1 + t2) | 0\n }\n v[0] += a\n v[1] += b\n v[2] += c\n v[3] += d\n v[4] += e\n v[5] += f\n v[6] += g\n v[7] += h\n pos += 64\n len -= 64\n }\n return pos\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash () {\n this.digestLength = digestLength\n this.blockSize = blockSize\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8) // hash state\n this.temp = new Int32Array(64) // temporary state\n this.buffer = new Uint8Array(128) // buffer for data to hash\n this.bufferLength = 0 // number of bytes in buffer\n this.bytesHashed = 0 // number of total bytes hashed\n this.finished = false // indicates whether the hash was finalized\n this.reset()\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667\n this.state[1] = 0xbb67ae85\n this.state[2] = 0x3c6ef372\n this.state[3] = 0xa54ff53a\n this.state[4] = 0x510e527f\n this.state[5] = 0x9b05688c\n this.state[6] = 0x1f83d9ab\n this.state[7] = 0x5be0cd19\n this.bufferLength = 0\n this.bytesHashed = 0\n this.finished = false\n return this\n }\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0\n }\n this.reset()\n }\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\")\n }\n let dataPos = 0\n this.bytesHashed += dataLength\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64)\n this.bufferLength = 0\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength)\n dataLength %= 64\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n return this\n }\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed\n const left = this.bufferLength\n const bitLenHi = (bytesHashed / 0x20000000) | 0\n const bitLenLo = bytesHashed << 3\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128\n this.buffer[left] = 0x80\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength)\n this.finished = true\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff\n }\n return this\n }\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i]\n }\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i]\n }\n this.bytesHashed = bytesHashed\n this.finished = false\n this.bufferLength = 0\n }\n return Hash\n}())\nexport { Hash }\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC (key) {\n this.inner = new Hash()\n this.outer = new Hash()\n this.blockSize = this.inner.blockSize\n this.digestLength = this.inner.digestLength\n const pad = new Uint8Array(this.blockSize)\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean()\n } else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i]\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36\n }\n this.inner.update(pad)\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c\n }\n this.outer.update(pad)\n this.istate = new Uint32Array(8)\n this.ostate = new Uint32Array(8)\n this.inner._saveState(this.istate)\n this.outer._saveState(this.ostate)\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize)\n this.outer._restoreState(this.ostate, this.outer.blockSize)\n return this\n }\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0\n }\n this.inner.clean()\n this.outer.clean()\n }\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data)\n return this\n }\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out)\n } else {\n this.inner.finish(out)\n this.outer.update(out, this.digestLength).finish(out)\n }\n return this\n }\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n return HMAC\n}())\nexport { HMAC }\n// Returns SHA256 hash of data.\nexport function hash (data) {\n const h = (new Hash()).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Function hash is both available as module.hash and as default export.\n// export default hash\n// Returns HMAC-SHA256 of data under the key.\nexport function hmac (key, data) {\n const h = (new HMAC(key)).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer (buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0]\n if (num === 0) {\n throw new Error('hkdf: cannot expand more')\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset()\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer)\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info)\n }\n // Hash in the counter.\n hmac.update(counter)\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer)\n // Increment counter inside typed array, this works properly.\n counter[0]++\n}\nconst hkdfSalt = new Uint8Array(digestLength) // Filled with zeroes.\nexport function hkdf (key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt }\n if (length === void 0) { length = 32 }\n const counter = new Uint8Array([1])\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key)\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm)\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength)\n let bufpos = buffer.length\n const out = new Uint8Array(length)\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter)\n bufpos = 0\n }\n out[i] = buffer[bufpos++]\n }\n hmac_.clean()\n buffer.fill(0)\n counter.fill(0)\n return out\n}\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nexport function pbkdf2 (password, salt, iterations, dkLen) {\n const prf = new HMAC(password)\n const len = prf.digestLength\n const ctr = new Uint8Array(4)\n const t = new Uint8Array(len)\n const u = new Uint8Array(len)\n const dk = new Uint8Array(dkLen)\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1\n ctr[0] = (c >>> 24) & 0xff\n ctr[1] = (c >>> 16) & 0xff\n ctr[2] = (c >>> 8) & 0xff\n ctr[3] = (c >>> 0) & 0xff\n prf.reset()\n prf.update(salt)\n prf.update(ctr)\n prf.finish(u)\n for (var j = 0; j < len; j++) {\n t[j] = u[j]\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset()\n prf.update(u).finish(u)\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k]\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j]\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0\n }\n prf.clean()\n return dk\n}\n","import { hash, hmac } from '../lib/fast-sha256.js'\nimport { MBP } from 'meta-buffer-pack'\n\n/*\nTip.\n fast-sha256 use data:8Uint8Array\n sha256-mbp use data:any ( internal type converter )\n\n MBP.U8( any ) return Uint8Array\n MBP.B8( any ) reutn Buffer instance\n\n*/\nconst sha256 = {};\n\nsha256.hash = function (data) {\n return hash(MBP.U8(data))\n}\n\nsha256.hex = function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('hex')\n}\n\nsha256.base64= function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('base64')\n}\n\nsha256.hmac = function (key, data) {\n return hmac(MBP.U8(key), MBP.U8(data))\n}\n\nexport { sha256 }\n","import{ MBP, Buffer} from \"meta-buffer-pack\"\nconst MB = MBP.MB\n\n\n// remocon message pack one byte header. \nexport let BohoMsg = {\n AUTH_REQ : 0xB0, \n AUTH_NONCE: 0xB1,\n AUTH_HMAC: 0xB2,\n AUTH_ACK: 0xB3,\n AUTH_FAIL: 0xB4,\n AUTH_EXT: 0xB5,\n ENC_PACK : 0xB6, \n ENC_E2E : 0xB7, \n ENC_488 : 0xB8\n}\n\nfor (let c in BohoMsg) { BohoMsg[BohoMsg[c]] = c }\n\nexport const Meta = {\n\n AUTH_REQ: MBP.meta( // 2\n MB('header','8', 0),\n MB('reserved','8', 0)\n ),\n\n AUTH_NONCE: MBP.meta( // 13\n MB('header','8', 0),\n MB('unixTime','32L', 0),\n MB('milTime','32L', 0 ),\n MB('nonce', Buffer.alloc(4))\n ),\n\n AUTH_HMAC: MBP.meta( // 45\n MB('header','8', 0),\n MB('id8',Buffer.alloc(8)),\n MB('nonce', Buffer.alloc(4)),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n AUTH_ACK: MBP.meta( // 33\n MB('header','8', 0),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n\n ENC_PACK: MBP.meta( //25 + payload\n MB('type','8',0),\n MB('len','32L',0), // pure xdata size. \n MB('salt12', Buffer.alloc(12)), // sec,mil,rand\n MB('hmac',8,0)\n // MB( 'xdata', encData )\n ),\n\n\n ENC_488: MBP.meta( // 21 + payload\n MB('type','8', 0 ),\n MB('len','32L', 0 ),\n MB('otpSrc8', Buffer.alloc(8) ),\n MB('hmac8', Buffer.alloc(8) )\n // MB('xdata', encData ) \n )\n\n\n }\n\n\n function getMetaSize(meta){\n let lastItem = meta[ meta.length - 1]\n return lastItem[2] + lastItem[3]\n }\n\n export const MetaSize = {\n AUTH_REQ: getMetaSize( Meta.AUTH_REQ ),\n AUTH_NONCE: getMetaSize( Meta.AUTH_NONCE ),\n AUTH_HMAC: getMetaSize( Meta.AUTH_HMAC ),\n AUTH_ACK: getMetaSize( Meta.AUTH_ACK ),\n ENC_PACK: getMetaSize( Meta.ENC_PACK ),\n ENC_488: getMetaSize( Meta.ENC_488 )\n }\n\n// console.log( 'boho MetaSize', MetaSize )\n// boho MetaSize {\n// AUTH_REQ: 2,\n// AUTH_NONCE: 13,\n// AUTH_HMAC: 45,\n// AUTH_ACK: 33,\n// ENC_PACK: 25,\n// ENC_488: 21\n// }","import { sha256 } from './sha256-mbp.js'\nimport { MBP, Buffer } from 'meta-buffer-pack'\nexport { sha256, MBP, Buffer }\n\nimport { webcrypto } from 'crypto'\nimport { BohoMsg, Meta, MetaSize } from \"./constants.js\"\nexport { BohoMsg, Meta, MetaSize }\n\nlet isNode = false\ntry {\n isNode = Object.prototype.toString.call(global.process) === '[object process]'\n} catch (e) { }\n\n\nexport function RAND(size) {\n if( isNode ){\n return webcrypto.getRandomValues(Buffer.alloc(size))\n }else{\n return self.crypto.getRandomValues(Buffer.alloc(size))\n }\n}\n\n\n\nexport class Boho {\n // A. Core\n constructor() {\n\n this._id8 = Buffer.alloc(8)\n this._otpSrc44 = Buffer.alloc(44)\n this._otp36 = Buffer.alloc(36)\n this._hmac = Buffer.alloc(32)\n\n this.auth_salt12 = Buffer.alloc(12)\n this.localNonce = Buffer.alloc(4)\n this.remoteNonce = Buffer.alloc(4)\n this.isAuthorized = false\n\n }\n\n clearAuth(){\n this._id8.fill(0)\n this._otpSrc44.fill(0)\n this._otp36.fill(0)\n this._hmac.fill(0)\n this.auth_salt12.fill(0)\n this.localNonce.fill(0)\n this.remoteNonce.fill(0)\n this.isAuthorized = false\n }\n\n // for the self\n set_hash_id8(data) {\n let idSum = MBP.B8(sha256.hash(data))\n idSum.copy(this._id8, 0, 0, 8)\n }\n\n set_id8(data) {\n let encStr = MBP.B8(data)\n this._id8.fill(0)\n encStr.copy(this._id8, 0, 0, 8)\n }\n\n set_key(data) {\n let keySum = MBP.B8(sha256.hash(data))\n keySum.copy(this._otpSrc44, 0, 0, 32)\n }\n\n // id_key == 'id' + '.' + 'key' \n set_id_key(id_key) {\n let delimiterPosition = id_key.indexOf('.')\n if( delimiterPosition == -1 ) return\n let id = id_key.substring(0, delimiterPosition)\n let key = id_key.substring(delimiterPosition + 1)\n this.set_id8(id)\n this.set_key(key)\n }\n\n copy_id8(data) {\n data.copy(this._id8, 0, 0, 8)\n }\n\n copy_key(data) {\n data.copy(this._otpSrc44, 0, 0, 32)\n }\n\n\n sha256_n(srcData, n) {\n let hashSum = sha256.hash(srcData)\n for (let i = 0; i < n; i++) hashSum = sha256.hash(hashSum)\n return hashSum\n }\n\n\n // useful general encryption i.e. enc_pack\n set_clock_rand() {\n\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n RAND(4)\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n // for secure communication sender. \n set_clock_nonce(nonce) {\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n nonce\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n\n set_salt12(salt12) {\n salt12.copy(this._otpSrc44, 32)\n }\n\n resetOTP() {\n let otp32 = MBP.B8(sha256.hash(this._otpSrc44))\n otp32.copy(this._otp36, 0, 0, 32)\n }\n\n getIndexOTP(otpIndex) {\n this._otp36.writeUInt32LE(otpIndex, 32)\n return sha256.hash(this._otp36)\n }\n\n\n generateHMAC(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n }\n\n // return 8 bytes of hash\n getHMAC8(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n return this._hmac.subarray(0, 8)\n }\n\n xotp(data, otpStartIndex = 0, shareDataBuffer = false) {\n\n data = MBP.B8(data, shareDataBuffer)\n\n let len = data.byteLength\n let otpIndex = otpStartIndex\n let dataOffset = 0\n let xorCalcLen = 0\n\n while (len > 0) {\n xorCalcLen = len < 32 ? len : 32\n let iotp = this.getIndexOTP(++otpIndex);\n for (let i = 0; i < xorCalcLen; i++) {\n data[dataOffset++] ^= iotp[i]\n }\n len -= 32\n }\n return data\n }\n\n // B. AUTH process\n\n // step 1\n // client send AUTH_REQ\n auth_req() {\n return MBP.pack(\n MBP.MB('#type', '8', BohoMsg.AUTH_REQ),\n MBP.MB('#reserved', '8', 0)\n )\n }\n\n // step 2\n // server send AUTH_NONCE\n auth_nonce() {\n let now = Date.now()\n let unixTime = Math.floor(now / 1000)\n let milTime = now % 1000\n this.localNonce = RAND(4)\n this.auth_salt12 = Buffer.concat([\n MBP.NB('32L', unixTime),\n MBP.NB('32L', milTime),\n this.localNonce\n ])\n\n let infoPack = Buffer.concat([\n MBP.NB('8', BohoMsg.AUTH_NONCE),\n this.auth_salt12\n ])\n return infoPack\n }\n\n\n // step 3\n // client send AUTH_HMAC\n // input : auth_nonce buffer\n auth_hmac(buffer) {\n let auth_nonce = MBP.unpack(buffer, Meta.AUTH_NONCE)\n if (auth_nonce) {\n // console.log(' auth nonce', auth_nonce )\n\n // let now = Date.now()\n // let localUTC= Math.floor( now/ 1000 )\n // let localMilTime = now % 1000\n\n // console.log('time server [sec]', auth_nonce.unixTime, auth_nonce.milTime )\n // console.log('time client [sec]', localUTC , localMilTime )\n // console.log('time diff client and server[sec]', auth_nonce.unixTime - localUTC )\n\n // let serverSecMil = auth_nonce.unixTime * 1000 + auth_nonce.milTime\n // console.log('time diff msec client and server[msec]', serverSecMil - now )\n\n let salt12 = Buffer.concat([\n MBP.NB('32L', auth_nonce.unixTime),\n MBP.NB('32L', auth_nonce.milTime),\n auth_nonce.nonce\n ])\n\n this.set_salt12(salt12)\n\n this.localNonce = RAND(4)\n // hmac( key, sec,mil,serverNonce, localNonce)\n this.generateHMAC(this.localNonce)\n\n // let hmac8 = this._hmac.subarray(0, 8)\n\n this.remoteNonce = auth_nonce.nonce\n\n let auth_hmac_buffer = MBP.pack( // 21 -> 45\n MBP.MB('#header', '8', BohoMsg.AUTH_HMAC),\n MBP.MB('#id8', this._id8),\n MBP.MB('#nonce', this.localNonce),\n MBP.MB('#hmac32', this._hmac ), //full 32bytes hash\n )\n\n return auth_hmac_buffer\n }\n return false\n }\n\n /* \n step 4. for server\n \n step 4-1. check client's auth_hmac\n step 4-2. reply result\n send AUTH_ACK with another HMAC for client.\n or send AUTH_FAIL when fail.\n */\n\n // input: unpack object or buffer of auth_hmac\n check_auth_hmac(data) {\n let infoPack\n if (data instanceof Uint8Array) {\n infoPack = MBP.unpack(data, Meta.AUTH_HMAC)\n if (!infoPack) {\n // console.log('auth_hamc unpack fail.')\n return\n }\n } else {\n infoPack = data;\n\n }\n // console.log('auth_hamc infoObj', infoPack )\n\n this.set_salt12(this.auth_salt12)\n\n // hmac( key, sec,mil,serverNonce, clientNonce)\n this.generateHMAC(infoPack.nonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n\n if (MBP.equal(infoPack.hmac32, hmac32)) {\n //Auth success then store client nonce.\n this.remoteNonce = infoPack.nonce\n\n let salt12 = Buffer.concat([\n this.localNonce,\n this.remoteNonce,\n this.localNonce\n ])\n this.set_salt12(salt12)\n this.generateHMAC(infoPack.nonce)\n let replyHMAC = this._hmac\n\n let auth_ack = MBP.rawPack( \n MBP.MB('header', '8', BohoMsg.AUTH_ACK),\n MBP.MB('hmac32', replyHMAC)\n )\n this.isAuthorized = true\n return auth_ack\n }\n return false\n }\n\n\n\n // step 5. cross check\n // client check server's hmac. \n check_auth_ack_hmac(buffer) {\n // server response has hmac ( key + clientNonce)\n let auth_ack = MBP.unpack(buffer, Meta.AUTH_ACK)\n if (auth_ack) {\n let salt12 = Buffer.concat([\n this.remoteNonce,\n this.localNonce,\n this.remoteNonce,\n ])\n this.set_salt12(salt12)\n this.generateHMAC(this.localNonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n //server side hmac using client nonce.\n if (MBP.equal(hmac32, auth_ack.hmac32)) {\n this.isAuthorized = true\n return true\n }\n }\n // server hmac error\n return\n }\n\n // C. Secure Communication\n\n // Must AUTH first.\n encrypt_488(data) { // payload max about 2^32 bytes.\n if (!this.isAuthorized) return\n\n data = MBP.B8(data)\n\n this.set_clock_nonce(this.remoteNonce)\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_488),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#otpSrc8', this._otpSrc44.subarray(32, 40)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n // console.log('enc pack result', pack )\n return pack\n }\n\n\n decrypt_488(data) {\n data = MBP.B8(data)\n\n let pack = MBP.unpack(data, Meta.ENC_488)\n\n if (pack) {\n\n let salt12 = Buffer.concat([\n pack.otpSrc8,\n this.localNonce\n ])\n\n this.set_salt12(salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS.subarray(0, pack.len)\n let decData = this.xotp(xdata)\n\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(hmac8, pack.hmac8)) return decData\n\n // console.log('hmac dismatch', decData )\n } else {\n // console.log('unpack fail')\n }\n }\n\n\n // maxium data size is 2**32 -1 bytes.\n encryptPack(data) {\n data = MBP.B8(data)\n\n this.set_clock_rand()\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_PACK),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#salt12', this._otpSrc44.subarray(32)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n return pack\n }\n\n\n decryptPack(data) {\n\n if (data[0] !== BohoMsg.ENC_PACK) {\n // console.log('Boho: Invalid packType')\n return\n }\n\n // packLength\n let readPackLen = data.readUint32LE(1);\n if (readPackLen != data.byteLength - MetaSize.ENC_PACK) {\n // console.log('Boho: Invalid LEN data_len: data.byteLen' , readPackLen, data.byteLength)\n return\n }\n\n try {\n let pack = MBP.unpack(data, Meta.ENC_PACK)\n // console.log('unpack result', pack )\n if (!pack) return\n\n this.set_salt12(pack.salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS\n let decData = this.xotp(xdata)\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(pack.hmac, hmac8)) {\n pack.data = decData\n return pack\n }\n // console.log('Invalid HMAC', pack.hmac, hmac8 )\n\n } catch (error) {\n // console.log('Boho: unpack err', error )\n\n }\n }\n\n encrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let pack = this.encryptPack(data)\n this._otpSrc44.set(baseKey)\n return pack;\n }\n\n decrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let decPack = this.decryptPack(data)\n this._otpSrc44.set(baseKey)\n return decPack\n }\n\n}\n","\n// IOclient state\nexport const STATES = {\n OPENING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n SERVER_READY: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n READY: 7,\n REDIRECTING: 8\n}\nfor (let c in STATES) { STATES[STATES[c]] = c }\n\n// server side client state\nexport const CLIENT_STATE = {\n INIT: 0,\n SENT_SERVER_READY: 1,\n RECV_AUTH_REQ: 2,\n SENT_SERVER_NONCE: 3,\n RECV_AUTH_HMAC: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n CID_READY: 7\n}\nfor (let c in CLIENT_STATE) { CLIENT_STATE[CLIENT_STATE[c]] = c }\n\nexport let ENC_MODE = {\n NO: 0,\n YES: 1,\n AUTO: 2\n}\n\nfor (let c in ENC_MODE) { ENC_MODE[ENC_MODE[c]] = c }\n\n\nexport const SIZE_LIMIT = {\n TAG_LEN1: 255,\n TAG_LEN2: 65535,\n CONNECTION_CHECKER_PERIOD: 3000,\n PROMISE_TIMEOUT: 5000,\n DID: 8,\n CID: 12\n}\n\nexport let PAYLOAD_TYPE = {\n EMPTY: 0, \n TEXT: 1,\n BINARY: 2, \n OBJECT: 3, // one stringify able object. no buffer.\n MJSON: 4, // multiple stringify able obejct. JSON string. with top levle array , no buffer\n MBA: 5 // \"meta_buffer_arguments\" arbitary types. buffer included.\n}\nfor (let c in PAYLOAD_TYPE) { PAYLOAD_TYPE[PAYLOAD_TYPE[c]] = c }\n// console.log( PAYLOAD_TYPE )\n\n// MJSON: multiple arguments \n// accepet only string, number, root depth js primittive object, \n// unpack and will send to receiver handler with multiple params.\n\n// MBA: buffer pack of multiple arguments. check \"meta-buffer-pack\" module. \n// MBA: when armuents includes raw Buffer( TypedArray )\n\n// IO message pack one byte header. \nexport let IOMsg = {\n\n /* \n * 0~127dec. reserved. for text stream.\n * 0~31: control code\n * 32~126: ascii charactor\n * 127: DEL\n */\n \n // ADMIN_REQ: 0xA0,\n\n // DO NOT USE: 0xB0~ 0xBF\n // Boho module using this numbers.\n // AUTH_REQ : 0xB0, \n // AUTH_NONCE: 0xB1,\n // AUTH_HMAC: 0xB2,\n // AUTH_ACK: 0xB3,\n // AUTH_FAIL: 0xB4,\n // AUTH_EXT: 0xB5,\n // ENC_PACK : 0xB6, \n // ENC_E2E : 0xB7, \n // ENC_488 : 0xB8\n // reserved ~0xBF\n\n // C. IO status contorl.\n SERVER_READY: 0xC0,\n CID_REQ: 0xC1, \n CID_RES: 0xC2, \n QUOTA_LEVEL: 0xC3,\n SERVER_CLEAR_AUTH: 0xC4, \n SERVER_REDIRECT: 0xC5,\n\n // ..\n LOOP: 0xCB,\n ECHO: 0xCC,\n PING: 0xCD, \n PONG: 0xCE,\n CLOSE: 0xCF,\n // ~CF\n\n\n // D. IO data signaling\n SIGNAL: 0xD0, \n SIGNAL_REQ: 0xD1, \n SIGNAL_E2E: 0xD2, \n SUBSCRIBE: 0xD3,\n SUBSCRIBE_REQ: 0xD4, \n UNSUBSCRIBE: 0xD5, \n SERVER_SIGNAL: 0xD6, \n\n // ..\n IAM: 0xD9,\n IAM_RES: 0xDA,\n \n //.. \n SET: 0xDB, //\n RESPONSE_CODE: 0xDC, \n RESPONSE_MBP: 0xDD, \n\n REQUEST: 0xDE, //client public\n RESPONSE: 0xDF,\n // ~DF\n\n\n // F. Framing Flow control related framing protocol.(CongPacket)\n FLOW_MODE: 0xF0,\n WAIT: 0xF1,\n RESUME: 0xF2,\n //..\n TIME_OUT: 0xFD,\n OVER_SIZE: 0xFE,\n OVER_FLOW: 0xFF\n\n}\n\nfor (let c in IOMsg) { IOMsg[IOMsg[c]] = c }\n\n// console.log( IOMsg );\n\n\nexport const API_TYPE = {\n 'REQUEST_RESPONSE': 'requet_response',\n 'ONE_WAY': 'one_way'\n}\n\n\n\n// api response status code\nexport const STATUS = {\n OK: 0,\n //0~127: success\n //128~255: fail\n ERROR: 255\n}\n","// table index related with:\n// - AUTH database level\n// - serverOption.defaultQuotaIndex\n\n// quota example\n// index range: 0~255.\nexport let quotaTable = {\n // CongSocket\n 0: { // default. anonymouse:\n signalSize: 1500,\n publishCounter: 10,\n trafficRate: 10000\n },\n 1: { // auth_ultralight: eg. Arduino Uno.\n signalSize: 255,\n publishCounter: 10,\n trafficRate: 100000\n },\n 2: { // auth_light: eg. authorized ESP.\n signalSize: 65535,\n publishCounter: 10,\n trafficRate: 1048576\n },\n\n // WebSocket (browser and node app)\n 3: { // authorized basic.\n signalSize: 1048576, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n\n // WebSocket (browser and node app)\n 10: { // anonymouse\n signalSize: 1500, \n publishCounter: 5,\n trafficRate: 1048576 * 20\n },\n\n 11: { // authorized basic.\n signalSize: 65535, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n \n 12: { // authorized power.\n signalSize: 1048576, \n publishCounter: 100,\n trafficRate: 1048576 * 20\n },\n \n // you can add your custom quota level.\n\n // Remote service node\n // High Quota, No root permission.\n 200: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n },\n // super admin or root user.\n // to monitor, metric, sudo command, db acess\n 255: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n }\n}\n\n","import { MBP } from 'meta-buffer-pack'\nimport { PAYLOAD_TYPE, IOMsg } from \"./constants.js\";\nconst encoder = new TextEncoder()\n\n\nexport function getSignalPack( tag, ...args ){\n if( typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode( tag)\n let payload = parsePayload( args )\n\n let sigPack;\n if( payload.type == PAYLOAD_TYPE.EMPTY ){\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type )\n )\n }else if( payload.type == PAYLOAD_TYPE.MBA ){\n let mbaBuffer = MBP.pack( MBP.MBA(...args))\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#mbaBuffer', mbaBuffer )\n )\n }else { \n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#payload', payload.buffer )\n )\n }\n return sigPack\n}\n\n\nexport function parsePayload( args){\n let type, pack;\n if( args.length == 0){\n type = PAYLOAD_TYPE.EMPTY \n pack = null\n }else if( args.length == 1){\n if( typeof args[0] === 'string' || typeof args[0] === 'number'){\n type = PAYLOAD_TYPE.TEXT\n pack = encoder.encode( args[0] + \".\") // add null area.\n pack[pack.byteLength - 1 ] = 0 // set null.\n\n }else if( ArrayBuffer.isView( args[0]) || args[0] instanceof ArrayBuffer ){ //one buffer\n type = PAYLOAD_TYPE.BINARY\n pack = MBP.B8( args[0 ] )\n }else if(typeof args[0] === 'object'){ \n type = PAYLOAD_TYPE.OBJECT\n pack = encoder.encode( JSON.stringify( args[0]) )\n }else{\n throw new Error('unknown payload arguments')\n }\n }else{ // args 2 and more\n let containsBuffer = false\n args.forEach( item =>{\n if( ArrayBuffer.isView( item ) || item instanceof ArrayBuffer ) containsBuffer = true;\n })\n\n if( containsBuffer ){\n type = PAYLOAD_TYPE.MBA;\n }else{\n type = PAYLOAD_TYPE.MJSON;\n // args is array\n pack = encoder.encode( JSON.stringify( args ) )\n }\n \n }\n \n return { type: type, buffer: pack }\n}\n\nexport function getPayloadFromSignalPack( signalPack ){\n let tagLen = signalPack.readUint8(1)\n return signalPack.subarray(3 + tagLen)\n}","import { MBP, Buffer } from 'meta-buffer-pack'\nimport EventEmitter from \"eventemitter3\";\nimport { Boho, BohoMsg, MetaSize } from \"boho\";\nimport { IOMsg, PAYLOAD_TYPE, SIZE_LIMIT, ENC_MODE, STATES } from '../common/constants.js'\nimport { quotaTable } from '../common/quotaTable.js'\nimport { getSignalPack } from '../common/payload.js';\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nfunction byteToUrl(buffer) {\n //ipv4(4bytes) , port(2bytes)\n if (buffer.byteLength != 6) return\n let address = buffer[0].toString() + \".\" + buffer[1].toString()\n + \".\" + buffer[2].toString() + \".\" + buffer[3].toString();\n let port = (buffer[4] << 8) + buffer[5]\n return address + ':' + port.toString()\n}\n\nexport class IOCore extends EventEmitter {\n constructor(url) {\n super();\n this.cid = \"\" // get from the server CID_RES\n this.ip = \"\" // get from the server IAM_RES message.\n this.socket = null;\n this.url = url; // init default server url\n this.state = STATES.CLOSED; // Number type\n this.stateName = this.getStateName() // String type\n\n this.txCounter = 0;\n this.rxCounter = 0;\n this.txBytes = 0;\n this.rxBytes = 0;\n\n this.lastTxRxTime = Date.now();\n this.connectionCheckerPeriod = SIZE_LIMIT.CONNECTION_CHECKER_PERIOD;\n this.connectionCheckerIntervalID = null;\n\n this.boho = new Boho()\n this.TLS = false // true if protocol is wss(TLS)\n this.encMode = ENC_MODE.AUTO;\n this.useAuth = false;\n\n this.nick = \"\";\n this.channels = new Set()\n this.promiseMap = new Map()\n this.promiseTimeOut = SIZE_LIMIT.PROMISE_TIMEOUT\n this.mid = 0 // promise message id \n\n this.level = 3; // also defaultQuotaLevel\n this.quota = quotaTable[this.level];\n this.serverSet = {}\n this.linkMap = new Map()\n\n this.on('open', this.onOpen.bind(this))\n this.on('close', this.onClose.bind(this))\n this.on('socket_data', this.onData.bind(this))\n }\n\n\n redirect(url2) {\n this.close()\n this.stateChange('redirecting')\n this.createConnection(url2)\n }\n\n open(url) {\n if (!url && !this.url) return;\n\n if (url) {\n if (!this.url) { // default host url\n this.url = url\n } else if (url !== this.url) { // default host url change\n this.url = url;\n if (this.socket) {\n this.close()\n return\n }\n }\n }\n\n this.createConnection(this.url)\n\n if (!this.connectionCheckerIntervalID) {\n this.connectionCheckerIntervalID = setInterval(this.keepAlive.bind(this), this.connectionCheckerPeriod);\n }\n }\n\n onOpen() {\n if (this.url.includes(\"wss://\")) {\n this.TLS = true;\n } else {\n this.TLS = false;\n }\n this.stateChange('open')\n }\n\n onClose() {\n this.boho.isAuthorized = false;\n this.cid = \"\"\n this.stateChange('closed')\n }\n\n // manual login\n login(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n console.log('manual login: ', id)\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n let auth_pack = this.boho.auth_req()\n // console.log('auth_req_pack', auth_pack )\n this.send(auth_pack)\n }\n\n // auto login\n auth(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n }\n\n onData(buffer) {\n // console.log('remote rcv socket_message', buffer )\n //check first byte (remote message type)\n let msgType = buffer[0];\n let decoded;\n\n if (msgType === BohoMsg.ENC_488) {\n decoded = this.boho.decrypt_488(buffer)\n if (decoded) {\n // console.log( decoded )\n msgType = decoded[0]\n buffer = decoded\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('DEC_FAIL', buffer.byteLength)\n }\n } else if (msgType === BohoMsg.ENC_E2E) {\n // console.log('rcv ENC_E2E' )\n\n try {\n decoded = this.boho.decrypt_488(buffer)\n //헤더를 읽고 헤더크기만큼만 해석한다.\n if (decoded) {\n // console.log( 'ENC_E2E decoded ', decoded )\n msgType = decoded[0]\n // decoded has msg_header only. \n buffer.set(decoded, MetaSize.ENC_488) // set decoded signal_e2e headaer.\n buffer = buffer.subarray(MetaSize.ENC_488) // reset offset.\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('488 DEC_FAIL', buffer)\n return\n }\n\n } catch (err) {\n // console.log('E2E DEC_FAIL decryption error', err)\n return\n }\n\n }\n\n let type = IOMsg[msgType]\n if (!type) type = BohoMsg[msgType]\n\n // console.log( \"MsgType: \", type , \" LEN \", buffer.byteLength)\n\n switch (msgType) {\n case IOMsg.OVER_SIZE:\n console.log('## server sent: over_size event.')\n this.emit('over_size', 'over_size')\n break;\n case IOMsg.PING:\n this.pong();\n break;\n\n case IOMsg.PONG:\n break;\n\n case IOMsg.IAM_RES:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let jsonInfo = JSON.parse(str)\n if (jsonInfo.ip) {\n this.ip = jsonInfo.ip;\n }\n console.log('', JSON.stringify(jsonInfo))\n // console.log('', JSON.stringify(jsonInfo,null,2))\n } catch (error) {\n // console.log(' data error')\n }\n break;\n\n case IOMsg.CID_RES:\n let cidStr = decoder.decode(buffer.subarray(1))\n // console.log( '>> CID_RES: ' ,cidStr )\n this.cid = cidStr;\n // change state before subscribe.\n this.stateChange('ready', 'cid_ready')\n this.subscribe_memory_channels()\n break;\n\n case IOMsg.QUOTA_LEVEL:\n let quotaLevel = buffer[1]\n this.level = quotaLevel;\n this.quota = quotaTable[quotaLevel];\n console.log('## QUOTA:', quotaLevel, JSON.stringify(this.quota))\n break;\n\n case IOMsg.SERVER_CLEAR_AUTH:\n this.useAuth = false;\n this.boho.clearAuth();\n this.stop();\n break;\n\n case IOMsg.SERVER_REDIRECT:\n let host_port;\n let url;\n let protocol;\n let addressType;\n if (buffer.byteLength == 7) { // ipv4 ,port\n addressType = 'IPV4:PORT'\n host_port = byteToUrl(buffer.subarray(1))\n protocol = 'cong://'\n } else { // domain url\n addressType = 'URL'\n host_port = decoder.decode(buffer.subarray(1))\n protocol = ''\n }\n\n url = protocol + host_port\n this.redirect(url)\n break;\n\n case IOMsg.SERVER_READY:\n this.stateChange('server_ready', 'server_ready')\n if (this.useAuth) {\n this.send(this.boho.auth_req())\n // CID_REQ will be called, after auth_ack.\n } else {\n // CID_REQ here, if not using auth.\n this.send(Buffer.from([IOMsg.CID_REQ]))\n }\n break;\n\n case IOMsg.SERVER_SIGNAL:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let ss = JSON.parse(str)\n // console.log('SERVER_SIGNAL', JSON.stringify(ss))\n\n if (ss.event && ss.data) {\n this.serverSet = ss.data;\n this.emit(ss.event, ss.data)\n }\n\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SET:\n try {\n let setPack = MBP.unpack(buffer)\n if (setPack) {\n // console.log('[SET] topic: ', setPack.topic)\n this.emit(setPack.topic, ...setPack.args)\n }\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SIGNAL_E2E:\n case IOMsg.SIGNAL:\n try {\n let tagLen = buffer.readUint8(1)\n let tagBuf = buffer.subarray(2, 2 + tagLen)\n let tag = decoder.decode(tagBuf)\n\n let payloadType = buffer.readUint8(2 + tagLen)\n let payloadBuffer = buffer.subarray(3 + tagLen)\n\n /* three types of signal message.\n > unicast message to me: tag includes @, no cid: '@*'\n > cid_sub message: tag includes cid and @ both : 'cid@*'\n > ch_sub message: else.\n */\n switch (payloadType) {\n\n case PAYLOAD_TYPE.EMPTY: // 0\n if (tag.indexOf('@') === 0) this.emit('@', null, tag)\n else this.emit(tag, null, tag)\n break;\n\n case PAYLOAD_TYPE.TEXT: // 1\n // !! Must remove null char before decode in JS.\n // string payload contains null char for the c/cpp devices.\n let payloadStringWithoutNull = payloadBuffer.subarray(0, payloadBuffer.byteLength - 1)\n let oneString = decoder.decode(payloadStringWithoutNull)\n if (tag.indexOf('@') === 0) this.emit('@', oneString, tag)\n if (tag !== '@') this.emit(tag, oneString, tag)\n break;\n\n case PAYLOAD_TYPE.BINARY: // 2\n if (tag.indexOf('@') === 0) this.emit('@', payloadBuffer, tag)\n if (tag !== '@') this.emit(tag, payloadBuffer, tag)\n break;\n\n case PAYLOAD_TYPE.OBJECT:\n let oneObjectBuffer = decoder.decode(payloadBuffer)\n let oneJSONObject = JSON.parse(oneObjectBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', oneJSONObject, tag)\n if (tag !== '@') this.emit(tag, oneJSONObject, tag)\n break;\n\n case PAYLOAD_TYPE.MJSON:\n let mjsonBuffer = decoder.decode(payloadBuffer)\n let mjson = JSON.parse(mjsonBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mjson, tag)\n if (tag !== '@') this.emit(tag, ...mjson, tag)\n break;\n\n case PAYLOAD_TYPE.MBA:\n let mbaObject = MBP.unpack(payloadBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mbaObject.args, tag)\n if (tag !== '@') this.emit(tag, ...mbaObject.args, tag)\n break;\n\n default:\n // console.log('## Unkown payloadtype', payloadType)\n }\n\n } catch (err) {\n // console.log('## signal parse err', err)\n }\n break;\n\n case IOMsg.RESPONSE_MBP:\n this.testPromise(buffer)\n break;\n\n case BohoMsg.AUTH_NONCE:\n let auth_hmac = this.boho.auth_hmac(buffer)\n if (auth_hmac) {\n this.send(auth_hmac)\n } else {\n this.stateChange('auth_fail', 'Invalid local auth_hmac.')\n }\n break;\n\n case BohoMsg.AUTH_FAIL:\n this.stateChange('auth_fail', 'server reject auth.')\n break;\n\n case BohoMsg.AUTH_ACK:\n if (this.boho.check_auth_ack_hmac(buffer)) {\n this.stateChange('auth_ready', 'server sent auth_ack')\n this.send(Buffer.from([IOMsg.CID_REQ]))\n } else {\n this.stateChange('auth_fail', 'invalid server_hmac')\n }\n break;\n\n default:\n try {\n decoded = decoder.decode(buffer)\n // console.log('text message:', decoded)\n this.emit('text_message', decoded)\n } catch (error) {\n\n }\n\n break;\n\n }\n }\n\n iam(title) {\n // console.log('iam', title)\n if (title) {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM),\n MBP.MB('#', title)\n ))\n } else {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM)\n ))\n }\n }\n\n\n ping() {\n this.send(Buffer.from([IOMsg.PING]))\n }\n\n pong() {\n this.send(Buffer.from([IOMsg.PONG]))\n }\n\n\n // application level ping tool. \n // simple message sending and reply.\n echo(args) {\n if (args) {\n console.log('echo args:', args)\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.ECHO),\n MBP.MB('#msg', args)\n ))\n } else {\n // # do not encrypt blank echo #\n this.send(Buffer.from([IOMsg.ECHO]))\n }\n }\n\n\n bin(...data) {\n this.send(MBP.U8pack(...data))\n }\n\n send(data) {\n if (data.byteLength > this.quota.signalSize) {\n this.emit('over_size')\n console.log('## QUOTA LIMIT OVER!! \\nsignal message.byteLength: ', data.byteLength)\n console.log('## your maximum signalSize(bytes) is:', this.quota.signalSize)\n return\n }\n this.socket_send(data);\n }\n\n /*\n Policy. Should message do encrypt?\n\n if encMode == auto\n NO. if connection using TLS line.\n // ex. wss://url connection.\n YES. if no TLS line.\n // ex. ws://url connection.\n\n if encMode == YES\n YES. encrypt the message.\n\n if encMode == NO\n NO. do not ecnrypt message.\n\n */\n getEncryptionMode() {\n if (this.encMode === ENC_MODE.YES ||\n this.encMode === ENC_MODE.AUTO &&\n !this.TLS && this.boho.isAuthorized\n ) {\n return true;\n } else {\n return false\n }\n }\n\n send_enc_mode(data, useEncryption) {\n\n // use default policy.\n if (useEncryption === undefined) {\n useEncryption = this.getEncryptionMode()\n }\n\n if (data[0] == IOMsg.SIGNAL_E2E && useEncryption) {\n // input data: signal_header + e2ePayload\n // encrypt signal_header area only. payload is encrypted with e2e key already.\n let tagLen = data[1]\n let encHeader = this.boho.encrypt_488(data.subarray(0, 3 + tagLen))\n encHeader[0] = BohoMsg.ENC_E2E\n this.send(Buffer.concat([encHeader, data.subarray(3 + tagLen)]))\n // console.log('<< send_enc_mode [ ENC_E2E ]')\n\n } else if (useEncryption) {\n // console.log('<< send_enc_mode [ ENC_488 ]')\n let encPack = this.boho.encrypt_488(data)\n this.send(encPack)\n } else {\n // console.log('<< send_enc_mode [ PLAIN ]' )\n this.send(data)\n }\n\n }\n\n\n setMsgPromise(mid) {\n return new Promise((resolve, reject) => {\n this.promiseMap.set(mid, [resolve, reject])\n // console.log('set promise. mid, size', mid, this.promiseMap.size)\n setTimeout(e => {\n if (this.promiseMap.has(mid)) {\n reject('timeout');\n this.promiseMap.delete(mid)\n // console.log('promise timeout. mid, size:', mid, this.promiseMap.size)\n }\n }, this.promiseTimeOut);\n })\n }\n\n testPromise(buffer) {\n // console.log('mbp buffer : ', buffer , buffer.byteLength)\n // let mbp = ( buffer.byteLength > 4 ) ? buffer.subarray(4) : \"\"\n\n let res = MBP.unpack(buffer)\n if (!res) return\n // console.log( res )\n\n // console.log(`RESPONSE_MBP MID: ${mid} status: ${status} ,mbp: ${ buffer.subarray(4)} `)\n\n if (this.promiseMap.has(res.mid)) {\n // console.log('res promise msg', mid)\n let [resolve, reject] = this.promiseMap.get(res.mid)\n this.promiseMap.delete(res.mid)\n\n if (res.status < 128) {\n res.ok = true;\n // console.log( 'unpack meta:', meta)\n resolve(res)\n } else {\n res.ok = false;\n reject(res)\n }\n\n\n } else {\n console.log('no promise id')\n }\n }\n\n\n publish(...args) {\n this.signal(...args)\n }\n\n\n signal(tag, ...args) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n let signalPack = getSignalPack(tag, ...args)\n this.send_enc_mode(signalPack)\n }\n\n decrypt_e2e(data, key) {\n return this.boho.decrypt_e2e(data, key)\n }\n\n signal_e2e(tag, data, key) {\n\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode(tag)\n let dataPack = MBP.B8(data)\n\n //encrypt payload area with key\n let sercretPack = this.boho.encrypt_e2e(dataPack, key)\n\n //change signal MsgType header into SIGNAL_E2E\n let signalPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.SIGNAL_E2E),\n MBP.MB('#tagLen', '8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', PAYLOAD_TYPE.BINARY),\n MBP.MB('#payload', sercretPack)\n )\n\n this.send_enc_mode(signalPack)\n }\n\n\n\n set(storeName, ...args) {\n if (!storeName || args.length == 0) {\n return Promise.reject(new Error('set need storeName and value)'))\n }\n return this.req('store', 'set', storeName, ...args)\n }\n\n async get(storeName) {\n if (!storeName) {\n return Promise.reject(new Error('store get need storeName)'))\n }\n let pack = await this.req('store', 'get', storeName)\n let { $ } = MBP.unpack(pack.body)\n return $\n }\n\n\n req(target, topic, ...args) {\n // console.log('common_req args', args)\n if (!target || !topic)\n return Promise.reject(new Error('request need target and topic)'))\n let sigPack;\n if (args.length > 0) {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic),\n MBP.MBA(...args)\n )\n } else {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic)\n )\n }\n // console.log('<< adminPack', this.mid, sigPack)\n this.send_enc_mode(sigPack)\n return this.setMsgPromise(this.mid)\n }\n\n\n subscribe(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) return\n\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.add(tag)\n })\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n subscribe_promise(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) {\n // console.log('not ready state:', this.state )\n return Promise.reject('subscribe_promise:: connection is not ready')\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN2) throw TypeError('please use tag string bytelength: ' + SIZE_LIMIT.TAG_LEN2)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE_REQ),\n MBP.NB('16', ++this.mid),\n MBP.NB('16', tagEncoded.byteLength),\n tagEncoded]))\n return this.setMsgPromise(this.mid)\n }\n\n subscribe_memory_channels() { //local cache . auto_resubscribe\n if (this.channels.size == 0) return\n let chList = Array.from(this.channels).join(',')\n // console.log('<< subscibe memory channels by cid', chList , this.cid )\n\n this.subscribe_promise(chList)\n .then((res) => {\n // console.log('>> SUBSCRIBE_REQ result', res ) // return code == map.size\n }).catch((e) => {\n console.log('>> SUBSCRIBE FAIL:', e)\n })\n\n }\n\n unsubscribe(tag = \"\") {\n // console.log('unsub', tag)\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n if (tag == \"\") {\n // console.log('unsub all')\n this.channels.clear();\n } else {\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.delete(tag)\n })\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(Buffer.concat([\n MBP.NB('8', IOMsg.UNSUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n\n listen(tag, handler) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n // console.log('channels:', this.channels )\n this.on(tag, handler)\n // do not subscribe now.\n // will subscribe when receive CID_RES signal from server.\n\n }\n\n\n\n link(to, tag, handler) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n\n let linkSet;\n if (this.linkMap.has(to)) {\n linkSet = this.linkMap.get(to)\n } else {\n linkSet = new Set()\n }\n\n linkSet.add(tag)\n this.linkMap.set(to, linkSet)\n this.on(tag, handler)\n this.subscribe(tag)\n // console.log('link [to] linkMap:', to, this.linkMap )\n\n }\n\n\n unlink(to, tag) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n if (tags[i] == tag) {\n this.unsubscribe(tag)\n this.removeAllListeners(tag)\n linkSet.delete(tag)\n this.linkMap.set(to, linkSet)\n break;\n }\n }\n\n // console.log('unlink linkMap result:', this.linkMap )\n }\n\n unlinkAll(to) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n this.unsubscribe(tags[i])\n this.removeAllListeners(tags[i])\n linkSet.delete(tags[i])\n }\n this.linkMap.delete(to)\n\n // console.log('unlinkAll linkMap result:', this.linkMap )\n }\n\n\n\n getMetric() {\n return {\n tx: this.txCounter,\n rx: this.rxCounter,\n txb: this.txBytes,\n rxb: this.rxBytes,\n last: (Date.now() - this.lastTxRxTime) / 1000\n }\n\n }\n\n getState() {\n return this.state\n }\n\n getStateName() {\n //state \n //value of constant STATES.NAME < number >\n //type of constant STATES.NAME name < string uppercase >\n //stateName,eventName \n return (STATES[this.state]).toLowerCase()\n }\n\n getSecurity() {\n return {\n useAuth: this.useAuth,\n isTLS: this.TLS,\n isAuthorized: this.boho.isAuthorized,\n encMode: this.encMode,\n usingEncryption: this.getEncryptionMode()\n }\n }\n\n stateChange(state, emitEventAndMessage) {\n // STATES constant name : string upperCase\n // eventName, .stateName : string lowerCase\n // .state : number\n let eventName = state.toLowerCase()\n this.state = STATES[state.toUpperCase()] // state: number\n if (emitEventAndMessage) this.emit(eventName, emitEventAndMessage)\n\n if (this.stateName !== eventName) {\n // console.log(`state: ${this.stateName} => ${eventName}` )\n this.stateName = eventName\n this.emit('change', eventName)\n }\n }\n\n}\n\n\n\n\n","import { IOCore } from \"./IOCore.js\";\nimport { Buffer } from 'meta-buffer-pack'\nexport { Boho, RAND, BohoMsg, Meta, MetaSize , sha256, MBP, Buffer } from 'boho'\nexport * from '../common/constants.js'\n\n// Browser WebSocket\nexport class IO extends IOCore{\n constructor(url ) {\n super(url);\n document.addEventListener('visibilitychange', this.browserVisiblePing.bind(this));\n if(url) this.open();\n }\n\n browserVisiblePing(){\n if (document.visibilityState === 'visible') {\n this.ping()\n }\n }\n\n \n close() {\n if(this.socket ){\n this.socket.onclose = null\n this.socket.onmessage = null\n this.socket.onerror = null\n this.socket.close();\n this.socket = null;\n }\n this.emit('close')\n }\n\n\n stop(){\n this.close()\n clearInterval(this.connectionCheckerIntervalID);\n this.connectionCheckerIntervalID = null\n } \n \n \n keepAlive() {\n if ( !this.socket || this.socket?.readyState === 3 ) { //closed\n this.open();\n }\n }\n\n createConnection(url){\n // Web Browser WebSocket\n this.socket = new WebSocket (url );\n this.stateChange('opening')\n\n this.socket.binaryType = \"arraybuffer\"\n this.socket.onopen = () => {\n this.socket.onmessage = this.onWebSocketMessage.bind(this) ;\n this.emit('open' );\n };\n\n this.socket.onerror = (e)=>{ \n this.emit('error', e)\n }\n\n this.socket.onclose = ()=>{ \n this.emit('close' );\n }\n }\n\n onWebSocketMessage( event ) {\n this.rxCounter++;\n this.lastTxRxTime = Date.now();\n let buffer;\n\n // if( event.data instanceof ArrayBuffer ){\n // //binary frame\n // }else{\n // //text frame\n // }\n buffer = Buffer.from( event.data )\n this.rxBytes += buffer.byteLength\n\n this.emit('socket_data', buffer );\n }\n\n socket_send(data) { \n if( this.socket?.readyState === 1 ){ //open\n // console.log('websocket send', data)\n this.socket.send( data )\n this.txCounter++;\n this.txBytes += data.byteLength\n this.lastTxRxTime = Date.now();\n }else{\n console.log('.')\n }\n }\n \n}\n\n"],"names":["byteLength_1","b64","lens","getLens","validLen","placeHoldersLen","toByteArray_1","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray_1","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","value","c","rt","abs","isNaN","floor","log","LN2","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","byteLength","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64","fromByteArray","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","toByteArray","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","encoder","TextEncoder","decoder","TextDecoder","NB","numberBuffer","initValue","toUpperCase","MB","metaBuffer","typeOrData","bufferType","JSON","stringify","v","MBA","metaBufferArguments","args","map","argsIndex","parseTypeName","readTypedBuffer","simpleType","strBuffer","decode","strNumber","objEncoded","parse","pack","bufArr","subArr","filter","item","flatArray","info","infoEncoded","infoSize","forEach","bufPack","infoStr","encode","infoSizeBuff","unpack","binPack","meta","infoArr","getMeta","binObj","readCounter","result","leftSize","mbaIndex","$","U8","parseUint8Array","shareArrayBuffer","originData","dataCopy","B8","parseBuffer","u8","B8pack","parseBufferThenConcat","dataArray","buffers","U8pack","parseUint8ThenConcat","bufferSize","equal","buf1","buf2","getBufferSize","getMetaSize","TAIL_LEN","parseMetaInfo","infoFrom","decoded","firstItem","readTail","DataView","getUint16","getBuffer","rawBufferSize","showDetail","metaInfo","rawPack","has","hasOwnProperty","prefix","Events","EE","context","once","addListener","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","names","getOwnPropertySymbols","listeners","handlers","l","ee","listenerCount","emit","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","module","K","Uint32Array","hashBlocks","w","p","f","g","h","u","t1","t2","Hash","digestLength","blockSize","state","Int32Array","temp","bufferLength","bytesHashed","finished","reset","clean","update","dataLength","dataPos","finish","left","bitLenHi","bitLenLo","padLength","digest","_saveState","_restoreState","HMAC","key","inner","outer","pad","istate","ostate","hash","sha256","MBP.U8","MBP.B8","hmac","MBP.MB","BohoMsg","AUTH_REQ","AUTH_NONCE","AUTH_HMAC","AUTH_ACK","AUTH_FAIL","AUTH_EXT","ENC_PACK","ENC_E2E","ENC_488","Meta","MBP.meta","lastItem","MetaSize","isNode","global","process","RAND","webcrypto","getRandomValues","self","crypto","Boho","_id8","_otpSrc44","_otp36","_hmac","auth_salt12","localNonce","remoteNonce","isAuthorized","clearAuth","set_hash_id8","set_id8","encStr","set_key","set_id_key","id_key","delimiterPosition","id","substring","copy_id8","copy_key","sha256_n","srcData","hashSum","set_clock_rand","milTime","Date","now","secTime","MBP.NB","set_clock_nonce","nonce","set_salt12","salt12","resetOTP","getIndexOTP","otpIndex","generateHMAC","hmacSrc","getHMAC8","xotp","otpStartIndex","shareDataBuffer","dataOffset","xorCalcLen","iotp","auth_req","MBP.pack","auth_nonce","unixTime","auth_hmac","MBP.unpack","check_auth_hmac","infoPack","hmac32","MBP.equal","replyHMAC","auth_ack","MBP.rawPack","check_auth_ack_hmac","encrypt_488","hmac8","encData","decrypt_488","otpSrc8","xdata","$OTHERS","decData","encryptPack","decryptPack","encrypt_e2e","baseKey","decrypt_e2e","decPack","STATES","OPENING","OPEN","CLOSING","CLOSED","SERVER_READY","AUTH_READY","READY","REDIRECTING","CLIENT_STATE","INIT","SENT_SERVER_READY","RECV_AUTH_REQ","SENT_SERVER_NONCE","RECV_AUTH_HMAC","CID_READY","ENC_MODE","NO","YES","AUTO","SIZE_LIMIT","TAG_LEN1","TAG_LEN2","CONNECTION_CHECKER_PERIOD","PROMISE_TIMEOUT","DID","CID","PAYLOAD_TYPE","EMPTY","TEXT","BINARY","OBJECT","MJSON","IOMsg","CID_REQ","CID_RES","QUOTA_LEVEL","SERVER_CLEAR_AUTH","SERVER_REDIRECT","LOOP","ECHO","PING","PONG","CLOSE","SIGNAL","SIGNAL_REQ","SIGNAL_E2E","SUBSCRIBE","SUBSCRIBE_REQ","UNSUBSCRIBE","SERVER_SIGNAL","IAM","IAM_RES","SET","RESPONSE_CODE","RESPONSE_MBP","REQUEST","RESPONSE","FLOW_MODE","WAIT","RESUME","TIME_OUT","OVER_SIZE","OVER_FLOW","API_TYPE","REQUEST_RESPONSE","ONE_WAY","STATUS","OK","ERROR","quotaTable","signalSize","publishCounter","trafficRate","getSignalPack","tag","sigPack","tagEncoded","payload","containsBuffer","parsePayload","mbaBuffer","MBP.MBA","IOCore","url","cid","ip","socket","stateName","getStateName","txCounter","rxCounter","txBytes","rxBytes","lastTxRxTime","connectionCheckerPeriod","connectionCheckerIntervalID","boho","TLS","encMode","useAuth","nick","channels","Set","promiseMap","Map","promiseTimeOut","mid","level","quota","serverSet","linkMap","onOpen","bind","onClose","onData","redirect","url2","close","stateChange","createConnection","open","setInterval","keepAlive","login","auth_pack","send","auth","msgType","err","pong","jsonInfo","cidStr","subscribe_memory_channels","quotaLevel","stop","host_port","protocol","byteToUrl","ss","setPack","topic","tagLen","tagBuf","payloadType","payloadBuffer","payloadStringWithoutNull","oneString","oneObjectBuffer","oneJSONObject","mjsonBuffer","mjson","mbaObject","testPromise","iam","title","send_enc_mode","ping","echo","bin","MBP.U8pack","socket_send","getEncryptionMode","useEncryption","encHeader","encPack","setMsgPromise","Promise","resolve","reject","setTimeout","delete","status","ok","publish","signal","signalPack","signal_e2e","dataPack","sercretPack","storeName","req","body","subscribe","add","subscribe_promise","chList","then","catch","unsubscribe","clear","listen","handler","link","to","linkSet","unlink","tags","unlinkAll","getMetric","tx","rx","txb","rxb","getState","getSecurity","isTLS","usingEncryption","emitEventAndMessage","eventName","IO","document","addEventListener","browserVisiblePing","visibilityState","onclose","onmessage","onerror","clearInterval","readyState","WebSocket","binaryType","onopen","onWebSocketMessage"],"mappings":"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"} \ No newline at end of file diff --git a/dist/iosignal.min.js b/dist/iosignal.min.js index 8befb8c..7278692 100644 --- a/dist/iosignal.min.js +++ b/dist/iosignal.min.js @@ -1,3 +1,3 @@ var IO=function(){"use strict";function t(t){var e={exports:{}};return t(e,e.exports),e.exports}for(var e=function(t){var e=u(t),r=e[0],n=e[1];return 3*(r+n)/4-n},r=function(t){var e,r,n=u(t),i=n[0],f=n[1],h=new s(function(t,e,r){return 3*(e+r)/4-r}(0,i,f)),a=0,c=f>0?i-4:i;for(r=0;r>16&255,h[a++]=e>>8&255,h[a++]=255&e;2===f&&(e=o[t.charCodeAt(r)]<<2|o[t.charCodeAt(r+1)]>>4,h[a++]=255&e);1===f&&(e=o[t.charCodeAt(r)]<<10|o[t.charCodeAt(r+1)]<<4|o[t.charCodeAt(r+2)]>>2,h[a++]=e>>8&255,h[a++]=255&e);return h},n=function(t){for(var e,r=t.length,n=r%3,o=[],s=16383,f=0,h=r-n;fh?h:f+s));1===n?(e=t[r-1],o.push(i[e>>2]+i[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],o.push(i[e>>10]+i[e>>4&63]+i[e<<2&63]+"="));return o.join("")},i=[],o=[],s="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0;h<64;++h)i[h]=f[h],o[f.charCodeAt(h)]=h;function u(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function a(t,e,r){for(var n,o,s=[],f=e;f>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return s.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63;var c={byteLength:e,toByteArray:r,fromByteArray:n},l=function(t,e,r,n,i){var o,s,f=8*i-n-1,h=(1<>1,a=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,o=p&(1<<-a)-1,p>>=-a,a+=f;a>0;o=256*o+t[e+c],c+=l,a-=8);for(s=o&(1<<-a)-1,o>>=-a,a+=n;a>0;s=256*s+t[e+c],c+=l,a-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},p=function(t,e,r,n,i,o){var s,f,h,u=8*o-i-1,a=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(f=isNaN(e)?1:0,s=a):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?l/h:l*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=a?(f=0,s=a):s+c>=1?(f=(e*h-1)*Math.pow(2,i),s+=c):(f=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&f,p+=y,f/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=y,s/=256,u-=8);t[r+p-y]|=128*g},y=t((function(t,e){const r="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=o,e.SlowBuffer=function(t){+t!=t&&(t=0);return o.alloc(+t)},e.INSPECT_MAX_BYTES=50;const n=2147483647;function i(t){if(t>n)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,o.prototype),e}function o(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return h(t)}return s(t,e,r)}function s(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!o.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=i(r);const s=n.write(t,e);s!==r&&(n=n.slice(0,s));return n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(q(t,Uint8Array)){const e=new Uint8Array(t);return a(e.buffer,e.byteOffset,e.byteLength)}return u(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(q(t,ArrayBuffer)||t&&q(t.buffer,ArrayBuffer))return a(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(q(t,SharedArrayBuffer)||t&&q(t.buffer,SharedArrayBuffer)))return a(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return o.from(n,e,r);const s=function(t){if(o.isBuffer(t)){const e=0|y(t.length),r=i(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return"number"!=typeof t.length||K(t.length)?i(0):u(t);if("Buffer"===t.type&&Array.isArray(t.data))return u(t.data)}(t);if(s)return s;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function f(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function h(t){return f(t),i(t<0?0:0|y(t))}function u(t){const e=t.length<0?0:0|y(t.length),r=i(e);for(let n=0;n=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+" bytes");return 0|t}function g(t,e){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||q(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return J(t).length;default:if(i)return n?-1:Y(t).length;e=(""+e).toLowerCase(),i=!0}}function d(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return C(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return I(this,e,r);case"latin1":case"binary":return U(this,e,r);case"base64":return L(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function b(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function E(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),K(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=o.from(e,n)),o.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){let o,s=1,f=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,f/=2,h/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){let n=-1;for(o=r;of&&(r=f-h),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=e.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function L(t,e,r){return 0===e&&r===t.length?c.fromByteArray(t):c.fromByteArray(t.slice(e,r))}function T(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+s<=r){let r,n,f,h;switch(s){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(h=(31&e)<<6|63&r,h>127&&(o=h));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(h=(15&e)<<12|(63&r)<<6|63&n,h>2047&&(h<55296||h>57343)&&(o=h));break;case 4:r=t[i+1],n=t[i+2],f=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&f)&&(h=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&f,h>65535&&h<1114112&&(o=h))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){const e=t.length;if(e<=v)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(o.isBuffer(e)||(e=o.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!o.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},o.byteLength=g,o.prototype._isBuffer=!0,o.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},r&&(o.prototype[r]=o.prototype.inspect),o.prototype.compare=function(t,e,r,n,i){if(q(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let s=(i>>>=0)-(n>>>=0),f=(r>>>=0)-(e>>>=0);const h=Math.min(s,f),u=this.slice(n,i),a=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return _(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":case"latin1":case"binary":return A(this,t,e,r);case"base64":return B(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const v=4096;function I(t,e,r){let n="";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function N(t,e,r,n,i,s){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function k(t,e,r,n,i){j(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,s>>=8,t[r++]=s,r}function M(t,e,r,n,i){j(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=s,s>>=8,t[r+2]=s,s>>=8,t[r+1]=s,s>>=8,t[r]=s,r+8}function x(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function P(t,e,r,n,i){return e=+e,r>>>=0,i||x(t,0,r,4),p(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||x(t,0,r,8),p(t,e,r,n,52,8),r+8}o.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||R(t,e,this.length);let n=this[t],i=1,o=0;for(;++o>>=0,e>>>=0,r||R(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},o.prototype.readUint8=o.prototype.readUInt8=function(t,e){return t>>>=0,e||R(t,1,this.length),this[t]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(t,e){return t>>>=0,e||R(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(t,e){return t>>>=0,e||R(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(t,e){return t>>>=0,e||R(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(t,e){return t>>>=0,e||R(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readBigUInt64LE=X((function(t){F(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||R(t,e,this.length);let n=this[t],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*e)),n},o.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||R(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return t>>>=0,e||R(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){t>>>=0,e||R(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,e){t>>>=0,e||R(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,e){return t>>>=0,e||R(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return t>>>=0,e||R(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readBigInt64LE=X((function(t){F(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||V(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||R(t,4,this.length),l(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return t>>>=0,e||R(t,4,this.length),l(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return t>>>=0,e||R(t,8,this.length),l(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return t>>>=0,e||R(t,8,this.length),l(this,t,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){N(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!n){N(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},o.prototype.writeUint8=o.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,255,0),this[e]=255&t,e+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigUInt64LE=X((function(t,e=0){return k(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeBigUInt64BE=X((function(t,e=0){return M(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=0,o=1,s=0;for(this[e]=255&t;++i>0)-s&255;return e+r},o.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);N(this,t,e,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},o.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},o.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||N(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigInt64LE=X((function(t,e=0){return k(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeBigInt64BE=X((function(t,e=0){return M(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeFloatLE=function(t,e,r){return P(this,t,e,!0,r)},o.prototype.writeFloatBE=function(t,e,r){return P(this,t,e,!1,r)},o.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},o.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},o.prototype.copy=function(t,e,r,n){if(!o.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function j(t,e,r,n,i,o){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new D.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,r){F(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||V(e,t.length-(r+1))}(n,i,o)}function F(t,e){if("number"!=typeof t)throw new D.ERR_INVALID_ARG_TYPE(e,"number",t)}function V(t,e,r){if(Math.floor(t)!==t)throw F(t,r),new D.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new D.ERR_BUFFER_OUT_OF_BOUNDS;throw new D.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=$(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=$(i)),i+="n"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const G=/[^+/0-9A-Za-z-_]/g;function Y(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function J(t){return c.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Q(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function q(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function K(t){return t!=t}const W=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function X(t){return"undefined"==typeof BigInt?Z:t}function Z(){throw new Error("BigInt not supported")}})); -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */const g=new TextEncoder,d=new TextDecoder,b=E;function E(t,e=0){let r;if(void 0===t||"string"!=typeof t||"number"!=typeof e)throw TypeError("invlaid init variablie type name. ");return(t=t.toUpperCase()).includes("8")?(r=y.Buffer.alloc(1),t.includes("I")?r.writeInt8(e):r.writeUint8(e)):t.includes("16")?(r=y.Buffer.alloc(2),t.includes("I")?t.includes("L")?r.writeInt16LE(e):r.writeInt16BE(e):t.includes("L")?r.writeUint16LE(e):r.writeUint16BE(e)):t.includes("32")?(r=y.Buffer.alloc(4),t.includes("I")?t.includes("L")?r.writeInt32LE(e):r.writeInt32BE(e):t.includes("L")?r.writeUint32LE(e):r.writeUint32BE(e)):t.includes("F")?(r=y.Buffer.alloc(4),t.includes("L")?r.writeFloatLE(e):r.writeFloatBE(e)):t.includes("N")?r=y.Buffer.from(String(e)):console.log(`invalid type: ${t} or initvalue: ${e}`),r}const m=_;function _(t,e,r){let n,i="B";if("number"==typeof e)"number"==typeof r?(n=y.Buffer.alloc(e),0!==r&&n.fill(r),i="B"):(n=y.Buffer.from(String(e)),i="N");else if("string"==typeof e&&"number"==typeof r)i=e.toUpperCase(),n=E(e,r);else if("string"==typeof e&&void 0===r)n=y.Buffer.from(e),i="S";else if(e instanceof Uint8Array&&void 0===r)n=e instanceof y.Buffer?e:y.Buffer.from(e);else if(e instanceof ArrayBuffer&&void 0===r)n=y.Buffer.from(e);else if(ArrayBuffer.isView(e))n=y.Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if("object"==typeof e&&void 0===r)n=y.Buffer.from(JSON.stringify(e)),i="O";else{if("boolean"!=typeof e||void 0!==r)throw TypeError("invalid meta buffer type");{const t=e?1:0;n=y.Buffer.from([t]),i="!"}}return"string"==typeof t&&t.includes("#")&&(t=""),[t,i,n]}const w=A;function A(...t){let e=0;return t.map((t=>{const r=e++;return"number"==typeof t?m(r,"N",t):m(r,t)}))}function B(t){if((t=t.toUpperCase()).includes("8"))return t.includes("I")?"int8":"uint8";if(t.includes("16"))return t.includes("I")?t.includes("L")?"int16_le":"int16_be":t.includes("L")?"uint16_le":"uint16_be";if(t.includes("32"))return t.includes("I")?t.includes("L")?"int32_le":"int32_be":t.includes("L")?"uint32_le":"uint32_be";if(t.includes("F"))return t.includes("L")?"float_le":"float_be";if("B"===t)return"buffer";if("S"===t)return"string";if("N"===t)return"number";if("O"===t)return"object";if("!"===t)return"boolean";throw TypeError("invalid data type")}function S(t,e,r,n){try{const i=B(t);if("int8"==i)return e.readInt8(r);if("uint8"===i)return e.readUint8(r);if("int16_le"===i)return e.readInt16LE(r);if("int16_be"===i)return e.readInt16BE(r);if("uint16_le"===i)return e.readUint16LE(r);if("uint16_be"===i)return e.readUint16BE(r);if("int32_le"===i)return e.readInt32LE(r);if("int32_be"===i)return e.readInt32BE(r);if("uint32_le"===i)return e.readUint32LE(r);if("uint32_be"===i)return e.readUint32BE(r);if("float_le"===i)return e.readFloatLE(r);if("float_be"===i)return e.readFloatBE(r);if("buffer"===i)return e.subarray(r,r+n);if("string"===i){const t=e.subarray(r,r+n);return d.decode(t)}if("number"===i){const t=e.subarray(r,r+n);return Number(d.decode(t))}if("object"===i){const t=e.subarray(r,r+n);return JSON.parse(d.decode(t))}if("boolean"===i){return 1===e.readInt8(r)}return}catch(t){}}function L(...t){const e=function(t){let e=[];return t.filter((t=>{if(!Array.isArray(t[0]))return t;e=e.concat(t)})).concat(e)}(t);let r=0;const n=[];let i,o,s=0;if(e.forEach((t=>{const[e,i,o]=t;r+=o.byteLength,("number"==typeof e||e.length>0)&&n.push([e,i,s,o.byteLength]),s=r})),n.length>0){let t=JSON.stringify(n);i=g.encode(t),o=i.byteLength,r=r+o+2}const f=y.Buffer.alloc(r);if(s=0,e.forEach((t=>{const e=t[2];f.set(e,s),s+=e.byteLength})),n.length>0){f.set(i,s);const t=b("16",o);return f.set(t,s+o),f}return f}function T(t,e){const r=e||j(t);if(!r)return;const n=y.Buffer.from(t),i={};let o=0;if(r.forEach((t=>{const[e,r,s,f]=t;let h=S(r,n,s,f);null!=h&&(i[e]=h,f&&(o+=f))})),e&&n.byteLength!==o){let t=n.byteLength-o,e=S("b",n,o,t);if(null==e)return;i.$OTHERS=e}let s=0,f=[];for(;i[s];)f.push(i[s++]);return f.length>0&&(i.args=f,i.$=i.args),i}const v=I;function I(t,e=!1){if(void 0===t)throw TypeError("Invalid data type: Undefined");if("string"==typeof t)return g.encode(t);if("number"==typeof t)return Uint8Array.from([t]);if(t instanceof ArrayBuffer){if(e)return new Uint8Array(t);{const e=new Uint8Array(t),r=new Uint8Array(t.byteLength);return r.set(e),r}}if(ArrayBuffer.isView(t)){if(e)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);{const e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new Uint8Array(t.byteLength);return r.set(e),r}}return g.encode(JSON.stringify(t))}const U=C;function C(t,e=!1){const r=I(t,e);return e?y.Buffer.from(r.buffer,r.byteOffset,r.byteLength):y.Buffer.from(r)}const O=R;function R(...t){const e=t.map((t=>C(t)));return y.Buffer.concat(e)}const N=k;function k(...t){try{let e=0,r=0;const n=t.map((t=>I(t)));n.forEach((t=>{e+=t.byteLength}));const i=new Uint8Array(e);return n.forEach((t=>{i.set(t,r),r+=t.byteLength})),i}catch(t){console.log(t)}}function M(t,e){if(t.byteLength!==e.byteLength)return!1;for(let r=0;re)return 0;return P(t,r)?r:0}return 0}function $(t){const e=x(t);return t.subarray(0,e)}function j(t,e=!1){t instanceof ArrayBuffer&&(t=y.Buffer.from(t));const r=D(t);if(0===r)return;let n=P(t,r);return n?e?(n.forEach((t=>{null==t[3]&&(t[1].includes("8")?t[3]=1:t[1].includes("16")?t[3]=2:t[1].includes("32")||t[1].includes("F")?t[3]=4:t[1].includes("!")&&(t[3]=1)),t[4]=B(t[1])})),n):n:void 0}function F(...t){return $(L(...t))}function V(...t){return j(L(...t))}var G=Object.freeze({__proto__:null,Buffer:y.Buffer,NB:b,numberBuffer:E,MB:m,metaBuffer:_,MBA:w,metaBufferArguments:A,parseTypeName:B,readTypedBuffer:S,pack:L,unpack:T,U8:v,parseUint8Array:I,B8:U,parseBuffer:C,B8pack:O,parseBufferThenConcat:R,U8pack:N,parseUint8ThenConcat:k,hex:function(t){return Array.prototype.map.call(new Uint8Array(t),(t=>("00"+t.toString(16)).slice(-2))).join("")},equal:M,getBufferSize:x,parseMetaInfo:P,TAIL_LEN:H,readTail:D,getMetaSize:z,getBuffer:$,getMeta:j,rawPack:F,meta:V,metaDetail:function(...t){return j(L(...t),!0)},getMetaDetail:function(t){return j(t,!0)}}),Y=t((function(t){var e=Object.prototype.hasOwnProperty,r="~";function n(){}function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function o(t,e,n,o,s){if("function"!=typeof n)throw new TypeError("The listener must be a function");var f=new i(n,o||t,s),h=r?r+e:e;return t._events[h]?t._events[h].fn?t._events[h]=[t._events[h],f]:t._events[h].push(f):(t._events[h]=f,t._eventsCount++),t}function s(t,e){0==--t._eventsCount?t._events=new n:delete t._events[e]}function f(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),f.prototype.eventNames=function(){var t,n,i=[];if(0===this._eventsCount)return i;for(n in t=this._events)e.call(t,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(t)):i},f.prototype.listeners=function(t){var e=r?r+t:t,n=this._events[e];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i=64;){for(o=e[0],s=e[1],f=e[2],h=e[3],u=e[4],a=e[5],c=e[6],l=e[7],y=0;y<16;y++)g=n+4*y,t[y]=(255&r[g])<<24|(255&r[g+1])<<16|(255&r[g+2])<<8|255&r[g+3];for(y=16;y<64;y++)p=t[y-2],d=(p>>>17|p<<15)^(p>>>19|p<<13)^p>>>10,p=t[y-15],b=(p>>>7|p<<25)^(p>>>18|p<<14)^p>>>3,t[y]=(d+t[y-7]|0)+(b+t[y-16]|0);for(y=0;y<64;y++)d=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&a^~u&c)|0)+(l+(J[y]+t[y]|0)|0)|0,b=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&s^o&f^s&f)|0,l=c,c=a,a=u,u=h+d|0,h=f,f=s,s=o,o=d+b|0;e[0]+=o,e[1]+=s,e[2]+=f,e[3]+=h,e[4]+=u,e[5]+=a,e[6]+=c,e[7]+=l,n+=64,i-=64}return n}const q=function(){function t(){this.digestLength=32,this.blockSize=64,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var t=0;t0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[r++],e--;64===this.bufferLength&&(Q(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(r=Q(this.temp,this.state,t,r,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[r++],e--;return this},t.prototype.finish=function(t){if(!this.finished){const t=this.bytesHashed,r=this.bufferLength,n=t/536870912|0,i=t<<3,o=t%64<56?64:128;this.buffer[r]=128;for(var e=r+1;e>>24&255,this.buffer[o-7]=n>>>16&255,this.buffer[o-6]=n>>>8&255,this.buffer[o-5]=n>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,Q(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(e=0;e<8;e++)t[4*e+0]=this.state[e]>>>24&255,t[4*e+1]=this.state[e]>>>16&255,t[4*e+2]=this.state[e]>>>8&255,t[4*e+3]=this.state[e]>>>0&255;return this},t.prototype.digest=function(){const t=new Uint8Array(this.digestLength);return this.finish(t),t},t.prototype._saveState=function(t){for(let e=0;ethis.blockSize)(new q).update(t).finish(e).clean();else for(var r=0;r0;){s=n<32?n:32;let e=this.getIndexOTP(++i);for(let r=0;r{(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)&&(n=!0)})),n?e=pt.MBA:(e=pt.MJSON,r=dt.encode(JSON.stringify(t)))}return{type:e,buffer:r}}(e);if(i.type==pt.EMPTY)r=L(m("#MsgType","8",yt.SIGNAL),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",i.type));else if(i.type==pt.MBA){let t=L(w(...e));r=L(m("#MsgType","8",yt.SIGNAL),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",i.type),m("#mbaBuffer",t))}else r=L(m("#MsgType","8",yt.SIGNAL),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",i.type),m("#payload",i.buffer));return r}const Et=new TextEncoder,mt=new TextDecoder;class _t extends Y{constructor(t){super(),this.cid="",this.ip="",this.socket=null,this.url=t,this.state=ft.CLOSED,this.stateName=this.getStateName(),this.txCounter=0,this.rxCounter=0,this.txBytes=0,this.rxBytes=0,this.lastTxRxTime=Date.now(),this.connectionCheckerPeriod=ct,this.connectionCheckerIntervalID=null,this.boho=new st,this.TLS=!1,this.encMode=ht.AUTO,this.useAuth=!1,this.nick="",this.channels=new Set,this.promiseMap=new Map,this.promiseTimeOut=lt,this.mid=0,this.level=0,this.quota=gt[this.level],this.serverSet={},this.linkMap=new Map,this.on("open",this.onOpen.bind(this)),this.on("close",this.onClose.bind(this)),this.on("socket_data",this.onData.bind(this))}redirect(t){this.close(),this.stateChange("redirecting"),this.createConnection(t)}open(t){if(t||this.url){if(t)if(this.url){if(t!==this.url&&(this.url=t,this.socket))return void this.close()}else this.url=t;this.createConnection(this.url),this.connectionCheckerIntervalID||(this.connectionCheckerIntervalID=setInterval(this.keepAlive.bind(this),this.connectionCheckerPeriod))}}onOpen(){this.url.includes("wss://")?this.TLS=!0:this.TLS=!1,this.stateChange("open")}onClose(){this.boho.isAuthorized=!1,this.cid="",this.stateChange("closed")}login(t,e){if(!t&&!e)return void console.log("no id and key.");if(console.log("manual login: ",t),!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0;let r=this.boho.auth_req();this.send(r)}auth(t,e){if(t||e){if(!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0}else console.log("no id and key.")}onData(t){let e,r=t[0];if(r===tt.ENC_488)e=this.boho.decrypt_488(t),e&&(r=e[0],t=e);else if(r===tt.ENC_E2E)try{if(e=this.boho.decrypt_488(t),!e)return;r=e[0],t.set(e,nt.ENC_488),t=t.subarray(nt.ENC_488)}catch(t){return}let n=yt[r];switch(n||(n=tt[r]),r){case yt.OVER_SIZE:console.log("## server sent: over_size event."),this.emit("over_size","over_size");break;case yt.PING:this.pong();break;case yt.PONG:break;case yt.IAM_RES:try{let e=mt.decode(t.subarray(1)),r=JSON.parse(e);r.ip&&(this.ip=r.ip),console.log("",JSON.stringify(r))}catch(t){}break;case yt.CID_RES:let r=mt.decode(t.subarray(1));this.cid=r,this.stateChange("ready","cid_ready"),this.subscribe_memory_channels();break;case yt.QUOTA_LEVEL:let n=t[1];this.level=n,this.quota=gt[n],console.log("## QUOTA:",n,JSON.stringify(this.quota));break;case yt.SERVER_CLEAR_AUTH:this.useAuth=!1,this.boho.clearAuth(),this.stop();break;case yt.SERVER_REDIRECT:let i,o,s;7==t.byteLength?(i=function(t){if(6!=t.byteLength)return;return t[0].toString()+"."+t[1].toString()+"."+t[2].toString()+"."+t[3].toString()+":"+((t[4]<<8)+t[5]).toString()}(t.subarray(1)),s="cong://"):(i=mt.decode(t.subarray(1)),s=""),o=s+i,this.redirect(o);break;case yt.SERVER_READY:this.stateChange("server_ready","server_ready"),this.useAuth?this.send(this.boho.auth_req()):this.send(y.Buffer.from([yt.CID_REQ]));break;case yt.SERVER_SIGNAL:try{let e=mt.decode(t.subarray(1)),r=JSON.parse(e);r.event&&r.data&&(this.serverSet=r.data,this.emit(r.event,r.data))}catch(t){}break;case yt.SET:try{let e=T(t);e&&this.emit(e.topic,...e.args)}catch(t){}break;case yt.SIGNAL_E2E:case yt.SIGNAL:try{let e=t.readUint8(1),r=t.subarray(2,2+e),n=mt.decode(r),i=t.readUint8(2+e),o=t.subarray(3+e);switch(i){case pt.EMPTY:0===n.indexOf("@")?this.emit("@",null,n):this.emit(n,null,n);break;case pt.TEXT:let t=o.subarray(0,o.byteLength-1),e=mt.decode(t);0===n.indexOf("@")&&this.emit("@",e,n),"@"!==n&&this.emit(n,e,n);break;case pt.BINARY:0===n.indexOf("@")&&this.emit("@",o,n),"@"!==n&&this.emit(n,o,n);break;case pt.OBJECT:let r=mt.decode(o),i=JSON.parse(r);0===n.indexOf("@")&&this.emit("@",i,n),"@"!==n&&this.emit(n,i,n);break;case pt.MJSON:let s=mt.decode(o),f=JSON.parse(s);0===n.indexOf("@")&&this.emit("@",...f,n),"@"!==n&&this.emit(n,...f,n);break;case pt.MBA:let h=T(o);0===n.indexOf("@")&&this.emit("@",...h.args,n),"@"!==n&&this.emit(n,...h.args,n)}}catch(t){}break;case yt.RESPONSE_MBP:this.testPromise(t);break;case tt.AUTH_NONCE:let f=this.boho.auth_hmac(t);f?this.send(f):this.stateChange("auth_fail","Invalid local auth_hmac.");break;case tt.AUTH_FAIL:this.stateChange("auth_fail","server reject auth.");break;case tt.AUTH_ACK:this.boho.check_auth_ack_hmac(t)?(this.stateChange("auth_ready","server sent auth_ack"),this.send(y.Buffer.from([yt.CID_REQ]))):this.stateChange("auth_fail","invalid server_hmac");break;default:try{e=mt.decode(t),this.emit("text_message",e)}catch(t){}}}iam(t){t?this.send_enc_mode(L(m("#MsgType","8",yt.IAM),m("#",t))):this.send_enc_mode(L(m("#MsgType","8",yt.IAM)))}ping(){this.send(y.Buffer.from([yt.PING]))}pong(){this.send(y.Buffer.from([yt.PONG]))}echo(t){t?(console.log("echo args:",t),this.send_enc_mode(L(m("#MsgType","8",yt.ECHO),m("#msg",t)))):this.send(y.Buffer.from([yt.ECHO]))}bin(...t){this.send(N(...t))}send(t){if(t.byteLength>this.quota.signalSize)return this.emit("over_size"),console.log("## QUOTA LIMIT OVER!! \nsignal message.byteLength: ",t.byteLength),void console.log("## your maximum signalSize(bytes) is:",this.quota.signalSize);this.socket_send(t)}getEncryptionMode(){return!(this.encMode!==ht.YES&&(this.encMode!==ht.AUTO||this.TLS||!this.boho.isAuthorized))}send_enc_mode(t,e){if(void 0===e&&(e=this.getEncryptionMode()),t[0]==yt.SIGNAL_E2E&&e){let e=t[1],r=this.boho.encrypt_488(t.subarray(0,3+e));r[0]=tt.ENC_E2E,this.send(y.Buffer.concat([r,t.subarray(3+e)]))}else if(e){let e=this.boho.encrypt_488(t);this.send(e)}else this.send(t)}setMsgPromise(t){return new Promise(((e,r)=>{this.promiseMap.set(t,[e,r]),setTimeout((e=>{this.promiseMap.has(t)&&(r("timeout"),this.promiseMap.delete(t))}),this.promiseTimeOut)}))}testPromise(t){let e=T(t);if(e)if(this.promiseMap.has(e.mid)){let[t,r]=this.promiseMap.get(e.mid);this.promiseMap.delete(e.mid),e.status<128?(e.ok=!0,t(e)):(e.ok=!1,r(e))}else console.log("no promise id")}publish(...t){this.signal(...t)}signal(t,...e){if("string"!=typeof t)throw TypeError("tag should be string.");let r=bt(t,...e);this.send_enc_mode(r)}decrypt_e2e(t,e){return this.boho.decrypt_e2e(t,e)}signal_e2e(t,e,r){if("string"!=typeof t)throw TypeError("tag should be string.");let n=Et.encode(t),i=U(e),o=this.boho.encrypt_e2e(i,r),s=L(m("#MsgType","8",yt.SIGNAL_E2E),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",pt.BINARY),m("#payload",o));this.send_enc_mode(s)}set(t,...e){return t&&0!=e.length?this.req("store","set",t,...e):Promise.reject(new Error("set need storeName and value)"))}async get(t){if(!t)return Promise.reject(new Error("store get need storeName)"));let e=await this.req("store","get",t),{$:r}=T(e.body);return r}req(t,e,...r){if(!t||!e)return Promise.reject(new Error("request need target and topic)"));let n;return n=r.length>0?L(m("#MsgType","8",yt.REQUEST),m("mid","16",++this.mid),m("target",t),m("topic",e),w(...r)):L(m("#MsgType","8",yt.REQUEST),m("mid","16",++this.mid),m("target",t),m("topic",e)),this.send_enc_mode(n),this.setMsgPromise(this.mid)}subscribe(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return;t.split(",").forEach((t=>{this.channels.add(t)}));let e=Et.encode(t);if(e.byteLength>ut)throw TypeError("please use tag string bytelength below:"+ut);this.send_enc_mode(y.Buffer.concat([b("8",yt.SUBSCRIBE),b("8",e.byteLength),e]))}subscribe_promise(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return Promise.reject("subscribe_promise:: connection is not ready");let e=Et.encode(t);if(e.byteLength>at)throw TypeError("please use tag string bytelength: "+at);return this.send_enc_mode(y.Buffer.concat([b("8",yt.SUBSCRIBE_REQ),b("16",++this.mid),b("16",e.byteLength),e])),this.setMsgPromise(this.mid)}subscribe_memory_channels(){if(0==this.channels.size)return;let t=Array.from(this.channels).join(",");this.subscribe_promise(t).then((t=>{})).catch((t=>{console.log(">> SUBSCRIBE FAIL:",t)}))}unsubscribe(t=""){if("string"!=typeof t)throw TypeError("tag should be string.");if(""==t)this.channels.clear();else{t.split(",").forEach((t=>{this.channels.delete(t)}))}let e=Et.encode(t);if(e.byteLength>ut)throw TypeError("please use tag string bytelength below:"+ut);this.send_enc_mode(y.Buffer.concat([b("8",yt.UNSUBSCRIBE),b("8",e.byteLength),e]))}listen(t,e){if("string"!=typeof t)throw TypeError("tag should be string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof e)throw TypeError("handler is not a function.");0!==t.indexOf("@")&&this.channels.add(t),this.on(t,e)}link(t,e,r){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof r)throw TypeError("handler is not a function.");let n;0!==e.indexOf("@")&&this.channels.add(e),n=this.linkMap.has(t)?this.linkMap.get(t):new Set,n.add(e),this.linkMap.set(t,n),this.on(e,r),this.subscribe(e)}unlink(t,e){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if(!this.linkMap.has(t))return;let r=this.linkMap.get(t),n=Array.from(r);for(let i=0;i{this.socket.onmessage=this.onWebSocketMessage.bind(this),this.emit("open")},this.socket.onerror=t=>{this.emit("error",t)},this.socket.onclose=()=>{this.emit("close")}}onWebSocketMessage(t){let e;this.rxCounter++,this.lastTxRxTime=Date.now(),e=y.Buffer.from(t.data),this.rxBytes+=e.byteLength,this.emit("socket_data",e)}socket_send(t){1===this.socket?.readyState?(this.socket.send(t),this.txCounter++,this.txBytes+=t.byteLength,this.lastTxRxTime=Date.now()):console.log(".")}}return st.RAND=ot,st.BohoMsg=tt,st.Meta=et,st.MetaSize=nt,st.sha256=X,wt.Boho=st,wt.MBP=G,wt.Buffer=y.Buffer,wt}(); +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */const g=new TextEncoder,d=new TextDecoder,b=E;function E(t,e=0){let r;if(void 0===t||"string"!=typeof t||"number"!=typeof e)throw TypeError("invlaid init variablie type name. ");return(t=t.toUpperCase()).includes("8")?(r=y.Buffer.alloc(1),t.includes("I")?r.writeInt8(e):r.writeUint8(e)):t.includes("16")?(r=y.Buffer.alloc(2),t.includes("I")?t.includes("L")?r.writeInt16LE(e):r.writeInt16BE(e):t.includes("L")?r.writeUint16LE(e):r.writeUint16BE(e)):t.includes("32")?(r=y.Buffer.alloc(4),t.includes("I")?t.includes("L")?r.writeInt32LE(e):r.writeInt32BE(e):t.includes("L")?r.writeUint32LE(e):r.writeUint32BE(e)):t.includes("F")?(r=y.Buffer.alloc(4),t.includes("L")?r.writeFloatLE(e):r.writeFloatBE(e)):t.includes("N")?r=y.Buffer.from(String(e)):console.log(`invalid type: ${t} or initvalue: ${e}`),r}const m=_;function _(t,e,r){let n,i="B";if("number"==typeof e)"number"==typeof r?(n=y.Buffer.alloc(e),0!==r&&n.fill(r),i="B"):(n=y.Buffer.from(String(e)),i="N");else if("string"==typeof e&&"number"==typeof r)i=e.toUpperCase(),n=E(e,r);else if("string"==typeof e&&void 0===r)n=y.Buffer.from(e),i="S";else if(e instanceof Uint8Array&&void 0===r)n=e instanceof y.Buffer?e:y.Buffer.from(e);else if(e instanceof ArrayBuffer&&void 0===r)n=y.Buffer.from(e);else if(ArrayBuffer.isView(e))n=y.Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if("object"==typeof e&&void 0===r)n=y.Buffer.from(JSON.stringify(e)),i="O";else{if("boolean"!=typeof e||void 0!==r)throw TypeError("invalid meta buffer type");{const t=e?1:0;n=y.Buffer.from([t]),i="!"}}return"string"==typeof t&&t.includes("#")&&(t=""),[t,i,n]}const w=A;function A(...t){let e=0;return t.map((t=>{const r=e++;return"number"==typeof t?m(r,"N",t):m(r,t)}))}function B(t){if((t=t.toUpperCase()).includes("8"))return t.includes("I")?"int8":"uint8";if(t.includes("16"))return t.includes("I")?t.includes("L")?"int16_le":"int16_be":t.includes("L")?"uint16_le":"uint16_be";if(t.includes("32"))return t.includes("I")?t.includes("L")?"int32_le":"int32_be":t.includes("L")?"uint32_le":"uint32_be";if(t.includes("F"))return t.includes("L")?"float_le":"float_be";if("B"===t)return"buffer";if("S"===t)return"string";if("N"===t)return"number";if("O"===t)return"object";if("!"===t)return"boolean";throw TypeError("invalid data type")}function S(t,e,r,n){try{const i=B(t);if("int8"==i)return e.readInt8(r);if("uint8"===i)return e.readUint8(r);if("int16_le"===i)return e.readInt16LE(r);if("int16_be"===i)return e.readInt16BE(r);if("uint16_le"===i)return e.readUint16LE(r);if("uint16_be"===i)return e.readUint16BE(r);if("int32_le"===i)return e.readInt32LE(r);if("int32_be"===i)return e.readInt32BE(r);if("uint32_le"===i)return e.readUint32LE(r);if("uint32_be"===i)return e.readUint32BE(r);if("float_le"===i)return e.readFloatLE(r);if("float_be"===i)return e.readFloatBE(r);if("buffer"===i)return e.subarray(r,r+n);if("string"===i){const t=e.subarray(r,r+n);return d.decode(t)}if("number"===i){const t=e.subarray(r,r+n);return Number(d.decode(t))}if("object"===i){const t=e.subarray(r,r+n);return JSON.parse(d.decode(t))}if("boolean"===i){return 1===e.readInt8(r)}return}catch(t){}}function L(...t){const e=function(t){let e=[];return t.filter((t=>{if(!Array.isArray(t[0]))return t;e=e.concat(t)})).concat(e)}(t);let r=0;const n=[];let i,o,s=0;if(e.forEach((t=>{const[e,i,o]=t;r+=o.byteLength,("number"==typeof e||e.length>0)&&n.push([e,i,s,o.byteLength]),s=r})),n.length>0){let t=JSON.stringify(n);i=g.encode(t),o=i.byteLength,r=r+o+2}const f=y.Buffer.alloc(r);if(s=0,e.forEach((t=>{const e=t[2];f.set(e,s),s+=e.byteLength})),n.length>0){f.set(i,s);const t=b("16",o);return f.set(t,s+o),f}return f}function T(t,e){const r=e||j(t);if(!r)return;const n=y.Buffer.from(t),i={};let o=0;if(r.forEach((t=>{const[e,r,s,f]=t;let h=S(r,n,s,f);null!=h&&(i[e]=h,f&&(o+=f))})),e&&n.byteLength!==o){let t=n.byteLength-o,e=S("b",n,o,t);if(null==e)return;i.$OTHERS=e}let s=0,f=[];for(;i[s];)f.push(i[s++]);return f.length>0&&(i.args=f,i.$=i.args),i}const v=I;function I(t,e=!1){if(void 0===t)throw TypeError("Invalid data type: Undefined");if("string"==typeof t)return g.encode(t);if("number"==typeof t)return Uint8Array.from([t]);if(t instanceof ArrayBuffer){if(e)return new Uint8Array(t);{const e=new Uint8Array(t),r=new Uint8Array(t.byteLength);return r.set(e),r}}if(ArrayBuffer.isView(t)){if(e)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);{const e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new Uint8Array(t.byteLength);return r.set(e),r}}return g.encode(JSON.stringify(t))}const U=C;function C(t,e=!1){const r=I(t,e);return e?y.Buffer.from(r.buffer,r.byteOffset,r.byteLength):y.Buffer.from(r)}const O=R;function R(...t){const e=t.map((t=>C(t)));return y.Buffer.concat(e)}const N=k;function k(...t){try{let e=0,r=0;const n=t.map((t=>I(t)));n.forEach((t=>{e+=t.byteLength}));const i=new Uint8Array(e);return n.forEach((t=>{i.set(t,r),r+=t.byteLength})),i}catch(t){console.log(t)}}function M(t,e){if(t.byteLength!==e.byteLength)return!1;for(let r=0;re)return 0;return P(t,r)?r:0}return 0}function $(t){const e=x(t);return t.subarray(0,e)}function j(t,e=!1){t instanceof ArrayBuffer&&(t=y.Buffer.from(t));const r=D(t);if(0===r)return;let n=P(t,r);return n?e?(n.forEach((t=>{null==t[3]&&(t[1].includes("8")?t[3]=1:t[1].includes("16")?t[3]=2:t[1].includes("32")||t[1].includes("F")?t[3]=4:t[1].includes("!")&&(t[3]=1)),t[4]=B(t[1])})),n):n:void 0}function F(...t){return $(L(...t))}function V(...t){return j(L(...t))}var G=Object.freeze({__proto__:null,Buffer:y.Buffer,NB:b,numberBuffer:E,MB:m,metaBuffer:_,MBA:w,metaBufferArguments:A,parseTypeName:B,readTypedBuffer:S,pack:L,unpack:T,U8:v,parseUint8Array:I,B8:U,parseBuffer:C,B8pack:O,parseBufferThenConcat:R,U8pack:N,parseUint8ThenConcat:k,hex:function(t){return Array.prototype.map.call(new Uint8Array(t),(t=>("00"+t.toString(16)).slice(-2))).join("")},equal:M,getBufferSize:x,parseMetaInfo:P,TAIL_LEN:H,readTail:D,getMetaSize:z,getBuffer:$,getMeta:j,rawPack:F,meta:V,metaDetail:function(...t){return j(L(...t),!0)},getMetaDetail:function(t){return j(t,!0)}}),Y=t((function(t){var e=Object.prototype.hasOwnProperty,r="~";function n(){}function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function o(t,e,n,o,s){if("function"!=typeof n)throw new TypeError("The listener must be a function");var f=new i(n,o||t,s),h=r?r+e:e;return t._events[h]?t._events[h].fn?t._events[h]=[t._events[h],f]:t._events[h].push(f):(t._events[h]=f,t._eventsCount++),t}function s(t,e){0==--t._eventsCount?t._events=new n:delete t._events[e]}function f(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),f.prototype.eventNames=function(){var t,n,i=[];if(0===this._eventsCount)return i;for(n in t=this._events)e.call(t,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(t)):i},f.prototype.listeners=function(t){var e=r?r+t:t,n=this._events[e];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i=64;){for(o=e[0],s=e[1],f=e[2],h=e[3],u=e[4],a=e[5],c=e[6],l=e[7],y=0;y<16;y++)g=n+4*y,t[y]=(255&r[g])<<24|(255&r[g+1])<<16|(255&r[g+2])<<8|255&r[g+3];for(y=16;y<64;y++)p=t[y-2],d=(p>>>17|p<<15)^(p>>>19|p<<13)^p>>>10,p=t[y-15],b=(p>>>7|p<<25)^(p>>>18|p<<14)^p>>>3,t[y]=(d+t[y-7]|0)+(b+t[y-16]|0);for(y=0;y<64;y++)d=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&a^~u&c)|0)+(l+(J[y]+t[y]|0)|0)|0,b=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&s^o&f^s&f)|0,l=c,c=a,a=u,u=h+d|0,h=f,f=s,s=o,o=d+b|0;e[0]+=o,e[1]+=s,e[2]+=f,e[3]+=h,e[4]+=u,e[5]+=a,e[6]+=c,e[7]+=l,n+=64,i-=64}return n}const q=function(){function t(){this.digestLength=32,this.blockSize=64,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var t=0;t0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[r++],e--;64===this.bufferLength&&(Q(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(r=Q(this.temp,this.state,t,r,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[r++],e--;return this},t.prototype.finish=function(t){if(!this.finished){const t=this.bytesHashed,r=this.bufferLength,n=t/536870912|0,i=t<<3,o=t%64<56?64:128;this.buffer[r]=128;for(var e=r+1;e>>24&255,this.buffer[o-7]=n>>>16&255,this.buffer[o-6]=n>>>8&255,this.buffer[o-5]=n>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,Q(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(e=0;e<8;e++)t[4*e+0]=this.state[e]>>>24&255,t[4*e+1]=this.state[e]>>>16&255,t[4*e+2]=this.state[e]>>>8&255,t[4*e+3]=this.state[e]>>>0&255;return this},t.prototype.digest=function(){const t=new Uint8Array(this.digestLength);return this.finish(t),t},t.prototype._saveState=function(t){for(let e=0;ethis.blockSize)(new q).update(t).finish(e).clean();else for(var r=0;r0;){s=n<32?n:32;let e=this.getIndexOTP(++i);for(let r=0;r{(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)&&(n=!0)})),n?e=pt.MBA:(e=pt.MJSON,r=dt.encode(JSON.stringify(t)))}return{type:e,buffer:r}}(e);if(i.type==pt.EMPTY)r=L(m("#MsgType","8",yt.SIGNAL),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",i.type));else if(i.type==pt.MBA){let t=L(w(...e));r=L(m("#MsgType","8",yt.SIGNAL),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",i.type),m("#mbaBuffer",t))}else r=L(m("#MsgType","8",yt.SIGNAL),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",i.type),m("#payload",i.buffer));return r}const Et=new TextEncoder,mt=new TextDecoder;class _t extends Y{constructor(t){super(),this.cid="",this.ip="",this.socket=null,this.url=t,this.state=ft.CLOSED,this.stateName=this.getStateName(),this.txCounter=0,this.rxCounter=0,this.txBytes=0,this.rxBytes=0,this.lastTxRxTime=Date.now(),this.connectionCheckerPeriod=ct,this.connectionCheckerIntervalID=null,this.boho=new st,this.TLS=!1,this.encMode=ht.AUTO,this.useAuth=!1,this.nick="",this.channels=new Set,this.promiseMap=new Map,this.promiseTimeOut=lt,this.mid=0,this.level=3,this.quota=gt[this.level],this.serverSet={},this.linkMap=new Map,this.on("open",this.onOpen.bind(this)),this.on("close",this.onClose.bind(this)),this.on("socket_data",this.onData.bind(this))}redirect(t){this.close(),this.stateChange("redirecting"),this.createConnection(t)}open(t){if(t||this.url){if(t)if(this.url){if(t!==this.url&&(this.url=t,this.socket))return void this.close()}else this.url=t;this.createConnection(this.url),this.connectionCheckerIntervalID||(this.connectionCheckerIntervalID=setInterval(this.keepAlive.bind(this),this.connectionCheckerPeriod))}}onOpen(){this.url.includes("wss://")?this.TLS=!0:this.TLS=!1,this.stateChange("open")}onClose(){this.boho.isAuthorized=!1,this.cid="",this.stateChange("closed")}login(t,e){if(!t&&!e)return void console.log("no id and key.");if(console.log("manual login: ",t),!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0;let r=this.boho.auth_req();this.send(r)}auth(t,e){if(t||e){if(!e&&t.includes("."))this.boho.set_id_key(t);else{if(!t||!e)return void console.log("no id or key.");this.boho.set_id8(t),this.boho.set_key(e)}this.useAuth=!0}else console.log("no id and key.")}onData(t){let e,r=t[0];if(r===tt.ENC_488)e=this.boho.decrypt_488(t),e&&(r=e[0],t=e);else if(r===tt.ENC_E2E)try{if(e=this.boho.decrypt_488(t),!e)return;r=e[0],t.set(e,nt.ENC_488),t=t.subarray(nt.ENC_488)}catch(t){return}let n=yt[r];switch(n||(n=tt[r]),r){case yt.OVER_SIZE:console.log("## server sent: over_size event."),this.emit("over_size","over_size");break;case yt.PING:this.pong();break;case yt.PONG:break;case yt.IAM_RES:try{let e=mt.decode(t.subarray(1)),r=JSON.parse(e);r.ip&&(this.ip=r.ip),console.log("",JSON.stringify(r))}catch(t){}break;case yt.CID_RES:let r=mt.decode(t.subarray(1));this.cid=r,this.stateChange("ready","cid_ready"),this.subscribe_memory_channels();break;case yt.QUOTA_LEVEL:let n=t[1];this.level=n,this.quota=gt[n],console.log("## QUOTA:",n,JSON.stringify(this.quota));break;case yt.SERVER_CLEAR_AUTH:this.useAuth=!1,this.boho.clearAuth(),this.stop();break;case yt.SERVER_REDIRECT:let i,o,s;7==t.byteLength?(i=function(t){if(6!=t.byteLength)return;return t[0].toString()+"."+t[1].toString()+"."+t[2].toString()+"."+t[3].toString()+":"+((t[4]<<8)+t[5]).toString()}(t.subarray(1)),s="cong://"):(i=mt.decode(t.subarray(1)),s=""),o=s+i,this.redirect(o);break;case yt.SERVER_READY:this.stateChange("server_ready","server_ready"),this.useAuth?this.send(this.boho.auth_req()):this.send(y.Buffer.from([yt.CID_REQ]));break;case yt.SERVER_SIGNAL:try{let e=mt.decode(t.subarray(1)),r=JSON.parse(e);r.event&&r.data&&(this.serverSet=r.data,this.emit(r.event,r.data))}catch(t){}break;case yt.SET:try{let e=T(t);e&&this.emit(e.topic,...e.args)}catch(t){}break;case yt.SIGNAL_E2E:case yt.SIGNAL:try{let e=t.readUint8(1),r=t.subarray(2,2+e),n=mt.decode(r),i=t.readUint8(2+e),o=t.subarray(3+e);switch(i){case pt.EMPTY:0===n.indexOf("@")?this.emit("@",null,n):this.emit(n,null,n);break;case pt.TEXT:let t=o.subarray(0,o.byteLength-1),e=mt.decode(t);0===n.indexOf("@")&&this.emit("@",e,n),"@"!==n&&this.emit(n,e,n);break;case pt.BINARY:0===n.indexOf("@")&&this.emit("@",o,n),"@"!==n&&this.emit(n,o,n);break;case pt.OBJECT:let r=mt.decode(o),i=JSON.parse(r);0===n.indexOf("@")&&this.emit("@",i,n),"@"!==n&&this.emit(n,i,n);break;case pt.MJSON:let s=mt.decode(o),f=JSON.parse(s);0===n.indexOf("@")&&this.emit("@",...f,n),"@"!==n&&this.emit(n,...f,n);break;case pt.MBA:let h=T(o);0===n.indexOf("@")&&this.emit("@",...h.args,n),"@"!==n&&this.emit(n,...h.args,n)}}catch(t){}break;case yt.RESPONSE_MBP:this.testPromise(t);break;case tt.AUTH_NONCE:let f=this.boho.auth_hmac(t);f?this.send(f):this.stateChange("auth_fail","Invalid local auth_hmac.");break;case tt.AUTH_FAIL:this.stateChange("auth_fail","server reject auth.");break;case tt.AUTH_ACK:this.boho.check_auth_ack_hmac(t)?(this.stateChange("auth_ready","server sent auth_ack"),this.send(y.Buffer.from([yt.CID_REQ]))):this.stateChange("auth_fail","invalid server_hmac");break;default:try{e=mt.decode(t),this.emit("text_message",e)}catch(t){}}}iam(t){t?this.send_enc_mode(L(m("#MsgType","8",yt.IAM),m("#",t))):this.send_enc_mode(L(m("#MsgType","8",yt.IAM)))}ping(){this.send(y.Buffer.from([yt.PING]))}pong(){this.send(y.Buffer.from([yt.PONG]))}echo(t){t?(console.log("echo args:",t),this.send_enc_mode(L(m("#MsgType","8",yt.ECHO),m("#msg",t)))):this.send(y.Buffer.from([yt.ECHO]))}bin(...t){this.send(N(...t))}send(t){if(t.byteLength>this.quota.signalSize)return this.emit("over_size"),console.log("## QUOTA LIMIT OVER!! \nsignal message.byteLength: ",t.byteLength),void console.log("## your maximum signalSize(bytes) is:",this.quota.signalSize);this.socket_send(t)}getEncryptionMode(){return!(this.encMode!==ht.YES&&(this.encMode!==ht.AUTO||this.TLS||!this.boho.isAuthorized))}send_enc_mode(t,e){if(void 0===e&&(e=this.getEncryptionMode()),t[0]==yt.SIGNAL_E2E&&e){let e=t[1],r=this.boho.encrypt_488(t.subarray(0,3+e));r[0]=tt.ENC_E2E,this.send(y.Buffer.concat([r,t.subarray(3+e)]))}else if(e){let e=this.boho.encrypt_488(t);this.send(e)}else this.send(t)}setMsgPromise(t){return new Promise(((e,r)=>{this.promiseMap.set(t,[e,r]),setTimeout((e=>{this.promiseMap.has(t)&&(r("timeout"),this.promiseMap.delete(t))}),this.promiseTimeOut)}))}testPromise(t){let e=T(t);if(e)if(this.promiseMap.has(e.mid)){let[t,r]=this.promiseMap.get(e.mid);this.promiseMap.delete(e.mid),e.status<128?(e.ok=!0,t(e)):(e.ok=!1,r(e))}else console.log("no promise id")}publish(...t){this.signal(...t)}signal(t,...e){if("string"!=typeof t)throw TypeError("tag should be string.");let r=bt(t,...e);this.send_enc_mode(r)}decrypt_e2e(t,e){return this.boho.decrypt_e2e(t,e)}signal_e2e(t,e,r){if("string"!=typeof t)throw TypeError("tag should be string.");let n=Et.encode(t),i=U(e),o=this.boho.encrypt_e2e(i,r),s=L(m("#MsgType","8",yt.SIGNAL_E2E),m("#tagLen","8",n.byteLength),m("#tag",n),m("#payloadType","8",pt.BINARY),m("#payload",o));this.send_enc_mode(s)}set(t,...e){return t&&0!=e.length?this.req("store","set",t,...e):Promise.reject(new Error("set need storeName and value)"))}async get(t){if(!t)return Promise.reject(new Error("store get need storeName)"));let e=await this.req("store","get",t),{$:r}=T(e.body);return r}req(t,e,...r){if(!t||!e)return Promise.reject(new Error("request need target and topic)"));let n;return n=r.length>0?L(m("#MsgType","8",yt.REQUEST),m("mid","16",++this.mid),m("target",t),m("topic",e),w(...r)):L(m("#MsgType","8",yt.REQUEST),m("mid","16",++this.mid),m("target",t),m("topic",e)),this.send_enc_mode(n),this.setMsgPromise(this.mid)}subscribe(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return;t.split(",").forEach((t=>{this.channels.add(t)}));let e=Et.encode(t);if(e.byteLength>ut)throw TypeError("please use tag string bytelength below:"+ut);this.send_enc_mode(y.Buffer.concat([b("8",yt.SUBSCRIBE),b("8",e.byteLength),e]))}subscribe_promise(t){if("string"!=typeof t)throw TypeError("tag should be string.");if(this.state!==ft.READY)return Promise.reject("subscribe_promise:: connection is not ready");let e=Et.encode(t);if(e.byteLength>at)throw TypeError("please use tag string bytelength: "+at);return this.send_enc_mode(y.Buffer.concat([b("8",yt.SUBSCRIBE_REQ),b("16",++this.mid),b("16",e.byteLength),e])),this.setMsgPromise(this.mid)}subscribe_memory_channels(){if(0==this.channels.size)return;let t=Array.from(this.channels).join(",");this.subscribe_promise(t).then((t=>{})).catch((t=>{console.log(">> SUBSCRIBE FAIL:",t)}))}unsubscribe(t=""){if("string"!=typeof t)throw TypeError("tag should be string.");if(""==t)this.channels.clear();else{t.split(",").forEach((t=>{this.channels.delete(t)}))}let e=Et.encode(t);if(e.byteLength>ut)throw TypeError("please use tag string bytelength below:"+ut);this.send_enc_mode(y.Buffer.concat([b("8",yt.UNSUBSCRIBE),b("8",e.byteLength),e]))}listen(t,e){if("string"!=typeof t)throw TypeError("tag should be string.");if(t.length>255||0==t.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof e)throw TypeError("handler is not a function.");0!==t.indexOf("@")&&this.channels.add(t),this.on(t,e)}link(t,e,r){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if("function"!=typeof r)throw TypeError("handler is not a function.");let n;0!==e.indexOf("@")&&this.channels.add(e),n=this.linkMap.has(t)?this.linkMap.get(t):new Set,n.add(e),this.linkMap.set(t,n),this.on(e,r),this.subscribe(e)}unlink(t,e){if("string"!=typeof t)throw TypeError("to(local link target) is not a string.");if("string"!=typeof e)throw TypeError("tag is not a string.");if(e.length>255||0==e.length)throw TypeError("tag string length range: 1~255");if(!this.linkMap.has(t))return;let r=this.linkMap.get(t),n=Array.from(r);for(let i=0;i{this.socket.onmessage=this.onWebSocketMessage.bind(this),this.emit("open")},this.socket.onerror=t=>{this.emit("error",t)},this.socket.onclose=()=>{this.emit("close")}}onWebSocketMessage(t){let e;this.rxCounter++,this.lastTxRxTime=Date.now(),e=y.Buffer.from(t.data),this.rxBytes+=e.byteLength,this.emit("socket_data",e)}socket_send(t){1===this.socket?.readyState?(this.socket.send(t),this.txCounter++,this.txBytes+=t.byteLength,this.lastTxRxTime=Date.now()):console.log(".")}}return st.RAND=ot,st.BohoMsg=tt,st.Meta=et,st.MetaSize=nt,st.sha256=X,wt.Boho=st,wt.MBP=G,wt.Buffer=y.Buffer,wt}(); //# sourceMappingURL=iosignal.min.js.map diff --git a/dist/iosignal.min.js.map b/dist/iosignal.min.js.map index 205c377..b9b792d 100644 --- a/dist/iosignal.min.js.map +++ b/dist/iosignal.min.js.map @@ -1 +1 @@ -{"version":3,"file":"iosignal.min.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/meta-buffer-pack/src/meta-buffer-pack.js","../node_modules/eventemitter3/index.js","../node_modules/boho/lib/fast-sha256.js","../node_modules/boho/src/sha256-mbp.js","../node_modules/boho/src/constants.js","../node_modules/boho/src/boho.js","../src/common/constants.js","../src/common/quotaTable.js","../src/common/payload.js","../src/client/IOCore.js","../src/client/IOWebSocket.js","../indexWebBrowser.js"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer/index.js'\nexport { Buffer } // for iife reference MBP.Buffer\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nexport const NB = numberBuffer\nexport function numberBuffer(type, initValue = 0) {\n let buffer\n if (type === undefined || typeof type !== 'string' || typeof initValue !== 'number') {\n throw TypeError('invlaid init variablie type name. ')\n }\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n buffer = Buffer.alloc(1)\n if (type.includes('I')) buffer.writeInt8(initValue)\n else buffer.writeUint8(initValue)\n } else if (type.includes('16')) {\n buffer = Buffer.alloc(2)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt16LE(initValue)\n else buffer.writeInt16BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint16LE(initValue)\n else buffer.writeUint16BE(initValue)\n }\n } else if (type.includes('32')) {\n buffer = Buffer.alloc(4)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt32LE(initValue)\n else buffer.writeInt32BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint32LE(initValue)\n else buffer.writeUint32BE(initValue)\n }\n } else if (type.includes('F')) {\n buffer = Buffer.alloc(4)\n if (type.includes('L')) {\n buffer.writeFloatLE(initValue)\n } else {\n buffer.writeFloatBE(initValue)\n }\n } else if (type.includes('N')) { // number as string\n buffer = Buffer.from(String(initValue))\n } else {\n console.log(`invalid type: ${type} or initvalue: ${initValue}`)\n }\n return buffer\n}\n\n\nexport const MB = metaBuffer\nexport function metaBuffer(name, typeOrData, initValue) {\n let buffer\n let bufferType = 'B'\n if (typeof typeOrData === 'number') {\n if (typeof initValue === 'number') { // initValue 0 should be passed.\n buffer = Buffer.alloc(typeOrData)\n if (initValue !== 0) buffer.fill(initValue)\n bufferType = 'B'\n } else {\n buffer = Buffer.from(String(typeOrData))\n bufferType = 'N'\n }\n } else if (typeof typeOrData === 'string' && typeof initValue === 'number') { // number with type.\n bufferType = typeOrData.toUpperCase() // use explicit type name\n buffer = numberBuffer(typeOrData, initValue) // notice. two categories. n: number string. 8, 16, 32: typed number.\n } else if (typeof typeOrData === 'string' && initValue === undefined) { // string buffer\n buffer = Buffer.from(typeOrData)\n bufferType = 'S'\n } else if (typeOrData instanceof Uint8Array && initValue === undefined) { // buffer | Uint8Array\n // Buffer.from: Copies the passed buffer data onto a new Buffer instance.\n // typecasting Uint8Array to Buffer.\n buffer = (typeOrData instanceof Buffer) ? typeOrData : Buffer.from(typeOrData)\n } else if (typeOrData instanceof ArrayBuffer && initValue === undefined) { // arrayBuffer\n // Notice. typedArray is recommended instead of arrayBuffer\n buffer = Buffer.from(typeOrData)\n } else if (ArrayBuffer.isView(typeOrData)) { // typedarray buffer\n buffer = Buffer.from(typeOrData.buffer, typeOrData.byteOffset, typeOrData.byteLength)\n } else if (typeof typeOrData === 'object' && initValue === undefined) { // object. like array. stringify\n buffer = Buffer.from(JSON.stringify(typeOrData))\n bufferType = 'O'\n } else if (typeof typeOrData === 'boolean' && initValue === undefined) { // object. like array. stringify\n const v = typeOrData ? 1 : 0\n buffer = Buffer.from([v])\n bufferType = '!'\n } else {\n throw TypeError('invalid meta buffer type')\n }\n\n if (typeof name === 'string' && name.includes('#')) name = '' //\n\n return [name, bufferType, buffer]\n}\n\nexport const MBA = metaBufferArguments\nexport function metaBufferArguments(...args) {\n let i = 0\n const mba = args.map(\n data => {\n const argsIndex = i++\n // tip. MBA use index number as metabuffer's property name.\n if (typeof data === 'number') {\n // * JS's primitive Number stored as string.\n return MB(argsIndex, 'N', data)\n } else {\n // typedarray, dataview, array, object, boolean\n return MB(argsIndex, data)\n }\n })\n\n return mba\n}\n\nexport function parseTypeName(type) {\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n if (type.includes('I')) {\n return 'int8'\n } else {\n return 'uint8'\n }\n } else if (type.includes('16')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int16_le'\n } else {\n return 'int16_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint16_le'\n } else {\n return 'uint16_be'\n }\n }\n } else if (type.includes('32')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int32_le'\n } else {\n return 'int32_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint32_le'\n } else {\n return 'uint32_be'\n }\n }\n } else if (type.includes('F')) {\n if (type.includes('L')) {\n return 'float_le'\n } else {\n return 'float_be'\n }\n } else if (type === 'B') {\n return 'buffer'\n } else if (type === 'S') { // string or arguments\n return 'string'\n } else if (type === 'N') { // number encoded as string\n return 'number'\n } else if (type === 'O') { // object encoded string\n return 'object'\n } else if (type === '!') { // boolean 1:true 0:false\n return 'boolean'\n } else {\n throw TypeError('invalid data type')\n }\n\n}\n\nexport function readTypedBuffer(simpleType, buffer, offset, length) {\n try {\n const type = parseTypeName(simpleType)\n if (type == 'int8') return buffer.readInt8(offset)\n else if (type === 'uint8') return buffer.readUint8(offset)\n else if (type === 'int16_le') return buffer.readInt16LE(offset)\n else if (type === 'int16_be') return buffer.readInt16BE(offset)\n else if (type === 'uint16_le') return buffer.readUint16LE(offset)\n else if (type === 'uint16_be') return buffer.readUint16BE(offset)\n else if (type === 'int32_le') return buffer.readInt32LE(offset)\n else if (type === 'int32_be') return buffer.readInt32BE(offset)\n else if (type === 'uint32_le') return buffer.readUint32LE(offset)\n else if (type === 'uint32_be') return buffer.readUint32BE(offset)\n else if (type === 'float_le') return buffer.readFloatLE(offset)\n else if (type === 'float_be') return buffer.readFloatBE(offset)\n\n else if (type === 'buffer') {\n return buffer.subarray(offset, offset + length)\n } else if (type === 'string') {\n const strBuffer = buffer.subarray(offset, offset + length)\n return decoder.decode(strBuffer)\n } else if (type === 'number') {\n const strNumber = buffer.subarray(offset, offset + length)\n return Number(decoder.decode(strNumber))\n } else if (type === 'object') {\n const objEncoded = buffer.subarray(offset, offset + length)\n return JSON.parse(decoder.decode(objEncoded))\n } else if (type === 'boolean') {\n const v = buffer.readInt8(offset)\n return v === 1\n } else {\n return\n }\n } catch (error) {\n // console.log('MBP:readTypedBuffer obj decoding error.', error)\n }\n // any error and invalid data return undefined \n return\n}\n\n// to join MBA or MB meta list.\nfunction flatArray(args) {\n let subArr = []\n const mainArr = args.filter(item => {\n if (Array.isArray(item[0])) subArr = subArr.concat(item)\n else return item\n })\n return mainArr.concat(subArr)\n}\n\nexport function pack(...args) {\n const bufArr = flatArray(args)\n // console.log('MBP.pack: flat MB or MBA list', bufArr)\n let size = 0\n const info = []\n let offset = 0\n\n bufArr.forEach(bufPack => {\n const [name, type, data] = bufPack\n size += data.byteLength\n\n if (typeof name === 'number' || name.length > 0) {\n // if the item has property name then add meta JSON info.\n // type of name is Number in MBA.(index number)\n // type of name is String in MB. except null string.\n // add additional informative meta info. \n info.push([name, type, offset, data.byteLength])\n }\n offset = size\n })\n\n\n // console.log('MBP.pack meta:', info )\n let infoEncoded\n let infoSize\n\n if (info.length > 0) {\n let infoStr = JSON.stringify(info)\n // console.log('pack infoStr , size:', infoStr , infoStr.length )\n infoEncoded = encoder.encode(infoStr)\n infoSize = infoEncoded.byteLength\n size = size + infoSize + 2\n }\n\n const buffer = Buffer.alloc(size)\n offset = 0\n bufArr.forEach(bufPack => {\n const buf = bufPack[2]\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n\n if (info.length > 0) {\n buffer.set(infoEncoded, offset)\n const infoSizeBuff = NB('16', infoSize)\n buffer.set(infoSizeBuff, offset + infoSize)\n return buffer\n } else {\n return buffer\n }\n}\n\n\n/**\n * unpack() will use embeded meta info from the binary pack. \n * You can specify (optional) meta obejct. \n * (It's useful to read pure buffer data.)\n * \n * You can get the meta object from: getFrame(pack) , meta()\n * @param {Buffer|Uint8Array} binPack binaryData\n * @param {Object} meta *OPTION* \n * @returns {Object|undefined} success: return Object (include buffer data). fail: return undefined\n */\nexport function unpack(binPack, meta) {\n\n const infoArr = meta || getMeta(binPack)\n if (!infoArr) return\n\n const buffer = Buffer.from(binPack)\n const binObj = {}\n let readCounter = 0\n infoArr.forEach(bufPack => {\n const [name, type, offset, length] = bufPack\n let result = readTypedBuffer(type, buffer, offset, length)\n if (result == undefined) return\n binObj[name] = result\n if (length) readCounter += length\n })\n\n // Can not define meta for variable size buffer \n // unpacker support automatic property to read left(did't read) buffers.\n // console.log(\"######, unpack: buffer \" , readCounter, buffer ,buffer.byteLength)\n if (meta && buffer.byteLength !== readCounter) {\n let leftSize = buffer.byteLength - readCounter\n // console.log('total,left buffer size', buffer.byteLength, leftSize )\n let result = readTypedBuffer('b', buffer, readCounter, leftSize)\n if (result == undefined) return\n binObj[\"$OTHERS\"] = result\n }\n\n // set args with values if exist.\n let mbaIndex = 0;\n let args = [];\n while (binObj[mbaIndex]) {\n args.push(binObj[mbaIndex++])\n }\n\n if (args.length > 0) {\n binObj.args = args\n binObj.$ = binObj.args\n }\n return binObj\n}\n\n\nexport const U8 = parseUint8Array //alias\n/**\n * \n * @param {any} data \n * @param {Boolean} shareArrayBuffer false(default): return new( or copied) ArrayBuffer. true: share the input data's arrayBuffer.\n * @returns {Uint8Array}\n */\nexport function parseUint8Array(data, shareArrayBuffer = false) {\n if (data === undefined) throw TypeError('Invalid data type: Undefined')\n if (typeof data === 'string') {\n return encoder.encode(data)\n } else if (typeof data === 'number') { // number -> 1 byte uint8array(number)\n return Uint8Array.from([data])\n } else if (data instanceof ArrayBuffer) { // arraybuffer -> wrap uint8array(ab)\n if (shareArrayBuffer) {\n return new Uint8Array(data)\n } else {\n const originData = new Uint8Array(data)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else if (ArrayBuffer.isView(data)) { // accept Buffer too.\n if (shareArrayBuffer) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength) // DataView, TypedArray > uint8array( use offset, length )\n } else {\n // new memory to protect origin arraybuffer.\n const originData = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else { // array, object\n return encoder.encode(JSON.stringify(data)) // object(array.. ) > JSON.str > encode > unint8array\n }\n}\n\nexport const B8 = parseBuffer\nexport function parseBuffer(data, shareArrayBuffer = false) {\n\n const u8 = parseUint8Array(data, shareArrayBuffer)\n if (shareArrayBuffer) {\n return Buffer.from(u8.buffer, u8.byteOffset, u8.byteLength)\n } else {\n return Buffer.from(u8)\n }\n}\n\nexport const B8pack = parseBufferThenConcat\nexport function parseBufferThenConcat(...dataArray) {\n const buffers = dataArray.map(data => parseBuffer(data))\n return Buffer.concat(buffers)\n}\n\n\nexport const U8pack = parseUint8ThenConcat // alias\n/**\n * 1. parse list of data into U8 list\n * 2. return new Uint8Array merged.\n * @param {...any} dataArray \n * @returns \n */\nexport function parseUint8ThenConcat(...dataArray) {\n try {\n let bufferSize = 0\n let offset = 0\n const buffers = dataArray.map(data => parseUint8Array(data))\n buffers.forEach(buf => { bufferSize += buf.byteLength })\n const buffer = new Uint8Array(bufferSize)\n buffers.forEach(buf => {\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n return buffer\n } catch (error) {\n console.log(error)\n }\n}\n\nexport function hex(buffer) {\n return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('')\n}\n\nexport function equal(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) return false\n for (let i = 0; i < buf1.byteLength; i++) {\n if (buf1[i] !== buf2[i]) return false\n }\n return true\n}\n\n\nexport function getBufferSize(binPack) {\n if (getMetaSize(binPack) === 0) {\n return binPack.byteLength\n } else {\n return binPack.byteLength - getMetaSize(binPack) - TAIL_LEN\n }\n}\n\n// MB and MBA \nexport function parseMetaInfo(binPack, infoSize) {\n let info;\n try {\n const buffer = new Uint8Array(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoFrom = buffer.byteLength - infoSize - 2\n const infoEncoded = buffer.subarray(infoFrom, buffer.byteLength - 2)\n const decoded = decoder.decode(infoEncoded)\n const info = JSON.parse(decoded)\n\n if (!Array.isArray(info) || !Array.isArray(info[0])) return\n\n let firstItem = info[0]\n if (!firstItem) return\n\n if (firstItem.length < 3) return\n const [name, type, offset] = firstItem\n\n if (typeof type !== 'string' || typeof offset !== 'number') return\n\n return info\n } catch (error) {\n // return undefined\n }\n}\n\n\n/** \n * Meta buffer pack Tail:\n * binary Pack include TAIL(two bytes size) info at the end if it has JSON info.\n * not include TAIL if it has not JSON.\n */\nexport const TAIL_LEN = 2\n\n/**\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @returns {Number} last two byte value( read Uint16 bigendian )\n */\nexport function readTail(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n if (binPack.byteLength <= TAIL_LEN) return 0\n\n const dv = new DataView(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoSize = dv.getUint16(binPack.byteLength - TAIL_LEN) // last 2 bytes for json-info-length.\n return infoSize\n\n } else {\n // throw TypeError('invalid data type.')\n return 0\n }\n\n}\n\n\n// binay data pack is not always Buffer. \n// It should accept Uint8Array binPack.\n// This function don't use Buffer method.\n\nexport function getMetaSize(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n\n const size = binPack.byteLength\n if (size <= TAIL_LEN) return 0\n\n //1. tail size check\n const infoSize = readTail(binPack)\n if (infoSize === 0 || infoSize > size) return 0\n //2. try parse JSON \n const success = parseMetaInfo(binPack, infoSize)\n //3. return success: jsonInfoSize, fail: 0\n if (success) return infoSize\n else return 0\n } else {\n return 0\n }\n}\n\n\n/**\n * \n * @param {Buffer|Uint8Array} binPack \n * @returns {Buffer} \n */\nexport function getBuffer(binPack) {\n const rawBufferSize = getBufferSize(binPack)\n return binPack.subarray(0, rawBufferSize)\n}\n\n\n\n/**\n * extract Meta info object if it has.\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @param {Boolean} showDetail add additional item info: full data type name and bytelength.\n * @returns {Object|undefined} success: return MetaInfo Object. fail: return undefined.(No valid JSON included.)\n */\nexport function getMeta(binPack, showDetail = false) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n const infoSize = readTail(binPack)\n if (infoSize === 0) return\n\n // check valid Meta\n let metaInfo = parseMetaInfo(binPack, infoSize)\n if (!metaInfo) return\n\n if (!showDetail) {\n return metaInfo\n } else {\n // add additional info\n metaInfo.forEach(bufPack => {\n const len = bufPack[3]\n if (len == undefined) { // add size info.\n if (bufPack[1].includes('8')) bufPack[3] = 1\n else if (bufPack[1].includes('16')) bufPack[3] = 2\n else if (bufPack[1].includes('32')) bufPack[3] = 4\n else if (bufPack[1].includes('F')) bufPack[3] = 4\n else if (bufPack[1].includes('!')) bufPack[3] = 1\n }\n bufPack[4] = parseTypeName(bufPack[1]) // add full-type-name.\n })\n return metaInfo\n }\n}\n\nexport function rawPack(...args) {\n return getBuffer(pack(...args))\n}\n\nexport function meta(...args) {\n return getMeta(pack(...args))\n}\n\nexport function metaDetail(...args) {\n return getMeta(pack(...args), true)\n}\n\nexport function getMetaDetail(binPack) {\n return getMeta(binPack, true)\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexport var digestLength = 32\nexport var blockSize = 64\n// SHA-256 constants\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\nfunction hashBlocks (w, v, p, pos, len) {\n let a, b, c, d, e, f, g, h, u, i, j, t1, t2\n while (len >= 64) {\n a = v[0]\n b = v[1]\n c = v[2]\n d = v[3]\n e = v[4]\n f = v[5]\n g = v[6]\n h = v[7]\n for (i = 0; i < 16; i++) {\n j = pos + i * 4\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff))\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2]\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10)\n u = w[i - 15]\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3)\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0)\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0\n h = g\n g = f\n f = e\n e = (d + t1) | 0\n d = c\n c = b\n b = a\n a = (t1 + t2) | 0\n }\n v[0] += a\n v[1] += b\n v[2] += c\n v[3] += d\n v[4] += e\n v[5] += f\n v[6] += g\n v[7] += h\n pos += 64\n len -= 64\n }\n return pos\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash () {\n this.digestLength = digestLength\n this.blockSize = blockSize\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8) // hash state\n this.temp = new Int32Array(64) // temporary state\n this.buffer = new Uint8Array(128) // buffer for data to hash\n this.bufferLength = 0 // number of bytes in buffer\n this.bytesHashed = 0 // number of total bytes hashed\n this.finished = false // indicates whether the hash was finalized\n this.reset()\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667\n this.state[1] = 0xbb67ae85\n this.state[2] = 0x3c6ef372\n this.state[3] = 0xa54ff53a\n this.state[4] = 0x510e527f\n this.state[5] = 0x9b05688c\n this.state[6] = 0x1f83d9ab\n this.state[7] = 0x5be0cd19\n this.bufferLength = 0\n this.bytesHashed = 0\n this.finished = false\n return this\n }\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0\n }\n this.reset()\n }\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\")\n }\n let dataPos = 0\n this.bytesHashed += dataLength\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64)\n this.bufferLength = 0\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength)\n dataLength %= 64\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n return this\n }\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed\n const left = this.bufferLength\n const bitLenHi = (bytesHashed / 0x20000000) | 0\n const bitLenLo = bytesHashed << 3\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128\n this.buffer[left] = 0x80\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength)\n this.finished = true\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff\n }\n return this\n }\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i]\n }\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i]\n }\n this.bytesHashed = bytesHashed\n this.finished = false\n this.bufferLength = 0\n }\n return Hash\n}())\nexport { Hash }\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC (key) {\n this.inner = new Hash()\n this.outer = new Hash()\n this.blockSize = this.inner.blockSize\n this.digestLength = this.inner.digestLength\n const pad = new Uint8Array(this.blockSize)\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean()\n } else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i]\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36\n }\n this.inner.update(pad)\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c\n }\n this.outer.update(pad)\n this.istate = new Uint32Array(8)\n this.ostate = new Uint32Array(8)\n this.inner._saveState(this.istate)\n this.outer._saveState(this.ostate)\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize)\n this.outer._restoreState(this.ostate, this.outer.blockSize)\n return this\n }\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0\n }\n this.inner.clean()\n this.outer.clean()\n }\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data)\n return this\n }\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out)\n } else {\n this.inner.finish(out)\n this.outer.update(out, this.digestLength).finish(out)\n }\n return this\n }\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n return HMAC\n}())\nexport { HMAC }\n// Returns SHA256 hash of data.\nexport function hash (data) {\n const h = (new Hash()).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Function hash is both available as module.hash and as default export.\n// export default hash\n// Returns HMAC-SHA256 of data under the key.\nexport function hmac (key, data) {\n const h = (new HMAC(key)).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer (buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0]\n if (num === 0) {\n throw new Error('hkdf: cannot expand more')\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset()\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer)\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info)\n }\n // Hash in the counter.\n hmac.update(counter)\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer)\n // Increment counter inside typed array, this works properly.\n counter[0]++\n}\nconst hkdfSalt = new Uint8Array(digestLength) // Filled with zeroes.\nexport function hkdf (key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt }\n if (length === void 0) { length = 32 }\n const counter = new Uint8Array([1])\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key)\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm)\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength)\n let bufpos = buffer.length\n const out = new Uint8Array(length)\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter)\n bufpos = 0\n }\n out[i] = buffer[bufpos++]\n }\n hmac_.clean()\n buffer.fill(0)\n counter.fill(0)\n return out\n}\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nexport function pbkdf2 (password, salt, iterations, dkLen) {\n const prf = new HMAC(password)\n const len = prf.digestLength\n const ctr = new Uint8Array(4)\n const t = new Uint8Array(len)\n const u = new Uint8Array(len)\n const dk = new Uint8Array(dkLen)\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1\n ctr[0] = (c >>> 24) & 0xff\n ctr[1] = (c >>> 16) & 0xff\n ctr[2] = (c >>> 8) & 0xff\n ctr[3] = (c >>> 0) & 0xff\n prf.reset()\n prf.update(salt)\n prf.update(ctr)\n prf.finish(u)\n for (var j = 0; j < len; j++) {\n t[j] = u[j]\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset()\n prf.update(u).finish(u)\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k]\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j]\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0\n }\n prf.clean()\n return dk\n}\n","import { hash, hmac } from '../lib/fast-sha256.js'\nimport { MBP } from 'meta-buffer-pack'\n\n/*\nTip.\n fast-sha256 use data:8Uint8Array\n sha256-mbp use data:any ( internal type converter )\n\n MBP.U8( any ) return Uint8Array\n MBP.B8( any ) reutn Buffer instance\n\n*/\nconst sha256 = {};\n\nsha256.hash = function (data) {\n return hash(MBP.U8(data))\n}\n\nsha256.hex = function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('hex')\n}\n\nsha256.base64= function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('base64')\n}\n\nsha256.hmac = function (key, data) {\n return hmac(MBP.U8(key), MBP.U8(data))\n}\n\nexport { sha256 }\n","import{ MBP, Buffer} from \"meta-buffer-pack\"\nconst MB = MBP.MB\n\n\n// remocon message pack one byte header. \nexport let BohoMsg = {\n AUTH_REQ : 0xB0, \n AUTH_NONCE: 0xB1,\n AUTH_HMAC: 0xB2,\n AUTH_ACK: 0xB3,\n AUTH_FAIL: 0xB4,\n AUTH_EXT: 0xB5,\n ENC_PACK : 0xB6, \n ENC_E2E : 0xB7, \n ENC_488 : 0xB8\n}\n\nfor (let c in BohoMsg) { BohoMsg[BohoMsg[c]] = c }\n\nexport const Meta = {\n\n AUTH_REQ: MBP.meta( // 2\n MB('header','8', 0),\n MB('reserved','8', 0)\n ),\n\n AUTH_NONCE: MBP.meta( // 13\n MB('header','8', 0),\n MB('unixTime','32L', 0),\n MB('milTime','32L', 0 ),\n MB('nonce', Buffer.alloc(4))\n ),\n\n AUTH_HMAC: MBP.meta( // 45\n MB('header','8', 0),\n MB('id8',Buffer.alloc(8)),\n MB('nonce', Buffer.alloc(4)),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n AUTH_ACK: MBP.meta( // 33\n MB('header','8', 0),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n\n ENC_PACK: MBP.meta( //25 + payload\n MB('type','8',0),\n MB('len','32L',0), // pure xdata size. \n MB('salt12', Buffer.alloc(12)), // sec,mil,rand\n MB('hmac',8,0)\n // MB( 'xdata', encData )\n ),\n\n\n ENC_488: MBP.meta( // 21 + payload\n MB('type','8', 0 ),\n MB('len','32L', 0 ),\n MB('otpSrc8', Buffer.alloc(8) ),\n MB('hmac8', Buffer.alloc(8) )\n // MB('xdata', encData ) \n )\n\n\n }\n\n\n function getMetaSize(meta){\n let lastItem = meta[ meta.length - 1]\n return lastItem[2] + lastItem[3]\n }\n\n export const MetaSize = {\n AUTH_REQ: getMetaSize( Meta.AUTH_REQ ),\n AUTH_NONCE: getMetaSize( Meta.AUTH_NONCE ),\n AUTH_HMAC: getMetaSize( Meta.AUTH_HMAC ),\n AUTH_ACK: getMetaSize( Meta.AUTH_ACK ),\n ENC_PACK: getMetaSize( Meta.ENC_PACK ),\n ENC_488: getMetaSize( Meta.ENC_488 )\n }\n\n// console.log( 'boho MetaSize', MetaSize )\n// boho MetaSize {\n// AUTH_REQ: 2,\n// AUTH_NONCE: 13,\n// AUTH_HMAC: 45,\n// AUTH_ACK: 33,\n// ENC_PACK: 25,\n// ENC_488: 21\n// }","import { sha256 } from './sha256-mbp.js'\nimport { MBP, Buffer } from 'meta-buffer-pack'\nexport { sha256, MBP, Buffer }\n\nimport { webcrypto } from 'crypto'\nimport { BohoMsg, Meta, MetaSize } from \"./constants.js\"\nexport { BohoMsg, Meta, MetaSize }\n\nlet isNode = false\ntry {\n isNode = Object.prototype.toString.call(global.process) === '[object process]'\n} catch (e) { }\n\n\nexport function RAND(size) {\n if( isNode ){\n return webcrypto.getRandomValues(Buffer.alloc(size))\n }else{\n return self.crypto.getRandomValues(Buffer.alloc(size))\n }\n}\n\n\n\nexport class Boho {\n // A. Core\n constructor() {\n\n this._id8 = Buffer.alloc(8)\n this._otpSrc44 = Buffer.alloc(44)\n this._otp36 = Buffer.alloc(36)\n this._hmac = Buffer.alloc(32)\n\n this.auth_salt12 = Buffer.alloc(12)\n this.localNonce = Buffer.alloc(4)\n this.remoteNonce = Buffer.alloc(4)\n this.isAuthorized = false\n\n }\n\n clearAuth(){\n this._id8.fill(0)\n this._otpSrc44.fill(0)\n this._otp36.fill(0)\n this._hmac.fill(0)\n this.auth_salt12.fill(0)\n this.localNonce.fill(0)\n this.remoteNonce.fill(0)\n this.isAuthorized = false\n }\n\n // for the self\n set_hash_id8(data) {\n let idSum = MBP.B8(sha256.hash(data))\n idSum.copy(this._id8, 0, 0, 8)\n }\n\n set_id8(data) {\n let encStr = MBP.B8(data)\n this._id8.fill(0)\n encStr.copy(this._id8, 0, 0, 8)\n }\n\n set_key(data) {\n let keySum = MBP.B8(sha256.hash(data))\n keySum.copy(this._otpSrc44, 0, 0, 32)\n }\n\n // id_key == 'id' + '.' + 'key' \n set_id_key(id_key) {\n let delimiterPosition = id_key.indexOf('.')\n if( delimiterPosition == -1 ) return\n let id = id_key.substring(0, delimiterPosition)\n let key = id_key.substring(delimiterPosition + 1)\n this.set_id8(id)\n this.set_key(key)\n }\n\n copy_id8(data) {\n data.copy(this._id8, 0, 0, 8)\n }\n\n copy_key(data) {\n data.copy(this._otpSrc44, 0, 0, 32)\n }\n\n\n sha256_n(srcData, n) {\n let hashSum = sha256.hash(srcData)\n for (let i = 0; i < n; i++) hashSum = sha256.hash(hashSum)\n return hashSum\n }\n\n\n // useful general encryption i.e. enc_pack\n set_clock_rand() {\n\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n RAND(4)\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n // for secure communication sender. \n set_clock_nonce(nonce) {\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n nonce\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n\n set_salt12(salt12) {\n salt12.copy(this._otpSrc44, 32)\n }\n\n resetOTP() {\n let otp32 = MBP.B8(sha256.hash(this._otpSrc44))\n otp32.copy(this._otp36, 0, 0, 32)\n }\n\n getIndexOTP(otpIndex) {\n this._otp36.writeUInt32LE(otpIndex, 32)\n return sha256.hash(this._otp36)\n }\n\n\n generateHMAC(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n }\n\n // return 8 bytes of hash\n getHMAC8(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n return this._hmac.subarray(0, 8)\n }\n\n xotp(data, otpStartIndex = 0, shareDataBuffer = false) {\n\n data = MBP.B8(data, shareDataBuffer)\n\n let len = data.byteLength\n let otpIndex = otpStartIndex\n let dataOffset = 0\n let xorCalcLen = 0\n\n while (len > 0) {\n xorCalcLen = len < 32 ? len : 32\n let iotp = this.getIndexOTP(++otpIndex);\n for (let i = 0; i < xorCalcLen; i++) {\n data[dataOffset++] ^= iotp[i]\n }\n len -= 32\n }\n return data\n }\n\n // B. AUTH process\n\n // step 1\n // client send AUTH_REQ\n auth_req() {\n return MBP.pack(\n MBP.MB('#type', '8', BohoMsg.AUTH_REQ),\n MBP.MB('#reserved', '8', 0)\n )\n }\n\n // step 2\n // server send AUTH_NONCE\n auth_nonce() {\n let now = Date.now()\n let unixTime = Math.floor(now / 1000)\n let milTime = now % 1000\n this.localNonce = RAND(4)\n this.auth_salt12 = Buffer.concat([\n MBP.NB('32L', unixTime),\n MBP.NB('32L', milTime),\n this.localNonce\n ])\n\n let infoPack = Buffer.concat([\n MBP.NB('8', BohoMsg.AUTH_NONCE),\n this.auth_salt12\n ])\n return infoPack\n }\n\n\n // step 3\n // client send AUTH_HMAC\n // input : auth_nonce buffer\n auth_hmac(buffer) {\n let auth_nonce = MBP.unpack(buffer, Meta.AUTH_NONCE)\n if (auth_nonce) {\n // console.log(' auth nonce', auth_nonce )\n\n // let now = Date.now()\n // let localUTC= Math.floor( now/ 1000 )\n // let localMilTime = now % 1000\n\n // console.log('time server [sec]', auth_nonce.unixTime, auth_nonce.milTime )\n // console.log('time client [sec]', localUTC , localMilTime )\n // console.log('time diff client and server[sec]', auth_nonce.unixTime - localUTC )\n\n // let serverSecMil = auth_nonce.unixTime * 1000 + auth_nonce.milTime\n // console.log('time diff msec client and server[msec]', serverSecMil - now )\n\n let salt12 = Buffer.concat([\n MBP.NB('32L', auth_nonce.unixTime),\n MBP.NB('32L', auth_nonce.milTime),\n auth_nonce.nonce\n ])\n\n this.set_salt12(salt12)\n\n this.localNonce = RAND(4)\n // hmac( key, sec,mil,serverNonce, localNonce)\n this.generateHMAC(this.localNonce)\n\n // let hmac8 = this._hmac.subarray(0, 8)\n\n this.remoteNonce = auth_nonce.nonce\n\n let auth_hmac_buffer = MBP.pack( // 21 -> 45\n MBP.MB('#header', '8', BohoMsg.AUTH_HMAC),\n MBP.MB('#id8', this._id8),\n MBP.MB('#nonce', this.localNonce),\n MBP.MB('#hmac32', this._hmac ), //full 32bytes hash\n )\n\n return auth_hmac_buffer\n }\n return false\n }\n\n /* \n step 4. for server\n \n step 4-1. check client's auth_hmac\n step 4-2. reply result\n send AUTH_ACK with another HMAC for client.\n or send AUTH_FAIL when fail.\n */\n\n // input: unpack object or buffer of auth_hmac\n check_auth_hmac(data) {\n let infoPack\n if (data instanceof Uint8Array) {\n infoPack = MBP.unpack(data, Meta.AUTH_HMAC)\n if (!infoPack) {\n // console.log('auth_hamc unpack fail.')\n return\n }\n } else {\n infoPack = data;\n\n }\n // console.log('auth_hamc infoObj', infoPack )\n\n this.set_salt12(this.auth_salt12)\n\n // hmac( key, sec,mil,serverNonce, clientNonce)\n this.generateHMAC(infoPack.nonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n\n if (MBP.equal(infoPack.hmac32, hmac32)) {\n //Auth success then store client nonce.\n this.remoteNonce = infoPack.nonce\n\n let salt12 = Buffer.concat([\n this.localNonce,\n this.remoteNonce,\n this.localNonce\n ])\n this.set_salt12(salt12)\n this.generateHMAC(infoPack.nonce)\n let replyHMAC = this._hmac\n\n let auth_ack = MBP.rawPack( \n MBP.MB('header', '8', BohoMsg.AUTH_ACK),\n MBP.MB('hmac32', replyHMAC)\n )\n this.isAuthorized = true\n return auth_ack\n }\n return false\n }\n\n\n\n // step 5. cross check\n // client check server's hmac. \n check_auth_ack_hmac(buffer) {\n // server response has hmac ( key + clientNonce)\n let auth_ack = MBP.unpack(buffer, Meta.AUTH_ACK)\n if (auth_ack) {\n let salt12 = Buffer.concat([\n this.remoteNonce,\n this.localNonce,\n this.remoteNonce,\n ])\n this.set_salt12(salt12)\n this.generateHMAC(this.localNonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n //server side hmac using client nonce.\n if (MBP.equal(hmac32, auth_ack.hmac32)) {\n this.isAuthorized = true\n return true\n }\n }\n // server hmac error\n return\n }\n\n // C. Secure Communication\n\n // Must AUTH first.\n encrypt_488(data) { // payload max about 2^32 bytes.\n if (!this.isAuthorized) return\n\n data = MBP.B8(data)\n\n this.set_clock_nonce(this.remoteNonce)\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_488),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#otpSrc8', this._otpSrc44.subarray(32, 40)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n // console.log('enc pack result', pack )\n return pack\n }\n\n\n decrypt_488(data) {\n data = MBP.B8(data)\n\n let pack = MBP.unpack(data, Meta.ENC_488)\n\n if (pack) {\n\n let salt12 = Buffer.concat([\n pack.otpSrc8,\n this.localNonce\n ])\n\n this.set_salt12(salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS.subarray(0, pack.len)\n let decData = this.xotp(xdata)\n\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(hmac8, pack.hmac8)) return decData\n\n // console.log('hmac dismatch', decData )\n } else {\n // console.log('unpack fail')\n }\n }\n\n\n // maxium data size is 2**32 -1 bytes.\n encryptPack(data) {\n data = MBP.B8(data)\n\n this.set_clock_rand()\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_PACK),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#salt12', this._otpSrc44.subarray(32)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n return pack\n }\n\n\n decryptPack(data) {\n\n if (data[0] !== BohoMsg.ENC_PACK) {\n // console.log('Boho: Invalid packType')\n return\n }\n\n // packLength\n let readPackLen = data.readUint32LE(1);\n if (readPackLen != data.byteLength - MetaSize.ENC_PACK) {\n // console.log('Boho: Invalid LEN data_len: data.byteLen' , readPackLen, data.byteLength)\n return\n }\n\n try {\n let pack = MBP.unpack(data, Meta.ENC_PACK)\n // console.log('unpack result', pack )\n if (!pack) return\n\n this.set_salt12(pack.salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS\n let decData = this.xotp(xdata)\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(pack.hmac, hmac8)) {\n pack.data = decData\n return pack\n }\n // console.log('Invalid HMAC', pack.hmac, hmac8 )\n\n } catch (error) {\n // console.log('Boho: unpack err', error )\n\n }\n }\n\n encrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let pack = this.encryptPack(data)\n this._otpSrc44.set(baseKey)\n return pack;\n }\n\n decrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let decPack = this.decryptPack(data)\n this._otpSrc44.set(baseKey)\n return decPack\n }\n\n}\n","\n// IOclient state\nexport const STATES = {\n OPENING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n SERVER_READY: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n READY: 7,\n REDIRECTING: 8\n}\nfor (let c in STATES) { STATES[STATES[c]] = c }\n\n// server side client state\nexport const CLIENT_STATE = {\n INIT: 0,\n SENT_SERVER_READY: 1,\n RECV_AUTH_REQ: 2,\n SENT_SERVER_NONCE: 3,\n RECV_AUTH_HMAC: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n CID_READY: 7\n}\nfor (let c in CLIENT_STATE) { CLIENT_STATE[CLIENT_STATE[c]] = c }\n\nexport let ENC_MODE = {\n NO: 0,\n YES: 1,\n AUTO: 2\n}\n\nfor (let c in ENC_MODE) { ENC_MODE[ENC_MODE[c]] = c }\n\n\nexport const SIZE_LIMIT = {\n TAG_LEN1: 255,\n TAG_LEN2: 65535,\n CONNECTION_CHECKER_PERIOD: 3000,\n PROMISE_TIMEOUT: 5000,\n DID: 8,\n CID: 12\n}\n\nexport let PAYLOAD_TYPE = {\n EMPTY: 0, \n TEXT: 1,\n BINARY: 2, \n OBJECT: 3, // one stringify able object. no buffer.\n MJSON: 4, // multiple stringify able obejct. JSON string. with top levle array , no buffer\n MBA: 5 // \"meta_buffer_arguments\" arbitary types. buffer included.\n}\nfor (let c in PAYLOAD_TYPE) { PAYLOAD_TYPE[PAYLOAD_TYPE[c]] = c }\n// console.log( PAYLOAD_TYPE )\n\n// MJSON: multiple arguments \n// accepet only string, number, root depth js primittive object, \n// unpack and will send to receiver handler with multiple params.\n\n// MBA: buffer pack of multiple arguments. check \"meta-buffer-pack\" module. \n// MBA: when armuents includes raw Buffer( TypedArray )\n\n// IO message pack one byte header. \nexport let IOMsg = {\n\n /* \n * 0~127dec. reserved. for text stream.\n * 0~31: control code\n * 32~126: ascii charactor\n * 127: DEL\n */\n \n // ADMIN_REQ: 0xA0,\n\n // DO NOT USE: 0xB0~ 0xBF\n // Boho module using this numbers.\n // AUTH_REQ : 0xB0, \n // AUTH_NONCE: 0xB1,\n // AUTH_HMAC: 0xB2,\n // AUTH_ACK: 0xB3,\n // AUTH_FAIL: 0xB4,\n // AUTH_EXT: 0xB5,\n // ENC_PACK : 0xB6, \n // ENC_E2E : 0xB7, \n // ENC_488 : 0xB8\n // reserved ~0xBF\n\n // C. IO status contorl.\n SERVER_READY: 0xC0,\n CID_REQ: 0xC1, \n CID_RES: 0xC2, \n QUOTA_LEVEL: 0xC3,\n SERVER_CLEAR_AUTH: 0xC4, \n SERVER_REDIRECT: 0xC5,\n\n // ..\n LOOP: 0xCB,\n ECHO: 0xCC,\n PING: 0xCD, \n PONG: 0xCE,\n CLOSE: 0xCF,\n // ~CF\n\n\n // D. IO data signaling\n SIGNAL: 0xD0, \n SIGNAL_REQ: 0xD1, \n SIGNAL_E2E: 0xD2, \n SUBSCRIBE: 0xD3,\n SUBSCRIBE_REQ: 0xD4, \n UNSUBSCRIBE: 0xD5, \n SERVER_SIGNAL: 0xD6, \n\n // ..\n IAM: 0xD9,\n IAM_RES: 0xDA,\n \n //.. \n SET: 0xDB, //\n RESPONSE_CODE: 0xDC, \n RESPONSE_MBP: 0xDD, \n\n REQUEST: 0xDE, //client public\n RESPONSE: 0xDF,\n // ~DF\n\n\n // F. Framing Flow control related framing protocol.(CongPacket)\n FLOW_MODE: 0xF0,\n WAIT: 0xF1,\n RESUME: 0xF2,\n //..\n TIME_OUT: 0xFD,\n OVER_SIZE: 0xFE,\n OVER_FLOW: 0xFF\n\n}\n\nfor (let c in IOMsg) { IOMsg[IOMsg[c]] = c }\n\n// console.log( IOMsg );\n\n\nexport const API_TYPE = {\n 'REQUEST_RESPONSE': 'requet_response',\n 'ONE_WAY': 'one_way'\n}\n\n\n\n// api response status code\nexport const STATUS = {\n OK: 0,\n //0~127: success\n //128~255: fail\n ERROR: 255\n}\n","// table index related with:\n// - AUTH database level\n// - serverOption.defaultQuotaIndex\n\n// quota example\n// index range: 0~255.\nexport let quotaTable = {\n // CongSocket\n 0: { // default. anonymouse:\n signalSize: 1500,\n publishCounter: 10,\n trafficRate: 10000\n },\n 1: { // auth_ultralight: eg. Arduino Uno.\n signalSize: 255,\n publishCounter: 10,\n trafficRate: 100000\n },\n 2: { // auth_light: eg. authorized ESP.\n signalSize: 65535,\n publishCounter: 10,\n trafficRate: 1048576\n },\n\n // WebSocket (browser and node app)\n 3: { // authorized basic.\n signalSize: 1048576, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n\n // WebSocket (browser and node app)\n 10: { // anonymouse\n signalSize: 1500, \n publishCounter: 5,\n trafficRate: 1048576 * 20\n },\n\n 11: { // authorized basic.\n signalSize: 65535, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n \n 12: { // authorized power.\n signalSize: 1048576, \n publishCounter: 100,\n trafficRate: 1048576 * 20\n },\n \n // you can add your custom quota level.\n\n // Remote service node\n // High Quota, No root permission.\n 200: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n },\n // super admin or root user.\n // to monitor, metric, sudo command, db acess\n 255: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n }\n}\n\n","import { MBP } from 'meta-buffer-pack'\nimport { PAYLOAD_TYPE, IOMsg } from \"./constants.js\";\nconst encoder = new TextEncoder()\n\n\nexport function getSignalPack( tag, ...args ){\n if( typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode( tag)\n let payload = parsePayload( args )\n\n let sigPack;\n if( payload.type == PAYLOAD_TYPE.EMPTY ){\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type )\n )\n }else if( payload.type == PAYLOAD_TYPE.MBA ){\n let mbaBuffer = MBP.pack( MBP.MBA(...args))\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#mbaBuffer', mbaBuffer )\n )\n }else { \n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#payload', payload.buffer )\n )\n }\n return sigPack\n}\n\n\nexport function parsePayload( args){\n let type, pack;\n if( args.length == 0){\n type = PAYLOAD_TYPE.EMPTY \n pack = null\n }else if( args.length == 1){\n if( typeof args[0] === 'string' || typeof args[0] === 'number'){\n type = PAYLOAD_TYPE.TEXT\n pack = encoder.encode( args[0] + \".\") // add null area.\n pack[pack.byteLength - 1 ] = 0 // set null.\n\n }else if( ArrayBuffer.isView( args[0]) || args[0] instanceof ArrayBuffer ){ //one buffer\n type = PAYLOAD_TYPE.BINARY\n pack = MBP.B8( args[0 ] )\n }else if(typeof args[0] === 'object'){ \n type = PAYLOAD_TYPE.OBJECT\n pack = encoder.encode( JSON.stringify( args[0]) )\n }else{\n throw new Error('unknown payload arguments')\n }\n }else{ // args 2 and more\n let containsBuffer = false\n args.forEach( item =>{\n if( ArrayBuffer.isView( item ) || item instanceof ArrayBuffer ) containsBuffer = true;\n })\n\n if( containsBuffer ){\n type = PAYLOAD_TYPE.MBA;\n }else{\n type = PAYLOAD_TYPE.MJSON;\n // args is array\n pack = encoder.encode( JSON.stringify( args ) )\n }\n \n }\n \n return { type: type, buffer: pack }\n}\n\nexport function getPayloadFromSignalPack( signalPack ){\n let tagLen = signalPack.readUint8(1)\n return signalPack.subarray(3 + tagLen)\n}","import { MBP, Buffer } from 'meta-buffer-pack'\nimport EventEmitter from \"eventemitter3\";\nimport { Boho, BohoMsg, MetaSize } from \"boho\";\nimport { IOMsg, PAYLOAD_TYPE, SIZE_LIMIT, ENC_MODE, STATES } from '../common/constants.js'\nimport { quotaTable } from '../common/quotaTable.js'\nimport { getSignalPack } from '../common/payload.js';\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nfunction byteToUrl(buffer) {\n //ipv4(4bytes) , port(2bytes)\n if (buffer.byteLength != 6) return\n let address = buffer[0].toString() + \".\" + buffer[1].toString()\n + \".\" + buffer[2].toString() + \".\" + buffer[3].toString();\n let port = (buffer[4] << 8) + buffer[5]\n return address + ':' + port.toString()\n}\n\nexport class IOCore extends EventEmitter {\n constructor(url) {\n super();\n this.cid = \"\" // get from the server CID_RES\n this.ip = \"\" // get from the server IAM_RES message.\n this.socket = null;\n this.url = url; // init default server url\n this.state = STATES.CLOSED; // Number type\n this.stateName = this.getStateName() // String type\n\n this.txCounter = 0;\n this.rxCounter = 0;\n this.txBytes = 0;\n this.rxBytes = 0;\n\n this.lastTxRxTime = Date.now();\n this.connectionCheckerPeriod = SIZE_LIMIT.CONNECTION_CHECKER_PERIOD;\n this.connectionCheckerIntervalID = null;\n\n this.boho = new Boho()\n this.TLS = false // true if protocol is wss(TLS)\n this.encMode = ENC_MODE.AUTO;\n this.useAuth = false;\n\n this.nick = \"\";\n this.channels = new Set()\n this.promiseMap = new Map()\n this.promiseTimeOut = SIZE_LIMIT.PROMISE_TIMEOUT\n this.mid = 0 // promise message id \n\n this.level = 0; // also defaultQuotaLevel\n this.quota = quotaTable[this.level];\n this.serverSet = {}\n this.linkMap = new Map()\n\n this.on('open', this.onOpen.bind(this))\n this.on('close', this.onClose.bind(this))\n this.on('socket_data', this.onData.bind(this))\n }\n\n\n redirect(url2) {\n this.close()\n this.stateChange('redirecting')\n this.createConnection(url2)\n }\n\n open(url) {\n if (!url && !this.url) return;\n\n if (url) {\n if (!this.url) { // default host url\n this.url = url\n } else if (url !== this.url) { // default host url change\n this.url = url;\n if (this.socket) {\n this.close()\n return\n }\n }\n }\n\n this.createConnection(this.url)\n\n if (!this.connectionCheckerIntervalID) {\n this.connectionCheckerIntervalID = setInterval(this.keepAlive.bind(this), this.connectionCheckerPeriod);\n }\n }\n\n onOpen() {\n if (this.url.includes(\"wss://\")) {\n this.TLS = true;\n } else {\n this.TLS = false;\n }\n this.stateChange('open')\n }\n\n onClose() {\n this.boho.isAuthorized = false;\n this.cid = \"\"\n this.stateChange('closed')\n }\n\n // manual login\n login(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n console.log('manual login: ', id)\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n let auth_pack = this.boho.auth_req()\n // console.log('auth_req_pack', auth_pack )\n this.send(auth_pack)\n }\n\n // auto login\n auth(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n }\n\n onData(buffer) {\n // console.log('remote rcv socket_message', buffer )\n //check first byte (remote message type)\n let msgType = buffer[0];\n let decoded;\n\n if (msgType === BohoMsg.ENC_488) {\n decoded = this.boho.decrypt_488(buffer)\n if (decoded) {\n // console.log( decoded )\n msgType = decoded[0]\n buffer = decoded\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('DEC_FAIL', buffer.byteLength)\n }\n } else if (msgType === BohoMsg.ENC_E2E) {\n // console.log('rcv ENC_E2E' )\n\n try {\n decoded = this.boho.decrypt_488(buffer)\n //헤더를 읽고 헤더크기만큼만 해석한다.\n if (decoded) {\n // console.log( 'ENC_E2E decoded ', decoded )\n msgType = decoded[0]\n // decoded has msg_header only. \n buffer.set(decoded, MetaSize.ENC_488) // set decoded signal_e2e headaer.\n buffer = buffer.subarray(MetaSize.ENC_488) // reset offset.\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('488 DEC_FAIL', buffer)\n return\n }\n\n } catch (err) {\n // console.log('E2E DEC_FAIL decryption error', err)\n return\n }\n\n }\n\n let type = IOMsg[msgType]\n if (!type) type = BohoMsg[msgType]\n\n // console.log( \"MsgType: \", type , \" LEN \", buffer.byteLength)\n\n switch (msgType) {\n case IOMsg.OVER_SIZE:\n console.log('## server sent: over_size event.')\n this.emit('over_size', 'over_size')\n break;\n case IOMsg.PING:\n this.pong();\n break;\n\n case IOMsg.PONG:\n break;\n\n case IOMsg.IAM_RES:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let jsonInfo = JSON.parse(str)\n if (jsonInfo.ip) {\n this.ip = jsonInfo.ip;\n }\n console.log('', JSON.stringify(jsonInfo))\n // console.log('', JSON.stringify(jsonInfo,null,2))\n } catch (error) {\n // console.log(' data error')\n }\n break;\n\n case IOMsg.CID_RES:\n let cidStr = decoder.decode(buffer.subarray(1))\n // console.log( '>> CID_RES: ' ,cidStr )\n this.cid = cidStr;\n // change state before subscribe.\n this.stateChange('ready', 'cid_ready')\n this.subscribe_memory_channels()\n break;\n\n case IOMsg.QUOTA_LEVEL:\n let quotaLevel = buffer[1]\n this.level = quotaLevel;\n this.quota = quotaTable[quotaLevel];\n console.log('## QUOTA:', quotaLevel, JSON.stringify(this.quota))\n break;\n\n case IOMsg.SERVER_CLEAR_AUTH:\n this.useAuth = false;\n this.boho.clearAuth();\n this.stop();\n break;\n\n case IOMsg.SERVER_REDIRECT:\n let host_port;\n let url;\n let protocol;\n let addressType;\n if (buffer.byteLength == 7) { // ipv4 ,port\n addressType = 'IPV4:PORT'\n host_port = byteToUrl(buffer.subarray(1))\n protocol = 'cong://'\n } else { // domain url\n addressType = 'URL'\n host_port = decoder.decode(buffer.subarray(1))\n protocol = ''\n }\n\n url = protocol + host_port\n this.redirect(url)\n break;\n\n case IOMsg.SERVER_READY:\n this.stateChange('server_ready', 'server_ready')\n if (this.useAuth) {\n this.send(this.boho.auth_req())\n // CID_REQ will be called, after auth_ack.\n } else {\n // CID_REQ here, if not using auth.\n this.send(Buffer.from([IOMsg.CID_REQ]))\n }\n break;\n\n case IOMsg.SERVER_SIGNAL:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let ss = JSON.parse(str)\n // console.log('SERVER_SIGNAL', JSON.stringify(ss))\n\n if (ss.event && ss.data) {\n this.serverSet = ss.data;\n this.emit(ss.event, ss.data)\n }\n\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SET:\n try {\n let setPack = MBP.unpack(buffer)\n if (setPack) {\n // console.log('[SET] topic: ', setPack.topic)\n this.emit(setPack.topic, ...setPack.args)\n }\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SIGNAL_E2E:\n case IOMsg.SIGNAL:\n try {\n let tagLen = buffer.readUint8(1)\n let tagBuf = buffer.subarray(2, 2 + tagLen)\n let tag = decoder.decode(tagBuf)\n\n let payloadType = buffer.readUint8(2 + tagLen)\n let payloadBuffer = buffer.subarray(3 + tagLen)\n\n /* three types of signal message.\n > unicast message to me: tag includes @, no cid: '@*'\n > cid_sub message: tag includes cid and @ both : 'cid@*'\n > ch_sub message: else.\n */\n switch (payloadType) {\n\n case PAYLOAD_TYPE.EMPTY: // 0\n if (tag.indexOf('@') === 0) this.emit('@', null, tag)\n else this.emit(tag, null, tag)\n break;\n\n case PAYLOAD_TYPE.TEXT: // 1\n // !! Must remove null char before decode in JS.\n // string payload contains null char for the c/cpp devices.\n let payloadStringWithoutNull = payloadBuffer.subarray(0, payloadBuffer.byteLength - 1)\n let oneString = decoder.decode(payloadStringWithoutNull)\n if (tag.indexOf('@') === 0) this.emit('@', oneString, tag)\n if (tag !== '@') this.emit(tag, oneString, tag)\n break;\n\n case PAYLOAD_TYPE.BINARY: // 2\n if (tag.indexOf('@') === 0) this.emit('@', payloadBuffer, tag)\n if (tag !== '@') this.emit(tag, payloadBuffer, tag)\n break;\n\n case PAYLOAD_TYPE.OBJECT:\n let oneObjectBuffer = decoder.decode(payloadBuffer)\n let oneJSONObject = JSON.parse(oneObjectBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', oneJSONObject, tag)\n if (tag !== '@') this.emit(tag, oneJSONObject, tag)\n break;\n\n case PAYLOAD_TYPE.MJSON:\n let mjsonBuffer = decoder.decode(payloadBuffer)\n let mjson = JSON.parse(mjsonBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mjson, tag)\n if (tag !== '@') this.emit(tag, ...mjson, tag)\n break;\n\n case PAYLOAD_TYPE.MBA:\n let mbaObject = MBP.unpack(payloadBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mbaObject.args, tag)\n if (tag !== '@') this.emit(tag, ...mbaObject.args, tag)\n break;\n\n default:\n // console.log('## Unkown payloadtype', payloadType)\n }\n\n } catch (err) {\n // console.log('## signal parse err', err)\n }\n break;\n\n case IOMsg.RESPONSE_MBP:\n this.testPromise(buffer)\n break;\n\n case BohoMsg.AUTH_NONCE:\n let auth_hmac = this.boho.auth_hmac(buffer)\n if (auth_hmac) {\n this.send(auth_hmac)\n } else {\n this.stateChange('auth_fail', 'Invalid local auth_hmac.')\n }\n break;\n\n case BohoMsg.AUTH_FAIL:\n this.stateChange('auth_fail', 'server reject auth.')\n break;\n\n case BohoMsg.AUTH_ACK:\n if (this.boho.check_auth_ack_hmac(buffer)) {\n this.stateChange('auth_ready', 'server sent auth_ack')\n this.send(Buffer.from([IOMsg.CID_REQ]))\n } else {\n this.stateChange('auth_fail', 'invalid server_hmac')\n }\n break;\n\n default:\n try {\n decoded = decoder.decode(buffer)\n // console.log('text message:', decoded)\n this.emit('text_message', decoded)\n } catch (error) {\n\n }\n\n break;\n\n }\n }\n\n iam(title) {\n // console.log('iam', title)\n if (title) {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM),\n MBP.MB('#', title)\n ))\n } else {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM)\n ))\n }\n }\n\n\n ping() {\n this.send(Buffer.from([IOMsg.PING]))\n }\n\n pong() {\n this.send(Buffer.from([IOMsg.PONG]))\n }\n\n\n // application level ping tool. \n // simple message sending and reply.\n echo(args) {\n if (args) {\n console.log('echo args:', args)\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.ECHO),\n MBP.MB('#msg', args)\n ))\n } else {\n // # do not encrypt blank echo #\n this.send(Buffer.from([IOMsg.ECHO]))\n }\n }\n\n\n bin(...data) {\n this.send(MBP.U8pack(...data))\n }\n\n send(data) {\n if (data.byteLength > this.quota.signalSize) {\n this.emit('over_size')\n console.log('## QUOTA LIMIT OVER!! \\nsignal message.byteLength: ', data.byteLength)\n console.log('## your maximum signalSize(bytes) is:', this.quota.signalSize)\n return\n }\n this.socket_send(data);\n }\n\n /*\n Policy. Should message do encrypt?\n\n if encMode == auto\n NO. if connection using TLS line.\n // ex. wss://url connection.\n YES. if no TLS line.\n // ex. ws://url connection.\n\n if encMode == YES\n YES. encrypt the message.\n\n if encMode == NO\n NO. do not ecnrypt message.\n\n */\n getEncryptionMode() {\n if (this.encMode === ENC_MODE.YES ||\n this.encMode === ENC_MODE.AUTO &&\n !this.TLS && this.boho.isAuthorized\n ) {\n return true;\n } else {\n return false\n }\n }\n\n send_enc_mode(data, useEncryption) {\n\n // use default policy.\n if (useEncryption === undefined) {\n useEncryption = this.getEncryptionMode()\n }\n\n if (data[0] == IOMsg.SIGNAL_E2E && useEncryption) {\n // input data: signal_header + e2ePayload\n // encrypt signal_header area only. payload is encrypted with e2e key already.\n let tagLen = data[1]\n let encHeader = this.boho.encrypt_488(data.subarray(0, 3 + tagLen))\n encHeader[0] = BohoMsg.ENC_E2E\n this.send(Buffer.concat([encHeader, data.subarray(3 + tagLen)]))\n // console.log('<< send_enc_mode [ ENC_E2E ]')\n\n } else if (useEncryption) {\n // console.log('<< send_enc_mode [ ENC_488 ]')\n let encPack = this.boho.encrypt_488(data)\n this.send(encPack)\n } else {\n // console.log('<< send_enc_mode [ PLAIN ]' )\n this.send(data)\n }\n\n }\n\n\n setMsgPromise(mid) {\n return new Promise((resolve, reject) => {\n this.promiseMap.set(mid, [resolve, reject])\n // console.log('set promise. mid, size', mid, this.promiseMap.size)\n setTimeout(e => {\n if (this.promiseMap.has(mid)) {\n reject('timeout');\n this.promiseMap.delete(mid)\n // console.log('promise timeout. mid, size:', mid, this.promiseMap.size)\n }\n }, this.promiseTimeOut);\n })\n }\n\n testPromise(buffer) {\n // console.log('mbp buffer : ', buffer , buffer.byteLength)\n // let mbp = ( buffer.byteLength > 4 ) ? buffer.subarray(4) : \"\"\n\n let res = MBP.unpack(buffer)\n if (!res) return\n // console.log( res )\n\n // console.log(`RESPONSE_MBP MID: ${mid} status: ${status} ,mbp: ${ buffer.subarray(4)} `)\n\n if (this.promiseMap.has(res.mid)) {\n // console.log('res promise msg', mid)\n let [resolve, reject] = this.promiseMap.get(res.mid)\n this.promiseMap.delete(res.mid)\n\n if (res.status < 128) {\n res.ok = true;\n // console.log( 'unpack meta:', meta)\n resolve(res)\n } else {\n res.ok = false;\n reject(res)\n }\n\n\n } else {\n console.log('no promise id')\n }\n }\n\n\n publish(...args) {\n this.signal(...args)\n }\n\n\n signal(tag, ...args) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n let signalPack = getSignalPack(tag, ...args)\n this.send_enc_mode(signalPack)\n }\n\n decrypt_e2e(data, key) {\n return this.boho.decrypt_e2e(data, key)\n }\n\n signal_e2e(tag, data, key) {\n\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode(tag)\n let dataPack = MBP.B8(data)\n\n //encrypt payload area with key\n let sercretPack = this.boho.encrypt_e2e(dataPack, key)\n\n //change signal MsgType header into SIGNAL_E2E\n let signalPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.SIGNAL_E2E),\n MBP.MB('#tagLen', '8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', PAYLOAD_TYPE.BINARY),\n MBP.MB('#payload', sercretPack)\n )\n\n this.send_enc_mode(signalPack)\n }\n\n\n\n set(storeName, ...args) {\n if (!storeName || args.length == 0) {\n return Promise.reject(new Error('set need storeName and value)'))\n }\n return this.req('store', 'set', storeName, ...args)\n }\n\n async get(storeName) {\n if (!storeName) {\n return Promise.reject(new Error('store get need storeName)'))\n }\n let pack = await this.req('store', 'get', storeName)\n let { $ } = MBP.unpack(pack.body)\n return $\n }\n\n\n req(target, topic, ...args) {\n // console.log('common_req args', args)\n if (!target || !topic)\n return Promise.reject(new Error('request need target and topic)'))\n let sigPack;\n if (args.length > 0) {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic),\n MBP.MBA(...args)\n )\n } else {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic)\n )\n }\n // console.log('<< adminPack', this.mid, sigPack)\n this.send_enc_mode(sigPack)\n return this.setMsgPromise(this.mid)\n }\n\n\n subscribe(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) return\n\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.add(tag)\n })\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n subscribe_promise(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) {\n // console.log('not ready state:', this.state )\n return Promise.reject('subscribe_promise:: connection is not ready')\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN2) throw TypeError('please use tag string bytelength: ' + SIZE_LIMIT.TAG_LEN2)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE_REQ),\n MBP.NB('16', ++this.mid),\n MBP.NB('16', tagEncoded.byteLength),\n tagEncoded]))\n return this.setMsgPromise(this.mid)\n }\n\n subscribe_memory_channels() { //local cache . auto_resubscribe\n if (this.channels.size == 0) return\n let chList = Array.from(this.channels).join(',')\n // console.log('<< subscibe memory channels by cid', chList , this.cid )\n\n this.subscribe_promise(chList)\n .then((res) => {\n // console.log('>> SUBSCRIBE_REQ result', res ) // return code == map.size\n }).catch((e) => {\n console.log('>> SUBSCRIBE FAIL:', e)\n })\n\n }\n\n unsubscribe(tag = \"\") {\n // console.log('unsub', tag)\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n if (tag == \"\") {\n // console.log('unsub all')\n this.channels.clear();\n } else {\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.delete(tag)\n })\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(Buffer.concat([\n MBP.NB('8', IOMsg.UNSUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n\n listen(tag, handler) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n // console.log('channels:', this.channels )\n this.on(tag, handler)\n // do not subscribe now.\n // will subscribe when receive CID_RES signal from server.\n\n }\n\n\n\n link(to, tag, handler) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n\n let linkSet;\n if (this.linkMap.has(to)) {\n linkSet = this.linkMap.get(to)\n } else {\n linkSet = new Set()\n }\n\n linkSet.add(tag)\n this.linkMap.set(to, linkSet)\n this.on(tag, handler)\n this.subscribe(tag)\n // console.log('link [to] linkMap:', to, this.linkMap )\n\n }\n\n\n unlink(to, tag) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n if (tags[i] == tag) {\n this.unsubscribe(tag)\n this.removeAllListeners(tag)\n linkSet.delete(tag)\n this.linkMap.set(to, linkSet)\n break;\n }\n }\n\n // console.log('unlink linkMap result:', this.linkMap )\n }\n\n unlinkAll(to) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n this.unsubscribe(tags[i])\n this.removeAllListeners(tags[i])\n linkSet.delete(tags[i])\n }\n this.linkMap.delete(to)\n\n // console.log('unlinkAll linkMap result:', this.linkMap )\n }\n\n\n\n getMetric() {\n return {\n tx: this.txCounter,\n rx: this.rxCounter,\n txb: this.txBytes,\n rxb: this.rxBytes,\n last: (Date.now() - this.lastTxRxTime) / 1000\n }\n\n }\n\n getState() {\n return this.state\n }\n\n getStateName() {\n //state \n //value of constant STATES.NAME < number >\n //type of constant STATES.NAME name < string uppercase >\n //stateName,eventName \n return (STATES[this.state]).toLowerCase()\n }\n\n getSecurity() {\n return {\n useAuth: this.useAuth,\n isTLS: this.TLS,\n isAuthorized: this.boho.isAuthorized,\n encMode: this.encMode,\n usingEncryption: this.getEncryptionMode()\n }\n }\n\n stateChange(state, emitEventAndMessage) {\n // STATES constant name : string upperCase\n // eventName, .stateName : string lowerCase\n // .state : number\n let eventName = state.toLowerCase()\n this.state = STATES[state.toUpperCase()] // state: number\n if (emitEventAndMessage) this.emit(eventName, emitEventAndMessage)\n\n if (this.stateName !== eventName) {\n // console.log(`state: ${this.stateName} => ${eventName}` )\n this.stateName = eventName\n this.emit('change', eventName)\n }\n }\n\n}\n\n\n\n\n","import { IOCore } from \"./IOCore.js\";\nimport { Buffer } from 'meta-buffer-pack'\nexport { Boho, RAND, BohoMsg, Meta, MetaSize , sha256, MBP, Buffer } from 'boho'\nexport * from '../common/constants.js'\n\n// Browser WebSocket\nexport class IO extends IOCore{\n constructor(url ) {\n super(url);\n document.addEventListener('visibilitychange', this.browserVisiblePing.bind(this));\n if(url) this.open();\n }\n\n browserVisiblePing(){\n if (document.visibilityState === 'visible') {\n this.ping()\n }\n }\n\n \n close() {\n if(this.socket ){\n this.socket.onclose = null\n this.socket.onmessage = null\n this.socket.onerror = null\n this.socket.close();\n this.socket = null;\n }\n this.emit('close')\n }\n\n\n stop(){\n this.close()\n clearInterval(this.connectionCheckerIntervalID);\n this.connectionCheckerIntervalID = null\n } \n \n \n keepAlive() {\n if ( !this.socket || this.socket?.readyState === 3 ) { //closed\n this.open();\n }\n }\n\n createConnection(url){\n // Web Browser WebSocket\n this.socket = new WebSocket (url );\n this.stateChange('opening')\n\n this.socket.binaryType = \"arraybuffer\"\n this.socket.onopen = () => {\n this.socket.onmessage = this.onWebSocketMessage.bind(this) ;\n this.emit('open' );\n };\n\n this.socket.onerror = (e)=>{ \n this.emit('error', e)\n }\n\n this.socket.onclose = ()=>{ \n this.emit('close' );\n }\n }\n\n onWebSocketMessage( event ) {\n this.rxCounter++;\n this.lastTxRxTime = Date.now();\n let buffer;\n\n // if( event.data instanceof ArrayBuffer ){\n // //binary frame\n // }else{\n // //text frame\n // }\n buffer = Buffer.from( event.data )\n this.rxBytes += buffer.byteLength\n\n this.emit('socket_data', buffer );\n }\n\n socket_send(data) { \n if( this.socket?.readyState === 1 ){ //open\n // console.log('websocket send', data)\n this.socket.send( data )\n this.txCounter++;\n this.txBytes += data.byteLength\n this.lastTxRxTime = Date.now();\n }else{\n console.log('.')\n }\n }\n \n}\n\n","import { IO } from './src/client/IOWebSocket.js'\nimport { Boho, RAND, MBP, BohoMsg, Meta, MetaSize , sha256, Buffer } from 'boho'\n\nBoho.RAND = RAND;\nBoho.BohoMsg = BohoMsg;\nBoho.Meta = Meta;\nBoho.MetaSize = MetaSize;\nBoho.sha256 = sha256;\nIO.Boho = Boho;\nIO.MBP = MBP;\nIO.Buffer = Buffer;\n\nexport default IO;\n"],"names":["byteLength_1","b64","lens","getLens","validLen","placeHoldersLen","toByteArray_1","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray_1","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","value","c","rt","abs","isNaN","floor","log","LN2","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","byteLength","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64","fromByteArray","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","toByteArray","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","encoder","TextEncoder","decoder","TextDecoder","NB","numberBuffer","initValue","toUpperCase","MB","metaBuffer","typeOrData","bufferType","JSON","stringify","v","MBA","metaBufferArguments","args","map","argsIndex","parseTypeName","readTypedBuffer","simpleType","strBuffer","decode","strNumber","objEncoded","parse","pack","bufArr","subArr","filter","item","flatArray","info","infoEncoded","infoSize","forEach","bufPack","infoStr","encode","infoSizeBuff","unpack","binPack","meta","infoArr","getMeta","binObj","readCounter","result","leftSize","mbaIndex","$","U8","parseUint8Array","shareArrayBuffer","originData","dataCopy","B8","parseBuffer","u8","B8pack","parseBufferThenConcat","dataArray","buffers","U8pack","parseUint8ThenConcat","bufferSize","equal","buf1","buf2","getBufferSize","getMetaSize","TAIL_LEN","parseMetaInfo","infoFrom","decoded","firstItem","readTail","DataView","getUint16","getBuffer","rawBufferSize","showDetail","metaInfo","rawPack","has","hasOwnProperty","prefix","Events","EE","context","once","addListener","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","names","getOwnPropertySymbols","listeners","handlers","l","ee","listenerCount","emit","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","module","K","Uint32Array","hashBlocks","w","p","f","g","h","u","t1","t2","Hash","digestLength","blockSize","state","Int32Array","temp","bufferLength","bytesHashed","finished","reset","clean","update","dataLength","dataPos","finish","left","bitLenHi","bitLenLo","padLength","digest","_saveState","_restoreState","HMAC","key","inner","outer","pad","istate","ostate","hash","sha256","MBP.U8","MBP.B8","hmac","MBP.MB","BohoMsg","AUTH_REQ","AUTH_NONCE","AUTH_HMAC","AUTH_ACK","AUTH_FAIL","AUTH_EXT","ENC_PACK","ENC_E2E","ENC_488","Meta","MBP.meta","lastItem","MetaSize","isNode","global","process","RAND","webcrypto","getRandomValues","self","crypto","Boho","_id8","_otpSrc44","_otp36","_hmac","auth_salt12","localNonce","remoteNonce","isAuthorized","clearAuth","set_hash_id8","set_id8","encStr","set_key","set_id_key","id_key","delimiterPosition","id","substring","copy_id8","copy_key","sha256_n","srcData","hashSum","set_clock_rand","milTime","Date","now","secTime","MBP.NB","set_clock_nonce","nonce","set_salt12","salt12","resetOTP","getIndexOTP","otpIndex","generateHMAC","hmacSrc","getHMAC8","xotp","otpStartIndex","shareDataBuffer","dataOffset","xorCalcLen","iotp","auth_req","MBP.pack","auth_nonce","unixTime","auth_hmac","MBP.unpack","check_auth_hmac","infoPack","hmac32","MBP.equal","replyHMAC","auth_ack","MBP.rawPack","check_auth_ack_hmac","encrypt_488","hmac8","encData","decrypt_488","otpSrc8","xdata","$OTHERS","decData","encryptPack","decryptPack","encrypt_e2e","baseKey","decrypt_e2e","decPack","STATES","OPENING","OPEN","CLOSING","CLOSED","SERVER_READY","AUTH_READY","READY","REDIRECTING","ENC_MODE","NO","YES","AUTO","SIZE_LIMIT","PAYLOAD_TYPE","EMPTY","TEXT","BINARY","OBJECT","MJSON","IOMsg","CID_REQ","CID_RES","QUOTA_LEVEL","SERVER_CLEAR_AUTH","SERVER_REDIRECT","LOOP","ECHO","PING","PONG","CLOSE","SIGNAL","SIGNAL_REQ","SIGNAL_E2E","SUBSCRIBE","SUBSCRIBE_REQ","UNSUBSCRIBE","SERVER_SIGNAL","IAM","IAM_RES","SET","RESPONSE_CODE","RESPONSE_MBP","REQUEST","RESPONSE","FLOW_MODE","WAIT","RESUME","TIME_OUT","OVER_SIZE","OVER_FLOW","quotaTable","signalSize","publishCounter","trafficRate","getSignalPack","tag","sigPack","tagEncoded","payload","containsBuffer","parsePayload","mbaBuffer","MBP.MBA","IOCore","url","cid","ip","socket","stateName","getStateName","txCounter","rxCounter","txBytes","rxBytes","lastTxRxTime","connectionCheckerPeriod","connectionCheckerIntervalID","boho","TLS","encMode","useAuth","nick","channels","Set","promiseMap","Map","promiseTimeOut","mid","level","quota","serverSet","linkMap","onOpen","bind","onClose","onData","redirect","url2","close","stateChange","createConnection","open","setInterval","keepAlive","login","auth_pack","send","auth","msgType","err","pong","jsonInfo","cidStr","subscribe_memory_channels","quotaLevel","stop","host_port","protocol","byteToUrl","ss","setPack","topic","tagLen","tagBuf","payloadType","payloadBuffer","payloadStringWithoutNull","oneString","oneObjectBuffer","oneJSONObject","mjsonBuffer","mjson","mbaObject","testPromise","iam","title","send_enc_mode","ping","echo","bin","MBP.U8pack","socket_send","getEncryptionMode","useEncryption","encHeader","encPack","setMsgPromise","Promise","resolve","reject","setTimeout","delete","status","ok","publish","signal","signalPack","signal_e2e","dataPack","sercretPack","storeName","req","body","subscribe","add","subscribe_promise","chList","then","catch","unsubscribe","clear","listen","handler","link","to","linkSet","unlink","tags","unlinkAll","getMetric","tx","rx","txb","rxb","getState","getSecurity","isTLS","usingEncryption","emitEventAndMessage","eventName","IO","document","addEventListener","browserVisiblePing","visibilityState","onclose","onmessage","onerror","clearInterval","readyState","WebSocket","binaryType","onopen","onWebSocketMessage","MBP"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iosignal.min.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/meta-buffer-pack/src/meta-buffer-pack.js","../node_modules/eventemitter3/index.js","../node_modules/boho/lib/fast-sha256.js","../node_modules/boho/src/sha256-mbp.js","../node_modules/boho/src/constants.js","../node_modules/boho/src/boho.js","../src/common/constants.js","../src/common/quotaTable.js","../src/common/payload.js","../src/client/IOCore.js","../src/client/IOWebSocket.js","../indexWebBrowser.js"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer/index.js'\nexport { Buffer } // for iife reference MBP.Buffer\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nexport const NB = numberBuffer\nexport function numberBuffer(type, initValue = 0) {\n let buffer\n if (type === undefined || typeof type !== 'string' || typeof initValue !== 'number') {\n throw TypeError('invlaid init variablie type name. ')\n }\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n buffer = Buffer.alloc(1)\n if (type.includes('I')) buffer.writeInt8(initValue)\n else buffer.writeUint8(initValue)\n } else if (type.includes('16')) {\n buffer = Buffer.alloc(2)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt16LE(initValue)\n else buffer.writeInt16BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint16LE(initValue)\n else buffer.writeUint16BE(initValue)\n }\n } else if (type.includes('32')) {\n buffer = Buffer.alloc(4)\n if (type.includes('I')) {\n if (type.includes('L')) buffer.writeInt32LE(initValue)\n else buffer.writeInt32BE(initValue)\n } else {\n if (type.includes('L')) buffer.writeUint32LE(initValue)\n else buffer.writeUint32BE(initValue)\n }\n } else if (type.includes('F')) {\n buffer = Buffer.alloc(4)\n if (type.includes('L')) {\n buffer.writeFloatLE(initValue)\n } else {\n buffer.writeFloatBE(initValue)\n }\n } else if (type.includes('N')) { // number as string\n buffer = Buffer.from(String(initValue))\n } else {\n console.log(`invalid type: ${type} or initvalue: ${initValue}`)\n }\n return buffer\n}\n\n\nexport const MB = metaBuffer\nexport function metaBuffer(name, typeOrData, initValue) {\n let buffer\n let bufferType = 'B'\n if (typeof typeOrData === 'number') {\n if (typeof initValue === 'number') { // initValue 0 should be passed.\n buffer = Buffer.alloc(typeOrData)\n if (initValue !== 0) buffer.fill(initValue)\n bufferType = 'B'\n } else {\n buffer = Buffer.from(String(typeOrData))\n bufferType = 'N'\n }\n } else if (typeof typeOrData === 'string' && typeof initValue === 'number') { // number with type.\n bufferType = typeOrData.toUpperCase() // use explicit type name\n buffer = numberBuffer(typeOrData, initValue) // notice. two categories. n: number string. 8, 16, 32: typed number.\n } else if (typeof typeOrData === 'string' && initValue === undefined) { // string buffer\n buffer = Buffer.from(typeOrData)\n bufferType = 'S'\n } else if (typeOrData instanceof Uint8Array && initValue === undefined) { // buffer | Uint8Array\n // Buffer.from: Copies the passed buffer data onto a new Buffer instance.\n // typecasting Uint8Array to Buffer.\n buffer = (typeOrData instanceof Buffer) ? typeOrData : Buffer.from(typeOrData)\n } else if (typeOrData instanceof ArrayBuffer && initValue === undefined) { // arrayBuffer\n // Notice. typedArray is recommended instead of arrayBuffer\n buffer = Buffer.from(typeOrData)\n } else if (ArrayBuffer.isView(typeOrData)) { // typedarray buffer\n buffer = Buffer.from(typeOrData.buffer, typeOrData.byteOffset, typeOrData.byteLength)\n } else if (typeof typeOrData === 'object' && initValue === undefined) { // object. like array. stringify\n buffer = Buffer.from(JSON.stringify(typeOrData))\n bufferType = 'O'\n } else if (typeof typeOrData === 'boolean' && initValue === undefined) { // object. like array. stringify\n const v = typeOrData ? 1 : 0\n buffer = Buffer.from([v])\n bufferType = '!'\n } else {\n throw TypeError('invalid meta buffer type')\n }\n\n if (typeof name === 'string' && name.includes('#')) name = '' //\n\n return [name, bufferType, buffer]\n}\n\nexport const MBA = metaBufferArguments\nexport function metaBufferArguments(...args) {\n let i = 0\n const mba = args.map(\n data => {\n const argsIndex = i++\n // tip. MBA use index number as metabuffer's property name.\n if (typeof data === 'number') {\n // * JS's primitive Number stored as string.\n return MB(argsIndex, 'N', data)\n } else {\n // typedarray, dataview, array, object, boolean\n return MB(argsIndex, data)\n }\n })\n\n return mba\n}\n\nexport function parseTypeName(type) {\n type = type.toUpperCase()\n\n if (type.includes('8')) {\n if (type.includes('I')) {\n return 'int8'\n } else {\n return 'uint8'\n }\n } else if (type.includes('16')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int16_le'\n } else {\n return 'int16_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint16_le'\n } else {\n return 'uint16_be'\n }\n }\n } else if (type.includes('32')) {\n if (type.includes('I')) {\n if (type.includes('L')) {\n return 'int32_le'\n } else {\n return 'int32_be'\n }\n } else {\n if (type.includes('L')) {\n return 'uint32_le'\n } else {\n return 'uint32_be'\n }\n }\n } else if (type.includes('F')) {\n if (type.includes('L')) {\n return 'float_le'\n } else {\n return 'float_be'\n }\n } else if (type === 'B') {\n return 'buffer'\n } else if (type === 'S') { // string or arguments\n return 'string'\n } else if (type === 'N') { // number encoded as string\n return 'number'\n } else if (type === 'O') { // object encoded string\n return 'object'\n } else if (type === '!') { // boolean 1:true 0:false\n return 'boolean'\n } else {\n throw TypeError('invalid data type')\n }\n\n}\n\nexport function readTypedBuffer(simpleType, buffer, offset, length) {\n try {\n const type = parseTypeName(simpleType)\n if (type == 'int8') return buffer.readInt8(offset)\n else if (type === 'uint8') return buffer.readUint8(offset)\n else if (type === 'int16_le') return buffer.readInt16LE(offset)\n else if (type === 'int16_be') return buffer.readInt16BE(offset)\n else if (type === 'uint16_le') return buffer.readUint16LE(offset)\n else if (type === 'uint16_be') return buffer.readUint16BE(offset)\n else if (type === 'int32_le') return buffer.readInt32LE(offset)\n else if (type === 'int32_be') return buffer.readInt32BE(offset)\n else if (type === 'uint32_le') return buffer.readUint32LE(offset)\n else if (type === 'uint32_be') return buffer.readUint32BE(offset)\n else if (type === 'float_le') return buffer.readFloatLE(offset)\n else if (type === 'float_be') return buffer.readFloatBE(offset)\n\n else if (type === 'buffer') {\n return buffer.subarray(offset, offset + length)\n } else if (type === 'string') {\n const strBuffer = buffer.subarray(offset, offset + length)\n return decoder.decode(strBuffer)\n } else if (type === 'number') {\n const strNumber = buffer.subarray(offset, offset + length)\n return Number(decoder.decode(strNumber))\n } else if (type === 'object') {\n const objEncoded = buffer.subarray(offset, offset + length)\n return JSON.parse(decoder.decode(objEncoded))\n } else if (type === 'boolean') {\n const v = buffer.readInt8(offset)\n return v === 1\n } else {\n return\n }\n } catch (error) {\n // console.log('MBP:readTypedBuffer obj decoding error.', error)\n }\n // any error and invalid data return undefined \n return\n}\n\n// to join MBA or MB meta list.\nfunction flatArray(args) {\n let subArr = []\n const mainArr = args.filter(item => {\n if (Array.isArray(item[0])) subArr = subArr.concat(item)\n else return item\n })\n return mainArr.concat(subArr)\n}\n\nexport function pack(...args) {\n const bufArr = flatArray(args)\n // console.log('MBP.pack: flat MB or MBA list', bufArr)\n let size = 0\n const info = []\n let offset = 0\n\n bufArr.forEach(bufPack => {\n const [name, type, data] = bufPack\n size += data.byteLength\n\n if (typeof name === 'number' || name.length > 0) {\n // if the item has property name then add meta JSON info.\n // type of name is Number in MBA.(index number)\n // type of name is String in MB. except null string.\n // add additional informative meta info. \n info.push([name, type, offset, data.byteLength])\n }\n offset = size\n })\n\n\n // console.log('MBP.pack meta:', info )\n let infoEncoded\n let infoSize\n\n if (info.length > 0) {\n let infoStr = JSON.stringify(info)\n // console.log('pack infoStr , size:', infoStr , infoStr.length )\n infoEncoded = encoder.encode(infoStr)\n infoSize = infoEncoded.byteLength\n size = size + infoSize + 2\n }\n\n const buffer = Buffer.alloc(size)\n offset = 0\n bufArr.forEach(bufPack => {\n const buf = bufPack[2]\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n\n if (info.length > 0) {\n buffer.set(infoEncoded, offset)\n const infoSizeBuff = NB('16', infoSize)\n buffer.set(infoSizeBuff, offset + infoSize)\n return buffer\n } else {\n return buffer\n }\n}\n\n\n/**\n * unpack() will use embeded meta info from the binary pack. \n * You can specify (optional) meta obejct. \n * (It's useful to read pure buffer data.)\n * \n * You can get the meta object from: getFrame(pack) , meta()\n * @param {Buffer|Uint8Array} binPack binaryData\n * @param {Object} meta *OPTION* \n * @returns {Object|undefined} success: return Object (include buffer data). fail: return undefined\n */\nexport function unpack(binPack, meta) {\n\n const infoArr = meta || getMeta(binPack)\n if (!infoArr) return\n\n const buffer = Buffer.from(binPack)\n const binObj = {}\n let readCounter = 0\n infoArr.forEach(bufPack => {\n const [name, type, offset, length] = bufPack\n let result = readTypedBuffer(type, buffer, offset, length)\n if (result == undefined) return\n binObj[name] = result\n if (length) readCounter += length\n })\n\n // Can not define meta for variable size buffer \n // unpacker support automatic property to read left(did't read) buffers.\n // console.log(\"######, unpack: buffer \" , readCounter, buffer ,buffer.byteLength)\n if (meta && buffer.byteLength !== readCounter) {\n let leftSize = buffer.byteLength - readCounter\n // console.log('total,left buffer size', buffer.byteLength, leftSize )\n let result = readTypedBuffer('b', buffer, readCounter, leftSize)\n if (result == undefined) return\n binObj[\"$OTHERS\"] = result\n }\n\n // set args with values if exist.\n let mbaIndex = 0;\n let args = [];\n while (binObj[mbaIndex]) {\n args.push(binObj[mbaIndex++])\n }\n\n if (args.length > 0) {\n binObj.args = args\n binObj.$ = binObj.args\n }\n return binObj\n}\n\n\nexport const U8 = parseUint8Array //alias\n/**\n * \n * @param {any} data \n * @param {Boolean} shareArrayBuffer false(default): return new( or copied) ArrayBuffer. true: share the input data's arrayBuffer.\n * @returns {Uint8Array}\n */\nexport function parseUint8Array(data, shareArrayBuffer = false) {\n if (data === undefined) throw TypeError('Invalid data type: Undefined')\n if (typeof data === 'string') {\n return encoder.encode(data)\n } else if (typeof data === 'number') { // number -> 1 byte uint8array(number)\n return Uint8Array.from([data])\n } else if (data instanceof ArrayBuffer) { // arraybuffer -> wrap uint8array(ab)\n if (shareArrayBuffer) {\n return new Uint8Array(data)\n } else {\n const originData = new Uint8Array(data)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else if (ArrayBuffer.isView(data)) { // accept Buffer too.\n if (shareArrayBuffer) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength) // DataView, TypedArray > uint8array( use offset, length )\n } else {\n // new memory to protect origin arraybuffer.\n const originData = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n const dataCopy = new Uint8Array(data.byteLength)\n dataCopy.set(originData)\n return dataCopy\n }\n } else { // array, object\n return encoder.encode(JSON.stringify(data)) // object(array.. ) > JSON.str > encode > unint8array\n }\n}\n\nexport const B8 = parseBuffer\nexport function parseBuffer(data, shareArrayBuffer = false) {\n\n const u8 = parseUint8Array(data, shareArrayBuffer)\n if (shareArrayBuffer) {\n return Buffer.from(u8.buffer, u8.byteOffset, u8.byteLength)\n } else {\n return Buffer.from(u8)\n }\n}\n\nexport const B8pack = parseBufferThenConcat\nexport function parseBufferThenConcat(...dataArray) {\n const buffers = dataArray.map(data => parseBuffer(data))\n return Buffer.concat(buffers)\n}\n\n\nexport const U8pack = parseUint8ThenConcat // alias\n/**\n * 1. parse list of data into U8 list\n * 2. return new Uint8Array merged.\n * @param {...any} dataArray \n * @returns \n */\nexport function parseUint8ThenConcat(...dataArray) {\n try {\n let bufferSize = 0\n let offset = 0\n const buffers = dataArray.map(data => parseUint8Array(data))\n buffers.forEach(buf => { bufferSize += buf.byteLength })\n const buffer = new Uint8Array(bufferSize)\n buffers.forEach(buf => {\n buffer.set(buf, offset)\n offset += buf.byteLength\n })\n return buffer\n } catch (error) {\n console.log(error)\n }\n}\n\nexport function hex(buffer) {\n return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('')\n}\n\nexport function equal(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) return false\n for (let i = 0; i < buf1.byteLength; i++) {\n if (buf1[i] !== buf2[i]) return false\n }\n return true\n}\n\n\nexport function getBufferSize(binPack) {\n if (getMetaSize(binPack) === 0) {\n return binPack.byteLength\n } else {\n return binPack.byteLength - getMetaSize(binPack) - TAIL_LEN\n }\n}\n\n// MB and MBA \nexport function parseMetaInfo(binPack, infoSize) {\n let info;\n try {\n const buffer = new Uint8Array(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoFrom = buffer.byteLength - infoSize - 2\n const infoEncoded = buffer.subarray(infoFrom, buffer.byteLength - 2)\n const decoded = decoder.decode(infoEncoded)\n const info = JSON.parse(decoded)\n\n if (!Array.isArray(info) || !Array.isArray(info[0])) return\n\n let firstItem = info[0]\n if (!firstItem) return\n\n if (firstItem.length < 3) return\n const [name, type, offset] = firstItem\n\n if (typeof type !== 'string' || typeof offset !== 'number') return\n\n return info\n } catch (error) {\n // return undefined\n }\n}\n\n\n/** \n * Meta buffer pack Tail:\n * binary Pack include TAIL(two bytes size) info at the end if it has JSON info.\n * not include TAIL if it has not JSON.\n */\nexport const TAIL_LEN = 2\n\n/**\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @returns {Number} last two byte value( read Uint16 bigendian )\n */\nexport function readTail(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n if (binPack.byteLength <= TAIL_LEN) return 0\n\n const dv = new DataView(binPack.buffer, binPack.byteOffset, binPack.byteLength)\n const infoSize = dv.getUint16(binPack.byteLength - TAIL_LEN) // last 2 bytes for json-info-length.\n return infoSize\n\n } else {\n // throw TypeError('invalid data type.')\n return 0\n }\n\n}\n\n\n// binay data pack is not always Buffer. \n// It should accept Uint8Array binPack.\n// This function don't use Buffer method.\n\nexport function getMetaSize(binPack) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n if (binPack instanceof Uint8Array) {\n\n const size = binPack.byteLength\n if (size <= TAIL_LEN) return 0\n\n //1. tail size check\n const infoSize = readTail(binPack)\n if (infoSize === 0 || infoSize > size) return 0\n //2. try parse JSON \n const success = parseMetaInfo(binPack, infoSize)\n //3. return success: jsonInfoSize, fail: 0\n if (success) return infoSize\n else return 0\n } else {\n return 0\n }\n}\n\n\n/**\n * \n * @param {Buffer|Uint8Array} binPack \n * @returns {Buffer} \n */\nexport function getBuffer(binPack) {\n const rawBufferSize = getBufferSize(binPack)\n return binPack.subarray(0, rawBufferSize)\n}\n\n\n\n/**\n * extract Meta info object if it has.\n * \n * @param {Buffer|Uint8Array|ArrayBuffer} binPack \n * @param {Boolean} showDetail add additional item info: full data type name and bytelength.\n * @returns {Object|undefined} success: return MetaInfo Object. fail: return undefined.(No valid JSON included.)\n */\nexport function getMeta(binPack, showDetail = false) {\n if (binPack instanceof ArrayBuffer) {\n binPack = Buffer.from(binPack) // creates a view for ArrayBuffer, without copying.\n }\n const infoSize = readTail(binPack)\n if (infoSize === 0) return\n\n // check valid Meta\n let metaInfo = parseMetaInfo(binPack, infoSize)\n if (!metaInfo) return\n\n if (!showDetail) {\n return metaInfo\n } else {\n // add additional info\n metaInfo.forEach(bufPack => {\n const len = bufPack[3]\n if (len == undefined) { // add size info.\n if (bufPack[1].includes('8')) bufPack[3] = 1\n else if (bufPack[1].includes('16')) bufPack[3] = 2\n else if (bufPack[1].includes('32')) bufPack[3] = 4\n else if (bufPack[1].includes('F')) bufPack[3] = 4\n else if (bufPack[1].includes('!')) bufPack[3] = 1\n }\n bufPack[4] = parseTypeName(bufPack[1]) // add full-type-name.\n })\n return metaInfo\n }\n}\n\nexport function rawPack(...args) {\n return getBuffer(pack(...args))\n}\n\nexport function meta(...args) {\n return getMeta(pack(...args))\n}\n\nexport function metaDetail(...args) {\n return getMeta(pack(...args), true)\n}\n\nexport function getMetaDetail(binPack) {\n return getMeta(binPack, true)\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexport var digestLength = 32\nexport var blockSize = 64\n// SHA-256 constants\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\nfunction hashBlocks (w, v, p, pos, len) {\n let a, b, c, d, e, f, g, h, u, i, j, t1, t2\n while (len >= 64) {\n a = v[0]\n b = v[1]\n c = v[2]\n d = v[3]\n e = v[4]\n f = v[5]\n g = v[6]\n h = v[7]\n for (i = 0; i < 16; i++) {\n j = pos + i * 4\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff))\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2]\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10)\n u = w[i - 15]\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3)\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0)\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0\n h = g\n g = f\n f = e\n e = (d + t1) | 0\n d = c\n c = b\n b = a\n a = (t1 + t2) | 0\n }\n v[0] += a\n v[1] += b\n v[2] += c\n v[3] += d\n v[4] += e\n v[5] += f\n v[6] += g\n v[7] += h\n pos += 64\n len -= 64\n }\n return pos\n}\n// Hash implements SHA256 hash algorithm.\nconst Hash = /** @class */ (function () {\n function Hash () {\n this.digestLength = digestLength\n this.blockSize = blockSize\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8) // hash state\n this.temp = new Int32Array(64) // temporary state\n this.buffer = new Uint8Array(128) // buffer for data to hash\n this.bufferLength = 0 // number of bytes in buffer\n this.bytesHashed = 0 // number of total bytes hashed\n this.finished = false // indicates whether the hash was finalized\n this.reset()\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667\n this.state[1] = 0xbb67ae85\n this.state[2] = 0x3c6ef372\n this.state[3] = 0xa54ff53a\n this.state[4] = 0x510e527f\n this.state[5] = 0x9b05688c\n this.state[6] = 0x1f83d9ab\n this.state[7] = 0x5be0cd19\n this.bufferLength = 0\n this.bytesHashed = 0\n this.finished = false\n return this\n }\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0\n }\n this.reset()\n }\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\")\n }\n let dataPos = 0\n this.bytesHashed += dataLength\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64)\n this.bufferLength = 0\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength)\n dataLength %= 64\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++]\n dataLength--\n }\n return this\n }\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed\n const left = this.bufferLength\n const bitLenHi = (bytesHashed / 0x20000000) | 0\n const bitLenLo = bytesHashed << 3\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128\n this.buffer[left] = 0x80\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength)\n this.finished = true\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff\n }\n return this\n }\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i]\n }\n }\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i]\n }\n this.bytesHashed = bytesHashed\n this.finished = false\n this.bufferLength = 0\n }\n return Hash\n}())\nexport { Hash }\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nconst HMAC = /** @class */ (function () {\n function HMAC (key) {\n this.inner = new Hash()\n this.outer = new Hash()\n this.blockSize = this.inner.blockSize\n this.digestLength = this.inner.digestLength\n const pad = new Uint8Array(this.blockSize)\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean()\n } else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i]\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36\n }\n this.inner.update(pad)\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c\n }\n this.outer.update(pad)\n this.istate = new Uint32Array(8)\n this.ostate = new Uint32Array(8)\n this.inner._saveState(this.istate)\n this.outer._saveState(this.ostate)\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize)\n this.outer._restoreState(this.ostate, this.outer.blockSize)\n return this\n }\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0\n }\n this.inner.clean()\n this.outer.clean()\n }\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data)\n return this\n }\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out)\n } else {\n this.inner.finish(out)\n this.outer.update(out, this.digestLength).finish(out)\n }\n return this\n }\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n const out = new Uint8Array(this.digestLength)\n this.finish(out)\n return out\n }\n return HMAC\n}())\nexport { HMAC }\n// Returns SHA256 hash of data.\nexport function hash (data) {\n const h = (new Hash()).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Function hash is both available as module.hash and as default export.\n// export default hash\n// Returns HMAC-SHA256 of data under the key.\nexport function hmac (key, data) {\n const h = (new HMAC(key)).update(data)\n const digest = h.digest()\n h.clean()\n return digest\n}\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer (buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n const num = counter[0]\n if (num === 0) {\n throw new Error('hkdf: cannot expand more')\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset()\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer)\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info)\n }\n // Hash in the counter.\n hmac.update(counter)\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer)\n // Increment counter inside typed array, this works properly.\n counter[0]++\n}\nconst hkdfSalt = new Uint8Array(digestLength) // Filled with zeroes.\nexport function hkdf (key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt }\n if (length === void 0) { length = 32 }\n const counter = new Uint8Array([1])\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(salt, key)\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n const hmac_ = new HMAC(okm)\n // Allocate buffer.\n const buffer = new Uint8Array(hmac_.digestLength)\n let bufpos = buffer.length\n const out = new Uint8Array(length)\n for (let i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter)\n bufpos = 0\n }\n out[i] = buffer[bufpos++]\n }\n hmac_.clean()\n buffer.fill(0)\n counter.fill(0)\n return out\n}\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nexport function pbkdf2 (password, salt, iterations, dkLen) {\n const prf = new HMAC(password)\n const len = prf.digestLength\n const ctr = new Uint8Array(4)\n const t = new Uint8Array(len)\n const u = new Uint8Array(len)\n const dk = new Uint8Array(dkLen)\n for (var i = 0; i * len < dkLen; i++) {\n const c = i + 1\n ctr[0] = (c >>> 24) & 0xff\n ctr[1] = (c >>> 16) & 0xff\n ctr[2] = (c >>> 8) & 0xff\n ctr[3] = (c >>> 0) & 0xff\n prf.reset()\n prf.update(salt)\n prf.update(ctr)\n prf.finish(u)\n for (var j = 0; j < len; j++) {\n t[j] = u[j]\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset()\n prf.update(u).finish(u)\n for (let k = 0; k < len; k++) {\n t[k] ^= u[k]\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j]\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0\n }\n prf.clean()\n return dk\n}\n","import { hash, hmac } from '../lib/fast-sha256.js'\nimport { MBP } from 'meta-buffer-pack'\n\n/*\nTip.\n fast-sha256 use data:8Uint8Array\n sha256-mbp use data:any ( internal type converter )\n\n MBP.U8( any ) return Uint8Array\n MBP.B8( any ) reutn Buffer instance\n\n*/\nconst sha256 = {};\n\nsha256.hash = function (data) {\n return hash(MBP.U8(data))\n}\n\nsha256.hex = function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('hex')\n}\n\nsha256.base64= function (data) {\n return MBP.B8( hash(MBP.U8(data)) ).toString('base64')\n}\n\nsha256.hmac = function (key, data) {\n return hmac(MBP.U8(key), MBP.U8(data))\n}\n\nexport { sha256 }\n","import{ MBP, Buffer} from \"meta-buffer-pack\"\nconst MB = MBP.MB\n\n\n// remocon message pack one byte header. \nexport let BohoMsg = {\n AUTH_REQ : 0xB0, \n AUTH_NONCE: 0xB1,\n AUTH_HMAC: 0xB2,\n AUTH_ACK: 0xB3,\n AUTH_FAIL: 0xB4,\n AUTH_EXT: 0xB5,\n ENC_PACK : 0xB6, \n ENC_E2E : 0xB7, \n ENC_488 : 0xB8\n}\n\nfor (let c in BohoMsg) { BohoMsg[BohoMsg[c]] = c }\n\nexport const Meta = {\n\n AUTH_REQ: MBP.meta( // 2\n MB('header','8', 0),\n MB('reserved','8', 0)\n ),\n\n AUTH_NONCE: MBP.meta( // 13\n MB('header','8', 0),\n MB('unixTime','32L', 0),\n MB('milTime','32L', 0 ),\n MB('nonce', Buffer.alloc(4))\n ),\n\n AUTH_HMAC: MBP.meta( // 45\n MB('header','8', 0),\n MB('id8',Buffer.alloc(8)),\n MB('nonce', Buffer.alloc(4)),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n AUTH_ACK: MBP.meta( // 33\n MB('header','8', 0),\n MB('hmac32', Buffer.alloc(32))\n ),\n \n\n ENC_PACK: MBP.meta( //25 + payload\n MB('type','8',0),\n MB('len','32L',0), // pure xdata size. \n MB('salt12', Buffer.alloc(12)), // sec,mil,rand\n MB('hmac',8,0)\n // MB( 'xdata', encData )\n ),\n\n\n ENC_488: MBP.meta( // 21 + payload\n MB('type','8', 0 ),\n MB('len','32L', 0 ),\n MB('otpSrc8', Buffer.alloc(8) ),\n MB('hmac8', Buffer.alloc(8) )\n // MB('xdata', encData ) \n )\n\n\n }\n\n\n function getMetaSize(meta){\n let lastItem = meta[ meta.length - 1]\n return lastItem[2] + lastItem[3]\n }\n\n export const MetaSize = {\n AUTH_REQ: getMetaSize( Meta.AUTH_REQ ),\n AUTH_NONCE: getMetaSize( Meta.AUTH_NONCE ),\n AUTH_HMAC: getMetaSize( Meta.AUTH_HMAC ),\n AUTH_ACK: getMetaSize( Meta.AUTH_ACK ),\n ENC_PACK: getMetaSize( Meta.ENC_PACK ),\n ENC_488: getMetaSize( Meta.ENC_488 )\n }\n\n// console.log( 'boho MetaSize', MetaSize )\n// boho MetaSize {\n// AUTH_REQ: 2,\n// AUTH_NONCE: 13,\n// AUTH_HMAC: 45,\n// AUTH_ACK: 33,\n// ENC_PACK: 25,\n// ENC_488: 21\n// }","import { sha256 } from './sha256-mbp.js'\nimport { MBP, Buffer } from 'meta-buffer-pack'\nexport { sha256, MBP, Buffer }\n\nimport { webcrypto } from 'crypto'\nimport { BohoMsg, Meta, MetaSize } from \"./constants.js\"\nexport { BohoMsg, Meta, MetaSize }\n\nlet isNode = false\ntry {\n isNode = Object.prototype.toString.call(global.process) === '[object process]'\n} catch (e) { }\n\n\nexport function RAND(size) {\n if( isNode ){\n return webcrypto.getRandomValues(Buffer.alloc(size))\n }else{\n return self.crypto.getRandomValues(Buffer.alloc(size))\n }\n}\n\n\n\nexport class Boho {\n // A. Core\n constructor() {\n\n this._id8 = Buffer.alloc(8)\n this._otpSrc44 = Buffer.alloc(44)\n this._otp36 = Buffer.alloc(36)\n this._hmac = Buffer.alloc(32)\n\n this.auth_salt12 = Buffer.alloc(12)\n this.localNonce = Buffer.alloc(4)\n this.remoteNonce = Buffer.alloc(4)\n this.isAuthorized = false\n\n }\n\n clearAuth(){\n this._id8.fill(0)\n this._otpSrc44.fill(0)\n this._otp36.fill(0)\n this._hmac.fill(0)\n this.auth_salt12.fill(0)\n this.localNonce.fill(0)\n this.remoteNonce.fill(0)\n this.isAuthorized = false\n }\n\n // for the self\n set_hash_id8(data) {\n let idSum = MBP.B8(sha256.hash(data))\n idSum.copy(this._id8, 0, 0, 8)\n }\n\n set_id8(data) {\n let encStr = MBP.B8(data)\n this._id8.fill(0)\n encStr.copy(this._id8, 0, 0, 8)\n }\n\n set_key(data) {\n let keySum = MBP.B8(sha256.hash(data))\n keySum.copy(this._otpSrc44, 0, 0, 32)\n }\n\n // id_key == 'id' + '.' + 'key' \n set_id_key(id_key) {\n let delimiterPosition = id_key.indexOf('.')\n if( delimiterPosition == -1 ) return\n let id = id_key.substring(0, delimiterPosition)\n let key = id_key.substring(delimiterPosition + 1)\n this.set_id8(id)\n this.set_key(key)\n }\n\n copy_id8(data) {\n data.copy(this._id8, 0, 0, 8)\n }\n\n copy_key(data) {\n data.copy(this._otpSrc44, 0, 0, 32)\n }\n\n\n sha256_n(srcData, n) {\n let hashSum = sha256.hash(srcData)\n for (let i = 0; i < n; i++) hashSum = sha256.hash(hashSum)\n return hashSum\n }\n\n\n // useful general encryption i.e. enc_pack\n set_clock_rand() {\n\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n RAND(4)\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n // for secure communication sender. \n set_clock_nonce(nonce) {\n let milTime = Date.now()\n let secTime = parseInt(milTime / 1000)\n milTime = milTime % 0xffffffff\n const salt12 = Buffer.concat([\n MBP.NB('32L', secTime),\n MBP.NB('32L', milTime),\n nonce\n ])\n\n salt12.copy(this._otpSrc44, 32)\n }\n\n\n set_salt12(salt12) {\n salt12.copy(this._otpSrc44, 32)\n }\n\n resetOTP() {\n let otp32 = MBP.B8(sha256.hash(this._otpSrc44))\n otp32.copy(this._otp36, 0, 0, 32)\n }\n\n getIndexOTP(otpIndex) {\n this._otp36.writeUInt32LE(otpIndex, 32)\n return sha256.hash(this._otp36)\n }\n\n\n generateHMAC(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n }\n\n // return 8 bytes of hash\n getHMAC8(data) {\n let hmacSrc = Buffer.concat([this._otpSrc44, data])\n this._hmac = MBP.B8(sha256.hash(hmacSrc))\n return this._hmac.subarray(0, 8)\n }\n\n xotp(data, otpStartIndex = 0, shareDataBuffer = false) {\n\n data = MBP.B8(data, shareDataBuffer)\n\n let len = data.byteLength\n let otpIndex = otpStartIndex\n let dataOffset = 0\n let xorCalcLen = 0\n\n while (len > 0) {\n xorCalcLen = len < 32 ? len : 32\n let iotp = this.getIndexOTP(++otpIndex);\n for (let i = 0; i < xorCalcLen; i++) {\n data[dataOffset++] ^= iotp[i]\n }\n len -= 32\n }\n return data\n }\n\n // B. AUTH process\n\n // step 1\n // client send AUTH_REQ\n auth_req() {\n return MBP.pack(\n MBP.MB('#type', '8', BohoMsg.AUTH_REQ),\n MBP.MB('#reserved', '8', 0)\n )\n }\n\n // step 2\n // server send AUTH_NONCE\n auth_nonce() {\n let now = Date.now()\n let unixTime = Math.floor(now / 1000)\n let milTime = now % 1000\n this.localNonce = RAND(4)\n this.auth_salt12 = Buffer.concat([\n MBP.NB('32L', unixTime),\n MBP.NB('32L', milTime),\n this.localNonce\n ])\n\n let infoPack = Buffer.concat([\n MBP.NB('8', BohoMsg.AUTH_NONCE),\n this.auth_salt12\n ])\n return infoPack\n }\n\n\n // step 3\n // client send AUTH_HMAC\n // input : auth_nonce buffer\n auth_hmac(buffer) {\n let auth_nonce = MBP.unpack(buffer, Meta.AUTH_NONCE)\n if (auth_nonce) {\n // console.log(' auth nonce', auth_nonce )\n\n // let now = Date.now()\n // let localUTC= Math.floor( now/ 1000 )\n // let localMilTime = now % 1000\n\n // console.log('time server [sec]', auth_nonce.unixTime, auth_nonce.milTime )\n // console.log('time client [sec]', localUTC , localMilTime )\n // console.log('time diff client and server[sec]', auth_nonce.unixTime - localUTC )\n\n // let serverSecMil = auth_nonce.unixTime * 1000 + auth_nonce.milTime\n // console.log('time diff msec client and server[msec]', serverSecMil - now )\n\n let salt12 = Buffer.concat([\n MBP.NB('32L', auth_nonce.unixTime),\n MBP.NB('32L', auth_nonce.milTime),\n auth_nonce.nonce\n ])\n\n this.set_salt12(salt12)\n\n this.localNonce = RAND(4)\n // hmac( key, sec,mil,serverNonce, localNonce)\n this.generateHMAC(this.localNonce)\n\n // let hmac8 = this._hmac.subarray(0, 8)\n\n this.remoteNonce = auth_nonce.nonce\n\n let auth_hmac_buffer = MBP.pack( // 21 -> 45\n MBP.MB('#header', '8', BohoMsg.AUTH_HMAC),\n MBP.MB('#id8', this._id8),\n MBP.MB('#nonce', this.localNonce),\n MBP.MB('#hmac32', this._hmac ), //full 32bytes hash\n )\n\n return auth_hmac_buffer\n }\n return false\n }\n\n /* \n step 4. for server\n \n step 4-1. check client's auth_hmac\n step 4-2. reply result\n send AUTH_ACK with another HMAC for client.\n or send AUTH_FAIL when fail.\n */\n\n // input: unpack object or buffer of auth_hmac\n check_auth_hmac(data) {\n let infoPack\n if (data instanceof Uint8Array) {\n infoPack = MBP.unpack(data, Meta.AUTH_HMAC)\n if (!infoPack) {\n // console.log('auth_hamc unpack fail.')\n return\n }\n } else {\n infoPack = data;\n\n }\n // console.log('auth_hamc infoObj', infoPack )\n\n this.set_salt12(this.auth_salt12)\n\n // hmac( key, sec,mil,serverNonce, clientNonce)\n this.generateHMAC(infoPack.nonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n\n if (MBP.equal(infoPack.hmac32, hmac32)) {\n //Auth success then store client nonce.\n this.remoteNonce = infoPack.nonce\n\n let salt12 = Buffer.concat([\n this.localNonce,\n this.remoteNonce,\n this.localNonce\n ])\n this.set_salt12(salt12)\n this.generateHMAC(infoPack.nonce)\n let replyHMAC = this._hmac\n\n let auth_ack = MBP.rawPack( \n MBP.MB('header', '8', BohoMsg.AUTH_ACK),\n MBP.MB('hmac32', replyHMAC)\n )\n this.isAuthorized = true\n return auth_ack\n }\n return false\n }\n\n\n\n // step 5. cross check\n // client check server's hmac. \n check_auth_ack_hmac(buffer) {\n // server response has hmac ( key + clientNonce)\n let auth_ack = MBP.unpack(buffer, Meta.AUTH_ACK)\n if (auth_ack) {\n let salt12 = Buffer.concat([\n this.remoteNonce,\n this.localNonce,\n this.remoteNonce,\n ])\n this.set_salt12(salt12)\n this.generateHMAC(this.localNonce)\n // let hmac8 = this._hmac.subarray(0, 8)\n let hmac32 = this._hmac\n //server side hmac using client nonce.\n if (MBP.equal(hmac32, auth_ack.hmac32)) {\n this.isAuthorized = true\n return true\n }\n }\n // server hmac error\n return\n }\n\n // C. Secure Communication\n\n // Must AUTH first.\n encrypt_488(data) { // payload max about 2^32 bytes.\n if (!this.isAuthorized) return\n\n data = MBP.B8(data)\n\n this.set_clock_nonce(this.remoteNonce)\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_488),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#otpSrc8', this._otpSrc44.subarray(32, 40)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n // console.log('enc pack result', pack )\n return pack\n }\n\n\n decrypt_488(data) {\n data = MBP.B8(data)\n\n let pack = MBP.unpack(data, Meta.ENC_488)\n\n if (pack) {\n\n let salt12 = Buffer.concat([\n pack.otpSrc8,\n this.localNonce\n ])\n\n this.set_salt12(salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS.subarray(0, pack.len)\n let decData = this.xotp(xdata)\n\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(hmac8, pack.hmac8)) return decData\n\n // console.log('hmac dismatch', decData )\n } else {\n // console.log('unpack fail')\n }\n }\n\n\n // maxium data size is 2**32 -1 bytes.\n encryptPack(data) {\n data = MBP.B8(data)\n\n this.set_clock_rand()\n this.resetOTP()\n\n let hmac8 = this.getHMAC8(data)\n let encData = this.xotp(data)\n\n let pack = MBP.pack(\n MBP.MB('#type', '8', BohoMsg.ENC_PACK),\n MBP.MB('#len', '32L', data.byteLength),\n MBP.MB('#salt12', this._otpSrc44.subarray(32)),\n MBP.MB('#hmac8', hmac8),\n MBP.MB('#xdata', encData)\n )\n return pack\n }\n\n\n decryptPack(data) {\n\n if (data[0] !== BohoMsg.ENC_PACK) {\n // console.log('Boho: Invalid packType')\n return\n }\n\n // packLength\n let readPackLen = data.readUint32LE(1);\n if (readPackLen != data.byteLength - MetaSize.ENC_PACK) {\n // console.log('Boho: Invalid LEN data_len: data.byteLen' , readPackLen, data.byteLength)\n return\n }\n\n try {\n let pack = MBP.unpack(data, Meta.ENC_PACK)\n // console.log('unpack result', pack )\n if (!pack) return\n\n this.set_salt12(pack.salt12)\n this.resetOTP()\n\n let xdata = pack.$OTHERS\n let decData = this.xotp(xdata)\n let hmac8 = this.getHMAC8(decData)\n\n if (MBP.equal(pack.hmac, hmac8)) {\n pack.data = decData\n return pack\n }\n // console.log('Invalid HMAC', pack.hmac, hmac8 )\n\n } catch (error) {\n // console.log('Boho: unpack err', error )\n\n }\n }\n\n encrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let pack = this.encryptPack(data)\n this._otpSrc44.set(baseKey)\n return pack;\n }\n\n decrypt_e2e(data, key) {\n let baseKey = Buffer.alloc(32)\n baseKey.set(this._otpSrc44.subarray(0, 32))\n this.set_key(key)\n let decPack = this.decryptPack(data)\n this._otpSrc44.set(baseKey)\n return decPack\n }\n\n}\n","\n// IOclient state\nexport const STATES = {\n OPENING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n SERVER_READY: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n READY: 7,\n REDIRECTING: 8\n}\nfor (let c in STATES) { STATES[STATES[c]] = c }\n\n// server side client state\nexport const CLIENT_STATE = {\n INIT: 0,\n SENT_SERVER_READY: 1,\n RECV_AUTH_REQ: 2,\n SENT_SERVER_NONCE: 3,\n RECV_AUTH_HMAC: 4,\n AUTH_FAIL: 5,\n AUTH_READY: 6,\n CID_READY: 7\n}\nfor (let c in CLIENT_STATE) { CLIENT_STATE[CLIENT_STATE[c]] = c }\n\nexport let ENC_MODE = {\n NO: 0,\n YES: 1,\n AUTO: 2\n}\n\nfor (let c in ENC_MODE) { ENC_MODE[ENC_MODE[c]] = c }\n\n\nexport const SIZE_LIMIT = {\n TAG_LEN1: 255,\n TAG_LEN2: 65535,\n CONNECTION_CHECKER_PERIOD: 3000,\n PROMISE_TIMEOUT: 5000,\n DID: 8,\n CID: 12\n}\n\nexport let PAYLOAD_TYPE = {\n EMPTY: 0, \n TEXT: 1,\n BINARY: 2, \n OBJECT: 3, // one stringify able object. no buffer.\n MJSON: 4, // multiple stringify able obejct. JSON string. with top levle array , no buffer\n MBA: 5 // \"meta_buffer_arguments\" arbitary types. buffer included.\n}\nfor (let c in PAYLOAD_TYPE) { PAYLOAD_TYPE[PAYLOAD_TYPE[c]] = c }\n// console.log( PAYLOAD_TYPE )\n\n// MJSON: multiple arguments \n// accepet only string, number, root depth js primittive object, \n// unpack and will send to receiver handler with multiple params.\n\n// MBA: buffer pack of multiple arguments. check \"meta-buffer-pack\" module. \n// MBA: when armuents includes raw Buffer( TypedArray )\n\n// IO message pack one byte header. \nexport let IOMsg = {\n\n /* \n * 0~127dec. reserved. for text stream.\n * 0~31: control code\n * 32~126: ascii charactor\n * 127: DEL\n */\n \n // ADMIN_REQ: 0xA0,\n\n // DO NOT USE: 0xB0~ 0xBF\n // Boho module using this numbers.\n // AUTH_REQ : 0xB0, \n // AUTH_NONCE: 0xB1,\n // AUTH_HMAC: 0xB2,\n // AUTH_ACK: 0xB3,\n // AUTH_FAIL: 0xB4,\n // AUTH_EXT: 0xB5,\n // ENC_PACK : 0xB6, \n // ENC_E2E : 0xB7, \n // ENC_488 : 0xB8\n // reserved ~0xBF\n\n // C. IO status contorl.\n SERVER_READY: 0xC0,\n CID_REQ: 0xC1, \n CID_RES: 0xC2, \n QUOTA_LEVEL: 0xC3,\n SERVER_CLEAR_AUTH: 0xC4, \n SERVER_REDIRECT: 0xC5,\n\n // ..\n LOOP: 0xCB,\n ECHO: 0xCC,\n PING: 0xCD, \n PONG: 0xCE,\n CLOSE: 0xCF,\n // ~CF\n\n\n // D. IO data signaling\n SIGNAL: 0xD0, \n SIGNAL_REQ: 0xD1, \n SIGNAL_E2E: 0xD2, \n SUBSCRIBE: 0xD3,\n SUBSCRIBE_REQ: 0xD4, \n UNSUBSCRIBE: 0xD5, \n SERVER_SIGNAL: 0xD6, \n\n // ..\n IAM: 0xD9,\n IAM_RES: 0xDA,\n \n //.. \n SET: 0xDB, //\n RESPONSE_CODE: 0xDC, \n RESPONSE_MBP: 0xDD, \n\n REQUEST: 0xDE, //client public\n RESPONSE: 0xDF,\n // ~DF\n\n\n // F. Framing Flow control related framing protocol.(CongPacket)\n FLOW_MODE: 0xF0,\n WAIT: 0xF1,\n RESUME: 0xF2,\n //..\n TIME_OUT: 0xFD,\n OVER_SIZE: 0xFE,\n OVER_FLOW: 0xFF\n\n}\n\nfor (let c in IOMsg) { IOMsg[IOMsg[c]] = c }\n\n// console.log( IOMsg );\n\n\nexport const API_TYPE = {\n 'REQUEST_RESPONSE': 'requet_response',\n 'ONE_WAY': 'one_way'\n}\n\n\n\n// api response status code\nexport const STATUS = {\n OK: 0,\n //0~127: success\n //128~255: fail\n ERROR: 255\n}\n","// table index related with:\n// - AUTH database level\n// - serverOption.defaultQuotaIndex\n\n// quota example\n// index range: 0~255.\nexport let quotaTable = {\n // CongSocket\n 0: { // default. anonymouse:\n signalSize: 1500,\n publishCounter: 10,\n trafficRate: 10000\n },\n 1: { // auth_ultralight: eg. Arduino Uno.\n signalSize: 255,\n publishCounter: 10,\n trafficRate: 100000\n },\n 2: { // auth_light: eg. authorized ESP.\n signalSize: 65535,\n publishCounter: 10,\n trafficRate: 1048576\n },\n\n // WebSocket (browser and node app)\n 3: { // authorized basic.\n signalSize: 1048576, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n\n // WebSocket (browser and node app)\n 10: { // anonymouse\n signalSize: 1500, \n publishCounter: 5,\n trafficRate: 1048576 * 20\n },\n\n 11: { // authorized basic.\n signalSize: 65535, \n publishCounter: 10,\n trafficRate: 1048576 * 20\n },\n \n 12: { // authorized power.\n signalSize: 1048576, \n publishCounter: 100,\n trafficRate: 1048576 * 20\n },\n \n // you can add your custom quota level.\n\n // Remote service node\n // High Quota, No root permission.\n 200: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n },\n // super admin or root user.\n // to monitor, metric, sudo command, db acess\n 255: { \n signalSize: 1048576 * 20,\n publishCounter: 10000,\n trafficRate: 1048576 * 100\n }\n}\n\n","import { MBP } from 'meta-buffer-pack'\nimport { PAYLOAD_TYPE, IOMsg } from \"./constants.js\";\nconst encoder = new TextEncoder()\n\n\nexport function getSignalPack( tag, ...args ){\n if( typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode( tag)\n let payload = parsePayload( args )\n\n let sigPack;\n if( payload.type == PAYLOAD_TYPE.EMPTY ){\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type )\n )\n }else if( payload.type == PAYLOAD_TYPE.MBA ){\n let mbaBuffer = MBP.pack( MBP.MBA(...args))\n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#mbaBuffer', mbaBuffer )\n )\n }else { \n sigPack = MBP.pack( \n MBP.MB('#MsgType','8', IOMsg.SIGNAL) , \n MBP.MB('#tagLen','8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', payload.type ),\n MBP.MB('#payload', payload.buffer )\n )\n }\n return sigPack\n}\n\n\nexport function parsePayload( args){\n let type, pack;\n if( args.length == 0){\n type = PAYLOAD_TYPE.EMPTY \n pack = null\n }else if( args.length == 1){\n if( typeof args[0] === 'string' || typeof args[0] === 'number'){\n type = PAYLOAD_TYPE.TEXT\n pack = encoder.encode( args[0] + \".\") // add null area.\n pack[pack.byteLength - 1 ] = 0 // set null.\n\n }else if( ArrayBuffer.isView( args[0]) || args[0] instanceof ArrayBuffer ){ //one buffer\n type = PAYLOAD_TYPE.BINARY\n pack = MBP.B8( args[0 ] )\n }else if(typeof args[0] === 'object'){ \n type = PAYLOAD_TYPE.OBJECT\n pack = encoder.encode( JSON.stringify( args[0]) )\n }else{\n throw new Error('unknown payload arguments')\n }\n }else{ // args 2 and more\n let containsBuffer = false\n args.forEach( item =>{\n if( ArrayBuffer.isView( item ) || item instanceof ArrayBuffer ) containsBuffer = true;\n })\n\n if( containsBuffer ){\n type = PAYLOAD_TYPE.MBA;\n }else{\n type = PAYLOAD_TYPE.MJSON;\n // args is array\n pack = encoder.encode( JSON.stringify( args ) )\n }\n \n }\n \n return { type: type, buffer: pack }\n}\n\nexport function getPayloadFromSignalPack( signalPack ){\n let tagLen = signalPack.readUint8(1)\n return signalPack.subarray(3 + tagLen)\n}","import { MBP, Buffer } from 'meta-buffer-pack'\nimport EventEmitter from \"eventemitter3\";\nimport { Boho, BohoMsg, MetaSize } from \"boho\";\nimport { IOMsg, PAYLOAD_TYPE, SIZE_LIMIT, ENC_MODE, STATES } from '../common/constants.js'\nimport { quotaTable } from '../common/quotaTable.js'\nimport { getSignalPack } from '../common/payload.js';\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nfunction byteToUrl(buffer) {\n //ipv4(4bytes) , port(2bytes)\n if (buffer.byteLength != 6) return\n let address = buffer[0].toString() + \".\" + buffer[1].toString()\n + \".\" + buffer[2].toString() + \".\" + buffer[3].toString();\n let port = (buffer[4] << 8) + buffer[5]\n return address + ':' + port.toString()\n}\n\nexport class IOCore extends EventEmitter {\n constructor(url) {\n super();\n this.cid = \"\" // get from the server CID_RES\n this.ip = \"\" // get from the server IAM_RES message.\n this.socket = null;\n this.url = url; // init default server url\n this.state = STATES.CLOSED; // Number type\n this.stateName = this.getStateName() // String type\n\n this.txCounter = 0;\n this.rxCounter = 0;\n this.txBytes = 0;\n this.rxBytes = 0;\n\n this.lastTxRxTime = Date.now();\n this.connectionCheckerPeriod = SIZE_LIMIT.CONNECTION_CHECKER_PERIOD;\n this.connectionCheckerIntervalID = null;\n\n this.boho = new Boho()\n this.TLS = false // true if protocol is wss(TLS)\n this.encMode = ENC_MODE.AUTO;\n this.useAuth = false;\n\n this.nick = \"\";\n this.channels = new Set()\n this.promiseMap = new Map()\n this.promiseTimeOut = SIZE_LIMIT.PROMISE_TIMEOUT\n this.mid = 0 // promise message id \n\n this.level = 3; // also defaultQuotaLevel\n this.quota = quotaTable[this.level];\n this.serverSet = {}\n this.linkMap = new Map()\n\n this.on('open', this.onOpen.bind(this))\n this.on('close', this.onClose.bind(this))\n this.on('socket_data', this.onData.bind(this))\n }\n\n\n redirect(url2) {\n this.close()\n this.stateChange('redirecting')\n this.createConnection(url2)\n }\n\n open(url) {\n if (!url && !this.url) return;\n\n if (url) {\n if (!this.url) { // default host url\n this.url = url\n } else if (url !== this.url) { // default host url change\n this.url = url;\n if (this.socket) {\n this.close()\n return\n }\n }\n }\n\n this.createConnection(this.url)\n\n if (!this.connectionCheckerIntervalID) {\n this.connectionCheckerIntervalID = setInterval(this.keepAlive.bind(this), this.connectionCheckerPeriod);\n }\n }\n\n onOpen() {\n if (this.url.includes(\"wss://\")) {\n this.TLS = true;\n } else {\n this.TLS = false;\n }\n this.stateChange('open')\n }\n\n onClose() {\n this.boho.isAuthorized = false;\n this.cid = \"\"\n this.stateChange('closed')\n }\n\n // manual login\n login(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n console.log('manual login: ', id)\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n let auth_pack = this.boho.auth_req()\n // console.log('auth_req_pack', auth_pack )\n this.send(auth_pack)\n }\n\n // auto login\n auth(id, key) {\n if (!id && !key) {\n console.log('no id and key.')\n return\n }\n\n if (!key && id.includes('.')) {\n this.boho.set_id_key(id)\n } else if (id && key) {\n this.boho.set_id8(id)\n this.boho.set_key(key)\n } else {\n console.log('no id or key.')\n return\n }\n this.useAuth = true\n }\n\n onData(buffer) {\n // console.log('remote rcv socket_message', buffer )\n //check first byte (remote message type)\n let msgType = buffer[0];\n let decoded;\n\n if (msgType === BohoMsg.ENC_488) {\n decoded = this.boho.decrypt_488(buffer)\n if (decoded) {\n // console.log( decoded )\n msgType = decoded[0]\n buffer = decoded\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('DEC_FAIL', buffer.byteLength)\n }\n } else if (msgType === BohoMsg.ENC_E2E) {\n // console.log('rcv ENC_E2E' )\n\n try {\n decoded = this.boho.decrypt_488(buffer)\n //헤더를 읽고 헤더크기만큼만 해석한다.\n if (decoded) {\n // console.log( 'ENC_E2E decoded ', decoded )\n msgType = decoded[0]\n // decoded has msg_header only. \n buffer.set(decoded, MetaSize.ENC_488) // set decoded signal_e2e headaer.\n buffer = buffer.subarray(MetaSize.ENC_488) // reset offset.\n // console.log('DECODED MsgType:', IOMsg[ msgType ] )\n } else {\n // console.log('488 DEC_FAIL', buffer)\n return\n }\n\n } catch (err) {\n // console.log('E2E DEC_FAIL decryption error', err)\n return\n }\n\n }\n\n let type = IOMsg[msgType]\n if (!type) type = BohoMsg[msgType]\n\n // console.log( \"MsgType: \", type , \" LEN \", buffer.byteLength)\n\n switch (msgType) {\n case IOMsg.OVER_SIZE:\n console.log('## server sent: over_size event.')\n this.emit('over_size', 'over_size')\n break;\n case IOMsg.PING:\n this.pong();\n break;\n\n case IOMsg.PONG:\n break;\n\n case IOMsg.IAM_RES:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let jsonInfo = JSON.parse(str)\n if (jsonInfo.ip) {\n this.ip = jsonInfo.ip;\n }\n console.log('', JSON.stringify(jsonInfo))\n // console.log('', JSON.stringify(jsonInfo,null,2))\n } catch (error) {\n // console.log(' data error')\n }\n break;\n\n case IOMsg.CID_RES:\n let cidStr = decoder.decode(buffer.subarray(1))\n // console.log( '>> CID_RES: ' ,cidStr )\n this.cid = cidStr;\n // change state before subscribe.\n this.stateChange('ready', 'cid_ready')\n this.subscribe_memory_channels()\n break;\n\n case IOMsg.QUOTA_LEVEL:\n let quotaLevel = buffer[1]\n this.level = quotaLevel;\n this.quota = quotaTable[quotaLevel];\n console.log('## QUOTA:', quotaLevel, JSON.stringify(this.quota))\n break;\n\n case IOMsg.SERVER_CLEAR_AUTH:\n this.useAuth = false;\n this.boho.clearAuth();\n this.stop();\n break;\n\n case IOMsg.SERVER_REDIRECT:\n let host_port;\n let url;\n let protocol;\n let addressType;\n if (buffer.byteLength == 7) { // ipv4 ,port\n addressType = 'IPV4:PORT'\n host_port = byteToUrl(buffer.subarray(1))\n protocol = 'cong://'\n } else { // domain url\n addressType = 'URL'\n host_port = decoder.decode(buffer.subarray(1))\n protocol = ''\n }\n\n url = protocol + host_port\n this.redirect(url)\n break;\n\n case IOMsg.SERVER_READY:\n this.stateChange('server_ready', 'server_ready')\n if (this.useAuth) {\n this.send(this.boho.auth_req())\n // CID_REQ will be called, after auth_ack.\n } else {\n // CID_REQ here, if not using auth.\n this.send(Buffer.from([IOMsg.CID_REQ]))\n }\n break;\n\n case IOMsg.SERVER_SIGNAL:\n try {\n let str = decoder.decode(buffer.subarray(1))\n let ss = JSON.parse(str)\n // console.log('SERVER_SIGNAL', JSON.stringify(ss))\n\n if (ss.event && ss.data) {\n this.serverSet = ss.data;\n this.emit(ss.event, ss.data)\n }\n\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SET:\n try {\n let setPack = MBP.unpack(buffer)\n if (setPack) {\n // console.log('[SET] topic: ', setPack.topic)\n this.emit(setPack.topic, ...setPack.args)\n }\n } catch (error) {\n // console.log(' parsing error')\n }\n break;\n\n case IOMsg.SIGNAL_E2E:\n case IOMsg.SIGNAL:\n try {\n let tagLen = buffer.readUint8(1)\n let tagBuf = buffer.subarray(2, 2 + tagLen)\n let tag = decoder.decode(tagBuf)\n\n let payloadType = buffer.readUint8(2 + tagLen)\n let payloadBuffer = buffer.subarray(3 + tagLen)\n\n /* three types of signal message.\n > unicast message to me: tag includes @, no cid: '@*'\n > cid_sub message: tag includes cid and @ both : 'cid@*'\n > ch_sub message: else.\n */\n switch (payloadType) {\n\n case PAYLOAD_TYPE.EMPTY: // 0\n if (tag.indexOf('@') === 0) this.emit('@', null, tag)\n else this.emit(tag, null, tag)\n break;\n\n case PAYLOAD_TYPE.TEXT: // 1\n // !! Must remove null char before decode in JS.\n // string payload contains null char for the c/cpp devices.\n let payloadStringWithoutNull = payloadBuffer.subarray(0, payloadBuffer.byteLength - 1)\n let oneString = decoder.decode(payloadStringWithoutNull)\n if (tag.indexOf('@') === 0) this.emit('@', oneString, tag)\n if (tag !== '@') this.emit(tag, oneString, tag)\n break;\n\n case PAYLOAD_TYPE.BINARY: // 2\n if (tag.indexOf('@') === 0) this.emit('@', payloadBuffer, tag)\n if (tag !== '@') this.emit(tag, payloadBuffer, tag)\n break;\n\n case PAYLOAD_TYPE.OBJECT:\n let oneObjectBuffer = decoder.decode(payloadBuffer)\n let oneJSONObject = JSON.parse(oneObjectBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', oneJSONObject, tag)\n if (tag !== '@') this.emit(tag, oneJSONObject, tag)\n break;\n\n case PAYLOAD_TYPE.MJSON:\n let mjsonBuffer = decoder.decode(payloadBuffer)\n let mjson = JSON.parse(mjsonBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mjson, tag)\n if (tag !== '@') this.emit(tag, ...mjson, tag)\n break;\n\n case PAYLOAD_TYPE.MBA:\n let mbaObject = MBP.unpack(payloadBuffer)\n if (tag.indexOf('@') === 0) this.emit('@', ...mbaObject.args, tag)\n if (tag !== '@') this.emit(tag, ...mbaObject.args, tag)\n break;\n\n default:\n // console.log('## Unkown payloadtype', payloadType)\n }\n\n } catch (err) {\n // console.log('## signal parse err', err)\n }\n break;\n\n case IOMsg.RESPONSE_MBP:\n this.testPromise(buffer)\n break;\n\n case BohoMsg.AUTH_NONCE:\n let auth_hmac = this.boho.auth_hmac(buffer)\n if (auth_hmac) {\n this.send(auth_hmac)\n } else {\n this.stateChange('auth_fail', 'Invalid local auth_hmac.')\n }\n break;\n\n case BohoMsg.AUTH_FAIL:\n this.stateChange('auth_fail', 'server reject auth.')\n break;\n\n case BohoMsg.AUTH_ACK:\n if (this.boho.check_auth_ack_hmac(buffer)) {\n this.stateChange('auth_ready', 'server sent auth_ack')\n this.send(Buffer.from([IOMsg.CID_REQ]))\n } else {\n this.stateChange('auth_fail', 'invalid server_hmac')\n }\n break;\n\n default:\n try {\n decoded = decoder.decode(buffer)\n // console.log('text message:', decoded)\n this.emit('text_message', decoded)\n } catch (error) {\n\n }\n\n break;\n\n }\n }\n\n iam(title) {\n // console.log('iam', title)\n if (title) {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM),\n MBP.MB('#', title)\n ))\n } else {\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.IAM)\n ))\n }\n }\n\n\n ping() {\n this.send(Buffer.from([IOMsg.PING]))\n }\n\n pong() {\n this.send(Buffer.from([IOMsg.PONG]))\n }\n\n\n // application level ping tool. \n // simple message sending and reply.\n echo(args) {\n if (args) {\n console.log('echo args:', args)\n this.send_enc_mode(MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.ECHO),\n MBP.MB('#msg', args)\n ))\n } else {\n // # do not encrypt blank echo #\n this.send(Buffer.from([IOMsg.ECHO]))\n }\n }\n\n\n bin(...data) {\n this.send(MBP.U8pack(...data))\n }\n\n send(data) {\n if (data.byteLength > this.quota.signalSize) {\n this.emit('over_size')\n console.log('## QUOTA LIMIT OVER!! \\nsignal message.byteLength: ', data.byteLength)\n console.log('## your maximum signalSize(bytes) is:', this.quota.signalSize)\n return\n }\n this.socket_send(data);\n }\n\n /*\n Policy. Should message do encrypt?\n\n if encMode == auto\n NO. if connection using TLS line.\n // ex. wss://url connection.\n YES. if no TLS line.\n // ex. ws://url connection.\n\n if encMode == YES\n YES. encrypt the message.\n\n if encMode == NO\n NO. do not ecnrypt message.\n\n */\n getEncryptionMode() {\n if (this.encMode === ENC_MODE.YES ||\n this.encMode === ENC_MODE.AUTO &&\n !this.TLS && this.boho.isAuthorized\n ) {\n return true;\n } else {\n return false\n }\n }\n\n send_enc_mode(data, useEncryption) {\n\n // use default policy.\n if (useEncryption === undefined) {\n useEncryption = this.getEncryptionMode()\n }\n\n if (data[0] == IOMsg.SIGNAL_E2E && useEncryption) {\n // input data: signal_header + e2ePayload\n // encrypt signal_header area only. payload is encrypted with e2e key already.\n let tagLen = data[1]\n let encHeader = this.boho.encrypt_488(data.subarray(0, 3 + tagLen))\n encHeader[0] = BohoMsg.ENC_E2E\n this.send(Buffer.concat([encHeader, data.subarray(3 + tagLen)]))\n // console.log('<< send_enc_mode [ ENC_E2E ]')\n\n } else if (useEncryption) {\n // console.log('<< send_enc_mode [ ENC_488 ]')\n let encPack = this.boho.encrypt_488(data)\n this.send(encPack)\n } else {\n // console.log('<< send_enc_mode [ PLAIN ]' )\n this.send(data)\n }\n\n }\n\n\n setMsgPromise(mid) {\n return new Promise((resolve, reject) => {\n this.promiseMap.set(mid, [resolve, reject])\n // console.log('set promise. mid, size', mid, this.promiseMap.size)\n setTimeout(e => {\n if (this.promiseMap.has(mid)) {\n reject('timeout');\n this.promiseMap.delete(mid)\n // console.log('promise timeout. mid, size:', mid, this.promiseMap.size)\n }\n }, this.promiseTimeOut);\n })\n }\n\n testPromise(buffer) {\n // console.log('mbp buffer : ', buffer , buffer.byteLength)\n // let mbp = ( buffer.byteLength > 4 ) ? buffer.subarray(4) : \"\"\n\n let res = MBP.unpack(buffer)\n if (!res) return\n // console.log( res )\n\n // console.log(`RESPONSE_MBP MID: ${mid} status: ${status} ,mbp: ${ buffer.subarray(4)} `)\n\n if (this.promiseMap.has(res.mid)) {\n // console.log('res promise msg', mid)\n let [resolve, reject] = this.promiseMap.get(res.mid)\n this.promiseMap.delete(res.mid)\n\n if (res.status < 128) {\n res.ok = true;\n // console.log( 'unpack meta:', meta)\n resolve(res)\n } else {\n res.ok = false;\n reject(res)\n }\n\n\n } else {\n console.log('no promise id')\n }\n }\n\n\n publish(...args) {\n this.signal(...args)\n }\n\n\n signal(tag, ...args) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n let signalPack = getSignalPack(tag, ...args)\n this.send_enc_mode(signalPack)\n }\n\n decrypt_e2e(data, key) {\n return this.boho.decrypt_e2e(data, key)\n }\n\n signal_e2e(tag, data, key) {\n\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n let tagEncoded = encoder.encode(tag)\n let dataPack = MBP.B8(data)\n\n //encrypt payload area with key\n let sercretPack = this.boho.encrypt_e2e(dataPack, key)\n\n //change signal MsgType header into SIGNAL_E2E\n let signalPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.SIGNAL_E2E),\n MBP.MB('#tagLen', '8', tagEncoded.byteLength),\n MBP.MB('#tag', tagEncoded),\n MBP.MB('#payloadType', '8', PAYLOAD_TYPE.BINARY),\n MBP.MB('#payload', sercretPack)\n )\n\n this.send_enc_mode(signalPack)\n }\n\n\n\n set(storeName, ...args) {\n if (!storeName || args.length == 0) {\n return Promise.reject(new Error('set need storeName and value)'))\n }\n return this.req('store', 'set', storeName, ...args)\n }\n\n async get(storeName) {\n if (!storeName) {\n return Promise.reject(new Error('store get need storeName)'))\n }\n let pack = await this.req('store', 'get', storeName)\n let { $ } = MBP.unpack(pack.body)\n return $\n }\n\n\n req(target, topic, ...args) {\n // console.log('common_req args', args)\n if (!target || !topic)\n return Promise.reject(new Error('request need target and topic)'))\n let sigPack;\n if (args.length > 0) {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic),\n MBP.MBA(...args)\n )\n } else {\n sigPack = MBP.pack(\n MBP.MB('#MsgType', '8', IOMsg.REQUEST),\n MBP.MB('mid', '16', ++this.mid),\n MBP.MB('target', target),\n MBP.MB('topic', topic)\n )\n }\n // console.log('<< adminPack', this.mid, sigPack)\n this.send_enc_mode(sigPack)\n return this.setMsgPromise(this.mid)\n }\n\n\n subscribe(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) return\n\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.add(tag)\n })\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n subscribe_promise(tag) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (this.state !== STATES.READY) {\n // console.log('not ready state:', this.state )\n return Promise.reject('subscribe_promise:: connection is not ready')\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN2) throw TypeError('please use tag string bytelength: ' + SIZE_LIMIT.TAG_LEN2)\n\n this.send_enc_mode(\n Buffer.concat([\n MBP.NB('8', IOMsg.SUBSCRIBE_REQ),\n MBP.NB('16', ++this.mid),\n MBP.NB('16', tagEncoded.byteLength),\n tagEncoded]))\n return this.setMsgPromise(this.mid)\n }\n\n subscribe_memory_channels() { //local cache . auto_resubscribe\n if (this.channels.size == 0) return\n let chList = Array.from(this.channels).join(',')\n // console.log('<< subscibe memory channels by cid', chList , this.cid )\n\n this.subscribe_promise(chList)\n .then((res) => {\n // console.log('>> SUBSCRIBE_REQ result', res ) // return code == map.size\n }).catch((e) => {\n console.log('>> SUBSCRIBE FAIL:', e)\n })\n\n }\n\n unsubscribe(tag = \"\") {\n // console.log('unsub', tag)\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n\n if (tag == \"\") {\n // console.log('unsub all')\n this.channels.clear();\n } else {\n let tagList = tag.split(',')\n tagList.forEach(tag => {\n this.channels.delete(tag)\n })\n }\n\n let tagEncoded = encoder.encode(tag)\n if (tagEncoded.byteLength > SIZE_LIMIT.TAG_LEN1) throw TypeError('please use tag string bytelength below:' + SIZE_LIMIT.TAG_LEN1)\n\n this.send_enc_mode(Buffer.concat([\n MBP.NB('8', IOMsg.UNSUBSCRIBE),\n MBP.NB('8', tagEncoded.byteLength),\n tagEncoded]))\n }\n\n\n listen(tag, handler) {\n if (typeof tag !== 'string') throw TypeError('tag should be string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n // console.log('channels:', this.channels )\n this.on(tag, handler)\n // do not subscribe now.\n // will subscribe when receive CID_RES signal from server.\n\n }\n\n\n\n link(to, tag, handler) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n if (typeof handler !== 'function') throw TypeError('handler is not a function.')\n\n if (tag.indexOf('@') !== 0) {\n this.channels.add(tag)\n }\n\n let linkSet;\n if (this.linkMap.has(to)) {\n linkSet = this.linkMap.get(to)\n } else {\n linkSet = new Set()\n }\n\n linkSet.add(tag)\n this.linkMap.set(to, linkSet)\n this.on(tag, handler)\n this.subscribe(tag)\n // console.log('link [to] linkMap:', to, this.linkMap )\n\n }\n\n\n unlink(to, tag) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (typeof tag !== 'string') throw TypeError('tag is not a string.')\n if (tag.length > 255 || tag.length == 0) throw TypeError('tag string length range: 1~255')\n\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n if (tags[i] == tag) {\n this.unsubscribe(tag)\n this.removeAllListeners(tag)\n linkSet.delete(tag)\n this.linkMap.set(to, linkSet)\n break;\n }\n }\n\n // console.log('unlink linkMap result:', this.linkMap )\n }\n\n unlinkAll(to) {\n if (typeof to !== 'string') throw TypeError('to(local link target) is not a string.')\n if (!this.linkMap.has(to)) return;\n\n let linkSet = this.linkMap.get(to)\n let tags = Array.from(linkSet)\n for (let i = 0; i < tags.length; i++) {\n this.unsubscribe(tags[i])\n this.removeAllListeners(tags[i])\n linkSet.delete(tags[i])\n }\n this.linkMap.delete(to)\n\n // console.log('unlinkAll linkMap result:', this.linkMap )\n }\n\n\n\n getMetric() {\n return {\n tx: this.txCounter,\n rx: this.rxCounter,\n txb: this.txBytes,\n rxb: this.rxBytes,\n last: (Date.now() - this.lastTxRxTime) / 1000\n }\n\n }\n\n getState() {\n return this.state\n }\n\n getStateName() {\n //state \n //value of constant STATES.NAME < number >\n //type of constant STATES.NAME name < string uppercase >\n //stateName,eventName \n return (STATES[this.state]).toLowerCase()\n }\n\n getSecurity() {\n return {\n useAuth: this.useAuth,\n isTLS: this.TLS,\n isAuthorized: this.boho.isAuthorized,\n encMode: this.encMode,\n usingEncryption: this.getEncryptionMode()\n }\n }\n\n stateChange(state, emitEventAndMessage) {\n // STATES constant name : string upperCase\n // eventName, .stateName : string lowerCase\n // .state : number\n let eventName = state.toLowerCase()\n this.state = STATES[state.toUpperCase()] // state: number\n if (emitEventAndMessage) this.emit(eventName, emitEventAndMessage)\n\n if (this.stateName !== eventName) {\n // console.log(`state: ${this.stateName} => ${eventName}` )\n this.stateName = eventName\n this.emit('change', eventName)\n }\n }\n\n}\n\n\n\n\n","import { IOCore } from \"./IOCore.js\";\nimport { Buffer } from 'meta-buffer-pack'\nexport { Boho, RAND, BohoMsg, Meta, MetaSize , sha256, MBP, Buffer } from 'boho'\nexport * from '../common/constants.js'\n\n// Browser WebSocket\nexport class IO extends IOCore{\n constructor(url ) {\n super(url);\n document.addEventListener('visibilitychange', this.browserVisiblePing.bind(this));\n if(url) this.open();\n }\n\n browserVisiblePing(){\n if (document.visibilityState === 'visible') {\n this.ping()\n }\n }\n\n \n close() {\n if(this.socket ){\n this.socket.onclose = null\n this.socket.onmessage = null\n this.socket.onerror = null\n this.socket.close();\n this.socket = null;\n }\n this.emit('close')\n }\n\n\n stop(){\n this.close()\n clearInterval(this.connectionCheckerIntervalID);\n this.connectionCheckerIntervalID = null\n } \n \n \n keepAlive() {\n if ( !this.socket || this.socket?.readyState === 3 ) { //closed\n this.open();\n }\n }\n\n createConnection(url){\n // Web Browser WebSocket\n this.socket = new WebSocket (url );\n this.stateChange('opening')\n\n this.socket.binaryType = \"arraybuffer\"\n this.socket.onopen = () => {\n this.socket.onmessage = this.onWebSocketMessage.bind(this) ;\n this.emit('open' );\n };\n\n this.socket.onerror = (e)=>{ \n this.emit('error', e)\n }\n\n this.socket.onclose = ()=>{ \n this.emit('close' );\n }\n }\n\n onWebSocketMessage( event ) {\n this.rxCounter++;\n this.lastTxRxTime = Date.now();\n let buffer;\n\n // if( event.data instanceof ArrayBuffer ){\n // //binary frame\n // }else{\n // //text frame\n // }\n buffer = Buffer.from( event.data )\n this.rxBytes += buffer.byteLength\n\n this.emit('socket_data', buffer );\n }\n\n socket_send(data) { \n if( this.socket?.readyState === 1 ){ //open\n // console.log('websocket send', data)\n this.socket.send( data )\n this.txCounter++;\n this.txBytes += data.byteLength\n this.lastTxRxTime = Date.now();\n }else{\n console.log('.')\n }\n }\n \n}\n\n","import { IO } from './src/client/IOWebSocket.js'\nimport { Boho, RAND, MBP, BohoMsg, Meta, MetaSize , sha256, Buffer } from 'boho'\n\nBoho.RAND = RAND;\nBoho.BohoMsg = BohoMsg;\nBoho.Meta = Meta;\nBoho.MetaSize = MetaSize;\nBoho.sha256 = sha256;\nIO.Boho = Boho;\nIO.MBP = MBP;\nIO.Buffer = Buffer;\n\nexport default IO;\n"],"names":["byteLength_1","b64","lens","getLens","validLen","placeHoldersLen","toByteArray_1","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray_1","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","value","c","rt","abs","isNaN","floor","log","LN2","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","byteLength","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64","fromByteArray","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","toByteArray","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","encoder","TextEncoder","decoder","TextDecoder","NB","numberBuffer","initValue","toUpperCase","MB","metaBuffer","typeOrData","bufferType","JSON","stringify","v","MBA","metaBufferArguments","args","map","argsIndex","parseTypeName","readTypedBuffer","simpleType","strBuffer","decode","strNumber","objEncoded","parse","pack","bufArr","subArr","filter","item","flatArray","info","infoEncoded","infoSize","forEach","bufPack","infoStr","encode","infoSizeBuff","unpack","binPack","meta","infoArr","getMeta","binObj","readCounter","result","leftSize","mbaIndex","$","U8","parseUint8Array","shareArrayBuffer","originData","dataCopy","B8","parseBuffer","u8","B8pack","parseBufferThenConcat","dataArray","buffers","U8pack","parseUint8ThenConcat","bufferSize","equal","buf1","buf2","getBufferSize","getMetaSize","TAIL_LEN","parseMetaInfo","infoFrom","decoded","firstItem","readTail","DataView","getUint16","getBuffer","rawBufferSize","showDetail","metaInfo","rawPack","has","hasOwnProperty","prefix","Events","EE","context","once","addListener","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","names","getOwnPropertySymbols","listeners","handlers","l","ee","listenerCount","emit","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","module","K","Uint32Array","hashBlocks","w","p","f","g","h","u","t1","t2","Hash","digestLength","blockSize","state","Int32Array","temp","bufferLength","bytesHashed","finished","reset","clean","update","dataLength","dataPos","finish","left","bitLenHi","bitLenLo","padLength","digest","_saveState","_restoreState","HMAC","key","inner","outer","pad","istate","ostate","hash","sha256","MBP.U8","MBP.B8","hmac","MBP.MB","BohoMsg","AUTH_REQ","AUTH_NONCE","AUTH_HMAC","AUTH_ACK","AUTH_FAIL","AUTH_EXT","ENC_PACK","ENC_E2E","ENC_488","Meta","MBP.meta","lastItem","MetaSize","isNode","global","process","RAND","webcrypto","getRandomValues","self","crypto","Boho","_id8","_otpSrc44","_otp36","_hmac","auth_salt12","localNonce","remoteNonce","isAuthorized","clearAuth","set_hash_id8","set_id8","encStr","set_key","set_id_key","id_key","delimiterPosition","id","substring","copy_id8","copy_key","sha256_n","srcData","hashSum","set_clock_rand","milTime","Date","now","secTime","MBP.NB","set_clock_nonce","nonce","set_salt12","salt12","resetOTP","getIndexOTP","otpIndex","generateHMAC","hmacSrc","getHMAC8","xotp","otpStartIndex","shareDataBuffer","dataOffset","xorCalcLen","iotp","auth_req","MBP.pack","auth_nonce","unixTime","auth_hmac","MBP.unpack","check_auth_hmac","infoPack","hmac32","MBP.equal","replyHMAC","auth_ack","MBP.rawPack","check_auth_ack_hmac","encrypt_488","hmac8","encData","decrypt_488","otpSrc8","xdata","$OTHERS","decData","encryptPack","decryptPack","encrypt_e2e","baseKey","decrypt_e2e","decPack","STATES","OPENING","OPEN","CLOSING","CLOSED","SERVER_READY","AUTH_READY","READY","REDIRECTING","ENC_MODE","NO","YES","AUTO","SIZE_LIMIT","PAYLOAD_TYPE","EMPTY","TEXT","BINARY","OBJECT","MJSON","IOMsg","CID_REQ","CID_RES","QUOTA_LEVEL","SERVER_CLEAR_AUTH","SERVER_REDIRECT","LOOP","ECHO","PING","PONG","CLOSE","SIGNAL","SIGNAL_REQ","SIGNAL_E2E","SUBSCRIBE","SUBSCRIBE_REQ","UNSUBSCRIBE","SERVER_SIGNAL","IAM","IAM_RES","SET","RESPONSE_CODE","RESPONSE_MBP","REQUEST","RESPONSE","FLOW_MODE","WAIT","RESUME","TIME_OUT","OVER_SIZE","OVER_FLOW","quotaTable","signalSize","publishCounter","trafficRate","getSignalPack","tag","sigPack","tagEncoded","payload","containsBuffer","parsePayload","mbaBuffer","MBP.MBA","IOCore","url","cid","ip","socket","stateName","getStateName","txCounter","rxCounter","txBytes","rxBytes","lastTxRxTime","connectionCheckerPeriod","connectionCheckerIntervalID","boho","TLS","encMode","useAuth","nick","channels","Set","promiseMap","Map","promiseTimeOut","mid","level","quota","serverSet","linkMap","onOpen","bind","onClose","onData","redirect","url2","close","stateChange","createConnection","open","setInterval","keepAlive","login","auth_pack","send","auth","msgType","err","pong","jsonInfo","cidStr","subscribe_memory_channels","quotaLevel","stop","host_port","protocol","byteToUrl","ss","setPack","topic","tagLen","tagBuf","payloadType","payloadBuffer","payloadStringWithoutNull","oneString","oneObjectBuffer","oneJSONObject","mjsonBuffer","mjson","mbaObject","testPromise","iam","title","send_enc_mode","ping","echo","bin","MBP.U8pack","socket_send","getEncryptionMode","useEncryption","encHeader","encPack","setMsgPromise","Promise","resolve","reject","setTimeout","delete","status","ok","publish","signal","signalPack","signal_e2e","dataPack","sercretPack","storeName","req","body","subscribe","add","subscribe_promise","chList","then","catch","unsubscribe","clear","listen","handler","link","to","linkSet","unlink","tags","unlinkAll","getMetric","tx","rx","txb","rxb","getState","getSecurity","isTLS","usingEncryption","emitEventAndMessage","eventName","IO","document","addEventListener","browserVisiblePing","visibilityState","onclose","onmessage","onerror","clearInterval","readyState","WebSocket","binaryType","onopen","onWebSocketMessage","MBP"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 63b62a9..53b08bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iosignal", - "version": "1.4.0", + "version": "1.4.1", "description": "iosignal", "type": "module", "main": "./dist/iosignal.cjs", diff --git a/src/client/IOCore.js b/src/client/IOCore.js index 8aa1690..d4bda6a 100644 --- a/src/client/IOCore.js +++ b/src/client/IOCore.js @@ -47,7 +47,7 @@ export class IOCore extends EventEmitter { this.promiseTimeOut = SIZE_LIMIT.PROMISE_TIMEOUT this.mid = 0 // promise message id - this.level = 0; // also defaultQuotaLevel + this.level = 3; // also defaultQuotaLevel this.quota = quotaTable[this.level]; this.serverSet = {} this.linkMap = new Map() diff --git a/src/server/serverOption.js b/src/server/serverOption.js index 33a5e44..b763510 100644 --- a/src/server/serverOption.js +++ b/src/server/serverOption.js @@ -29,7 +29,7 @@ export let serverOption = { trafficRate: false, disconnect: false }, - defaultQuotaIndex: 0, + defaultQuotaIndex: 3, adminLevel: 255, debug:{