@libp2p/tcp 8.0.12-fb8a6f188 → 8.0.13-05b52d69c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -5
- package/dist/src/index.d.ts +6 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +19 -17
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts +3 -0
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js +29 -22
- package/dist/src/listener.js.map +1 -1
- package/dist/src/socket-to-conn.d.ts +2 -0
- package/dist/src/socket-to-conn.d.ts.map +1 -1
- package/dist/src/socket-to-conn.js +8 -3
- package/dist/src/socket-to-conn.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +22 -19
- package/src/listener.ts +31 -23
- package/src/socket-to-conn.ts +11 -4
package/dist/index.min.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
1
|
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2PTcp = factory()}(typeof self !== 'undefined' ? self : this, function () {
|
|
2
|
-
"use strict";var Libp2PTcp=(()=>{var gn=Object.create;var Ne=Object.defineProperty;var wn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var xn=Object.getPrototypeOf,yn=Object.prototype.hasOwnProperty;var H=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var D=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),L=(t,e)=>{for(var r in e)Ne(t,r,{get:e[r],enumerable:!0})},Kt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of bn(e))!yn.call(t,o)&&o!==r&&Ne(t,o,{get:()=>e[o],enumerable:!(n=wn(e,o))||n.enumerable});return t};var oe=(t,e,r)=>(r=t!=null?gn(xn(t)):{},Kt(e||!t||!t.__esModule?Ne(r,"default",{value:t,enumerable:!0}):r,t)),Cn=t=>Kt(Ne({},"__esModule",{value:!0}),t);var rr=D((Ks,tr)=>{var fe=1e3,he=fe*60,me=he*60,se=me*24,vn=se*7,En=se*365.25;tr.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return An(t);if(r==="number"&&isFinite(t))return e.long?Sn(t):In(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function An(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*En;case"weeks":case"week":case"w":return r*vn;case"days":case"day":case"d":return r*se;case"hours":case"hour":case"hrs":case"hr":case"h":return r*me;case"minutes":case"minute":case"mins":case"min":case"m":return r*he;case"seconds":case"second":case"secs":case"sec":case"s":return r*fe;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function In(t){var e=Math.abs(t);return e>=se?Math.round(t/se)+"d":e>=me?Math.round(t/me)+"h":e>=he?Math.round(t/he)+"m":e>=fe?Math.round(t/fe)+"s":t+"ms"}function Sn(t){var e=Math.abs(t);return e>=se?ke(t,e,se,"day"):e>=me?ke(t,e,me,"hour"):e>=he?ke(t,e,he,"minute"):e>=fe?ke(t,e,fe,"second"):t+" ms"}function ke(t,e,r,n){var o=e>=r*1.5;return Math.round(t/r)+" "+n+(o?"s":"")}});var Ke=D((Zs,nr)=>{function Tn(t){r.debug=r,r.default=r,r.coerce=p,r.disable=s,r.enable=o,r.enabled=i,r.humanize=rr(),r.destroy=y,Object.keys(t).forEach(u=>{r[u]=t[u]}),r.names=[],r.skips=[],r.formatters={};function e(u){let l=0;for(let f=0;f<u.length;f++)l=(l<<5)-l+u.charCodeAt(f),l|=0;return r.colors[Math.abs(l)%r.colors.length]}r.selectColor=e;function r(u){let l,f=null,g,h;function w(...C){if(!w.enabled)return;let m=w,A=Number(new Date),$=A-(l||A);m.diff=$,m.prev=l,m.curr=A,l=A,C[0]=r.coerce(C[0]),typeof C[0]!="string"&&C.unshift("%O");let S=0;C[0]=C[0].replace(/%([a-zA-Z%])/g,(V,k)=>{if(V==="%%")return"%";S++;let B=r.formatters[k];if(typeof B=="function"){let de=C[S];V=B.call(m,de),C.splice(S,1),S--}return V}),r.formatArgs.call(m,C),(m.log||r.log).apply(m,C)}return w.namespace=u,w.useColors=r.useColors(),w.color=r.selectColor(u),w.extend=n,w.destroy=r.destroy,Object.defineProperty(w,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(g!==r.namespaces&&(g=r.namespaces,h=r.enabled(u)),h),set:C=>{f=C}}),typeof r.init=="function"&&r.init(w),w}function n(u,l){let f=r(this.namespace+(typeof l>"u"?":":l)+u);return f.log=this.log,f}function o(u){r.save(u),r.namespaces=u,r.names=[],r.skips=[];let l,f=(typeof u=="string"?u:"").split(/[\s,]+/),g=f.length;for(l=0;l<g;l++)f[l]&&(u=f[l].replace(/\*/g,".*?"),u[0]==="-"?r.skips.push(new RegExp("^"+u.slice(1)+"$")):r.names.push(new RegExp("^"+u+"$")))}function s(){let u=[...r.names.map(a),...r.skips.map(a).map(l=>"-"+l)].join(",");return r.enable(""),u}function i(u){if(u[u.length-1]==="*")return!0;let l,f;for(l=0,f=r.skips.length;l<f;l++)if(r.skips[l].test(u))return!1;for(l=0,f=r.names.length;l<f;l++)if(r.names[l].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function p(u){return u instanceof Error?u.stack||u.message:u}function y(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}nr.exports=Tn});var or=D((_,De)=>{_.formatArgs=Fn;_.save=Rn;_.load=On;_.useColors=Pn;_.storage=Mn();_.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();_.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Pn(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Fn(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+De.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(r++,o==="%c"&&(n=r))}),t.splice(n,0,e)}_.log=console.debug||console.log||(()=>{});function Rn(t){try{t?_.storage.setItem("debug",t):_.storage.removeItem("debug")}catch{}}function On(){let t;try{t=_.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}function Mn(){try{return localStorage}catch{}}De.exports=Ke()(_);var{formatters:Nn}=De.exports;Nn.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var ir=D((ei,sr)=>{"use strict";sr.exports=(t,e)=>{e=e||process.argv;let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),o=e.indexOf("--");return n!==-1&&(o===-1?!0:n<o)}});var ar=D((ti,cr)=>{"use strict";var kn=H("os"),G=ir(),F=process.env,ge;G("no-color")||G("no-colors")||G("color=false")?ge=!1:(G("color")||G("colors")||G("color=true")||G("color=always"))&&(ge=!0);"FORCE_COLOR"in F&&(ge=F.FORCE_COLOR.length===0||parseInt(F.FORCE_COLOR,10)!==0);function Dn(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Ln(t){if(ge===!1)return 0;if(G("color=16m")||G("color=full")||G("color=truecolor"))return 3;if(G("color=256"))return 2;if(t&&!t.isTTY&&ge!==!0)return 0;let e=ge?1:0;if(process.platform==="win32"){let r=kn.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in F)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(r=>r in F)||F.CI_NAME==="codeship"?1:e;if("TEAMCITY_VERSION"in F)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(F.TEAMCITY_VERSION)?1:0;if(F.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in F){let r=parseInt((F.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(F.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(F.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(F.TERM)||"COLORTERM"in F?1:(F.TERM==="dumb",e)}function Ze(t){let e=Ln(t);return Dn(e)}cr.exports={supportsColor:Ze,stdout:Ze(process.stdout),stderr:Ze(process.stderr)}});var lr=D((P,_e)=>{var _n=H("tty"),Le=H("util");P.init=jn;P.log=Bn;P.formatArgs=$n;P.save=zn;P.load=qn;P.useColors=Un;P.destroy=Le.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");P.colors=[6,2,3,4,5,1];try{let t=ar();t&&(t.stderr||t).level>=2&&(P.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}P.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(o,s)=>s.toUpperCase()),n=process.env[e];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),t[r]=n,t},{});function Un(){return"colors"in P.inspectOpts?!!P.inspectOpts.colors:_n.isatty(process.stderr.fd)}function $n(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,o="\x1B[3"+(n<8?n:"8;5;"+n),s=` ${o};1m${e} \x1B[0m`;t[0]=s+t[0].split(`
|
|
3
|
-
`).join(`
|
|
4
|
-
`+s),t.push(o+"m+"+_e.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=Vn()+e+" "+t[0]}function Vn(){return P.inspectOpts.hideDate?"":new Date().toISOString()+" "}function Bn(...t){return process.stderr.write(Le.format(...t)+`
|
|
5
|
-
`)}function zn(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function qn(){return process.env.DEBUG}function jn(t){t.inspectOpts={};let e=Object.keys(P.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=P.inspectOpts[e[r]]}_e.exports=Ke()(P);var{formatters:ur}=_e.exports;ur.o=function(t){return this.inspectOpts.colors=this.useColors,Le.inspect(t,this.inspectOpts).split(`
|
|
6
|
-
`).map(e=>e.trim()).join(" ")};ur.O=function(t){return this.inspectOpts.colors=this.useColors,Le.inspect(t,this.inspectOpts)}});var dr=D((ri,et)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?et.exports=or():et.exports=lr()});var He=D((za,nn)=>{nn.exports=t=>{if(t[Symbol.asyncIterator])return t;if(t.getReader)return async function*(){let e=t.getReader();try{for(;;){let{done:r,value:n}=await e.read();if(r)return;yield n}}finally{e.releaseLock()}}();throw new Error("unknown stream")}});var sn=D((qa,on)=>{on.exports=function(e){if(e){if(typeof e[Symbol.iterator]=="function")return e[Symbol.iterator]();if(typeof e[Symbol.asyncIterator]=="function")return e[Symbol.asyncIterator]();if(typeof e.next=="function")return e}throw new Error("argument is not an iterator or iterable")}});var Gt=D((ja,cn)=>{var Ds=sn();cn.exports=t=>async e=>{e=Ds(e);let r=m=>{typeof m.return=="function"&&m.return()},n=null,o=null,s=m=>{n=m,o&&o(m),r(e)},i=null,a=!1,p=()=>{a=!0,i&&i()},y=null,u=!1,l=()=>{u=!0,y&&y()},f=null,g=()=>{f&&f()},h=()=>new Promise((m,A)=>{i=f=m,o=A,t.once("drain",g)}),w=()=>(r(e),new Promise((m,A)=>{if(a||u||n)return m();y=i=m,o=A})),C=()=>{t.removeListener("error",s),t.removeListener("close",p),t.removeListener("finish",l),t.removeListener("drain",g)};t.once("error",s),t.once("close",p),t.once("finish",l);try{for await(let m of e){if(!t.writable||t.destroyed||n)break;t.write(m)===!1&&await h()}}catch(m){n||t.destroy(),n=m}try{if(t.writable&&t.end(),await w(),n)throw n}finally{C()}}});var Wt=D((Ga,an)=>{var Ls=Gt(),_s=He();an.exports=t=>({sink:Ls(t),source:_s(t)})});var ln=D((Wa,un)=>{var Us=Wt();un.exports=t=>async function*(e){let r=Us(t),n;if(r.sink(e).catch(o=>{n=o}),yield*r.source,n)throw n}});var dn=D((Ja,Te)=>{Te.exports=He();Te.exports.source=He();Te.exports.sink=Gt();Te.exports.transform=ln();Te.exports.duplex=Wt()});var Xs={};L(Xs,{tcp:()=>Js});var mn=oe(H("net"),1);var pe=class t extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.code=t.code,this.type=t.type}static code="ABORT_ERR";static type="aborted"},T=class extends Error{code;props;constructor(e,r,n){super(e),this.code=r,this.name=n?.name??"CodeError",this.props=n??{}}};var er=Symbol.for("@libp2p/transport");var Zt;(function(t){t[t.FATAL_ALL=0]="FATAL_ALL",t[t.NO_FATAL=1]="NO_FATAL"})(Zt||(Zt={}));var U=oe(dr(),1);var st={};L(st,{base32:()=>W,base32hex:()=>Zn,base32hexpad:()=>to,base32hexpadupper:()=>ro,base32hexupper:()=>eo,base32pad:()=>Yn,base32padupper:()=>Kn,base32upper:()=>Qn,base32z:()=>no});function Gn(t,e){if(t.length>=255)throw new TypeError("Alphabet too long");for(var r=new Uint8Array(256),n=0;n<r.length;n++)r[n]=255;for(var o=0;o<t.length;o++){var s=t.charAt(o),i=s.charCodeAt(0);if(r[i]!==255)throw new TypeError(s+" is ambiguous");r[i]=o}var a=t.length,p=t.charAt(0),y=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function l(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var w=0,C=0,m=0,A=h.length;m!==A&&h[m]===0;)m++,w++;for(var $=(A-m)*u+1>>>0,S=new Uint8Array($);m!==A;){for(var j=h[m],V=0,k=$-1;(j!==0||V<C)&&k!==-1;k--,V++)j+=256*S[k]>>>0,S[k]=j%a>>>0,j=j/a>>>0;if(j!==0)throw new Error("Non-zero carry");C=V,m++}for(var B=$-C;B!==$&&S[B]===0;)B++;for(var de=p.repeat(w);B<$;++B)de+=t.charAt(S[B]);return de}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var w=0;if(h[w]!==" "){for(var C=0,m=0;h[w]===p;)C++,w++;for(var A=(h.length-w)*y+1>>>0,$=new Uint8Array(A);h[w];){var S=r[h.charCodeAt(w)];if(S===255)return;for(var j=0,V=A-1;(S!==0||j<m)&&V!==-1;V--,j++)S+=a*$[V]>>>0,$[V]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");m=j,w++}if(h[w]!==" "){for(var k=A-m;k!==A&&$[k]===0;)k++;for(var B=new Uint8Array(C+(A-k)),de=C;k!==A;)B[de++]=$[k++];return B}}}function g(h){var w=f(h);if(w)return w;throw new Error(`Non-${e} character`)}return{encode:l,decodeUnsafe:f,decode:g}}var Wn=Gn,Jn=Wn,pr=Jn;var oi=new Uint8Array(0);var fr=(t,e)=>{if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0},z=t=>{if(t instanceof Uint8Array&&t.constructor.name==="Uint8Array")return t;if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new Error("Unknown type, must be binary type")};var hr=t=>new TextEncoder().encode(t),mr=t=>new TextDecoder().decode(t);var tt=class{constructor(e,r,n){this.name=e,this.prefix=r,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},rt=class{constructor(e,r,n){if(this.name=e,this.prefix=r,r.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=r.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return wr(this,e)}},nt=class{constructor(e){this.decoders=e}or(e){return wr(this,e)}decode(e){let r=e[0],n=this.decoders[r];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},wr=(t,e)=>new nt({...t.decoders||{[t.prefix]:t},...e.decoders||{[e.prefix]:e}}),ot=class{constructor(e,r,n,o){this.name=e,this.prefix=r,this.baseEncode=n,this.baseDecode=o,this.encoder=new tt(e,r,n),this.decoder=new rt(e,r,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},we=({name:t,prefix:e,encode:r,decode:n})=>new ot(t,e,r,n),Z=({prefix:t,name:e,alphabet:r})=>{let{encode:n,decode:o}=pr(r,e);return we({prefix:t,name:e,encode:n,decode:s=>z(o(s))})},Xn=(t,e,r,n)=>{let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let s=t.length;for(;t[s-1]==="=";)--s;let i=new Uint8Array(s*r/8|0),a=0,p=0,y=0;for(let u=0;u<s;++u){let l=o[t[u]];if(l===void 0)throw new SyntaxError(`Non-${n} character`);p=p<<r|l,a+=r,a>=8&&(a-=8,i[y++]=255&p>>a)}if(a>=r||255&p<<8-a)throw new SyntaxError("Unexpected end of data");return i},Hn=(t,e,r)=>{let n=e[e.length-1]==="=",o=(1<<r)-1,s="",i=0,a=0;for(let p=0;p<t.length;++p)for(a=a<<8|t[p],i+=8;i>r;)i-=r,s+=e[o&a>>i];if(i&&(s+=e[o&a<<r-i]),n)for(;s.length*r&7;)s+="=";return s},v=({name:t,prefix:e,bitsPerChar:r,alphabet:n})=>we({prefix:e,name:t,encode(o){return Hn(o,n,r)},decode(o){return Xn(o,n,r,t)}});var W=v({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Qn=v({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Yn=v({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Kn=v({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Zn=v({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),eo=v({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),to=v({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),ro=v({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),no=v({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var it={};L(it,{base58btc:()=>R,base58flickr:()=>oo});var R=Z({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),oo=Z({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var at={};L(at,{base64:()=>ct,base64pad:()=>so,base64url:()=>io,base64urlpad:()=>co});var ct=v({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),so=v({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),io=v({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),co=v({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});U.default.formatters.b=t=>t==null?"undefined":R.baseEncode(t);U.default.formatters.t=t=>t==null?"undefined":W.baseEncode(t);U.default.formatters.m=t=>t==null?"undefined":ct.baseEncode(t);U.default.formatters.p=t=>t==null?"undefined":t.toString();U.default.formatters.c=t=>t==null?"undefined":t.toString();U.default.formatters.k=t=>t==null?"undefined":t.toString();U.default.formatters.a=t=>t==null?"undefined":t.toString();function ao(t){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=t,e.destroy=()=>!0,e.extend=()=>e,e}function ee(t){let e=ao(`${t}:trace`);return U.default.enabled(`${t}:trace`)&&U.default.names.map(r=>r.toString()).find(r=>r.includes(":trace"))!=null&&(e=(0,U.default)(`${t}:trace`)),Object.assign((0,U.default)(t),{error:(0,U.default)(`${t}:error`),trace:e})}var uo=yr,br=128,lo=127,po=~lo,fo=Math.pow(2,31);function yr(t,e,r){e=e||[],r=r||0;for(var n=r;t>=fo;)e[r++]=t&255|br,t/=128;for(;t&po;)e[r++]=t&255|br,t>>>=7;return e[r]=t|0,yr.bytes=r-n+1,e}var ho=ut,mo=128,xr=127;function ut(t,n){var r=0,n=n||0,o=0,s=n,i,a=t.length;do{if(s>=a)throw ut.bytes=0,new RangeError("Could not decode varint");i=t[s++],r+=o<28?(i&xr)<<o:(i&xr)*Math.pow(2,o),o+=7}while(i>=mo);return ut.bytes=s-n,r}var go=Math.pow(2,7),wo=Math.pow(2,14),bo=Math.pow(2,21),xo=Math.pow(2,28),yo=Math.pow(2,35),Co=Math.pow(2,42),vo=Math.pow(2,49),Eo=Math.pow(2,56),Ao=Math.pow(2,63),Io=function(t){return t<go?1:t<wo?2:t<bo?3:t<xo?4:t<yo?5:t<Co?6:t<vo?7:t<Eo?8:t<Ao?9:10},So={encode:uo,decode:ho,encodingLength:Io},To=So,Fe=To;var Re=(t,e=0)=>[Fe.decode(t,e),Fe.decode.bytes],be=(t,e,r=0)=>(Fe.encode(t,e,r),e),xe=t=>Fe.encodingLength(t);var ie=(t,e)=>{let r=e.byteLength,n=xe(t),o=n+xe(r),s=new Uint8Array(o+r);return be(t,s,0),be(r,s,n),s.set(e,o),new ye(t,r,e,s)},$e=t=>{let e=z(t),[r,n]=Re(e),[o,s]=Re(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new ye(r,o,i,e)},Cr=(t,e)=>{if(t===e)return!0;{let r=e;return t.code===r.code&&t.size===r.size&&r.bytes instanceof Uint8Array&&fr(t.bytes,r.bytes)}},ye=class{constructor(e,r,n,o){this.code=e,this.size=r,this.digest=n,this.bytes=o}};var vr=(t,e)=>{let{bytes:r,version:n}=t;switch(n){case 0:return Fo(r,lt(t),e||R.encoder);default:return Ro(r,lt(t),e||W.encoder)}};var Er=new WeakMap,lt=t=>{let e=Er.get(t);if(e==null){let r=new Map;return Er.set(t,r),r}return e},te=class t{constructor(e,r,n,o){this.code=r,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:r}=this;if(e!==Oe)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(r.code!==Oo)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return t.createV0(r)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:r}=this.multihash,n=ie(e,r);return t.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return t.equals(this,e)}static equals(e,r){let n=r;return n&&e.code===n.code&&e.version===n.version&&Cr(e.multihash,n.multihash)}toString(e){return vr(this,e)}toJSON(){return{"/":vr(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let r=e;if(r instanceof t)return r;if(r["/"]!=null&&r["/"]===r.bytes||r.asCID===r){let{version:n,code:o,multihash:s,bytes:i}=r;return new t(n,o,s,i||Ar(n,o,s.bytes))}else if(r[Mo]===!0){let{version:n,multihash:o,code:s}=r,i=$e(o);return t.create(n,s,i)}else return null}static create(e,r,n){if(typeof r!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(r!==Oe)throw new Error(`Version 0 CID must use dag-pb (code: ${Oe}) block encoding`);return new t(e,r,n,n.bytes)}case 1:{let o=Ar(e,r,n.bytes);return new t(e,r,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return t.create(0,Oe,e)}static createV1(e,r){return t.create(1,e,r)}static decode(e){let[r,n]=t.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return r}static decodeFirst(e){let r=t.inspectBytes(e),n=r.size-r.multihashSize,o=z(e.subarray(n,n+r.multihashSize));if(o.byteLength!==r.multihashSize)throw new Error("Incorrect length");let s=o.subarray(r.multihashSize-r.digestSize),i=new ye(r.multihashCode,r.digestSize,s,o);return[r.version===0?t.createV0(i):t.createV1(r.codec,i),e.subarray(r.size)]}static inspectBytes(e){let r=0,n=()=>{let[l,f]=Re(e.subarray(r));return r+=f,l},o=n(),s=Oe;if(o===18?(o=0,r=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=r,a=n(),p=n(),y=r+p,u=y-i;return{version:o,codec:s,multihashCode:a,digestSize:p,multihashSize:u,size:y}}static parse(e,r){let[n,o]=Po(e,r),s=t.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return lt(s).set(n,e),s}},Po=(t,e)=>{switch(t[0]){case"Q":{let r=e||R;return[R.prefix,r.decode(`${R.prefix}${t}`)]}case R.prefix:{let r=e||R;return[R.prefix,r.decode(t)]}case W.prefix:{let r=e||W;return[W.prefix,r.decode(t)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[t[0],e.decode(t)]}}},Fo=(t,e,r)=>{let{prefix:n}=r;if(n!==R.prefix)throw Error(`Cannot string encode V0 in ${r.name} encoding`);let o=e.get(n);if(o==null){let s=r.encode(t).slice(1);return e.set(n,s),s}else return o},Ro=(t,e,r)=>{let{prefix:n}=r,o=e.get(n);if(o==null){let s=r.encode(t);return e.set(n,s),s}else return o},Oe=112,Oo=18,Ar=(t,e,r)=>{let n=xe(t),o=n+xe(e),s=new Uint8Array(o+r.byteLength);return be(t,s,0),be(e,s,n),s.set(r,o),s},Mo=Symbol.for("@ipld/js-cid/CID");function Ir(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}var dt={};L(dt,{base10:()=>No});var No=Z({prefix:"9",name:"base10",alphabet:"0123456789"});var pt={};L(pt,{base16:()=>ko,base16upper:()=>Do});var ko=v({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Do=v({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var ft={};L(ft,{base2:()=>Lo});var Lo=v({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var ht={};L(ht,{base256emoji:()=>Bo});var Sr=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),_o=Sr.reduce((t,e,r)=>(t[r]=e,t),[]),Uo=Sr.reduce((t,e,r)=>(t[e.codePointAt(0)]=r,t),[]);function $o(t){return t.reduce((e,r)=>(e+=_o[r],e),"")}function Vo(t){let e=[];for(let r of t){let n=Uo[r.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${r}`);e.push(n)}return new Uint8Array(e)}var Bo=we({prefix:"\u{1F680}",name:"base256emoji",encode:$o,decode:Vo});var mt={};L(mt,{base36:()=>zo,base36upper:()=>qo});var zo=Z({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),qo=Z({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var gt={};L(gt,{base8:()=>jo});var jo=v({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var wt={};L(wt,{identity:()=>Go});var Go=we({prefix:"\0",name:"identity",encode:t=>mr(t),decode:t=>hr(t)});var Di=new TextEncoder,Li=new TextDecoder;var bt={};L(bt,{identity:()=>Qo});var Tr=0,Xo="identity",Pr=z,Ho=t=>ie(Tr,Pr(t)),Qo={code:Tr,name:Xo,encode:Pr,digest:Ho};var vt={};L(vt,{sha256:()=>Yo,sha512:()=>Ko});var Ct=oe(H("crypto"),1);var yt=({name:t,code:e,encode:r})=>new xt(t,e,r),xt=class{constructor(e,r,n){this.name=e,this.code=r,this.encode=n}digest(e){if(e instanceof Uint8Array){let r=this.encode(e);return r instanceof Uint8Array?ie(this.code,r):r.then(n=>ie(this.code,n))}else throw Error("Unknown type, must be binary type")}};var Yo=yt({name:"sha2-256",code:18,encode:t=>z(Ct.default.createHash("sha256").update(t).digest())}),Ko=yt({name:"sha2-512",code:19,encode:t=>z(Ct.default.createHash("sha512").update(t).digest())});var Me={...wt,...ft,...gt,...dt,...pt,...st,...mt,...it,...at,...ht},Gi={...vt,...bt};function ve(t){return globalThis.Buffer!=null?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):t}function Ee(t=0){return globalThis.Buffer?.allocUnsafe!=null?ve(globalThis.Buffer.allocUnsafe(t)):new Uint8Array(t)}function Or(t,e,r,n){return{name:t,prefix:e,encoder:{name:t,prefix:e,encode:r},decoder:{decode:n}}}var Rr=Or("utf8","u",t=>"u"+new TextDecoder("utf8").decode(t),t=>new TextEncoder().encode(t.substring(1))),Et=Or("ascii","a",t=>{let e="a";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},t=>{t=t.substring(1);let e=Ee(t.length);for(let r=0;r<t.length;r++)e[r]=t.charCodeAt(r);return e}),Zo={utf8:Rr,"utf-8":Rr,hex:Me.base16,latin1:Et,ascii:Et,binary:Et,...Me},Ve=Zo;function N(t,e="utf8"){let r=Ve[e];if(r==null)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString("utf8"):r.encoder.encode(t).substring(1)}var es=Math.pow(2,7),ts=Math.pow(2,14),rs=Math.pow(2,21),At=Math.pow(2,28),It=Math.pow(2,35),St=Math.pow(2,42),Tt=Math.pow(2,49),b=128,O=127;function J(t){if(t<es)return 1;if(t<ts)return 2;if(t<rs)return 3;if(t<At)return 4;if(t<It)return 5;if(t<St)return 6;if(t<Tt)return 7;if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function ns(t,e,r=0){switch(J(t)){case 8:e[r++]=t&255|b,t/=128;case 7:e[r++]=t&255|b,t/=128;case 6:e[r++]=t&255|b,t/=128;case 5:e[r++]=t&255|b,t/=128;case 4:e[r++]=t&255|b,t>>>=7;case 3:e[r++]=t&255|b,t>>>=7;case 2:e[r++]=t&255|b,t>>>=7;case 1:{e[r++]=t&255,t>>>=7;break}default:throw new Error("unreachable")}return e}function os(t,e,r=0){switch(J(t)){case 8:e.set(r++,t&255|b),t/=128;case 7:e.set(r++,t&255|b),t/=128;case 6:e.set(r++,t&255|b),t/=128;case 5:e.set(r++,t&255|b),t/=128;case 4:e.set(r++,t&255|b),t>>>=7;case 3:e.set(r++,t&255|b),t>>>=7;case 2:e.set(r++,t&255|b),t>>>=7;case 1:{e.set(r++,t&255),t>>>=7;break}default:throw new Error("unreachable")}return e}function ss(t,e){let r=t[e],n=0;if(n+=r&O,r<b||(r=t[e+1],n+=(r&O)<<7,r<b)||(r=t[e+2],n+=(r&O)<<14,r<b)||(r=t[e+3],n+=(r&O)<<21,r<b)||(r=t[e+4],n+=(r&O)*At,r<b)||(r=t[e+5],n+=(r&O)*It,r<b)||(r=t[e+6],n+=(r&O)*St,r<b)||(r=t[e+7],n+=(r&O)*Tt,r<b))return n;throw new RangeError("Could not decode varint")}function is(t,e){let r=t.get(e),n=0;if(n+=r&O,r<b||(r=t.get(e+1),n+=(r&O)<<7,r<b)||(r=t.get(e+2),n+=(r&O)<<14,r<b)||(r=t.get(e+3),n+=(r&O)<<21,r<b)||(r=t.get(e+4),n+=(r&O)*At,r<b)||(r=t.get(e+5),n+=(r&O)*It,r<b)||(r=t.get(e+6),n+=(r&O)*St,r<b)||(r=t.get(e+7),n+=(r&O)*Tt,r<b))return n;throw new RangeError("Could not decode varint")}function Ae(t,e,r=0){return e==null&&(e=Ee(J(t))),e instanceof Uint8Array?ns(t,e,r):os(t,e,r)}function ce(t,e=0){return t instanceof Uint8Array?ss(t,e):is(t,e)}function Q(t,e){e==null&&(e=t.reduce((o,s)=>o+s.length,0));let r=Ee(e),n=0;for(let o of t)r.set(o,n),n+=o.length;return ve(r)}var Be=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let r=this.index,n=e();return n===void 0&&(this.index=r),n}parseWith(e){let r=e();if(this.index===this.input.length)return r}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let r=this.readChar();if(r===e)return r})}readSeparator(e,r,n){return this.readAtomically(()=>{if(!(r>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,r,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let p=a==="0",y=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let l=this.readChar();if(l===void 0)return;let f=Number.parseInt(l,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(s*=e,s+=u,s>y||(i+=1,r!==void 0&&i>r))return}if(i!==0)return!n&&p&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let r=0;r<e.length;r++){let n=this.readSeparator(".",r,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[r]=n}return e})}readIPv6Addr(){let e=r=>{for(let n=0;n<r.length/2;n++){let o=n*2;if(n<r.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return r[o]=i[0],r[o+1]=i[1],r[o+2]=i[2],r[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];r[o]=s>>8,r[o+1]=s&255}return[r.length,!1]};return this.readAtomically(()=>{let r=new Uint8Array(16),[n,o]=e(r);if(n===16)return r;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return r.set(s.subarray(0,a),16-a),r})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var cc=new Be;var mc=parseInt("0xFFFF",16),gc=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Pt(t,e="utf8"){let r=Ve[e];if(r==null)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?ve(globalThis.Buffer.from(t,"utf-8")):r.decoder.decode(`${r.prefix}${t}`)}var q=H("node:net");function ze(t){return!!(0,q.isIP)(t)}var Dr=q.isIPv4,ps=q.isIPv6,Ft=function(t){let e=0;if(t=t.toString().trim(),Dr(t)){let r=new Uint8Array(e+4);return t.split(/\./g).forEach(n=>{r[e++]=parseInt(n,10)&255}),r}if(ps(t)){let r=t.split(":",8),n;for(n=0;n<r.length;n++){let s=Dr(r[n]),i;s&&(i=Ft(r[n]),r[n]=N(i.slice(0,2),"base16")),i!=null&&++n<8&&r.splice(n,0,N(i.slice(2,4),"base16"))}if(r[0]==="")for(;r.length<8;)r.unshift("0");else if(r[r.length-1]==="")for(;r.length<8;)r.push("0");else if(r.length<8){for(n=0;n<r.length&&r[n]!=="";n++);let s=[n,1];for(n=9-r.length;n>0;n--)s.push("0");r.splice.apply(r,s)}let o=new Uint8Array(e+16);for(n=0;n<r.length;n++){let s=parseInt(r[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},Lr=function(t,e=0,r){e=~~e,r=r??t.length-e;let n=new DataView(t.buffer);if(r===4){let o=[];for(let s=0;s<r;s++)o.push(t[e+s]);return o.join(".")}if(r===16){let o=[];for(let s=0;s<r;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Ie={},Rt={},hs=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[777,-1,"memory"]];hs.forEach(t=>{let e=ms(...t);Rt[e.code]=e,Ie[e.name]=e});function ms(t,e,r,n,o){return{code:t,size:e,name:r,resolvable:!!n,path:!!o}}function x(t){if(typeof t=="number"){if(Rt[t]!=null)return Rt[t];throw new Error(`no protocol with code: ${t}`)}else if(typeof t=="string"){if(Ie[t]!=null)return Ie[t];throw new Error(`no protocol with name: ${t}`)}throw new Error(`invalid protocol id type: ${typeof t}`)}var na=x("ip4"),oa=x("ip6"),sa=x("ipcidr");function Mt(t,e){switch(x(t).code){case 4:case 41:return ws(e);case 42:return $r(e);case 6:case 273:case 33:case 132:return Br(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return $r(e);case 421:return Cs(e);case 444:return Vr(e);case 445:return Vr(e);case 466:return ys(e);default:return N(e,"base16")}}function Nt(t,e){switch(x(t).code){case 4:return _r(e);case 41:return _r(e);case 42:return Ur(e);case 6:case 273:case 33:case 132:return kt(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Ur(e);case 421:return bs(e);case 444:return vs(e);case 445:return Es(e);case 466:return xs(e);default:return Pt(e,"base16")}}var Ot=Object.values(Me).map(t=>t.decoder),gs=function(){let t=Ot[0].or(Ot[1]);return Ot.slice(2).forEach(e=>t=t.or(e)),t}();function _r(t){if(!ze(t))throw new Error("invalid ip address");return Ft(t)}function ws(t){let e=Lr(t,0,t.length);if(e==null)throw new Error("ipBuff is required");if(!ze(e))throw new Error("invalid ip address");return e}function kt(t){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,t),new Uint8Array(e)}function Br(t){return new DataView(t.buffer).getUint16(t.byteOffset)}function Ur(t){let e=Pt(t),r=Uint8Array.from(Ae(e.length));return Q([r,e],r.length+e.length)}function $r(t){let e=ce(t);if(t=t.slice(J(e)),t.length!==e)throw new Error("inconsistent lengths");return N(t)}function bs(t){let e;t[0]==="Q"||t[0]==="1"?e=$e(R.decode(`z${t}`)).bytes:e=te.parse(t).multihash.bytes;let r=Uint8Array.from(Ae(e.length));return Q([r,e],r.length+e.length)}function xs(t){let e=gs.decode(t),r=Uint8Array.from(Ae(e.length));return Q([r,e],r.length+e.length)}function ys(t){let e=ce(t),r=t.slice(J(e));if(r.length!==e)throw new Error("inconsistent lengths");return"u"+N(r,"base64url")}function Cs(t){let e=ce(t),r=t.slice(J(e));if(r.length!==e)throw new Error("inconsistent lengths");return N(r,"base58btc")}function vs(t){let e=t.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let r=W.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=kt(n);return Q([r,o],r.length+o.length)}function Es(t){let e=t.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let r=W.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=kt(n);return Q([r,o],r.length+o.length)}function Vr(t){let e=t.slice(0,t.length-2),r=t.slice(t.length-2),n=N(e,"base32"),o=Br(r);return`${n}:${o}`}function zr(t){t=Dt(t);let e=[],r=[],n=null,o=t.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=x(i);if(a.size===0){e.push([a.code]),r.push([a.code]);continue}if(s++,s>=o.length)throw jr("invalid address: "+t);if(a.path===!0){n=Dt(o.slice(s).join("/")),e.push([a.code,Nt(a.code,n)]),r.push([a.code,n]);break}let p=Nt(a.code,o[s]);e.push([a.code,p]),r.push([a.code,Mt(a.code,p)])}return{string:qr(r),bytes:_t(e),tuples:e,stringTuples:r,path:n}}function Lt(t){let e=[],r=[],n=null,o=0;for(;o<t.length;){let s=ce(t,o),i=J(s),a=x(s),p=As(a,t.slice(o+i));if(p===0){e.push([s]),r.push([s]),o+=i;continue}let y=t.slice(o+i,o+i+p);if(o+=p+i,o>t.length)throw jr("Invalid address Uint8Array: "+N(t,"base16"));e.push([s,y]);let u=Mt(s,y);if(r.push([s,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(t),string:qr(r),tuples:e,stringTuples:r,path:n}}function qr(t){let e=[];return t.map(r=>{let n=x(r[0]);return e.push(n.name),r.length>1&&r[1]!=null&&e.push(r[1]),null}),Dt(e.join("/"))}function _t(t){return Q(t.map(e=>{let r=x(e[0]),n=Uint8Array.from(Ae(r.code));return e.length>1&&e[1]!=null&&(n=Q([n,e[1]])),n}))}function As(t,e){if(t.size>0)return t.size/8;if(t.size===0)return 0;{let r=ce(e instanceof Uint8Array?e:Uint8Array.from(e));return r+J(r)}}function Dt(t){return"/"+t.trim().split("/").filter(e=>e).join("/")}function jr(t){return new Error("Error parsing address: "+t)}var Is=Symbol.for("nodejs.util.inspect.custom"),Ut=Symbol.for("@multiformats/js-multiaddr/multiaddr"),Ss=[x("dns").code,x("dns4").code,x("dns6").code,x("dnsaddr").code],qe=class t{bytes;#e;#t;#r;#n;[Ut]=!0;constructor(e){e==null&&(e="");let r;if(e instanceof Uint8Array)r=Lt(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);r=zr(e)}else if(Wr(e))r=Lt(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=r.bytes,this.#e=r.string,this.#t=r.tuples,this.#r=r.stringTuples,this.#n=r.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,r,n,o,s="",i=x("tcp"),a=x("udp"),p=x("ip4"),y=x("ip6"),u=x("dns6"),l=x("ip6zone");for(let[g,h]of this.stringTuples())g===l.code&&(s=`%${h??""}`),Ss.includes(g)&&(r=i.name,o=443,n=`${h??""}${s}`,e=g===u.code?6:4),(g===i.code||g===a.code)&&(r=x(g).name,o=parseInt(h??"")),(g===p.code||g===y.code)&&(r=x(g).name,n=`${h??""}${s}`,e=g===y.code?6:4);if(e==null||r==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:r,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},x(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>x(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new t(e),new t(this.toString()+e.toString())}decapsulate(e){let r=e.toString(),n=this.toString(),o=n.lastIndexOf(r);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new t(n.slice(0,o))}decapsulateCode(e){let r=this.tuples();for(let n=r.length-1;n>=0;n--)if(r[n][0]===e)return new t(_t(r.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Ie.p2p.code&&e.push([n,o]),n===Ie["p2p-circuit"].code&&(e=[])});let r=e.pop();if(r?.[1]!=null){let n=r[1];return n[0]==="Q"||n[0]==="1"?N(R.decode(`z${n}`),"base58btc"):N(te.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#n}equals(e){return Ir(this.bytes,e.bytes)}async resolve(e){let r=this.protos().find(s=>s.resolvable);if(r==null)return[this];let n=Gr.get(r.name);if(n==null)throw new T(`no available resolver for ${r.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>new t(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let r=(e??this).protos();return!(r.length!==2||r[0].code!==4&&r[0].code!==41||r[1].code!==6&&r[1].code!==273)}[Is](){return`Multiaddr(${this.#e})`}};var Gr=new Map;function Wr(t){return!!t?.[Ut]}function Y(t){return new qe(t)}var Ts=c("dns4"),Ps=c("dns6"),Fs=c("dnsaddr"),ue=E(c("dns"),Fs,Ts,Ps),We=E(c("ip4"),c("ip6")),ne=E(d(We,c("tcp")),d(ue,c("tcp"))),Je=d(We,c("udp")),Rs=d(Je,c("utp")),Os=d(Je,c("quic")),Ms=d(Je,c("quic-v1")),$t=E(d(ne,c("ws")),d(ue,c("ws"))),je=E(d($t,c("p2p")),$t),Vt=E(d(ne,c("wss")),d(ue,c("wss")),d(ne,c("tls"),c("ws")),d(ue,c("tls"),c("ws"))),Ge=E(d(Vt,c("p2p")),Vt),Bt=E(d(ne,c("http")),d(We,c("http")),d(ue,c("http"))),zt=E(d(ne,c("https")),d(We,c("https")),d(ue,c("https"))),Jr=d(Je,c("webrtc-direct"),c("certhash")),Qr=E(d(Jr,c("p2p")),Jr),Xr=d(Ms,c("webtransport"),c("certhash"),c("certhash")),Yr=E(d(Xr,c("p2p")),Xr),Kr=E(d(je,c("p2p-webrtc-star"),c("p2p")),d(Ge,c("p2p-webrtc-star"),c("p2p")),d(je,c("p2p-webrtc-star")),d(Ge,c("p2p-webrtc-star"))),Oa=E(d(je,c("p2p-websocket-star"),c("p2p")),d(Ge,c("p2p-websocket-star"),c("p2p")),d(je,c("p2p-websocket-star")),d(Ge,c("p2p-websocket-star"))),Zr=E(d(Bt,c("p2p-webrtc-direct"),c("p2p")),d(zt,c("p2p-webrtc-direct"),c("p2p")),d(Bt,c("p2p-webrtc-direct")),d(zt,c("p2p-webrtc-direct"))),le=E($t,Vt,Bt,zt,Kr,Zr,ne,Rs,Os,ue,Qr,Yr),Ma=E(d(le,c("p2p-stardust"),c("p2p")),d(le,c("p2p-stardust"))),re=E(d(le,c("p2p")),Kr,Zr,Qr,Yr,c("p2p")),Hr=E(d(re,c("p2p-circuit"),re),d(re,c("p2p-circuit")),d(c("p2p-circuit"),re),d(le,c("p2p-circuit")),d(c("p2p-circuit"),le),c("p2p-circuit")),en=()=>E(d(Hr,en),Hr),ae=en(),Na=E(d(ae,re,ae),d(re,ae),d(ae,re),ae,re);var ka=E(d(ae,c("webrtc"),c("p2p")),d(ae,c("webrtc")),d(le,c("webrtc"),c("p2p")),d(le,c("webrtc")),c("webrtc"));function tn(t){function e(r){let n;try{n=Y(r)}catch{return!1}let o=t(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function d(...t){function e(r){if(r.length<t.length)return null;let n=r;return t.some(o=>(n=typeof o=="function"?o().partialMatch(r):o.partialMatch(r),Array.isArray(n)&&(r=n),n===null)),n}return{toString:function(){return"{ "+t.join(" ")+" }"},input:t,matches:tn(e),partialMatch:e}}function E(...t){function e(n){let o=null;return t.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+t.join(" ")+" }"},input:t,matches:tn(e),partialMatch:e}}function c(t){let e=t;function r(o){let s;try{s=Y(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:r,partialMatch:n}}var hn=oe(H("net"),1);var Xe=class extends EventTarget{#e=new Map;listenerCount(e){let r=this.#e.get(e);return r==null?0:r.length}addEventListener(e,r,n){super.addEventListener(e,r,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:r,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,r,n){super.removeEventListener(e.toString(),r??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==r),this.#e.set(e,o))}dispatchEvent(e){let r=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),r}safeDispatchEvent(e,r){return this.dispatchEvent(new Se(e,r))}},qt=class extends Event{detail;constructor(e,r){super(e,r),this.detail=r?.detail}},Se=globalThis.CustomEvent??qt;var ks=ee("libp2p:ip-port-to-multiaddr"),jt={ERR_INVALID_IP_PARAMETER:"ERR_INVALID_IP_PARAMETER",ERR_INVALID_PORT_PARAMETER:"ERR_INVALID_PORT_PARAMETER",ERR_INVALID_IP:"ERR_INVALID_IP"};function rn(t,e){if(typeof t!="string")throw new T(`invalid ip provided: ${t}`,jt.ERR_INVALID_IP_PARAMETER);if(typeof e=="string"&&(e=parseInt(e)),isNaN(e))throw new T(`invalid port provided: ${e}`,jt.ERR_INVALID_PORT_PARAMETER);if((0,q.isIPv4)(t))return Y(`/ip4/${t}/tcp/${e}`);if((0,q.isIPv6)(t))return Y(`/ip6/${t}/tcp/${e}`);let r=`invalid ip:port for creating a multiaddr: ${t}:${e}`;throw ks.error(r),new T(r,jt.ERR_INVALID_IP)}var fn=oe(dn(),1);var Jt=oe(H("os"),1),pn=oe(H("path"),1);var $s={ip4:"IPv4",ip6:"IPv6"};function Pe(t,e={}){let r=t.getPath();return r!=null?Jt.default.platform()==="win32"?{path:pn.default.join("\\\\.\\pipe\\",r)}:{path:r}:{...t.toOptions(),...e}}function Xt(t,e,r){let n=o=>Y(`/${t}/${o}/tcp/${r}`);return(Vs(e)?zs($s[t]):[e]).map(n)}function Vs(t){return["0.0.0.0","::"].includes(t)}var Bs=Jt.default.networkInterfaces();function zs(t){let e=[];for(let[,r]of Object.entries(Bs))if(r!=null)for(let n of r)n.family===t&&e.push(n.address);return e}var X=ee("libp2p:tcp:socket"),Qe=(t,e)=>{let r=e.metrics,n=e.metricPrefix??"",o=e.socketInactivityTimeout??3e5,s=e.socketCloseTimeout??500;e.listeningAddr?.getPath()!=null&&(e.remoteAddr=e.listeningAddr),e.remoteAddr?.getPath()!=null&&(e.localAddr=e.remoteAddr);let i;if(e.remoteAddr!=null)i=e.remoteAddr;else{if(t.remoteAddress==null||t.remotePort==null)throw new T("Could not determine remote address or port","ERR_NO_REMOTE_ADDRESS");i=rn(t.remoteAddress,t.remotePort)}let a=Pe(i),p=a.path??`${a.host??""}:${a.port??""}`,{sink:y,source:u}=fn.default.duplex(t);t.setTimeout(o,()=>{X("%s socket read timeout",p),r?.increment({[`${n}timeout`]:!0});let f;t.readable&&(f=new T("Socket read timeout","ERR_SOCKET_READ_TIMEOUT")),t.destroy(f)}),t.once("close",()=>{X("%s socket close",p),r?.increment({[`${n}close`]:!0}),l.timeline.close==null&&(l.timeline.close=Date.now())}),t.once("end",()=>{X("%s socket end",p),r?.increment({[`${n}end`]:!0})});let l={async sink(f){try{await y(f)}catch(g){g.type!=="aborted"&&X(g)}t.end()},source:u,remoteAddr:i,timeline:{open:Date.now()},async close(f={}){if(t.destroyed){X("%s socket was already destroyed when trying to close",p);return}f.signal=f.signal??AbortSignal.timeout(s);try{X("%s closing socket",p),await new Promise((g,h)=>{t.once("close",()=>{X("%s socket closed",p),g()}),t.once("error",w=>{X("%s socket error",p,w),l.timeline.close==null&&(l.timeline.close=Date.now()),h(w)}),t.setTimeout(s),t.end(),t.writableLength>0?t.once("drain",()=>{X("%s socket drained",p),t.destroy()}):t.destroy()})}catch(g){this.abort(g)}},abort:f=>{X("%s socket abort due to error",p,f),t.destroy(f)}};return l};var M=ee("libp2p:tcp:listener");async function Ht(t){try{await t.close()}catch(e){M.error("an error occurred closing the connection",e)}}var I;(function(t){t[t.INACTIVE=0]="INACTIVE",t[t.ACTIVE=1]="ACTIVE",t[t.PAUSED=2]="PAUSED"})(I||(I={}));var Ye=class extends Xe{context;server;connections=new Set;status={code:I.INACTIVE};metrics;addr;constructor(e){if(super(),this.context=e,e.keepAlive=e.keepAlive??!0,this.addr="unknown",this.server=hn.default.createServer(e,this.onSocket.bind(this)),e.maxConnections!==void 0&&(this.server.maxConnections=e.maxConnections),e.closeServerOnMaxConnections!=null&&e.closeServerOnMaxConnections.closeAbove<e.closeServerOnMaxConnections.listenBelow)throw new T("closeAbove must be >= listenBelow","ERROR_CONNECTION_LIMITS");this.server.on("listening",()=>{if(e.metrics!=null){let r=this.server.address();r==null?this.addr="unknown":typeof r=="string"?this.addr=r:this.addr=`${r.address}:${r.port}`,e.metrics?.registerMetricGroup("libp2p_tcp_inbound_connections_total",{label:"address",help:"Current active connections in TCP listener",calculate:()=>({[this.addr]:this.connections.size})}),this.metrics={status:e.metrics.registerMetricGroup("libp2p_tcp_listener_status_info",{label:"address",help:"Current status of the TCP listener socket"}),errors:e.metrics.registerMetricGroup("libp2p_tcp_listener_errors_total",{label:"address",help:"Total count of TCP listener errors by type"}),events:e.metrics.registerMetricGroup("libp2p_tcp_listener_events_total",{label:"address",help:"Total count of TCP listener events by type"})},this.metrics?.status.update({[this.addr]:I.ACTIVE})}this.dispatchEvent(new Se("listening"))}).on("error",r=>{this.metrics?.errors.increment({[`${this.addr} listen_error`]:!0}),this.dispatchEvent(new Se("error",{detail:r}))}).on("close",()=>{this.metrics?.status.update({[this.addr]:this.status.code}),this.status.code!==I.PAUSED&&this.dispatchEvent(new Se("close"))})}onSocket(e){if(this.status.code!==I.ACTIVE)throw new T("Server is is not listening yet","ERR_SERVER_NOT_RUNNING");e.on("error",n=>{M("socket error",n),this.metrics?.events.increment({[`${this.addr} error`]:!0})});let r;try{r=Qe(e,{listeningAddr:this.status.listeningAddr,socketInactivityTimeout:this.context.socketInactivityTimeout,socketCloseTimeout:this.context.socketCloseTimeout,metrics:this.metrics?.events,metricPrefix:`${this.addr} `})}catch(n){M.error("inbound connection failed",n),this.metrics?.errors.increment({[`${this.addr} inbound_to_connection`]:!0});return}M("new inbound connection %s",r.remoteAddr);try{this.context.upgrader.upgradeInbound(r).then(n=>{M("inbound connection upgraded %s",r.remoteAddr),this.connections.add(r),e.once("close",()=>{this.connections.delete(r),this.context.closeServerOnMaxConnections!=null&&this.connections.size<this.context.closeServerOnMaxConnections.listenBelow&&this.resume().catch(o=>{M.error("error attempting to listen server once connection count under limit",o),this.context.closeServerOnMaxConnections?.onListenError?.(o)})}),this.context.handler!=null&&this.context.handler(n),this.context.closeServerOnMaxConnections!=null&&this.connections.size>=this.context.closeServerOnMaxConnections.closeAbove&&this.pause(!1).catch(o=>{M.error("error attempting to close server once connection count over limit",o)}),this.dispatchEvent(new Se("connection",{detail:n}))}).catch(async n=>{M.error("inbound connection failed",n),this.metrics?.errors.increment({[`${this.addr} inbound_upgrade`]:!0}),await Ht(r)}).catch(n=>{M.error("closing inbound connection failed",n)})}catch(n){M.error("inbound connection failed",n),Ht(r).catch(o=>{M.error("closing inbound connection failed",o),this.metrics?.errors.increment({[`${this.addr} inbound_closing_failed`]:!0})})}}getAddrs(){if(this.status.code===I.INACTIVE)return[];let e=[],r=this.server.address(),{listeningAddr:n,peerId:o}=this.status;if(r==null)return[];if(typeof r=="string")e=[n];else try{n.toString().startsWith("/ip4")?e=e.concat(Xt("ip4",r.address,r.port)):r.family==="IPv6"&&(e=e.concat(Xt("ip6",r.address,r.port)))}catch(s){M.error("could not turn %s:%s into multiaddr",r.address,r.port,s)}return e.map(s=>o!=null?s.encapsulate(`/p2p/${o}`):s)}async listen(e){if(this.status.code===I.ACTIVE||this.status.code===I.PAUSED)throw new T("server is already listening","ERR_SERVER_ALREADY_LISTENING");let r=e.getPeerId(),n=r==null?e.decapsulateCode(421):e,{backlog:o}=this.context;try{this.status={code:I.ACTIVE,listeningAddr:n,peerId:r,netConfig:Pe(n,{backlog:o})},await this.resume()}catch(s){throw this.status={code:I.INACTIVE},s}}async close(){await Promise.all([Promise.all(Array.from(this.connections.values()).map(async e=>Ht(e))),this.pause(!0).catch(e=>{M.error("error attempting to close server once connection count over limit",e)})])}async resume(){if(this.server.listening||this.status.code===I.INACTIVE)return;let e=this.status.netConfig;await new Promise((r,n)=>{this.server.once("error",n),this.server.listen(e,r)}),this.status={...this.status,code:I.ACTIVE},M("Listening on %s",this.server.address())}async pause(e){if(!this.server.listening&&this.status.code===I.PAUSED&&e){this.status={code:I.INACTIVE};return}!this.server.listening||this.status.code!==I.ACTIVE||(M("Closing server on %s",this.server.address()),this.status=e?{code:I.INACTIVE}:{...this.status,code:I.PAUSED},await new Promise((r,n)=>{this.server.close(o=>{o!=null?n(o):r()})}))}};var K=ee("libp2p:tcp"),Yt=class{opts;metrics;components;constructor(e,r={}){this.opts=r,this.components=e,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_tcp_dialer_events_total",{label:"event",help:"Total count of TCP dialer events by type"})})}[er]=!0;[Symbol.toStringTag]="@libp2p/tcp";async dial(e,r){r.keepAlive=r.keepAlive??!0;let n=await this._connect(e,r);n.on("error",a=>{K("socket error",a)});let o=Qe(n,{remoteAddr:e,socketInactivityTimeout:this.opts.outboundSocketInactivityTimeout,socketCloseTimeout:this.opts.socketCloseTimeout,metrics:this.metrics?.dialerEvents}),s=()=>{o.close().catch(a=>{K.error("Error closing maConn after abort",a)})};r.signal?.addEventListener("abort",s,{once:!0}),K("new outbound connection %s",o.remoteAddr);let i=await r.upgrader.upgradeOutbound(o);if(K("outbound connection %s upgraded",o.remoteAddr),r.signal?.removeEventListener("abort",s),r.signal?.aborted===!0)throw i.close().catch(a=>{K.error("Error closing conn after abort",a)}),new pe;return i}async _connect(e,r){if(r.signal?.aborted===!0)throw new pe;return new Promise((n,o)=>{let s=Date.now(),i=Pe(e),a=i.path??`${i.host??""}:${i.port}`;K("dialing %j",i);let p=mn.default.connect(i),y=h=>{h.message=`connection error ${a}: ${h.message}`,this.metrics?.dialerEvents.increment({error:!0}),g(h)},u=()=>{K("connection timeout %s",a),this.metrics?.dialerEvents.increment({timeout:!0});let h=new T(`connection timeout after ${Date.now()-s}ms`,"ERR_CONNECT_TIMEOUT");p.emit("error",h)},l=()=>{K("connection opened %j",i),this.metrics?.dialerEvents.increment({connect:!0}),g()},f=()=>{K("connection aborted %j",i),this.metrics?.dialerEvents.increment({abort:!0}),p.destroy(),g(new pe)},g=h=>{if(p.removeListener("error",y),p.removeListener("timeout",u),p.removeListener("connect",l),r.signal!=null&&r.signal.removeEventListener("abort",f),h!=null){o(h);return}n(p)};p.on("error",y),p.on("timeout",u),p.on("connect",l),r.signal!=null&&r.signal.addEventListener("abort",f)})}createListener(e){return new Ye({...e,maxConnections:this.opts.maxConnections,backlog:this.opts.backlog,closeServerOnMaxConnections:this.opts.closeServerOnMaxConnections,socketInactivityTimeout:this.opts.inboundSocketInactivityTimeout,socketCloseTimeout:this.opts.socketCloseTimeout,metrics:this.components.metrics})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(r=>r.protoCodes().includes(290)?!1:r.protoCodes().includes(400)?!0:ne.matches(r.decapsulateCode(421)))}};function Js(t={}){return(e={})=>new Yt(e,t)}return Cn(Xs);})();
|
|
2
|
+
"use strict";var Libp2PTcp=(()=>{var Lr=Object.create;var bt=Object.defineProperty;var Or=Object.getOwnPropertyDescriptor;var Vr=Object.getOwnPropertyNames;var Fr=Object.getPrototypeOf,$r=Object.prototype.hasOwnProperty;var Y=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Z=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),R=(r,t)=>{for(var e in t)bt(r,e,{get:t[e],enumerable:!0})},Ne=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Vr(t))!$r.call(r,o)&&o!==e&&bt(r,o,{get:()=>t[o],enumerable:!(n=Or(t,o))||n.enumerable});return r};var tt=(r,t,e)=>(e=r!=null?Lr(Fr(r)):{},Ne(t||!r||!r.__esModule?bt(e,"default",{value:r,enumerable:!0}):e,r)),zr=r=>Ne(bt({},"__esModule",{value:!0}),r);var Mt=Z((Sc,Ir)=>{Ir.exports=r=>{if(r[Symbol.asyncIterator])return r;if(r.getReader)return async function*(){let t=r.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}}();throw new Error("unknown stream")}});var Sr=Z((Tc,Cr)=>{Cr.exports=function(t){if(t){if(typeof t[Symbol.iterator]=="function")return t[Symbol.iterator]();if(typeof t[Symbol.asyncIterator]=="function")return t[Symbol.asyncIterator]();if(typeof t.next=="function")return t}throw new Error("argument is not an iterator or iterable")}});var Ae=Z((Pc,Tr)=>{var Do=Sr();Tr.exports=r=>async t=>{t=Do(t);let e=w=>{typeof w.return=="function"&&w.return()},n=null,o=null,s=w=>{n=w,o&&o(w),e(t)},i=null,a=!1,u=()=>{a=!0,i&&i()},p=null,m=!1,v=()=>{m=!0,p&&p()},b=null,f=()=>{b&&b()},d=()=>new Promise((w,S)=>{i=b=w,o=S,r.once("drain",f)}),E=()=>(e(t),new Promise((w,S)=>{if(a||m||n)return w();p=i=w,o=S})),N=()=>{r.removeListener("error",s),r.removeListener("close",u),r.removeListener("finish",v),r.removeListener("drain",f)};r.once("error",s),r.once("close",u),r.once("finish",v);try{for await(let w of t){if(!r.writable||r.destroyed||n)break;r.write(w)===!1&&await d()}}catch(w){n||r.destroy(),n=w}try{if(r.writable&&r.end(),await E(),n)throw n}finally{N()}}});var Ie=Z((Rc,Pr)=>{var Uo=Ae(),_o=Mt();Pr.exports=r=>({sink:Uo(r),source:_o(r)})});var Nr=Z((Nc,Rr)=>{var ko=Ie();Rr.exports=r=>async function*(t){let e=ko(r),n;if(e.sink(t).catch(o=>{n=o}),yield*e.source,n)throw n}});var Mr=Z((Mc,pt)=>{pt.exports=Mt();pt.exports.source=Mt();pt.exports.sink=Ae();pt.exports.transform=Nr();pt.exports.duplex=Ie()});var Go={};R(Go,{tcp:()=>jo});var kr=tt(Y("net"),1);var et=class r extends Error{code;type;constructor(t="The operation was aborted"){super(t),this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},I=class extends Error{code;props;constructor(t,e,n){super(t),this.code=e,this.name=n?.name??"CodeError",this.props=n??{}}};var De=Symbol.for("@libp2p/transport");var Me;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Me||(Me={}));var Vt={};R(Vt,{base58btc:()=>T,base58flickr:()=>Xr});function Br(r,t){if(r.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),n=0;n<e.length;n++)e[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(e[i]!==255)throw new TypeError(s+" is ambiguous");e[i]=o}var a=r.length,u=r.charAt(0),p=Math.log(a)/Math.log(256),m=Math.log(256)/Math.log(a);function v(d){if(d instanceof Uint8Array||(ArrayBuffer.isView(d)?d=new Uint8Array(d.buffer,d.byteOffset,d.byteLength):Array.isArray(d)&&(d=Uint8Array.from(d))),!(d instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(d.length===0)return"";for(var E=0,N=0,w=0,S=d.length;w!==S&&d[w]===0;)w++,E++;for(var k=(S-w)*m+1>>>0,M=new Uint8Array(k);w!==S;){for(var L=d[w],B=0,_=k-1;(L!==0||B<N)&&_!==-1;_--,B++)L+=256*M[_]>>>0,M[_]=L%a>>>0,L=L/a>>>0;if(L!==0)throw new Error("Non-zero carry");N=B,w++}for(var V=k-N;V!==k&&M[V]===0;)V++;for(var xt=u.repeat(E);V<k;++V)xt+=r.charAt(M[V]);return xt}function b(d){if(typeof d!="string")throw new TypeError("Expected String");if(d.length===0)return new Uint8Array;var E=0;if(d[E]!==" "){for(var N=0,w=0;d[E]===u;)N++,E++;for(var S=(d.length-E)*p+1>>>0,k=new Uint8Array(S);d[E];){var M=e[d.charCodeAt(E)];if(M===255)return;for(var L=0,B=S-1;(M!==0||L<w)&&B!==-1;B--,L++)M+=a*k[B]>>>0,k[B]=M%256>>>0,M=M/256>>>0;if(M!==0)throw new Error("Non-zero carry");w=L,E++}if(d[E]!==" "){for(var _=S-w;_!==S&&k[_]===0;)_++;for(var V=new Uint8Array(N+(S-_)),xt=N;_!==S;)V[xt++]=k[_++];return V}}}function f(d){var E=b(d);if(E)return E;throw new Error(`Non-${t} character`)}return{encode:v,decodeUnsafe:b,decode:f}}var qr=Br,jr=qr,Ue=jr;var Qo=new Uint8Array(0);var _e=(r,t)=>{if(r===t)return!0;if(r.byteLength!==t.byteLength)return!1;for(let e=0;e<r.byteLength;e++)if(r[e]!==t[e])return!1;return!0},D=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var ke=r=>new TextEncoder().encode(r),Le=r=>new TextDecoder().decode(r);var _t=class{constructor(t,e,n){this.name=t,this.prefix=e,this.baseEncode=n}encode(t){if(t instanceof Uint8Array)return`${this.prefix}${this.baseEncode(t)}`;throw Error("Unknown type, must be binary type")}},kt=class{constructor(t,e,n){if(this.name=t,this.prefix=e,e.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=e.codePointAt(0),this.baseDecode=n}decode(t){if(typeof t=="string"){if(t.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(t)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(t.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(t){return Ve(this,t)}},Lt=class{constructor(t){this.decoders=t}or(t){return Ve(this,t)}decode(t){let e=t[0],n=this.decoders[e];if(n)return n.decode(t);throw RangeError(`Unable to decode multibase string ${JSON.stringify(t)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},Ve=(r,t)=>new Lt({...r.decoders||{[r.prefix]:r},...t.decoders||{[t.prefix]:t}}),Ot=class{constructor(t,e,n,o){this.name=t,this.prefix=e,this.baseEncode=n,this.baseDecode=o,this.encoder=new _t(t,e,n),this.decoder=new kt(t,e,o)}encode(t){return this.encoder.encode(t)}decode(t){return this.decoder.decode(t)}},rt=({name:r,prefix:t,encode:e,decode:n})=>new Ot(r,t,e,n),q=({prefix:r,name:t,alphabet:e})=>{let{encode:n,decode:o}=Ue(e,t);return rt({prefix:r,name:t,encode:n,decode:s=>D(o(s))})},Gr=(r,t,e,n)=>{let o={};for(let m=0;m<t.length;++m)o[t[m]]=m;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*e/8|0),a=0,u=0,p=0;for(let m=0;m<s;++m){let v=o[r[m]];if(v===void 0)throw new SyntaxError(`Non-${n} character`);u=u<<e|v,a+=e,a>=8&&(a-=8,i[p++]=255&u>>a)}if(a>=e||255&u<<8-a)throw new SyntaxError("Unexpected end of data");return i},Wr=(r,t,e)=>{let n=t[t.length-1]==="=",o=(1<<e)-1,s="",i=0,a=0;for(let u=0;u<r.length;++u)for(a=a<<8|r[u],i+=8;i>e;)i-=e,s+=t[o&a>>i];if(i&&(s+=t[o&a<<e-i]),n)for(;s.length*e&7;)s+="=";return s},x=({name:r,prefix:t,bitsPerChar:e,alphabet:n})=>rt({prefix:t,name:r,encode(o){return Wr(o,n,e)},decode(o){return Gr(o,n,e,r)}});var T=q({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Xr=q({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Ft={};R(Ft,{base32:()=>F,base32hex:()=>Kr,base32hexpad:()=>Zr,base32hexpadupper:()=>tn,base32hexupper:()=>Yr,base32pad:()=>Jr,base32padupper:()=>Qr,base32upper:()=>Hr,base32z:()=>en});var F=x({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Hr=x({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Jr=x({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Qr=x({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Kr=x({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Yr=x({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Zr=x({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),tn=x({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),en=x({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var rn=ze,Fe=128,nn=127,on=~nn,sn=Math.pow(2,31);function ze(r,t,e){t=t||[],e=e||0;for(var n=e;r>=sn;)t[e++]=r&255|Fe,r/=128;for(;r&on;)t[e++]=r&255|Fe,r>>>=7;return t[e]=r|0,ze.bytes=e-n+1,t}var cn=$t,an=128,$e=127;function $t(r,n){var e=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw $t.bytes=0,new RangeError("Could not decode varint");i=r[s++],e+=o<28?(i&$e)<<o:(i&$e)*Math.pow(2,o),o+=7}while(i>=an);return $t.bytes=s-n,e}var ln=Math.pow(2,7),dn=Math.pow(2,14),un=Math.pow(2,21),pn=Math.pow(2,28),fn=Math.pow(2,35),hn=Math.pow(2,42),mn=Math.pow(2,49),gn=Math.pow(2,56),wn=Math.pow(2,63),xn=function(r){return r<ln?1:r<dn?2:r<un?3:r<pn?4:r<fn?5:r<hn?6:r<mn?7:r<gn?8:r<wn?9:10},bn={encode:rn,decode:cn,encodingLength:xn},yn=bn,ht=yn;var mt=(r,t=0)=>[ht.decode(r,t),ht.decode.bytes],nt=(r,t,e=0)=>(ht.encode(r,t,e),t),ot=r=>ht.encodingLength(r);var X=(r,t)=>{let e=t.byteLength,n=ot(r),o=n+ot(e),s=new Uint8Array(o+e);return nt(r,s,0),nt(e,s,n),s.set(t,o),new st(r,e,t,s)},vt=r=>{let t=D(r),[e,n]=mt(t),[o,s]=mt(t.subarray(n)),i=t.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new st(e,o,i,t)},Be=(r,t)=>{if(r===t)return!0;{let e=t;return r.code===e.code&&r.size===e.size&&e.bytes instanceof Uint8Array&&_e(r.bytes,e.bytes)}},st=class{constructor(t,e,n,o){this.code=t,this.size=e,this.digest=n,this.bytes=o}};var qe=(r,t)=>{let{bytes:e,version:n}=r;switch(n){case 0:return En(e,zt(r),t||T.encoder);default:return An(e,zt(r),t||F.encoder)}};var je=new WeakMap,zt=r=>{let t=je.get(r);if(t==null){let e=new Map;return je.set(r,e),e}return t},j=class r{constructor(t,e,n,o){this.code=e,this.version=t,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:t,multihash:e}=this;if(t!==gt)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(e.code!==In)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(e)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:t,digest:e}=this.multihash,n=X(t,e);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(t){return r.equals(this,t)}static equals(t,e){let n=e;return n&&t.code===n.code&&t.version===n.version&&Be(t.multihash,n.multihash)}toString(t){return qe(this,t)}toJSON(){return{"/":qe(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(t){if(t==null)return null;let e=t;if(e instanceof r)return e;if(e["/"]!=null&&e["/"]===e.bytes||e.asCID===e){let{version:n,code:o,multihash:s,bytes:i}=e;return new r(n,o,s,i||Ge(n,o,s.bytes))}else if(e[Cn]===!0){let{version:n,multihash:o,code:s}=e,i=vt(o);return r.create(n,s,i)}else return null}static create(t,e,n){if(typeof e!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(t){case 0:{if(e!==gt)throw new Error(`Version 0 CID must use dag-pb (code: ${gt}) block encoding`);return new r(t,e,n,n.bytes)}case 1:{let o=Ge(t,e,n.bytes);return new r(t,e,n,o)}default:throw new Error("Invalid version")}}static createV0(t){return r.create(0,gt,t)}static createV1(t,e){return r.create(1,t,e)}static decode(t){let[e,n]=r.decodeFirst(t);if(n.length)throw new Error("Incorrect length");return e}static decodeFirst(t){let e=r.inspectBytes(t),n=e.size-e.multihashSize,o=D(t.subarray(n,n+e.multihashSize));if(o.byteLength!==e.multihashSize)throw new Error("Incorrect length");let s=o.subarray(e.multihashSize-e.digestSize),i=new st(e.multihashCode,e.digestSize,s,o);return[e.version===0?r.createV0(i):r.createV1(e.codec,i),t.subarray(e.size)]}static inspectBytes(t){let e=0,n=()=>{let[v,b]=mt(t.subarray(e));return e+=b,v},o=n(),s=gt;if(o===18?(o=0,e=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=e,a=n(),u=n(),p=e+u,m=p-i;return{version:o,codec:s,multihashCode:a,digestSize:u,multihashSize:m,size:p}}static parse(t,e){let[n,o]=vn(t,e),s=r.decode(o);if(s.version===0&&t[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return zt(s).set(n,t),s}},vn=(r,t)=>{switch(r[0]){case"Q":{let e=t||T;return[T.prefix,e.decode(`${T.prefix}${r}`)]}case T.prefix:{let e=t||T;return[T.prefix,e.decode(r)]}case F.prefix:{let e=t||F;return[F.prefix,e.decode(r)]}default:{if(t==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],t.decode(r)]}}},En=(r,t,e)=>{let{prefix:n}=e;if(n!==T.prefix)throw Error(`Cannot string encode V0 in ${e.name} encoding`);let o=t.get(n);if(o==null){let s=e.encode(r).slice(1);return t.set(n,s),s}else return o},An=(r,t,e)=>{let{prefix:n}=e,o=t.get(n);if(o==null){let s=e.encode(r);return t.set(n,s),s}else return o},gt=112,In=18,Ge=(r,t,e)=>{let n=ot(r),o=n+ot(t),s=new Uint8Array(o+e.byteLength);return nt(r,s,0),nt(t,s,n),s.set(e,o),s},Cn=Symbol.for("@ipld/js-cid/CID");function We(r,t){if(r===t)return!0;if(r.byteLength!==t.byteLength)return!1;for(let e=0;e<r.byteLength;e++)if(r[e]!==t[e])return!1;return!0}var Bt={};R(Bt,{base10:()=>Sn});var Sn=q({prefix:"9",name:"base10",alphabet:"0123456789"});var qt={};R(qt,{base16:()=>Tn,base16upper:()=>Pn});var Tn=x({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Pn=x({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var jt={};R(jt,{base2:()=>Rn});var Rn=x({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Gt={};R(Gt,{base256emoji:()=>_n});var Xe=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Nn=Xe.reduce((r,t,e)=>(r[e]=t,r),[]),Mn=Xe.reduce((r,t,e)=>(r[t.codePointAt(0)]=e,r),[]);function Dn(r){return r.reduce((t,e)=>(t+=Nn[e],t),"")}function Un(r){let t=[];for(let e of r){let n=Mn[e.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${e}`);t.push(n)}return new Uint8Array(t)}var _n=rt({prefix:"\u{1F680}",name:"base256emoji",encode:Dn,decode:Un});var Wt={};R(Wt,{base36:()=>kn,base36upper:()=>Ln});var kn=q({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Ln=q({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Xt={};R(Xt,{base64:()=>On,base64pad:()=>Vn,base64url:()=>Fn,base64urlpad:()=>$n});var On=x({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Vn=x({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Fn=x({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),$n=x({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Ht={};R(Ht,{base8:()=>zn});var zn=x({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Jt={};R(Jt,{identity:()=>Bn});var Bn=rt({prefix:"\0",name:"identity",encode:r=>Le(r),decode:r=>ke(r)});var ys=new TextEncoder,vs=new TextDecoder;var Qt={};R(Qt,{identity:()=>Xn});var He=0,Gn="identity",Je=D,Wn=r=>X(He,Je(r)),Xn={code:He,name:Gn,encode:Je,digest:Wn};var te={};R(te,{sha256:()=>Hn,sha512:()=>Jn});var Zt=tt(Y("crypto"),1);var Yt=({name:r,code:t,encode:e})=>new Kt(r,t,e),Kt=class{constructor(t,e,n){this.name=t,this.code=e,this.encode=n}digest(t){if(t instanceof Uint8Array){let e=this.encode(t);return e instanceof Uint8Array?X(this.code,e):e.then(n=>X(this.code,n))}else throw Error("Unknown type, must be binary type")}};var Hn=Yt({name:"sha2-256",code:18,encode:r=>D(Zt.default.createHash("sha256").update(r).digest())}),Jn=Yt({name:"sha2-512",code:19,encode:r=>D(Zt.default.createHash("sha512").update(r).digest())});var wt={...Jt,...jt,...Ht,...Bt,...qt,...Ft,...Wt,...Vt,...Xt,...Gt},Ns={...te,...Qt};function ct(r){return globalThis.Buffer!=null?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r}function at(r=0){return globalThis.Buffer?.allocUnsafe!=null?ct(globalThis.Buffer.allocUnsafe(r)):new Uint8Array(r)}function Ye(r,t,e,n){return{name:r,prefix:t,encoder:{name:r,prefix:t,encode:e},decoder:{decode:n}}}var Ke=Ye("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),ee=Ye("ascii","a",r=>{let t="a";for(let e=0;e<r.length;e++)t+=String.fromCharCode(r[e]);return t},r=>{r=r.substring(1);let t=at(r.length);for(let e=0;e<r.length;e++)t[e]=r.charCodeAt(e);return t}),Qn={utf8:Ke,"utf-8":Ke,hex:wt.base16,latin1:ee,ascii:ee,binary:ee,...wt},Et=Qn;function P(r,t="utf8"){let e=Et[t];if(e==null)throw new Error(`Unsupported encoding "${t}"`);return(t==="utf8"||t==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):e.encoder.encode(r).substring(1)}var Kn=Math.pow(2,7),Yn=Math.pow(2,14),Zn=Math.pow(2,21),re=Math.pow(2,28),ne=Math.pow(2,35),oe=Math.pow(2,42),se=Math.pow(2,49),h=128,C=127;function O(r){if(r<Kn)return 1;if(r<Yn)return 2;if(r<Zn)return 3;if(r<re)return 4;if(r<ne)return 5;if(r<oe)return 6;if(r<se)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function to(r,t,e=0){switch(O(r)){case 8:t[e++]=r&255|h,r/=128;case 7:t[e++]=r&255|h,r/=128;case 6:t[e++]=r&255|h,r/=128;case 5:t[e++]=r&255|h,r/=128;case 4:t[e++]=r&255|h,r>>>=7;case 3:t[e++]=r&255|h,r>>>=7;case 2:t[e++]=r&255|h,r>>>=7;case 1:{t[e++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return t}function eo(r,t,e=0){switch(O(r)){case 8:t.set(e++,r&255|h),r/=128;case 7:t.set(e++,r&255|h),r/=128;case 6:t.set(e++,r&255|h),r/=128;case 5:t.set(e++,r&255|h),r/=128;case 4:t.set(e++,r&255|h),r>>>=7;case 3:t.set(e++,r&255|h),r>>>=7;case 2:t.set(e++,r&255|h),r>>>=7;case 1:{t.set(e++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return t}function ro(r,t){let e=r[t],n=0;if(n+=e&C,e<h||(e=r[t+1],n+=(e&C)<<7,e<h)||(e=r[t+2],n+=(e&C)<<14,e<h)||(e=r[t+3],n+=(e&C)<<21,e<h)||(e=r[t+4],n+=(e&C)*re,e<h)||(e=r[t+5],n+=(e&C)*ne,e<h)||(e=r[t+6],n+=(e&C)*oe,e<h)||(e=r[t+7],n+=(e&C)*se,e<h))return n;throw new RangeError("Could not decode varint")}function no(r,t){let e=r.get(t),n=0;if(n+=e&C,e<h||(e=r.get(t+1),n+=(e&C)<<7,e<h)||(e=r.get(t+2),n+=(e&C)<<14,e<h)||(e=r.get(t+3),n+=(e&C)<<21,e<h)||(e=r.get(t+4),n+=(e&C)*re,e<h)||(e=r.get(t+5),n+=(e&C)*ne,e<h)||(e=r.get(t+6),n+=(e&C)*oe,e<h)||(e=r.get(t+7),n+=(e&C)*se,e<h))return n;throw new RangeError("Could not decode varint")}function lt(r,t,e=0){return t==null&&(t=at(O(r))),t instanceof Uint8Array?to(r,t,e):eo(r,t,e)}function H(r,t=0){return r instanceof Uint8Array?ro(r,t):no(r,t)}function $(r,t){t==null&&(t=r.reduce((o,s)=>o+s.length,0));let e=at(t),n=0;for(let o of r)e.set(o,n),n+=o.length;return ct(e)}var At=class{index=0;input="";new(t){return this.index=0,this.input=t,this}readAtomically(t){let e=this.index,n=t();return n===void 0&&(this.index=e),n}parseWith(t){let e=t();if(this.index===this.input.length)return e}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(t){return this.readAtomically(()=>{let e=this.readChar();if(e===t)return e})}readSeparator(t,e,n){return this.readAtomically(()=>{if(!(e>0&&this.readGivenChar(t)===void 0))return n()})}readNumber(t,e,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let u=a==="0",p=2**(8*o)-1;for(;;){let m=this.readAtomically(()=>{let v=this.readChar();if(v===void 0)return;let b=Number.parseInt(v,t);if(!Number.isNaN(b))return b});if(m===void 0)break;if(s*=t,s+=m,s>p||(i+=1,e!==void 0&&i>e))return}if(i!==0)return!n&&u&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let t=new Uint8Array(4);for(let e=0;e<t.length;e++){let n=this.readSeparator(".",e,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;t[e]=n}return t})}readIPv6Addr(){let t=e=>{for(let n=0;n<e.length/2;n++){let o=n*2;if(n<e.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return e[o]=i[0],e[o+1]=i[1],e[o+2]=i[2],e[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];e[o]=s>>8,e[o+1]=s&255}return[e.length,!1]};return this.readAtomically(()=>{let e=new Uint8Array(16),[n,o]=t(e);if(n===16)return e;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=t(s.subarray(0,i));return e.set(s.subarray(0,a),16-a),e})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var Ws=new At;var ti=parseInt("0xFFFF",16),ei=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function ie(r,t="utf8"){let e=Et[t];if(e==null)throw new Error(`Unsupported encoding "${t}"`);return(t==="utf8"||t==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?ct(globalThis.Buffer.from(r,"utf-8")):e.decoder.decode(`${e.prefix}${r}`)}var U=Y("node:net");function It(r){return!!(0,U.isIP)(r)}var rr=U.isIPv4,lo=U.isIPv6,ce=function(r){let t=0;if(r=r.toString().trim(),rr(r)){let e=new Uint8Array(t+4);return r.split(/\./g).forEach(n=>{e[t++]=parseInt(n,10)&255}),e}if(lo(r)){let e=r.split(":",8),n;for(n=0;n<e.length;n++){let s=rr(e[n]),i;s&&(i=ce(e[n]),e[n]=P(i.slice(0,2),"base16")),i!=null&&++n<8&&e.splice(n,0,P(i.slice(2,4),"base16"))}if(e[0]==="")for(;e.length<8;)e.unshift("0");else if(e[e.length-1]==="")for(;e.length<8;)e.push("0");else if(e.length<8){for(n=0;n<e.length&&e[n]!=="";n++);let s=[n,1];for(n=9-e.length;n>0;n--)s.push("0");e.splice.apply(e,s)}let o=new Uint8Array(t+16);for(n=0;n<e.length;n++){let s=parseInt(e[n],16);o[t++]=s>>8&255,o[t++]=s&255}return o}throw new Error("invalid ip address")},nr=function(r,t=0,e){t=~~t,e=e??r.length-t;let n=new DataView(r.buffer);if(e===4){let o=[];for(let s=0;s<e;s++)o.push(r[t+s]);return o.join(".")}if(e===16){let o=[];for(let s=0;s<e;s+=2)o.push(n.getUint16(t+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var dt={},ae={},po=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[777,-1,"memory"]];po.forEach(r=>{let t=fo(...r);ae[t.code]=t,dt[t.name]=t});function fo(r,t,e,n,o){return{code:r,size:t,name:e,resolvable:!!n,path:!!o}}function g(r){if(typeof r=="number"){if(ae[r]!=null)return ae[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(dt[r]!=null)return dt[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var Bi=g("ip4"),qi=g("ip6"),ji=g("ipcidr");function de(r,t){switch(g(r).code){case 4:case 41:return mo(t);case 42:return ir(t);case 6:case 273:case 33:case 132:return ar(t).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return ir(t);case 421:return bo(t);case 444:return cr(t);case 445:return cr(t);case 466:return xo(t);default:return P(t,"base16")}}function ue(r,t){switch(g(r).code){case 4:return or(t);case 41:return or(t);case 42:return sr(t);case 6:case 273:case 33:case 132:return pe(parseInt(t,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return sr(t);case 421:return go(t);case 444:return yo(t);case 445:return vo(t);case 466:return wo(t);default:return ie(t,"base16")}}var le=Object.values(wt).map(r=>r.decoder),ho=function(){let r=le[0].or(le[1]);return le.slice(2).forEach(t=>r=r.or(t)),r}();function or(r){if(!It(r))throw new Error("invalid ip address");return ce(r)}function mo(r){let t=nr(r,0,r.length);if(t==null)throw new Error("ipBuff is required");if(!It(t))throw new Error("invalid ip address");return t}function pe(r){let t=new ArrayBuffer(2);return new DataView(t).setUint16(0,r),new Uint8Array(t)}function ar(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function sr(r){let t=ie(r),e=Uint8Array.from(lt(t.length));return $([e,t],e.length+t.length)}function ir(r){let t=H(r);if(r=r.slice(O(t)),r.length!==t)throw new Error("inconsistent lengths");return P(r)}function go(r){let t;r[0]==="Q"||r[0]==="1"?t=vt(T.decode(`z${r}`)).bytes:t=j.parse(r).multihash.bytes;let e=Uint8Array.from(lt(t.length));return $([e,t],e.length+t.length)}function wo(r){let t=ho.decode(r),e=Uint8Array.from(lt(t.length));return $([e,t],e.length+t.length)}function xo(r){let t=H(r),e=r.slice(O(t));if(e.length!==t)throw new Error("inconsistent lengths");return"u"+P(e,"base64url")}function bo(r){let t=H(r),e=r.slice(O(t));if(e.length!==t)throw new Error("inconsistent lengths");return P(e,"base58btc")}function yo(r){let t=r.split(":");if(t.length!==2)throw new Error(`failed to parse onion addr: ["'${t.join('", "')}'"]' does not contain a port number`);if(t[0].length!==16)throw new Error(`failed to parse onion addr: ${t[0]} not a Tor onion address.`);let e=F.decode("b"+t[0]),n=parseInt(t[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=pe(n);return $([e,o],e.length+o.length)}function vo(r){let t=r.split(":");if(t.length!==2)throw new Error(`failed to parse onion addr: ["'${t.join('", "')}'"]' does not contain a port number`);if(t[0].length!==56)throw new Error(`failed to parse onion addr: ${t[0]} not a Tor onion3 address.`);let e=F.decode(`b${t[0]}`),n=parseInt(t[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=pe(n);return $([e,o],e.length+o.length)}function cr(r){let t=r.slice(0,r.length-2),e=r.slice(r.length-2),n=P(t,"base32"),o=ar(e);return`${n}:${o}`}function lr(r){r=fe(r);let t=[],e=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=g(i);if(a.size===0){t.push([a.code]),e.push([a.code]);continue}if(s++,s>=o.length)throw ur("invalid address: "+r);if(a.path===!0){n=fe(o.slice(s).join("/")),t.push([a.code,ue(a.code,n)]),e.push([a.code,n]);break}let u=ue(a.code,o[s]);t.push([a.code,u]),e.push([a.code,de(a.code,u)])}return{string:dr(e),bytes:me(t),tuples:t,stringTuples:e,path:n}}function he(r){let t=[],e=[],n=null,o=0;for(;o<r.length;){let s=H(r,o),i=O(s),a=g(s),u=Eo(a,r.slice(o+i));if(u===0){t.push([s]),e.push([s]),o+=i;continue}let p=r.slice(o+i,o+i+u);if(o+=u+i,o>r.length)throw ur("Invalid address Uint8Array: "+P(r,"base16"));t.push([s,p]);let m=de(s,p);if(e.push([s,m]),a.path===!0){n=m;break}}return{bytes:Uint8Array.from(r),string:dr(e),tuples:t,stringTuples:e,path:n}}function dr(r){let t=[];return r.map(e=>{let n=g(e[0]);return t.push(n.name),e.length>1&&e[1]!=null&&t.push(e[1]),null}),fe(t.join("/"))}function me(r){return $(r.map(t=>{let e=g(t[0]),n=Uint8Array.from(lt(e.code));return t.length>1&&t[1]!=null&&(n=$([n,t[1]])),n}))}function Eo(r,t){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let e=H(t instanceof Uint8Array?t:Uint8Array.from(t));return e+O(e)}}function fe(r){return"/"+r.trim().split("/").filter(t=>t).join("/")}function ur(r){return new Error("Error parsing address: "+r)}var Ao=Symbol.for("nodejs.util.inspect.custom"),ge=Symbol.for("@multiformats/js-multiaddr/multiaddr"),Io=[g("dns").code,g("dns4").code,g("dns6").code,g("dnsaddr").code],Ct=class r{bytes;#t;#e;#r;#n;[ge]=!0;constructor(t){t==null&&(t="");let e;if(t instanceof Uint8Array)e=he(t);else if(typeof t=="string"){if(t.length>0&&t.charAt(0)!=="/")throw new Error(`multiaddr "${t}" must start with a "/"`);e=lr(t)}else if(fr(t))e=he(t.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=e.bytes,this.#t=e.string,this.#e=e.tuples,this.#r=e.stringTuples,this.#n=e.path}toString(){return this.#t}toJSON(){return this.toString()}toOptions(){let t,e,n,o,s="",i=g("tcp"),a=g("udp"),u=g("ip4"),p=g("ip6"),m=g("dns6"),v=g("ip6zone");for(let[f,d]of this.stringTuples())f===v.code&&(s=`%${d??""}`),Io.includes(f)&&(e=i.name,o=443,n=`${d??""}${s}`,t=f===m.code?6:4),(f===i.code||f===a.code)&&(e=g(f).name,o=parseInt(d??"")),(f===u.code||f===p.code)&&(e=g(f).name,n=`${d??""}${s}`,t=f===p.code?6:4);if(t==null||e==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:t,host:n,transport:e,port:o}}protos(){return this.#e.map(([t])=>Object.assign({},g(t)))}protoCodes(){return this.#e.map(([t])=>t)}protoNames(){return this.#e.map(([t])=>g(t).name)}tuples(){return this.#e}stringTuples(){return this.#r}encapsulate(t){return t=new r(t),new r(this.toString()+t.toString())}decapsulate(t){let e=t.toString(),n=this.toString(),o=n.lastIndexOf(e);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${t.toString()}`);return new r(n.slice(0,o))}decapsulateCode(t){let e=this.tuples();for(let n=e.length-1;n>=0;n--)if(e[n][0]===t)return new r(me(e.slice(0,n)));return this}getPeerId(){try{let t=[];this.stringTuples().forEach(([n,o])=>{n===dt.p2p.code&&t.push([n,o]),n===dt["p2p-circuit"].code&&(t=[])});let e=t.pop();if(e?.[1]!=null){let n=e[1];return n[0]==="Q"||n[0]==="1"?P(T.decode(`z${n}`),"base58btc"):P(j.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#n}equals(t){return We(this.bytes,t.bytes)}async resolve(t){let e=this.protos().find(s=>s.resolvable);if(e==null)return[this];let n=pr.get(e.name);if(n==null)throw new I(`no available resolver for ${e.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,t)).map(s=>new r(s))}nodeAddress(){let t=this.toOptions();if(t.transport!=="tcp"&&t.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${t.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:t.family,address:t.host,port:t.port}}isThinWaistAddress(t){let e=(t??this).protos();return!(e.length!==2||e[0].code!==4&&e[0].code!==41||e[1].code!==6&&e[1].code!==273)}[Ao](){return`Multiaddr(${this.#t})`}};var pr=new Map;function fr(r){return!!r?.[ge]}function z(r){return new Ct(r)}var Co=c("dns4"),So=c("dns6"),To=c("dnsaddr"),Q=y(c("dns"),To,Co,So),Pt=y(c("ip4"),c("ip6")),W=y(l(Pt,c("tcp")),l(Q,c("tcp"))),Rt=l(Pt,c("udp")),Po=l(Rt,c("utp")),Ro=l(Rt,c("quic")),No=l(Rt,c("quic-v1")),we=y(l(W,c("ws")),l(Q,c("ws"))),St=y(l(we,c("p2p")),we),xe=y(l(W,c("wss")),l(Q,c("wss")),l(W,c("tls"),c("ws")),l(Q,c("tls"),c("ws"))),Tt=y(l(xe,c("p2p")),xe),be=y(l(W,c("http")),l(Pt,c("http")),l(Q,c("http"))),ye=y(l(W,c("https")),l(Pt,c("https")),l(Q,c("https"))),hr=l(Rt,c("webrtc-direct"),c("certhash")),wr=y(l(hr,c("p2p")),hr),mr=l(No,c("webtransport"),c("certhash"),c("certhash")),xr=y(l(mr,c("p2p")),mr),br=y(l(St,c("p2p-webrtc-star"),c("p2p")),l(Tt,c("p2p-webrtc-star"),c("p2p")),l(St,c("p2p-webrtc-star")),l(Tt,c("p2p-webrtc-star"))),gc=y(l(St,c("p2p-websocket-star"),c("p2p")),l(Tt,c("p2p-websocket-star"),c("p2p")),l(St,c("p2p-websocket-star")),l(Tt,c("p2p-websocket-star"))),yr=y(l(be,c("p2p-webrtc-direct"),c("p2p")),l(ye,c("p2p-webrtc-direct"),c("p2p")),l(be,c("p2p-webrtc-direct")),l(ye,c("p2p-webrtc-direct"))),K=y(we,xe,be,ye,br,yr,W,Po,Ro,Q,wr,xr),wc=y(l(K,c("p2p-stardust"),c("p2p")),l(K,c("p2p-stardust"))),G=y(l(K,c("p2p")),br,yr,wr,xr,c("p2p")),gr=y(l(G,c("p2p-circuit"),G),l(G,c("p2p-circuit")),l(c("p2p-circuit"),G),l(K,c("p2p-circuit")),l(c("p2p-circuit"),K),c("p2p-circuit")),vr=()=>y(l(gr,vr),gr),J=vr(),xc=y(l(J,G,J),l(G,J),l(J,G),J,G);var bc=y(l(J,c("webrtc"),c("p2p")),l(J,c("webrtc")),l(K,c("webrtc"),c("p2p")),l(K,c("webrtc")),c("webrtc"));function Er(r){function t(e){let n;try{n=z(e)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return t}function l(...r){function t(e){if(e.length<r.length)return null;let n=e;return r.some(o=>(n=typeof o=="function"?o().partialMatch(e):o.partialMatch(e),Array.isArray(n)&&(e=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Er(t),partialMatch:t}}function y(...r){function t(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Er(t),partialMatch:t}}function c(r){let t=r;function e(o){let s;try{s=z(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[0]===t}function n(o){return o.length===0?null:o[0]===t?o.slice(1):null}return{toString:function(){return t},matches:e,partialMatch:n}}var _r=tt(Y("net"),1);var Nt=class extends EventTarget{#t=new Map;listenerCount(t){let e=this.#t.get(t);return e==null?0:e.length}addEventListener(t,e,n){super.addEventListener(t,e,n);let o=this.#t.get(t);o==null&&(o=[],this.#t.set(t,o)),o.push({callback:e,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(t,e,n){super.removeEventListener(t.toString(),e??null,n);let o=this.#t.get(t);o!=null&&(o=o.filter(({callback:s})=>s!==e),this.#t.set(t,o))}dispatchEvent(t){let e=super.dispatchEvent(t),n=this.#t.get(t.type);return n==null||(n=n.filter(({once:o})=>!o),this.#t.set(t.type,n)),e}safeDispatchEvent(t,e){return this.dispatchEvent(new ut(t,e))}},ve=class extends Event{detail;constructor(t,e){super(t,e),this.detail=e?.detail}},ut=globalThis.CustomEvent??ve;var Ee={ERR_INVALID_IP_PARAMETER:"ERR_INVALID_IP_PARAMETER",ERR_INVALID_PORT_PARAMETER:"ERR_INVALID_PORT_PARAMETER",ERR_INVALID_IP:"ERR_INVALID_IP"};function Ar(r,t){if(typeof r!="string")throw new I(`invalid ip provided: ${r}`,Ee.ERR_INVALID_IP_PARAMETER);if(typeof t=="string"&&(t=parseInt(t)),isNaN(t))throw new I(`invalid port provided: ${t}`,Ee.ERR_INVALID_PORT_PARAMETER);if((0,U.isIPv4)(r))return z(`/ip4/${r}/tcp/${t}`);if((0,U.isIPv6)(r))return z(`/ip6/${r}/tcp/${t}`);throw new I(`invalid ip:port for creating a multiaddr: ${r}:${t}`,Ee.ERR_INVALID_IP)}var Ur=tt(Mr(),1);var Ce=tt(Y("os"),1),Dr=tt(Y("path"),1);var Lo={ip4:"IPv4",ip6:"IPv6"};function ft(r,t={}){let e=r.getPath();return e!=null?Ce.default.platform()==="win32"?{path:Dr.default.join("\\\\.\\pipe\\",e)}:{path:e}:{...r.toOptions(),...t}}function Se(r,t,e){let n=o=>z(`/${r}/${o}/tcp/${e}`);return(Oo(t)?Fo(Lo[r]):[t]).map(n)}function Oo(r){return["0.0.0.0","::"].includes(r)}var Vo=Ce.default.networkInterfaces();function Fo(r){let t=[];for(let[,e]of Object.entries(Vo))if(e!=null)for(let n of e)n.family===r&&t.push(n.address);return t}var Dt=(r,t)=>{let e=t.logger.forComponent("libp2p:tcp:socket"),n=t.metrics,o=t.metricPrefix??"",s=t.socketInactivityTimeout??3e5,i=t.socketCloseTimeout??500;t.listeningAddr?.getPath()!=null&&(t.remoteAddr=t.listeningAddr),t.remoteAddr?.getPath()!=null&&(t.localAddr=t.remoteAddr);let a;if(t.remoteAddr!=null)a=t.remoteAddr;else{if(r.remoteAddress==null||r.remotePort==null)throw new I("Could not determine remote address or port","ERR_NO_REMOTE_ADDRESS");a=Ar(r.remoteAddress,r.remotePort)}let u=ft(a),p=u.path??`${u.host??""}:${u.port??""}`,{sink:m,source:v}=Ur.default.duplex(r);r.setTimeout(s,()=>{e("%s socket read timeout",p),n?.increment({[`${o}timeout`]:!0});let f;r.readable&&(f=new I("Socket read timeout","ERR_SOCKET_READ_TIMEOUT")),r.destroy(f)}),r.once("close",()=>{e("%s socket close",p),n?.increment({[`${o}close`]:!0}),b.timeline.close==null&&(b.timeline.close=Date.now())}),r.once("end",()=>{e("%s socket end",p),n?.increment({[`${o}end`]:!0})});let b={async sink(f){try{await m(f)}catch(d){d.type!=="aborted"&&e(d)}r.end()},source:v,remoteAddr:a,timeline:{open:Date.now()},async close(f={}){if(r.destroyed){e("%s socket was already destroyed when trying to close",p);return}if(f.signal==null){let d=AbortSignal.timeout(i);f={...f,signal:d}}try{e("%s closing socket",p),await new Promise((d,E)=>{r.once("close",()=>{e("%s socket closed",p),d()}),r.once("error",N=>{e("%s socket error",p,N),b.timeline.close==null&&(b.timeline.close=Date.now()),E(N)}),r.setTimeout(i),r.end(),r.writableLength>0?r.once("drain",()=>{e("%s socket drained",p),r.destroy()}):r.destroy()})}catch(d){this.abort(d)}},abort:f=>{e("%s socket abort due to error",p,f),r.destroy(f)}};return b};async function Te(r,t){try{await r.close()}catch(e){t.log.error("an error occurred closing the connection",e)}}var A;(function(r){r[r.INACTIVE=0]="INACTIVE",r[r.ACTIVE=1]="ACTIVE",r[r.PAUSED=2]="PAUSED"})(A||(A={}));var Ut=class extends Nt{context;server;connections=new Set;status={code:A.INACTIVE};metrics;addr;log;constructor(t){if(super(),this.context=t,t.keepAlive=t.keepAlive??!0,this.log=t.logger.forComponent("libp2p:tcp:listener"),this.addr="unknown",this.server=_r.default.createServer(t,this.onSocket.bind(this)),t.maxConnections!==void 0&&(this.server.maxConnections=t.maxConnections),t.closeServerOnMaxConnections!=null&&t.closeServerOnMaxConnections.closeAbove<t.closeServerOnMaxConnections.listenBelow)throw new I("closeAbove must be >= listenBelow","ERROR_CONNECTION_LIMITS");this.server.on("listening",()=>{if(t.metrics!=null){let e=this.server.address();e==null?this.addr="unknown":typeof e=="string"?this.addr=e:this.addr=`${e.address}:${e.port}`,t.metrics?.registerMetricGroup("libp2p_tcp_inbound_connections_total",{label:"address",help:"Current active connections in TCP listener",calculate:()=>({[this.addr]:this.connections.size})}),this.metrics={status:t.metrics.registerMetricGroup("libp2p_tcp_listener_status_info",{label:"address",help:"Current status of the TCP listener socket"}),errors:t.metrics.registerMetricGroup("libp2p_tcp_listener_errors_total",{label:"address",help:"Total count of TCP listener errors by type"}),events:t.metrics.registerMetricGroup("libp2p_tcp_listener_events_total",{label:"address",help:"Total count of TCP listener events by type"})},this.metrics?.status.update({[this.addr]:A.ACTIVE})}this.dispatchEvent(new ut("listening"))}).on("error",e=>{this.metrics?.errors.increment({[`${this.addr} listen_error`]:!0}),this.dispatchEvent(new ut("error",{detail:e}))}).on("close",()=>{this.metrics?.status.update({[this.addr]:this.status.code}),this.status.code!==A.PAUSED&&this.dispatchEvent(new ut("close"))})}onSocket(t){if(this.status.code!==A.ACTIVE)throw new I("Server is is not listening yet","ERR_SERVER_NOT_RUNNING");t.on("error",n=>{this.log("socket error",n),this.metrics?.events.increment({[`${this.addr} error`]:!0})});let e;try{e=Dt(t,{listeningAddr:this.status.listeningAddr,socketInactivityTimeout:this.context.socketInactivityTimeout,socketCloseTimeout:this.context.socketCloseTimeout,metrics:this.metrics?.events,metricPrefix:`${this.addr} `,logger:this.context.logger})}catch(n){this.log.error("inbound connection failed",n),this.metrics?.errors.increment({[`${this.addr} inbound_to_connection`]:!0});return}this.log("new inbound connection %s",e.remoteAddr);try{this.context.upgrader.upgradeInbound(e).then(n=>{this.log("inbound connection upgraded %s",e.remoteAddr),this.connections.add(e),t.once("close",()=>{this.connections.delete(e),this.context.closeServerOnMaxConnections!=null&&this.connections.size<this.context.closeServerOnMaxConnections.listenBelow&&this.resume().catch(o=>{this.log.error("error attempting to listen server once connection count under limit",o),this.context.closeServerOnMaxConnections?.onListenError?.(o)})}),this.context.handler!=null&&this.context.handler(n),this.context.closeServerOnMaxConnections!=null&&this.connections.size>=this.context.closeServerOnMaxConnections.closeAbove&&this.pause(!1).catch(o=>{this.log.error("error attempting to close server once connection count over limit",o)}),this.dispatchEvent(new ut("connection",{detail:n}))}).catch(async n=>{this.log.error("inbound connection failed",n),this.metrics?.errors.increment({[`${this.addr} inbound_upgrade`]:!0}),await Te(e,{log:this.log})}).catch(n=>{this.log.error("closing inbound connection failed",n)})}catch(n){this.log.error("inbound connection failed",n),Te(e,{log:this.log}).catch(o=>{this.log.error("closing inbound connection failed",o),this.metrics?.errors.increment({[`${this.addr} inbound_closing_failed`]:!0})})}}getAddrs(){if(this.status.code===A.INACTIVE)return[];let t=[],e=this.server.address(),{listeningAddr:n,peerId:o}=this.status;if(e==null)return[];if(typeof e=="string")t=[n];else try{n.toString().startsWith("/ip4")?t=t.concat(Se("ip4",e.address,e.port)):e.family==="IPv6"&&(t=t.concat(Se("ip6",e.address,e.port)))}catch(s){this.log.error("could not turn %s:%s into multiaddr",e.address,e.port,s)}return t.map(s=>o!=null?s.encapsulate(`/p2p/${o}`):s)}async listen(t){if(this.status.code===A.ACTIVE||this.status.code===A.PAUSED)throw new I("server is already listening","ERR_SERVER_ALREADY_LISTENING");let e=t.getPeerId(),n=e==null?t.decapsulateCode(421):t,{backlog:o}=this.context;try{this.status={code:A.ACTIVE,listeningAddr:n,peerId:e,netConfig:ft(n,{backlog:o})},await this.resume()}catch(s){throw this.status={code:A.INACTIVE},s}}async close(){await Promise.all([Promise.all(Array.from(this.connections.values()).map(async t=>Te(t,{log:this.log}))),this.pause(!0).catch(t=>{this.log.error("error attempting to close server once connection count over limit",t)})])}async resume(){if(this.server.listening||this.status.code===A.INACTIVE)return;let t=this.status.netConfig;await new Promise((e,n)=>{this.server.once("error",n),this.server.listen(t,e)}),this.status={...this.status,code:A.ACTIVE},this.log("Listening on %s",this.server.address())}async pause(t){if(!this.server.listening&&this.status.code===A.PAUSED&&t){this.status={code:A.INACTIVE};return}!this.server.listening||this.status.code!==A.ACTIVE||(this.log("Closing server on %s",this.server.address()),this.status=t?{code:A.INACTIVE}:{...this.status,code:A.PAUSED},await new Promise((e,n)=>{this.server.close(o=>{o!=null?n(o):e()})}))}};var Re=class{opts;metrics;components;log;constructor(t,e={}){this.log=t.logger.forComponent("libp2p:tcp"),this.opts=e,this.components=t,t.metrics!=null&&(this.metrics={dialerEvents:t.metrics.registerCounterGroup("libp2p_tcp_dialer_events_total",{label:"event",help:"Total count of TCP dialer events by type"})})}[De]=!0;[Symbol.toStringTag]="@libp2p/tcp";async dial(t,e){e.keepAlive=e.keepAlive??!0;let n=await this._connect(t,e);n.on("error",a=>{this.log("socket error",a)});let o=Dt(n,{remoteAddr:t,socketInactivityTimeout:this.opts.outboundSocketInactivityTimeout,socketCloseTimeout:this.opts.socketCloseTimeout,metrics:this.metrics?.dialerEvents,logger:this.components.logger}),s=()=>{o.close().catch(a=>{this.log.error("Error closing maConn after abort",a)})};e.signal?.addEventListener("abort",s,{once:!0}),this.log("new outbound connection %s",o.remoteAddr);let i=await e.upgrader.upgradeOutbound(o);if(this.log("outbound connection %s upgraded",o.remoteAddr),e.signal?.removeEventListener("abort",s),e.signal?.aborted===!0)throw i.close().catch(a=>{this.log.error("Error closing conn after abort",a)}),new et;return i}async _connect(t,e){if(e.signal?.aborted===!0)throw new et;return new Promise((n,o)=>{let s=Date.now(),i=ft(t),a=i.path??`${i.host??""}:${i.port}`;this.log("dialing %j",i);let u=kr.default.connect(i),p=d=>{d.message=`connection error ${a}: ${d.message}`,this.metrics?.dialerEvents.increment({error:!0}),f(d)},m=()=>{this.log("connection timeout %s",a),this.metrics?.dialerEvents.increment({timeout:!0});let d=new I(`connection timeout after ${Date.now()-s}ms`,"ERR_CONNECT_TIMEOUT");u.emit("error",d)},v=()=>{this.log("connection opened %j",i),this.metrics?.dialerEvents.increment({connect:!0}),f()},b=()=>{this.log("connection aborted %j",i),this.metrics?.dialerEvents.increment({abort:!0}),u.destroy(),f(new et)},f=d=>{if(u.removeListener("error",p),u.removeListener("timeout",m),u.removeListener("connect",v),e.signal!=null&&e.signal.removeEventListener("abort",b),d!=null){o(d);return}n(u)};u.on("error",p),u.on("timeout",m),u.on("connect",v),e.signal!=null&&e.signal.addEventListener("abort",b)})}createListener(t){return new Ut({...t,maxConnections:this.opts.maxConnections,backlog:this.opts.backlog,closeServerOnMaxConnections:this.opts.closeServerOnMaxConnections,socketInactivityTimeout:this.opts.inboundSocketInactivityTimeout,socketCloseTimeout:this.opts.socketCloseTimeout,metrics:this.components.metrics,logger:this.components.logger})}filter(t){return t=Array.isArray(t)?t:[t],t.filter(e=>e.protoCodes().includes(290)?!1:e.protoCodes().includes(400)?!0:W.matches(e.decapsulateCode(421)))}};function jo(r={}){return t=>new Re(t,r)}return zr(Go);})();
|
|
7
3
|
return Libp2PTcp}));
|
package/dist/src/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* const listener = transport.createListener({
|
|
23
23
|
* upgrader,
|
|
24
24
|
* handler: (socket) => {
|
|
25
|
-
* console.log('new connection opened')
|
|
25
|
+
* console.this.log('new connection opened')
|
|
26
26
|
* pipe(
|
|
27
27
|
* ['hello', ' ', 'World!'],
|
|
28
28
|
* socket
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
*
|
|
33
33
|
* const addr = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
|
34
34
|
* await listener.listen(addr)
|
|
35
|
-
* console.log('listening')
|
|
35
|
+
* console.this.log('listening')
|
|
36
36
|
*
|
|
37
37
|
* const socket = await transport.dial(addr, { upgrader })
|
|
38
38
|
* const values = await pipe(
|
|
39
39
|
* socket,
|
|
40
40
|
* all
|
|
41
41
|
* )
|
|
42
|
-
* console.log(`Value: ${values.toString()}`)
|
|
42
|
+
* console.this.log(`Value: ${values.toString()}`)
|
|
43
43
|
*
|
|
44
44
|
* // Close connection after reading
|
|
45
45
|
* await listener.close()
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
*/
|
|
56
56
|
import { type CreateListenerOptions, type DialOptions, type Transport } from '@libp2p/interface/transport';
|
|
57
57
|
import { type CloseServerOnMaxConnectionsOpts } from './listener.js';
|
|
58
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
58
59
|
import type { CounterGroup, Metrics } from '@libp2p/interface/metrics';
|
|
59
60
|
import type { AbortOptions } from '@multiformats/multiaddr';
|
|
60
61
|
export interface TCPOptions {
|
|
@@ -101,9 +102,10 @@ export interface TCPCreateListenerOptions extends CreateListenerOptions, TCPSock
|
|
|
101
102
|
}
|
|
102
103
|
export interface TCPComponents {
|
|
103
104
|
metrics?: Metrics;
|
|
105
|
+
logger: ComponentLogger;
|
|
104
106
|
}
|
|
105
107
|
export interface TCPMetrics {
|
|
106
108
|
dialerEvents: CounterGroup;
|
|
107
109
|
}
|
|
108
|
-
export declare function tcp(init?: TCPOptions): (components
|
|
110
|
+
export declare function tcp(init?: TCPOptions): (components: TCPComponents) => Transport;
|
|
109
111
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAIH,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAU,KAAK,SAAS,EAAiB,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAIH,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAU,KAAK,SAAS,EAAiB,MAAM,6BAA6B,CAAA;AAGjI,OAAO,EAAE,KAAK,+BAA+B,EAAe,MAAM,eAAe,CAAA;AAGjF,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,yBAAyB,CAAA;AAGtE,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAA;IAEvC;;OAEG;IACH,+BAA+B,CAAC,EAAE,MAAM,CAAA;IAExC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,+BAA+B,CAAA;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW,EAAE,gBAAgB;CAEpE;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB,EAAE,gBAAgB;CAExF;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,YAAY,CAAA;CAC3B;AAgLD,wBAAgB,GAAG,CAAE,IAAI,GAAE,UAAe,GAAG,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAIpF"}
|
package/dist/src/index.js
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* const listener = transport.createListener({
|
|
23
23
|
* upgrader,
|
|
24
24
|
* handler: (socket) => {
|
|
25
|
-
* console.log('new connection opened')
|
|
25
|
+
* console.this.log('new connection opened')
|
|
26
26
|
* pipe(
|
|
27
27
|
* ['hello', ' ', 'World!'],
|
|
28
28
|
* socket
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
*
|
|
33
33
|
* const addr = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
|
34
34
|
* await listener.listen(addr)
|
|
35
|
-
* console.log('listening')
|
|
35
|
+
* console.this.log('listening')
|
|
36
36
|
*
|
|
37
37
|
* const socket = await transport.dial(addr, { upgrader })
|
|
38
38
|
* const values = await pipe(
|
|
39
39
|
* socket,
|
|
40
40
|
* all
|
|
41
41
|
* )
|
|
42
|
-
* console.log(`Value: ${values.toString()}`)
|
|
42
|
+
* console.this.log(`Value: ${values.toString()}`)
|
|
43
43
|
*
|
|
44
44
|
* // Close connection after reading
|
|
45
45
|
* await listener.close()
|
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
import net from 'net';
|
|
57
57
|
import { AbortError, CodeError } from '@libp2p/interface/errors';
|
|
58
58
|
import { symbol } from '@libp2p/interface/transport';
|
|
59
|
-
import { logger } from '@libp2p/logger';
|
|
60
59
|
import * as mafmt from '@multiformats/mafmt';
|
|
61
60
|
import { CODE_CIRCUIT, CODE_P2P, CODE_UNIX } from './constants.js';
|
|
62
61
|
import { TCPListener } from './listener.js';
|
|
63
62
|
import { toMultiaddrConnection } from './socket-to-conn.js';
|
|
64
63
|
import { multiaddrToNetConfig } from './utils.js';
|
|
65
|
-
const log = logger('libp2p:tcp');
|
|
66
64
|
class TCP {
|
|
67
65
|
opts;
|
|
68
66
|
metrics;
|
|
69
67
|
components;
|
|
68
|
+
log;
|
|
70
69
|
constructor(components, options = {}) {
|
|
70
|
+
this.log = components.logger.forComponent('libp2p:tcp');
|
|
71
71
|
this.opts = options;
|
|
72
72
|
this.components = components;
|
|
73
73
|
if (components.metrics != null) {
|
|
@@ -87,27 +87,28 @@ class TCP {
|
|
|
87
87
|
const socket = await this._connect(ma, options);
|
|
88
88
|
// Avoid uncaught errors caused by unstable connections
|
|
89
89
|
socket.on('error', err => {
|
|
90
|
-
log('socket error', err);
|
|
90
|
+
this.log('socket error', err);
|
|
91
91
|
});
|
|
92
92
|
const maConn = toMultiaddrConnection(socket, {
|
|
93
93
|
remoteAddr: ma,
|
|
94
94
|
socketInactivityTimeout: this.opts.outboundSocketInactivityTimeout,
|
|
95
95
|
socketCloseTimeout: this.opts.socketCloseTimeout,
|
|
96
|
-
metrics: this.metrics?.dialerEvents
|
|
96
|
+
metrics: this.metrics?.dialerEvents,
|
|
97
|
+
logger: this.components.logger
|
|
97
98
|
});
|
|
98
99
|
const onAbort = () => {
|
|
99
100
|
maConn.close().catch(err => {
|
|
100
|
-
log.error('Error closing maConn after abort', err);
|
|
101
|
+
this.log.error('Error closing maConn after abort', err);
|
|
101
102
|
});
|
|
102
103
|
};
|
|
103
104
|
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
104
|
-
log('new outbound connection %s', maConn.remoteAddr);
|
|
105
|
+
this.log('new outbound connection %s', maConn.remoteAddr);
|
|
105
106
|
const conn = await options.upgrader.upgradeOutbound(maConn);
|
|
106
|
-
log('outbound connection %s upgraded', maConn.remoteAddr);
|
|
107
|
+
this.log('outbound connection %s upgraded', maConn.remoteAddr);
|
|
107
108
|
options.signal?.removeEventListener('abort', onAbort);
|
|
108
109
|
if (options.signal?.aborted === true) {
|
|
109
110
|
conn.close().catch(err => {
|
|
110
|
-
log.error('Error closing conn after abort', err);
|
|
111
|
+
this.log.error('Error closing conn after abort', err);
|
|
111
112
|
});
|
|
112
113
|
throw new AbortError();
|
|
113
114
|
}
|
|
@@ -121,7 +122,7 @@ class TCP {
|
|
|
121
122
|
const start = Date.now();
|
|
122
123
|
const cOpts = multiaddrToNetConfig(ma);
|
|
123
124
|
const cOptsStr = cOpts.path ?? `${cOpts.host ?? ''}:${cOpts.port}`;
|
|
124
|
-
log('dialing %j', cOpts);
|
|
125
|
+
this.log('dialing %j', cOpts);
|
|
125
126
|
const rawSocket = net.connect(cOpts);
|
|
126
127
|
const onError = (err) => {
|
|
127
128
|
err.message = `connection error ${cOptsStr}: ${err.message}`;
|
|
@@ -129,19 +130,19 @@ class TCP {
|
|
|
129
130
|
done(err);
|
|
130
131
|
};
|
|
131
132
|
const onTimeout = () => {
|
|
132
|
-
log('connection timeout %s', cOptsStr);
|
|
133
|
+
this.log('connection timeout %s', cOptsStr);
|
|
133
134
|
this.metrics?.dialerEvents.increment({ timeout: true });
|
|
134
135
|
const err = new CodeError(`connection timeout after ${Date.now() - start}ms`, 'ERR_CONNECT_TIMEOUT');
|
|
135
136
|
// Note: this will result in onError() being called
|
|
136
137
|
rawSocket.emit('error', err);
|
|
137
138
|
};
|
|
138
139
|
const onConnect = () => {
|
|
139
|
-
log('connection opened %j', cOpts);
|
|
140
|
+
this.log('connection opened %j', cOpts);
|
|
140
141
|
this.metrics?.dialerEvents.increment({ connect: true });
|
|
141
142
|
done();
|
|
142
143
|
};
|
|
143
144
|
const onAbort = () => {
|
|
144
|
-
log('connection aborted %j', cOpts);
|
|
145
|
+
this.log('connection aborted %j', cOpts);
|
|
145
146
|
this.metrics?.dialerEvents.increment({ abort: true });
|
|
146
147
|
rawSocket.destroy();
|
|
147
148
|
done(new AbortError());
|
|
@@ -180,7 +181,8 @@ class TCP {
|
|
|
180
181
|
closeServerOnMaxConnections: this.opts.closeServerOnMaxConnections,
|
|
181
182
|
socketInactivityTimeout: this.opts.inboundSocketInactivityTimeout,
|
|
182
183
|
socketCloseTimeout: this.opts.socketCloseTimeout,
|
|
183
|
-
metrics: this.components.metrics
|
|
184
|
+
metrics: this.components.metrics,
|
|
185
|
+
logger: this.components.logger
|
|
184
186
|
});
|
|
185
187
|
}
|
|
186
188
|
/**
|
|
@@ -200,7 +202,7 @@ class TCP {
|
|
|
200
202
|
}
|
|
201
203
|
}
|
|
202
204
|
export function tcp(init = {}) {
|
|
203
|
-
return (components
|
|
205
|
+
return (components) => {
|
|
204
206
|
return new TCP(components, init);
|
|
205
207
|
};
|
|
206
208
|
}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAgD,MAAM,EAAiC,MAAM,6BAA6B,CAAA;AACjI,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/listener.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TypedEventEmitter } from '@libp2p/interface/events';
|
|
2
2
|
import type { TCPCreateListenerOptions } from './index.js';
|
|
3
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
3
4
|
import type { Connection } from '@libp2p/interface/connection';
|
|
4
5
|
import type { CounterGroup, MetricGroup, Metrics } from '@libp2p/interface/metrics';
|
|
5
6
|
import type { Listener, ListenerEvents, Upgrader } from '@libp2p/interface/transport';
|
|
@@ -20,6 +21,7 @@ interface Context extends TCPCreateListenerOptions {
|
|
|
20
21
|
backlog?: number;
|
|
21
22
|
metrics?: Metrics;
|
|
22
23
|
closeServerOnMaxConnections?: CloseServerOnMaxConnectionsOpts;
|
|
24
|
+
logger: ComponentLogger;
|
|
23
25
|
}
|
|
24
26
|
export interface TCPListenerMetrics {
|
|
25
27
|
status: MetricGroup;
|
|
@@ -34,6 +36,7 @@ export declare class TCPListener extends TypedEventEmitter<ListenerEvents> imple
|
|
|
34
36
|
private status;
|
|
35
37
|
private metrics?;
|
|
36
38
|
private addr;
|
|
39
|
+
private readonly log;
|
|
37
40
|
constructor(context: Context);
|
|
38
41
|
private onSocket;
|
|
39
42
|
getAddrs(): Multiaddr[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAe,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAe,MAAM,0BAA0B,CAAA;AAQzE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,mBAAmB,CAAA;AAC/E,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAaxD,MAAM,WAAW,+BAA+B;IAC9C,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAA;IACnB,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAA;CACjC;AAED,UAAU,OAAQ,SAAQ,wBAAwB;IAChD,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAChC,QAAQ,EAAE,QAAQ,CAAA;IAClB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2BAA2B,CAAC,EAAE,+BAA+B,CAAA;IAC7D,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB;AAoBD,qBAAa,WAAY,SAAQ,iBAAiB,CAAC,cAAc,CAAE,YAAW,QAAQ;IASvE,OAAO,CAAC,QAAQ,CAAC,OAAO;IARrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEE,OAAO,EAAE,OAAO;IAwF9C,OAAO,CAAC,QAAQ;IA0FhB,QAAQ,IAAK,SAAS,EAAE;IAgClB,MAAM,CAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAY7B;;OAEG;YACW,MAAM;YAiBN,KAAK;CAgCpB"}
|
package/dist/src/listener.js
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import net from 'net';
|
|
2
2
|
import { CodeError } from '@libp2p/interface/errors';
|
|
3
3
|
import { TypedEventEmitter, CustomEvent } from '@libp2p/interface/events';
|
|
4
|
-
import { logger } from '@libp2p/logger';
|
|
5
4
|
import { CODE_P2P } from './constants.js';
|
|
6
5
|
import { toMultiaddrConnection } from './socket-to-conn.js';
|
|
7
6
|
import { getMultiaddrs, multiaddrToNetConfig } from './utils.js';
|
|
8
|
-
const log = logger('libp2p:tcp:listener');
|
|
9
7
|
/**
|
|
10
8
|
* Attempts to close the given maConn. If a failure occurs, it will be logged
|
|
11
9
|
*/
|
|
12
|
-
async function attemptClose(maConn) {
|
|
10
|
+
async function attemptClose(maConn, options) {
|
|
13
11
|
try {
|
|
14
12
|
await maConn.close();
|
|
15
13
|
}
|
|
16
14
|
catch (err) {
|
|
17
|
-
log.error('an error occurred closing the connection', err);
|
|
15
|
+
options.log.error('an error occurred closing the connection', err);
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
18
|
var TCPListenerStatusCode;
|
|
@@ -36,10 +34,12 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
36
34
|
status = { code: TCPListenerStatusCode.INACTIVE };
|
|
37
35
|
metrics;
|
|
38
36
|
addr;
|
|
37
|
+
log;
|
|
39
38
|
constructor(context) {
|
|
40
39
|
super();
|
|
41
40
|
this.context = context;
|
|
42
41
|
context.keepAlive = context.keepAlive ?? true;
|
|
42
|
+
this.log = context.logger.forComponent('libp2p:tcp:listener');
|
|
43
43
|
this.addr = 'unknown';
|
|
44
44
|
this.server = net.createServer(context, this.onSocket.bind(this));
|
|
45
45
|
// https://nodejs.org/api/net.html#servermaxconnections
|
|
@@ -120,7 +120,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
120
120
|
}
|
|
121
121
|
// Avoid uncaught errors caused by unstable connections
|
|
122
122
|
socket.on('error', err => {
|
|
123
|
-
log('socket error', err);
|
|
123
|
+
this.log('socket error', err);
|
|
124
124
|
this.metrics?.events.increment({ [`${this.addr} error`]: true });
|
|
125
125
|
});
|
|
126
126
|
let maConn;
|
|
@@ -130,19 +130,20 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
130
130
|
socketInactivityTimeout: this.context.socketInactivityTimeout,
|
|
131
131
|
socketCloseTimeout: this.context.socketCloseTimeout,
|
|
132
132
|
metrics: this.metrics?.events,
|
|
133
|
-
metricPrefix: `${this.addr}
|
|
133
|
+
metricPrefix: `${this.addr} `,
|
|
134
|
+
logger: this.context.logger
|
|
134
135
|
});
|
|
135
136
|
}
|
|
136
137
|
catch (err) {
|
|
137
|
-
log.error('inbound connection failed', err);
|
|
138
|
+
this.log.error('inbound connection failed', err);
|
|
138
139
|
this.metrics?.errors.increment({ [`${this.addr} inbound_to_connection`]: true });
|
|
139
140
|
return;
|
|
140
141
|
}
|
|
141
|
-
log('new inbound connection %s', maConn.remoteAddr);
|
|
142
|
+
this.log('new inbound connection %s', maConn.remoteAddr);
|
|
142
143
|
try {
|
|
143
144
|
this.context.upgrader.upgradeInbound(maConn)
|
|
144
145
|
.then((conn) => {
|
|
145
|
-
log('inbound connection upgraded %s', maConn.remoteAddr);
|
|
146
|
+
this.log('inbound connection upgraded %s', maConn.remoteAddr);
|
|
146
147
|
this.connections.add(maConn);
|
|
147
148
|
socket.once('close', () => {
|
|
148
149
|
this.connections.delete(maConn);
|
|
@@ -153,7 +154,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
153
154
|
// we can do. resume() will be called again every time a connection is dropped, which
|
|
154
155
|
// acts as an eventual retry mechanism. onListenError allows the consumer act on this.
|
|
155
156
|
this.resume().catch(e => {
|
|
156
|
-
log.error('error attempting to listen server once connection count under limit', e);
|
|
157
|
+
this.log.error('error attempting to listen server once connection count under limit', e);
|
|
157
158
|
this.context.closeServerOnMaxConnections?.onListenError?.(e);
|
|
158
159
|
});
|
|
159
160
|
}
|
|
@@ -164,25 +165,29 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
164
165
|
if (this.context.closeServerOnMaxConnections != null &&
|
|
165
166
|
this.connections.size >= this.context.closeServerOnMaxConnections.closeAbove) {
|
|
166
167
|
this.pause(false).catch(e => {
|
|
167
|
-
log.error('error attempting to close server once connection count over limit', e);
|
|
168
|
+
this.log.error('error attempting to close server once connection count over limit', e);
|
|
168
169
|
});
|
|
169
170
|
}
|
|
170
171
|
this.dispatchEvent(new CustomEvent('connection', { detail: conn }));
|
|
171
172
|
})
|
|
172
173
|
.catch(async (err) => {
|
|
173
|
-
log.error('inbound connection failed', err);
|
|
174
|
+
this.log.error('inbound connection failed', err);
|
|
174
175
|
this.metrics?.errors.increment({ [`${this.addr} inbound_upgrade`]: true });
|
|
175
|
-
await attemptClose(maConn
|
|
176
|
+
await attemptClose(maConn, {
|
|
177
|
+
log: this.log
|
|
178
|
+
});
|
|
176
179
|
})
|
|
177
180
|
.catch(err => {
|
|
178
|
-
log.error('closing inbound connection failed', err);
|
|
181
|
+
this.log.error('closing inbound connection failed', err);
|
|
179
182
|
});
|
|
180
183
|
}
|
|
181
184
|
catch (err) {
|
|
182
|
-
log.error('inbound connection failed', err);
|
|
183
|
-
attemptClose(maConn
|
|
185
|
+
this.log.error('inbound connection failed', err);
|
|
186
|
+
attemptClose(maConn, {
|
|
187
|
+
log: this.log
|
|
188
|
+
})
|
|
184
189
|
.catch(err => {
|
|
185
|
-
log.error('closing inbound connection failed', err);
|
|
190
|
+
this.log.error('closing inbound connection failed', err);
|
|
186
191
|
this.metrics?.errors.increment({ [`${this.addr} inbound_closing_failed`]: true });
|
|
187
192
|
});
|
|
188
193
|
}
|
|
@@ -212,7 +217,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
212
217
|
}
|
|
213
218
|
}
|
|
214
219
|
catch (err) {
|
|
215
|
-
log.error('could not turn %s:%s into multiaddr', address.address, address.port, err);
|
|
220
|
+
this.log.error('could not turn %s:%s into multiaddr', address.address, address.port, err);
|
|
216
221
|
}
|
|
217
222
|
}
|
|
218
223
|
return addrs.map(ma => peerId != null ? ma.encapsulate(`/p2p/${peerId}`) : ma);
|
|
@@ -241,9 +246,11 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
241
246
|
async close() {
|
|
242
247
|
// Close connections and server the same time to avoid any race condition
|
|
243
248
|
await Promise.all([
|
|
244
|
-
Promise.all(Array.from(this.connections.values()).map(async (maConn) => attemptClose(maConn
|
|
249
|
+
Promise.all(Array.from(this.connections.values()).map(async (maConn) => attemptClose(maConn, {
|
|
250
|
+
log: this.log
|
|
251
|
+
}))),
|
|
245
252
|
this.pause(true).catch(e => {
|
|
246
|
-
log.error('error attempting to close server once connection count over limit', e);
|
|
253
|
+
this.log.error('error attempting to close server once connection count over limit', e);
|
|
247
254
|
})
|
|
248
255
|
]);
|
|
249
256
|
}
|
|
@@ -261,7 +268,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
261
268
|
this.server.listen(netConfig, resolve);
|
|
262
269
|
});
|
|
263
270
|
this.status = { ...this.status, code: TCPListenerStatusCode.ACTIVE };
|
|
264
|
-
log('Listening on %s', this.server.address());
|
|
271
|
+
this.log('Listening on %s', this.server.address());
|
|
265
272
|
}
|
|
266
273
|
async pause(permanent) {
|
|
267
274
|
if (!this.server.listening && this.status.code === TCPListenerStatusCode.PAUSED && permanent) {
|
|
@@ -271,7 +278,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
271
278
|
if (!this.server.listening || this.status.code !== TCPListenerStatusCode.ACTIVE) {
|
|
272
279
|
return;
|
|
273
280
|
}
|
|
274
|
-
log('Closing server on %s', this.server.address());
|
|
281
|
+
this.log('Closing server on %s', this.server.address());
|
|
275
282
|
// NodeJS implementation tracks listening status with `this._handle` property.
|
|
276
283
|
// - Server.close() sets this._handle to null immediately. If this._handle is null, ERR_SERVER_NOT_RUNNING is thrown
|
|
277
284
|
// - Server.listening returns `this._handle !== null` https://github.com/nodejs/node/blob/386d761943bb1b217fba27d6b80b658c23009e60/lib/net.js#L1675
|
package/dist/src/listener.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
1
2
|
import type { MultiaddrConnection } from '@libp2p/interface/connection';
|
|
2
3
|
import type { CounterGroup } from '@libp2p/interface/metrics';
|
|
3
4
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
@@ -10,6 +11,7 @@ interface ToConnectionOptions {
|
|
|
10
11
|
socketCloseTimeout?: number;
|
|
11
12
|
metrics?: CounterGroup;
|
|
12
13
|
metricPrefix?: string;
|
|
14
|
+
logger: ComponentLogger;
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* Convert a socket into a MultiaddrConnection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-to-conn.d.ts","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"socket-to-conn.d.ts","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAEjC,UAAU,mBAAmB;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAY,MAAM,WAAW,mBAAmB,KAAG,mBAiKpF,CAAA"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors';
|
|
2
|
-
import { logger } from '@libp2p/logger';
|
|
3
2
|
import { ipPortToMultiaddr as toMultiaddr } from '@libp2p/utils/ip-port-to-multiaddr';
|
|
4
3
|
// @ts-expect-error no types
|
|
5
4
|
import toIterable from 'stream-to-it';
|
|
6
5
|
import { CLOSE_TIMEOUT, SOCKET_TIMEOUT } from './constants.js';
|
|
7
6
|
import { multiaddrToNetConfig } from './utils.js';
|
|
8
|
-
const log = logger('libp2p:tcp:socket');
|
|
9
7
|
/**
|
|
10
8
|
* Convert a socket into a MultiaddrConnection
|
|
11
9
|
* https://github.com/libp2p/interface-transport#multiaddrconnection
|
|
12
10
|
*/
|
|
13
11
|
export const toMultiaddrConnection = (socket, options) => {
|
|
12
|
+
const log = options.logger.forComponent('libp2p:tcp:socket');
|
|
14
13
|
const metrics = options.metrics;
|
|
15
14
|
const metricPrefix = options.metricPrefix ?? '';
|
|
16
15
|
const inactivityTimeout = options.socketInactivityTimeout ?? SOCKET_TIMEOUT;
|
|
@@ -93,7 +92,13 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
93
92
|
log('%s socket was already destroyed when trying to close', lOptsStr);
|
|
94
93
|
return;
|
|
95
94
|
}
|
|
96
|
-
|
|
95
|
+
if (options.signal == null) {
|
|
96
|
+
const signal = AbortSignal.timeout(closeTimeout);
|
|
97
|
+
options = {
|
|
98
|
+
...options,
|
|
99
|
+
signal
|
|
100
|
+
};
|
|
101
|
+
}
|
|
97
102
|
try {
|
|
98
103
|
log('%s closing socket', lOptsStr);
|
|
99
104
|
await new Promise((resolve, reject) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-to-conn.js","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"socket-to-conn.js","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/tcp",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.13-05b52d69c",
|
|
4
4
|
"description": "A TCP transport for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/master/packages/transport-tcp#readme",
|
|
@@ -51,21 +51,21 @@
|
|
|
51
51
|
"test:electron-main": "aegir test -t electron-main"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@libp2p/interface": "0.1.
|
|
55
|
-
"@libp2p/
|
|
56
|
-
"@
|
|
57
|
-
"@multiformats/
|
|
58
|
-
"@multiformats/multiaddr": "^12.1.5",
|
|
54
|
+
"@libp2p/interface": "0.1.6-05b52d69c",
|
|
55
|
+
"@libp2p/utils": "4.0.7-05b52d69c",
|
|
56
|
+
"@multiformats/mafmt": "^12.1.6",
|
|
57
|
+
"@multiformats/multiaddr": "^12.1.10",
|
|
59
58
|
"@types/sinon": "^17.0.0",
|
|
60
59
|
"stream-to-it": "^0.2.2"
|
|
61
60
|
},
|
|
62
61
|
"devDependencies": {
|
|
63
|
-
"@libp2p/interface-compliance-tests": "4.1.
|
|
62
|
+
"@libp2p/interface-compliance-tests": "4.1.5-05b52d69c",
|
|
63
|
+
"@libp2p/logger": "3.1.0-05b52d69c",
|
|
64
64
|
"aegir": "^41.0.2",
|
|
65
|
-
"it-all": "^3.0.
|
|
65
|
+
"it-all": "^3.0.3",
|
|
66
66
|
"it-pipe": "^3.0.1",
|
|
67
67
|
"p-defer": "^4.0.0",
|
|
68
68
|
"sinon": "^17.0.0",
|
|
69
|
-
"uint8arrays": "^4.0.
|
|
69
|
+
"uint8arrays": "^4.0.6"
|
|
70
70
|
}
|
|
71
71
|
}
|
package/src/index.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* const listener = transport.createListener({
|
|
23
23
|
* upgrader,
|
|
24
24
|
* handler: (socket) => {
|
|
25
|
-
* console.log('new connection opened')
|
|
25
|
+
* console.this.log('new connection opened')
|
|
26
26
|
* pipe(
|
|
27
27
|
* ['hello', ' ', 'World!'],
|
|
28
28
|
* socket
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
*
|
|
33
33
|
* const addr = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
|
34
34
|
* await listener.listen(addr)
|
|
35
|
-
* console.log('listening')
|
|
35
|
+
* console.this.log('listening')
|
|
36
36
|
*
|
|
37
37
|
* const socket = await transport.dial(addr, { upgrader })
|
|
38
38
|
* const values = await pipe(
|
|
39
39
|
* socket,
|
|
40
40
|
* all
|
|
41
41
|
* )
|
|
42
|
-
* console.log(`Value: ${values.toString()}`)
|
|
42
|
+
* console.this.log(`Value: ${values.toString()}`)
|
|
43
43
|
*
|
|
44
44
|
* // Close connection after reading
|
|
45
45
|
* await listener.close()
|
|
@@ -57,19 +57,17 @@
|
|
|
57
57
|
import net from 'net'
|
|
58
58
|
import { AbortError, CodeError } from '@libp2p/interface/errors'
|
|
59
59
|
import { type CreateListenerOptions, type DialOptions, symbol, type Transport, type Listener } from '@libp2p/interface/transport'
|
|
60
|
-
import { logger } from '@libp2p/logger'
|
|
61
60
|
import * as mafmt from '@multiformats/mafmt'
|
|
62
61
|
import { CODE_CIRCUIT, CODE_P2P, CODE_UNIX } from './constants.js'
|
|
63
62
|
import { type CloseServerOnMaxConnectionsOpts, TCPListener } from './listener.js'
|
|
64
63
|
import { toMultiaddrConnection } from './socket-to-conn.js'
|
|
65
64
|
import { multiaddrToNetConfig } from './utils.js'
|
|
65
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
66
66
|
import type { Connection } from '@libp2p/interface/connection'
|
|
67
67
|
import type { CounterGroup, Metrics } from '@libp2p/interface/metrics'
|
|
68
68
|
import type { AbortOptions, Multiaddr } from '@multiformats/multiaddr'
|
|
69
69
|
import type { Socket, IpcSocketConnectOpts, TcpSocketConnectOpts } from 'net'
|
|
70
70
|
|
|
71
|
-
const log = logger('libp2p:tcp')
|
|
72
|
-
|
|
73
71
|
export interface TCPOptions {
|
|
74
72
|
/**
|
|
75
73
|
* An optional number in ms that is used as an inactivity timeout after which the socket will be closed
|
|
@@ -125,6 +123,7 @@ export interface TCPCreateListenerOptions extends CreateListenerOptions, TCPSock
|
|
|
125
123
|
|
|
126
124
|
export interface TCPComponents {
|
|
127
125
|
metrics?: Metrics
|
|
126
|
+
logger: ComponentLogger
|
|
128
127
|
}
|
|
129
128
|
|
|
130
129
|
export interface TCPMetrics {
|
|
@@ -135,8 +134,10 @@ class TCP implements Transport {
|
|
|
135
134
|
private readonly opts: TCPOptions
|
|
136
135
|
private readonly metrics?: TCPMetrics
|
|
137
136
|
private readonly components: TCPComponents
|
|
137
|
+
private readonly log: Logger
|
|
138
138
|
|
|
139
139
|
constructor (components: TCPComponents, options: TCPOptions = {}) {
|
|
140
|
+
this.log = components.logger.forComponent('libp2p:tcp')
|
|
140
141
|
this.opts = options
|
|
141
142
|
this.components = components
|
|
142
143
|
|
|
@@ -162,32 +163,33 @@ class TCP implements Transport {
|
|
|
162
163
|
|
|
163
164
|
// Avoid uncaught errors caused by unstable connections
|
|
164
165
|
socket.on('error', err => {
|
|
165
|
-
log('socket error', err)
|
|
166
|
+
this.log('socket error', err)
|
|
166
167
|
})
|
|
167
168
|
|
|
168
169
|
const maConn = toMultiaddrConnection(socket, {
|
|
169
170
|
remoteAddr: ma,
|
|
170
171
|
socketInactivityTimeout: this.opts.outboundSocketInactivityTimeout,
|
|
171
172
|
socketCloseTimeout: this.opts.socketCloseTimeout,
|
|
172
|
-
metrics: this.metrics?.dialerEvents
|
|
173
|
+
metrics: this.metrics?.dialerEvents,
|
|
174
|
+
logger: this.components.logger
|
|
173
175
|
})
|
|
174
176
|
|
|
175
177
|
const onAbort = (): void => {
|
|
176
178
|
maConn.close().catch(err => {
|
|
177
|
-
log.error('Error closing maConn after abort', err)
|
|
179
|
+
this.log.error('Error closing maConn after abort', err)
|
|
178
180
|
})
|
|
179
181
|
}
|
|
180
182
|
options.signal?.addEventListener('abort', onAbort, { once: true })
|
|
181
183
|
|
|
182
|
-
log('new outbound connection %s', maConn.remoteAddr)
|
|
184
|
+
this.log('new outbound connection %s', maConn.remoteAddr)
|
|
183
185
|
const conn = await options.upgrader.upgradeOutbound(maConn)
|
|
184
|
-
log('outbound connection %s upgraded', maConn.remoteAddr)
|
|
186
|
+
this.log('outbound connection %s upgraded', maConn.remoteAddr)
|
|
185
187
|
|
|
186
188
|
options.signal?.removeEventListener('abort', onAbort)
|
|
187
189
|
|
|
188
190
|
if (options.signal?.aborted === true) {
|
|
189
191
|
conn.close().catch(err => {
|
|
190
|
-
log.error('Error closing conn after abort', err)
|
|
192
|
+
this.log.error('Error closing conn after abort', err)
|
|
191
193
|
})
|
|
192
194
|
|
|
193
195
|
throw new AbortError()
|
|
@@ -206,7 +208,7 @@ class TCP implements Transport {
|
|
|
206
208
|
const cOpts = multiaddrToNetConfig(ma) as (IpcSocketConnectOpts & TcpSocketConnectOpts)
|
|
207
209
|
const cOptsStr = cOpts.path ?? `${cOpts.host ?? ''}:${cOpts.port}`
|
|
208
210
|
|
|
209
|
-
log('dialing %j', cOpts)
|
|
211
|
+
this.log('dialing %j', cOpts)
|
|
210
212
|
const rawSocket = net.connect(cOpts)
|
|
211
213
|
|
|
212
214
|
const onError = (err: Error): void => {
|
|
@@ -217,7 +219,7 @@ class TCP implements Transport {
|
|
|
217
219
|
}
|
|
218
220
|
|
|
219
221
|
const onTimeout = (): void => {
|
|
220
|
-
log('connection timeout %s', cOptsStr)
|
|
222
|
+
this.log('connection timeout %s', cOptsStr)
|
|
221
223
|
this.metrics?.dialerEvents.increment({ timeout: true })
|
|
222
224
|
|
|
223
225
|
const err = new CodeError(`connection timeout after ${Date.now() - start}ms`, 'ERR_CONNECT_TIMEOUT')
|
|
@@ -226,13 +228,13 @@ class TCP implements Transport {
|
|
|
226
228
|
}
|
|
227
229
|
|
|
228
230
|
const onConnect = (): void => {
|
|
229
|
-
log('connection opened %j', cOpts)
|
|
231
|
+
this.log('connection opened %j', cOpts)
|
|
230
232
|
this.metrics?.dialerEvents.increment({ connect: true })
|
|
231
233
|
done()
|
|
232
234
|
}
|
|
233
235
|
|
|
234
236
|
const onAbort = (): void => {
|
|
235
|
-
log('connection aborted %j', cOpts)
|
|
237
|
+
this.log('connection aborted %j', cOpts)
|
|
236
238
|
this.metrics?.dialerEvents.increment({ abort: true })
|
|
237
239
|
rawSocket.destroy()
|
|
238
240
|
done(new AbortError())
|
|
@@ -277,7 +279,8 @@ class TCP implements Transport {
|
|
|
277
279
|
closeServerOnMaxConnections: this.opts.closeServerOnMaxConnections,
|
|
278
280
|
socketInactivityTimeout: this.opts.inboundSocketInactivityTimeout,
|
|
279
281
|
socketCloseTimeout: this.opts.socketCloseTimeout,
|
|
280
|
-
metrics: this.components.metrics
|
|
282
|
+
metrics: this.components.metrics,
|
|
283
|
+
logger: this.components.logger
|
|
281
284
|
})
|
|
282
285
|
}
|
|
283
286
|
|
|
@@ -301,8 +304,8 @@ class TCP implements Transport {
|
|
|
301
304
|
}
|
|
302
305
|
}
|
|
303
306
|
|
|
304
|
-
export function tcp (init: TCPOptions = {}): (components
|
|
305
|
-
return (components: TCPComponents
|
|
307
|
+
export function tcp (init: TCPOptions = {}): (components: TCPComponents) => Transport {
|
|
308
|
+
return (components: TCPComponents) => {
|
|
306
309
|
return new TCP(components, init)
|
|
307
310
|
}
|
|
308
311
|
}
|
package/src/listener.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import net from 'net'
|
|
2
2
|
import { CodeError } from '@libp2p/interface/errors'
|
|
3
3
|
import { TypedEventEmitter, CustomEvent } from '@libp2p/interface/events'
|
|
4
|
-
import { logger } from '@libp2p/logger'
|
|
5
4
|
import { CODE_P2P } from './constants.js'
|
|
6
5
|
import { toMultiaddrConnection } from './socket-to-conn.js'
|
|
7
6
|
import {
|
|
@@ -10,21 +9,20 @@ import {
|
|
|
10
9
|
type NetConfig
|
|
11
10
|
} from './utils.js'
|
|
12
11
|
import type { TCPCreateListenerOptions } from './index.js'
|
|
12
|
+
import type { ComponentLogger, Logger, LoggerOptions } from '@libp2p/interface'
|
|
13
13
|
import type { MultiaddrConnection, Connection } from '@libp2p/interface/connection'
|
|
14
14
|
import type { CounterGroup, MetricGroup, Metrics } from '@libp2p/interface/metrics'
|
|
15
15
|
import type { Listener, ListenerEvents, Upgrader } from '@libp2p/interface/transport'
|
|
16
16
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
17
17
|
|
|
18
|
-
const log = logger('libp2p:tcp:listener')
|
|
19
|
-
|
|
20
18
|
/**
|
|
21
19
|
* Attempts to close the given maConn. If a failure occurs, it will be logged
|
|
22
20
|
*/
|
|
23
|
-
async function attemptClose (maConn: MultiaddrConnection): Promise<void> {
|
|
21
|
+
async function attemptClose (maConn: MultiaddrConnection, options: LoggerOptions): Promise<void> {
|
|
24
22
|
try {
|
|
25
23
|
await maConn.close()
|
|
26
24
|
} catch (err) {
|
|
27
|
-
log.error('an error occurred closing the connection', err)
|
|
25
|
+
options.log.error('an error occurred closing the connection', err)
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
|
|
@@ -45,6 +43,7 @@ interface Context extends TCPCreateListenerOptions {
|
|
|
45
43
|
backlog?: number
|
|
46
44
|
metrics?: Metrics
|
|
47
45
|
closeServerOnMaxConnections?: CloseServerOnMaxConnectionsOpts
|
|
46
|
+
logger: ComponentLogger
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
export interface TCPListenerMetrics {
|
|
@@ -78,12 +77,14 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
78
77
|
private status: Status = { code: TCPListenerStatusCode.INACTIVE }
|
|
79
78
|
private metrics?: TCPListenerMetrics
|
|
80
79
|
private addr: string
|
|
80
|
+
private readonly log: Logger
|
|
81
81
|
|
|
82
82
|
constructor (private readonly context: Context) {
|
|
83
83
|
super()
|
|
84
84
|
|
|
85
85
|
context.keepAlive = context.keepAlive ?? true
|
|
86
86
|
|
|
87
|
+
this.log = context.logger.forComponent('libp2p:tcp:listener')
|
|
87
88
|
this.addr = 'unknown'
|
|
88
89
|
this.server = net.createServer(context, this.onSocket.bind(this))
|
|
89
90
|
|
|
@@ -172,7 +173,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
172
173
|
}
|
|
173
174
|
// Avoid uncaught errors caused by unstable connections
|
|
174
175
|
socket.on('error', err => {
|
|
175
|
-
log('socket error', err)
|
|
176
|
+
this.log('socket error', err)
|
|
176
177
|
this.metrics?.events.increment({ [`${this.addr} error`]: true })
|
|
177
178
|
})
|
|
178
179
|
|
|
@@ -183,19 +184,20 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
183
184
|
socketInactivityTimeout: this.context.socketInactivityTimeout,
|
|
184
185
|
socketCloseTimeout: this.context.socketCloseTimeout,
|
|
185
186
|
metrics: this.metrics?.events,
|
|
186
|
-
metricPrefix: `${this.addr}
|
|
187
|
+
metricPrefix: `${this.addr} `,
|
|
188
|
+
logger: this.context.logger
|
|
187
189
|
})
|
|
188
190
|
} catch (err) {
|
|
189
|
-
log.error('inbound connection failed', err)
|
|
191
|
+
this.log.error('inbound connection failed', err)
|
|
190
192
|
this.metrics?.errors.increment({ [`${this.addr} inbound_to_connection`]: true })
|
|
191
193
|
return
|
|
192
194
|
}
|
|
193
195
|
|
|
194
|
-
log('new inbound connection %s', maConn.remoteAddr)
|
|
196
|
+
this.log('new inbound connection %s', maConn.remoteAddr)
|
|
195
197
|
try {
|
|
196
198
|
this.context.upgrader.upgradeInbound(maConn)
|
|
197
199
|
.then((conn) => {
|
|
198
|
-
log('inbound connection upgraded %s', maConn.remoteAddr)
|
|
200
|
+
this.log('inbound connection upgraded %s', maConn.remoteAddr)
|
|
199
201
|
this.connections.add(maConn)
|
|
200
202
|
|
|
201
203
|
socket.once('close', () => {
|
|
@@ -210,7 +212,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
210
212
|
// we can do. resume() will be called again every time a connection is dropped, which
|
|
211
213
|
// acts as an eventual retry mechanism. onListenError allows the consumer act on this.
|
|
212
214
|
this.resume().catch(e => {
|
|
213
|
-
log.error('error attempting to listen server once connection count under limit', e)
|
|
215
|
+
this.log.error('error attempting to listen server once connection count under limit', e)
|
|
214
216
|
this.context.closeServerOnMaxConnections?.onListenError?.(e as Error)
|
|
215
217
|
})
|
|
216
218
|
}
|
|
@@ -225,27 +227,31 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
225
227
|
this.connections.size >= this.context.closeServerOnMaxConnections.closeAbove
|
|
226
228
|
) {
|
|
227
229
|
this.pause(false).catch(e => {
|
|
228
|
-
log.error('error attempting to close server once connection count over limit', e)
|
|
230
|
+
this.log.error('error attempting to close server once connection count over limit', e)
|
|
229
231
|
})
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
this.dispatchEvent(new CustomEvent<Connection>('connection', { detail: conn }))
|
|
233
235
|
})
|
|
234
236
|
.catch(async err => {
|
|
235
|
-
log.error('inbound connection failed', err)
|
|
237
|
+
this.log.error('inbound connection failed', err)
|
|
236
238
|
this.metrics?.errors.increment({ [`${this.addr} inbound_upgrade`]: true })
|
|
237
239
|
|
|
238
|
-
await attemptClose(maConn
|
|
240
|
+
await attemptClose(maConn, {
|
|
241
|
+
log: this.log
|
|
242
|
+
})
|
|
239
243
|
})
|
|
240
244
|
.catch(err => {
|
|
241
|
-
log.error('closing inbound connection failed', err)
|
|
245
|
+
this.log.error('closing inbound connection failed', err)
|
|
242
246
|
})
|
|
243
247
|
} catch (err) {
|
|
244
|
-
log.error('inbound connection failed', err)
|
|
248
|
+
this.log.error('inbound connection failed', err)
|
|
245
249
|
|
|
246
|
-
attemptClose(maConn
|
|
250
|
+
attemptClose(maConn, {
|
|
251
|
+
log: this.log
|
|
252
|
+
})
|
|
247
253
|
.catch(err => {
|
|
248
|
-
log.error('closing inbound connection failed', err)
|
|
254
|
+
this.log.error('closing inbound connection failed', err)
|
|
249
255
|
this.metrics?.errors.increment({ [`${this.addr} inbound_closing_failed`]: true })
|
|
250
256
|
})
|
|
251
257
|
}
|
|
@@ -276,7 +282,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
276
282
|
addrs = addrs.concat(getMultiaddrs('ip6', address.address, address.port))
|
|
277
283
|
}
|
|
278
284
|
} catch (err) {
|
|
279
|
-
log.error('could not turn %s:%s into multiaddr', address.address, address.port, err)
|
|
285
|
+
this.log.error('could not turn %s:%s into multiaddr', address.address, address.port, err)
|
|
280
286
|
}
|
|
281
287
|
}
|
|
282
288
|
|
|
@@ -310,9 +316,11 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
310
316
|
async close (): Promise<void> {
|
|
311
317
|
// Close connections and server the same time to avoid any race condition
|
|
312
318
|
await Promise.all([
|
|
313
|
-
Promise.all(Array.from(this.connections.values()).map(async maConn => attemptClose(maConn
|
|
319
|
+
Promise.all(Array.from(this.connections.values()).map(async maConn => attemptClose(maConn, {
|
|
320
|
+
log: this.log
|
|
321
|
+
}))),
|
|
314
322
|
this.pause(true).catch(e => {
|
|
315
|
-
log.error('error attempting to close server once connection count over limit', e)
|
|
323
|
+
this.log.error('error attempting to close server once connection count over limit', e)
|
|
316
324
|
})
|
|
317
325
|
])
|
|
318
326
|
}
|
|
@@ -334,7 +342,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
334
342
|
})
|
|
335
343
|
|
|
336
344
|
this.status = { ...this.status, code: TCPListenerStatusCode.ACTIVE }
|
|
337
|
-
log('Listening on %s', this.server.address())
|
|
345
|
+
this.log('Listening on %s', this.server.address())
|
|
338
346
|
}
|
|
339
347
|
|
|
340
348
|
private async pause (permanent: boolean): Promise<void> {
|
|
@@ -347,7 +355,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
347
355
|
return
|
|
348
356
|
}
|
|
349
357
|
|
|
350
|
-
log('Closing server on %s', this.server.address())
|
|
358
|
+
this.log('Closing server on %s', this.server.address())
|
|
351
359
|
|
|
352
360
|
// NodeJS implementation tracks listening status with `this._handle` property.
|
|
353
361
|
// - Server.close() sets this._handle to null immediately. If this._handle is null, ERR_SERVER_NOT_RUNNING is thrown
|
package/src/socket-to-conn.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import { ipPortToMultiaddr as toMultiaddr } from '@libp2p/utils/ip-port-to-multiaddr'
|
|
4
3
|
// @ts-expect-error no types
|
|
5
4
|
import toIterable from 'stream-to-it'
|
|
6
5
|
import { CLOSE_TIMEOUT, SOCKET_TIMEOUT } from './constants.js'
|
|
7
6
|
import { multiaddrToNetConfig } from './utils.js'
|
|
7
|
+
import type { ComponentLogger } from '@libp2p/interface'
|
|
8
8
|
import type { MultiaddrConnection } from '@libp2p/interface/connection'
|
|
9
9
|
import type { CounterGroup } from '@libp2p/interface/metrics'
|
|
10
10
|
import type { AbortOptions, Multiaddr } from '@multiformats/multiaddr'
|
|
11
11
|
import type { Socket } from 'net'
|
|
12
12
|
|
|
13
|
-
const log = logger('libp2p:tcp:socket')
|
|
14
|
-
|
|
15
13
|
interface ToConnectionOptions {
|
|
16
14
|
listeningAddr?: Multiaddr
|
|
17
15
|
remoteAddr?: Multiaddr
|
|
@@ -20,6 +18,7 @@ interface ToConnectionOptions {
|
|
|
20
18
|
socketCloseTimeout?: number
|
|
21
19
|
metrics?: CounterGroup
|
|
22
20
|
metricPrefix?: string
|
|
21
|
+
logger: ComponentLogger
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
/**
|
|
@@ -27,6 +26,7 @@ interface ToConnectionOptions {
|
|
|
27
26
|
* https://github.com/libp2p/interface-transport#multiaddrconnection
|
|
28
27
|
*/
|
|
29
28
|
export const toMultiaddrConnection = (socket: Socket, options: ToConnectionOptions): MultiaddrConnection => {
|
|
29
|
+
const log = options.logger.forComponent('libp2p:tcp:socket')
|
|
30
30
|
const metrics = options.metrics
|
|
31
31
|
const metricPrefix = options.metricPrefix ?? ''
|
|
32
32
|
const inactivityTimeout = options.socketInactivityTimeout ?? SOCKET_TIMEOUT
|
|
@@ -126,7 +126,14 @@ export const toMultiaddrConnection = (socket: Socket, options: ToConnectionOptio
|
|
|
126
126
|
return
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
if (options.signal == null) {
|
|
130
|
+
const signal = AbortSignal.timeout(closeTimeout)
|
|
131
|
+
|
|
132
|
+
options = {
|
|
133
|
+
...options,
|
|
134
|
+
signal
|
|
135
|
+
}
|
|
136
|
+
}
|
|
130
137
|
|
|
131
138
|
try {
|
|
132
139
|
log('%s closing socket', lOptsStr)
|