@libp2p/tcp 9.0.15 → 9.0.16-1fc929c1c
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/README.md +29 -39
- package/dist/index.min.js +1 -1
- package/dist/src/index.d.ts +11 -38
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -38
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts +9 -2
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js +40 -29
- package/dist/src/listener.js.map +1 -1
- package/dist/src/socket-to-conn.d.ts.map +1 -1
- package/dist/src/socket-to-conn.js +10 -0
- package/dist/src/socket-to-conn.js.map +1 -1
- package/package.json +8 -7
- package/src/index.ts +11 -38
- package/src/listener.ts +57 -32
- package/src/socket-to-conn.ts +13 -0
- package/dist/typedoc-urls.json +0 -16
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# @libp2p/tcp
|
|
2
|
+
|
|
1
3
|
[](http://libp2p.io/)
|
|
2
4
|
[](https://discuss.libp2p.io)
|
|
3
5
|
[](https://codecov.io/gh/libp2p/js-libp2p)
|
|
@@ -7,56 +9,44 @@
|
|
|
7
9
|
|
|
8
10
|
# About
|
|
9
11
|
|
|
12
|
+
<!--
|
|
13
|
+
|
|
14
|
+
!IMPORTANT!
|
|
15
|
+
|
|
16
|
+
Everything in this README between "# About" and "# Install" is automatically
|
|
17
|
+
generated and will be overwritten the next time the doc generator is run.
|
|
18
|
+
|
|
19
|
+
To make changes to this section, please update the @packageDocumentation section
|
|
20
|
+
of src/index.js or src/index.ts
|
|
21
|
+
|
|
22
|
+
To experiment with formatting, please run "npm run docs" from the root of this
|
|
23
|
+
repo and examine the changes made.
|
|
24
|
+
|
|
25
|
+
-->
|
|
26
|
+
|
|
10
27
|
A [libp2p transport](https://docs.libp2p.io/concepts/transports/overview/) based on the TCP networking stack.
|
|
11
28
|
|
|
12
29
|
## Example
|
|
13
30
|
|
|
14
31
|
```TypeScript
|
|
32
|
+
import { createLibp2p } from 'libp2p'
|
|
15
33
|
import { tcp } from '@libp2p/tcp'
|
|
16
34
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
17
|
-
import { pipe } from 'it-pipe'
|
|
18
|
-
import all from 'it-all'
|
|
19
|
-
|
|
20
|
-
// A simple upgrader that just returns the MultiaddrConnection
|
|
21
|
-
const upgrader = {
|
|
22
|
-
upgradeInbound: async maConn => maConn,
|
|
23
|
-
upgradeOutbound: async maConn => maConn
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const transport = tcp()()
|
|
27
|
-
|
|
28
|
-
const listener = transport.createListener({
|
|
29
|
-
upgrader,
|
|
30
|
-
handler: (socket) => {
|
|
31
|
-
console.log('new connection opened')
|
|
32
|
-
pipe(
|
|
33
|
-
['hello', ' ', 'World!'],
|
|
34
|
-
socket
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
const addr = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
|
40
|
-
await listener.listen(addr)
|
|
41
|
-
console.log('listening')
|
|
42
35
|
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
)
|
|
48
|
-
console.log(`Value: ${values.toString()}`)
|
|
36
|
+
const node = await createLibp2p({
|
|
37
|
+
transports: [
|
|
38
|
+
tcp()
|
|
39
|
+
]
|
|
40
|
+
})
|
|
49
41
|
|
|
50
|
-
|
|
51
|
-
await listener.close()
|
|
52
|
-
```
|
|
42
|
+
const ma = multiaddr('/ip4/123.123.123.123/tcp/1234')
|
|
53
43
|
|
|
54
|
-
|
|
44
|
+
// dial a TCP connection, timing out after 10 seconds
|
|
45
|
+
const connection = await node.dial(ma, {
|
|
46
|
+
signal: AbortSignal.timeout(10_000)
|
|
47
|
+
})
|
|
55
48
|
|
|
56
|
-
|
|
57
|
-
listening
|
|
58
|
-
new connection opened
|
|
59
|
-
Value: hello World!
|
|
49
|
+
// use connection...
|
|
60
50
|
```
|
|
61
51
|
|
|
62
52
|
# Install
|
package/dist/index.min.js
CHANGED
|
@@ -1,3 +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 _r=Object.create;var be=Object.defineProperty;var Lr=Object.getOwnPropertyDescriptor;var Or=Object.getOwnPropertyNames;var Vr=Object.getPrototypeOf,Fr=Object.prototype.hasOwnProperty;var Z=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var ee=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),R=(r,e)=>{for(var t in e)be(r,t,{get:e[t],enumerable:!0})},Rt=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Or(e))!Fr.call(r,o)&&o!==t&&be(r,o,{get:()=>e[o],enumerable:!(n=Lr(e,o))||n.enumerable});return r};var te=(r,e,t)=>(t=r!=null?_r(Vr(r)):{},Rt(e||!r||!r.__esModule?be(t,"default",{value:r,enumerable:!0}):t,r)),$r=r=>Rt(be({},"__esModule",{value:!0}),r);var De=ee((Sc,Ar)=>{Ar.exports=r=>{if(r[Symbol.asyncIterator])return r;if(r.getReader)return async function*(){let e=r.getReader();try{for(;;){let{done:t,value:n}=await e.read();if(t)return;yield n}}finally{e.releaseLock()}}();throw new Error("unknown stream")}});var Cr=ee((Tc,Ir)=>{Ir.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 At=ee((Pc,Sr)=>{var Do=Cr();Sr.exports=r=>async e=>{e=Do(e);let t=w=>{typeof w.return=="function"&&w.return()},n=null,o=null,s=w=>{n=w,o&&o(w),t(e)},i=null,a=!1,p=()=>{a=!0,i&&i()},f=null,m=!1,v=()=>{m=!0,f&&f()},x=null,u=()=>{x&&x()},d=()=>new Promise((w,S)=>{i=x=w,o=S,r.once("drain",u)}),E=()=>(t(e),new Promise((w,S)=>{if(a||m||n)return w();f=i=w,o=S})),N=()=>{r.removeListener("error",s),r.removeListener("close",p),r.removeListener("finish",v),r.removeListener("drain",u)};r.once("error",s),r.once("close",p),r.once("finish",v);try{for await(let w of e){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 It=ee((Rc,Tr)=>{var Mo=At(),Uo=De();Tr.exports=r=>({sink:Mo(r),source:Uo(r)})});var Rr=ee((Nc,Pr)=>{var ko=It();Pr.exports=r=>async function*(e){let t=ko(r),n;if(t.sink(e).catch(o=>{n=o}),yield*t.source,n)throw n}});var Nr=ee((Dc,pe)=>{pe.exports=De();pe.exports.source=De();pe.exports.sink=At();pe.exports.transform=Rr();pe.exports.duplex=It()});var zo={};R(zo,{tcp:()=>$o});var kr=te(Z("net"),1);var Dt=Symbol.for("@libp2p/transport");var Nt;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Nt||(Nt={}));var re=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},I=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}};var ye=class extends EventTarget{#e=new Map;listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new ne(e,t))}},ke=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},ne=globalThis.CustomEvent??ke;var Fe={};R(Fe,{base58btc:()=>T,base58flickr:()=>Wr});var Wo=new Uint8Array(0);function Mt(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function M(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")}function Ut(r){return new TextEncoder().encode(r)}function kt(r){return new TextDecoder().decode(r)}function zr(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,p=r.charAt(0),f=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 _=(S-w)*m+1>>>0,D=new Uint8Array(_);w!==S;){for(var L=d[w],B=0,k=_-1;(L!==0||B<N)&&k!==-1;k--,B++)L+=256*D[k]>>>0,D[k]=L%a>>>0,L=L/a>>>0;if(L!==0)throw new Error("Non-zero carry");N=B,w++}for(var V=_-N;V!==_&&D[V]===0;)V++;for(var xe=p.repeat(E);V<_;++V)xe+=r.charAt(D[V]);return xe}function x(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]===p;)N++,E++;for(var S=(d.length-E)*f+1>>>0,_=new Uint8Array(S);d[E];){var D=t[d.charCodeAt(E)];if(D===255)return;for(var L=0,B=S-1;(D!==0||L<w)&&B!==-1;B--,L++)D+=a*_[B]>>>0,_[B]=D%256>>>0,D=D/256>>>0;if(D!==0)throw new Error("Non-zero carry");w=L,E++}if(d[E]!==" "){for(var k=S-w;k!==S&&_[k]===0;)k++;for(var V=new Uint8Array(N+(S-k)),xe=N;k!==S;)V[xe++]=_[k++];return V}}}function u(d){var E=x(d);if(E)return E;throw new Error(`Non-${e} character`)}return{encode:v,decodeUnsafe:x,decode:u}}var Br=zr,qr=Br,Lt=qr;var _e=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},Le=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.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 Ot(this,e)}},Oe=class{decoders;constructor(e){this.decoders=e}or(e){return Ot(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function Ot(r,e){return new Oe({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Ve=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new _e(e,t,n),this.decoder=new Le(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function oe({name:r,prefix:e,encode:t,decode:n}){return new Ve(r,e,t,n)}function q({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=Lt(t,r);return oe({prefix:e,name:r,encode:n,decode:s=>M(o(s))})}function jr(r,e,t,n){let o={};for(let m=0;m<e.length;++m)o[e[m]]=m;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,p=0,f=0;for(let m=0;m<s;++m){let v=o[r[m]];if(v===void 0)throw new SyntaxError(`Non-${n} character`);p=p<<t|v,a+=t,a>=8&&(a-=8,i[f++]=255&p>>a)}if(a>=t||255&p<<8-a)throw new SyntaxError("Unexpected end of data");return i}function Gr(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let p=0;p<r.length;++p)for(a=a<<8|r[p],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function b({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return oe({prefix:e,name:r,encode(o){return Gr(o,n,t)},decode(o){return jr(o,n,t,r)}})}var T=q({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Wr=q({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var $e={};R($e,{base32:()=>F,base32hex:()=>Qr,base32hexpad:()=>Yr,base32hexpadupper:()=>Zr,base32hexupper:()=>Kr,base32pad:()=>Xr,base32padupper:()=>Jr,base32upper:()=>Hr,base32z:()=>en});var F=b({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Hr=b({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Xr=b({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Jr=b({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Qr=b({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Kr=b({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Yr=b({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Zr=b({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),en=b({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var tn=$t,Vt=128,rn=127,nn=~rn,on=Math.pow(2,31);function $t(r,e,t){e=e||[],t=t||0;for(var n=t;r>=on;)e[t++]=r&255|Vt,r/=128;for(;r&nn;)e[t++]=r&255|Vt,r>>>=7;return e[t]=r|0,$t.bytes=t-n+1,e}var sn=ze,cn=128,Ft=127;function ze(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw ze.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&Ft)<<o:(i&Ft)*Math.pow(2,o),o+=7}while(i>=cn);return ze.bytes=s-n,t}var an=Math.pow(2,7),ln=Math.pow(2,14),dn=Math.pow(2,21),un=Math.pow(2,28),pn=Math.pow(2,35),fn=Math.pow(2,42),hn=Math.pow(2,49),mn=Math.pow(2,56),gn=Math.pow(2,63),wn=function(r){return r<an?1:r<ln?2:r<dn?3:r<un?4:r<pn?5:r<fn?6:r<hn?7:r<mn?8:r<gn?9:10},xn={encode:tn,decode:sn,encodingLength:wn},bn=xn,he=bn;function me(r,e=0){return[he.decode(r,e),he.decode.bytes]}function se(r,e,t=0){return he.encode(r,e,t),e}function ie(r){return he.encodingLength(r)}function H(r,e){let t=e.byteLength,n=ie(r),o=n+ie(t),s=new Uint8Array(o+t);return se(r,s,0),se(t,s,n),s.set(e,o),new ce(r,t,e,s)}function Ee(r){let e=M(r),[t,n]=me(e),[o,s]=me(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new ce(t,o,i,e)}function zt(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&Mt(r.bytes,t.bytes)}}var ce=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function Bt(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return vn(t,Be(r),e??T.encoder);default:return En(t,Be(r),e??F.encoder)}}var qt=new WeakMap;function Be(r){let e=qt.get(r);if(e==null){let t=new Map;return qt.set(r,t),t}return e}var j=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,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:t}=this;if(e!==ge)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==An)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}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:t}=this.multihash,n=H(e,t);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(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&zt(e.multihash,n.multihash)}toString(e){return Bt(this,e)}toJSON(){return{"/":Bt(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new r(n,o,s,i??jt(n,o,s.bytes))}else if(t[In]===!0){let{version:n,multihash:o,code:s}=t,i=Ee(o);return r.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="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(t!==ge)throw new Error(`Version 0 CID must use dag-pb (code: ${ge}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=jt(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ge,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=M(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new ce(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[v,x]=me(e.subarray(t));return t+=x,v},o=n(),s=ge;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),p=n(),f=t+p,m=f-i;return{version:o,codec:s,multihashCode:a,digestSize:p,multihashSize:m,size:f}}static parse(e,t){let[n,o]=yn(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Be(s).set(n,e),s}};function yn(r,e){switch(r[0]){case"Q":{let t=e??T;return[T.prefix,t.decode(`${T.prefix}${r}`)]}case T.prefix:{let t=e??T;return[T.prefix,t.decode(r)]}case F.prefix:{let t=e??F;return[F.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function vn(r,e,t){let{prefix:n}=t;if(n!==T.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function En(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var ge=112,An=18;function jt(r,e,t){let n=ie(r),o=n+ie(e),s=new Uint8Array(o+t.byteLength);return se(r,s,0),se(e,s,n),s.set(t,o),s}var In=Symbol.for("@ipld/js-cid/CID");function Gt(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var qe={};R(qe,{base10:()=>Cn});var Cn=q({prefix:"9",name:"base10",alphabet:"0123456789"});var je={};R(je,{base16:()=>Sn,base16upper:()=>Tn});var Sn=b({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Tn=b({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Ge={};R(Ge,{base2:()=>Pn});var Pn=b({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var We={};R(We,{base256emoji:()=>Un});var Wt=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}"),Rn=Wt.reduce((r,e,t)=>(r[t]=e,r),[]),Nn=Wt.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function Dn(r){return r.reduce((e,t)=>(e+=Rn[t],e),"")}function Mn(r){let e=[];for(let t of r){let n=Nn[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Un=oe({prefix:"\u{1F680}",name:"base256emoji",encode:Dn,decode:Mn});var He={};R(He,{base36:()=>kn,base36upper:()=>_n});var kn=q({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),_n=q({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Xe={};R(Xe,{base64:()=>Ln,base64pad:()=>On,base64url:()=>Vn,base64urlpad:()=>Fn});var Ln=b({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),On=b({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Vn=b({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Fn=b({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Je={};R(Je,{base8:()=>$n});var $n=b({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Qe={};R(Qe,{identity:()=>zn});var zn=oe({prefix:"\0",name:"identity",encode:r=>kt(r),decode:r=>Ut(r)});var ws=new TextEncoder,xs=new TextDecoder;var Ke={};R(Ke,{identity:()=>Wn});var Ht=0,jn="identity",Xt=M;function Gn(r){return H(Ht,Xt(r))}var Wn={code:Ht,name:jn,encode:Xt,digest:Gn};var tt={};R(tt,{sha256:()=>Hn,sha512:()=>Xn});var et=te(Z("crypto"),1);function Ze({name:r,code:e,encode:t}){return new Ye(r,e,t)}var Ye=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?H(this.code,t):t.then(n=>H(this.code,n))}else throw Error("Unknown type, must be binary type")}};var Hn=Ze({name:"sha2-256",code:18,encode:r=>M(et.default.createHash("sha256").update(r).digest())}),Xn=Ze({name:"sha2-512",code:19,encode:r=>M(et.default.createHash("sha512").update(r).digest())});var we={...Qe,...Ge,...Je,...qe,...je,...$e,...He,...Fe,...Xe,...We},Ms={...tt,...Ke};function X(r){return globalThis.Buffer!=null?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r}function le(r=0){return globalThis.Buffer?.allocUnsafe!=null?X(globalThis.Buffer.allocUnsafe(r)):new Uint8Array(r)}function Kt(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Qt=Kt("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),rt=Kt("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=le(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),Jn={utf8:Qt,"utf-8":Qt,hex:we.base16,latin1:rt,ascii:rt,binary:rt,...we},Ae=Jn;function P(r,e="utf8"){let t=Ae[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):t.encoder.encode(r).substring(1)}var Qn=Math.pow(2,7),Kn=Math.pow(2,14),Yn=Math.pow(2,21),nt=Math.pow(2,28),ot=Math.pow(2,35),st=Math.pow(2,42),it=Math.pow(2,49),h=128,C=127;function O(r){if(r<Qn)return 1;if(r<Kn)return 2;if(r<Yn)return 3;if(r<nt)return 4;if(r<ot)return 5;if(r<st)return 6;if(r<it)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Zn(r,e,t=0){switch(O(r)){case 8:e[t++]=r&255|h,r/=128;case 7:e[t++]=r&255|h,r/=128;case 6:e[t++]=r&255|h,r/=128;case 5:e[t++]=r&255|h,r/=128;case 4:e[t++]=r&255|h,r>>>=7;case 3:e[t++]=r&255|h,r>>>=7;case 2:e[t++]=r&255|h,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function eo(r,e,t=0){switch(O(r)){case 8:e.set(t++,r&255|h),r/=128;case 7:e.set(t++,r&255|h),r/=128;case 6:e.set(t++,r&255|h),r/=128;case 5:e.set(t++,r&255|h),r/=128;case 4:e.set(t++,r&255|h),r>>>=7;case 3:e.set(t++,r&255|h),r>>>=7;case 2:e.set(t++,r&255|h),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function to(r,e){let t=r[e],n=0;if(n+=t&C,t<h||(t=r[e+1],n+=(t&C)<<7,t<h)||(t=r[e+2],n+=(t&C)<<14,t<h)||(t=r[e+3],n+=(t&C)<<21,t<h)||(t=r[e+4],n+=(t&C)*nt,t<h)||(t=r[e+5],n+=(t&C)*ot,t<h)||(t=r[e+6],n+=(t&C)*st,t<h)||(t=r[e+7],n+=(t&C)*it,t<h))return n;throw new RangeError("Could not decode varint")}function ro(r,e){let t=r.get(e),n=0;if(n+=t&C,t<h||(t=r.get(e+1),n+=(t&C)<<7,t<h)||(t=r.get(e+2),n+=(t&C)<<14,t<h)||(t=r.get(e+3),n+=(t&C)<<21,t<h)||(t=r.get(e+4),n+=(t&C)*nt,t<h)||(t=r.get(e+5),n+=(t&C)*ot,t<h)||(t=r.get(e+6),n+=(t&C)*st,t<h)||(t=r.get(e+7),n+=(t&C)*it,t<h))return n;throw new RangeError("Could not decode varint")}function de(r,e,t=0){return e==null&&(e=le(O(r))),e instanceof Uint8Array?Zn(r,e,t):eo(r,e,t)}function J(r,e=0){return r instanceof Uint8Array?to(r,e):ro(r,e)}function $(r,e){if(globalThis.Buffer!=null)return X(globalThis.Buffer.concat(r,e));e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=le(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return X(t)}var Ie=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}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 t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let p=a==="0",f=2**(8*o)-1;for(;;){let m=this.readAtomically(()=>{let v=this.readChar();if(v===void 0)return;let x=Number.parseInt(v,e);if(!Number.isNaN(x))return x});if(m===void 0)break;if(s*=e,s+=m,s>f||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&p&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[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];t[o]=s>>8,t[o+1]=s&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;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 t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var Xs=new Ie;var ri=parseInt("0xFFFF",16),ni=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function ct(r,e="utf8"){let t=Ae[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?X(globalThis.Buffer.from(r,"utf-8")):t.decoder.decode(`${t.prefix}${r}`)}var U=Z("node:net");function Ce(r){return!!(0,U.isIP)(r)}var tr=U.isIPv4,ao=U.isIPv6,at=function(r){let e=0;if(r=r.toString().trim(),tr(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(ao(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=tr(t[n]),i;s&&(i=at(t[n]),t[n]=P(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,P(i.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},rr=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var ue={},lt={},uo=[[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"]];uo.forEach(r=>{let e=po(...r);lt[e.code]=e,ue[e.name]=e});function po(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function g(r){if(typeof r=="number"){if(lt[r]!=null)return lt[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(ue[r]!=null)return ue[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var ji=g("ip4"),Gi=g("ip6"),Wi=g("ipcidr");function ut(r,e){switch(g(r).code){case 4:case 41:return ho(e);case 42:return sr(e);case 6:case 273:case 33:case 132:return cr(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return sr(e);case 421:return xo(e);case 444:return ir(e);case 445:return ir(e);case 466:return wo(e);default:return P(e,"base16")}}function pt(r,e){switch(g(r).code){case 4:return nr(e);case 41:return nr(e);case 42:return or(e);case 6:case 273:case 33:case 132:return ft(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return or(e);case 421:return mo(e);case 444:return bo(e);case 445:return yo(e);case 466:return go(e);default:return ct(e,"base16")}}var dt=Object.values(we).map(r=>r.decoder),fo=function(){let r=dt[0].or(dt[1]);return dt.slice(2).forEach(e=>r=r.or(e)),r}();function nr(r){if(!Ce(r))throw new Error("invalid ip address");return at(r)}function ho(r){let e=rr(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Ce(e))throw new Error("invalid ip address");return e}function ft(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function cr(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function or(r){let e=ct(r),t=Uint8Array.from(de(e.length));return $([t,e],t.length+e.length)}function sr(r){let e=J(r);if(r=r.slice(O(e)),r.length!==e)throw new Error("inconsistent lengths");return P(r)}function mo(r){let e;r[0]==="Q"||r[0]==="1"?e=Ee(T.decode(`z${r}`)).bytes:e=j.parse(r).multihash.bytes;let t=Uint8Array.from(de(e.length));return $([t,e],t.length+e.length)}function go(r){let e=fo.decode(r),t=Uint8Array.from(de(e.length));return $([t,e],t.length+e.length)}function wo(r){let e=J(r),t=r.slice(O(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+P(t,"base64url")}function xo(r){let e=J(r),t=r.slice(O(e));if(t.length!==e)throw new Error("inconsistent lengths");return P(t,"base58btc")}function bo(r){let e=r.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 t=F.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=ft(n);return $([t,o],t.length+o.length)}function yo(r){let e=r.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 t=F.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=ft(n);return $([t,o],t.length+o.length)}function ir(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=P(e,"base32"),o=cr(t);return`${n}:${o}`}function ar(r){r=ht(r);let e=[],t=[],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){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw dr("invalid address: "+r);if(a.path===!0){n=ht(o.slice(s).join("/")),e.push([a.code,pt(a.code,n)]),t.push([a.code,n]);break}let p=pt(a.code,o[s]);e.push([a.code,p]),t.push([a.code,ut(a.code,p)])}return{string:lr(t),bytes:gt(e),tuples:e,stringTuples:t,path:n}}function mt(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=J(r,o),i=O(s),a=g(s),p=vo(a,r.slice(o+i));if(p===0){e.push([s]),t.push([s]),o+=i;continue}let f=r.slice(o+i,o+i+p);if(o+=p+i,o>r.length)throw dr("Invalid address Uint8Array: "+P(r,"base16"));e.push([s,f]);let m=ut(s,f);if(t.push([s,m]),a.path===!0){n=m;break}}return{bytes:Uint8Array.from(r),string:lr(t),tuples:e,stringTuples:t,path:n}}function lr(r){let e=[];return r.map(t=>{let n=g(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),ht(e.join("/"))}function gt(r){return $(r.map(e=>{let t=g(e[0]),n=Uint8Array.from(de(t.code));return e.length>1&&e[1]!=null&&(n=$([n,e[1]])),n}))}function vo(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=J(e instanceof Uint8Array?e:Uint8Array.from(e));return t+O(t)}}function ht(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function dr(r){return new Error("Error parsing address: "+r)}var Eo=Symbol.for("nodejs.util.inspect.custom"),wt=Symbol.for("@multiformats/js-multiaddr/multiaddr"),Ao=[g("dns").code,g("dns4").code,g("dns6").code,g("dnsaddr").code],Se=class r{bytes;#e;#t;#r;#n;[wt]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=mt(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=ar(e)}else if(pr(e))t=mt(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#n=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=g("tcp"),a=g("udp"),p=g("ip4"),f=g("ip6"),m=g("dns6"),v=g("ip6zone");for(let[u,d]of this.stringTuples())u===v.code&&(s=`%${d??""}`),Ao.includes(u)&&(t=i.name,o=443,n=`${d??""}${s}`,e=u===m.code?6:4),(u===i.code||u===a.code)&&(t=g(u).name,o=parseInt(d??"")),(u===p.code||u===f.code)&&(t=g(u).name,n=`${d??""}${s}`,e=u===f.code?6:4);if(e==null||t==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:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},g(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>g(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(gt(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===ue.p2p.code&&e.push([n,o]),n===ue["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[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(e){return Gt(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=ur.get(t.name);if(n==null)throw new I(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>new r(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 t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[Eo](){return`Multiaddr(${this.#e})`}};var ur=new Map;function pr(r){return!!r?.[wt]}function z(r){return new Se(r)}var Io=c("dns4"),Co=c("dns6"),So=c("dnsaddr"),K=y(c("dns"),So,Io,Co),Re=y(c("ip4"),c("ip6")),W=y(l(Re,c("tcp")),l(K,c("tcp"))),Ne=l(Re,c("udp")),To=l(Ne,c("utp")),Po=l(Ne,c("quic")),Ro=l(Ne,c("quic-v1")),xt=y(l(W,c("ws")),l(K,c("ws"))),Te=y(l(xt,c("p2p")),xt),bt=y(l(W,c("wss")),l(K,c("wss")),l(W,c("tls"),c("ws")),l(K,c("tls"),c("ws"))),Pe=y(l(bt,c("p2p")),bt),yt=y(l(W,c("http")),l(Re,c("http")),l(K,c("http"))),vt=y(l(W,c("https")),l(Re,c("https")),l(K,c("https"))),fr=l(Ne,c("webrtc-direct"),c("certhash")),gr=y(l(fr,c("p2p")),fr),hr=l(Ro,c("webtransport"),c("certhash"),c("certhash")),wr=y(l(hr,c("p2p")),hr),xr=y(l(Te,c("p2p-webrtc-star"),c("p2p")),l(Pe,c("p2p-webrtc-star"),c("p2p")),l(Te,c("p2p-webrtc-star")),l(Pe,c("p2p-webrtc-star"))),xc=y(l(Te,c("p2p-websocket-star"),c("p2p")),l(Pe,c("p2p-websocket-star"),c("p2p")),l(Te,c("p2p-websocket-star")),l(Pe,c("p2p-websocket-star"))),br=y(l(yt,c("p2p-webrtc-direct"),c("p2p")),l(vt,c("p2p-webrtc-direct"),c("p2p")),l(yt,c("p2p-webrtc-direct")),l(vt,c("p2p-webrtc-direct"))),Y=y(xt,bt,yt,vt,xr,br,W,To,Po,K,gr,wr),bc=y(l(Y,c("p2p-stardust"),c("p2p")),l(Y,c("p2p-stardust"))),G=y(l(Y,c("p2p")),xr,br,gr,wr,c("p2p")),mr=y(l(G,c("p2p-circuit"),G),l(G,c("p2p-circuit")),l(c("p2p-circuit"),G),l(Y,c("p2p-circuit")),l(c("p2p-circuit"),Y),c("p2p-circuit")),yr=()=>y(l(mr,yr),mr),Q=yr(),yc=y(l(Q,G,Q),l(G,Q),l(Q,G),Q,G);var vc=y(l(Q,c("webrtc"),c("p2p")),l(Q,c("webrtc")),l(Y,c("webrtc"),c("p2p")),l(Y,c("webrtc")),c("webrtc"));function vr(r){function e(t){let n;try{n=z(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function l(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:vr(e),partialMatch:e}}function y(...r){function e(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:vr(e),partialMatch:e}}function c(r){let e=r;function t(o){let s;try{s=z(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:t,partialMatch:n}}var Ur=te(Z("net"),1);var Et={ERR_INVALID_IP_PARAMETER:"ERR_INVALID_IP_PARAMETER",ERR_INVALID_PORT_PARAMETER:"ERR_INVALID_PORT_PARAMETER",ERR_INVALID_IP:"ERR_INVALID_IP"};function Er(r,e){if(typeof r!="string")throw new I(`invalid ip provided: ${r}`,Et.ERR_INVALID_IP_PARAMETER);if(typeof e=="string"&&(e=parseInt(e)),isNaN(e))throw new I(`invalid port provided: ${e}`,Et.ERR_INVALID_PORT_PARAMETER);if((0,U.isIPv4)(r))return z(`/ip4/${r}/tcp/${e}`);if((0,U.isIPv6)(r))return z(`/ip6/${r}/tcp/${e}`);throw new I(`invalid ip:port for creating a multiaddr: ${r}:${e}`,Et.ERR_INVALID_IP)}var Mr=te(Nr(),1);var Ct=te(Z("os"),1),Dr=te(Z("path"),1);var _o={ip4:"IPv4",ip6:"IPv6"};function fe(r,e={}){let t=r.getPath();return t!=null?Ct.default.platform()==="win32"?{path:Dr.default.join("\\\\.\\pipe\\",t)}:{path:t}:{...e,...r.toOptions()}}function St(r,e,t){let n=o=>z(`/${r}/${o}/tcp/${t}`);return(Lo(e)?Vo(_o[r]):[e]).map(n)}function Lo(r){return["0.0.0.0","::"].includes(r)}var Oo=Ct.default.networkInterfaces();function Vo(r){let e=[];for(let[,t]of Object.entries(Oo))if(t!=null)for(let n of t)n.family===r&&e.push(n.address);return e}var Me=(r,e)=>{let t=e.logger.forComponent("libp2p:tcp:socket"),n=e.metrics,o=e.metricPrefix??"",s=e.socketInactivityTimeout??3e5,i=e.socketCloseTimeout??500;e.listeningAddr?.getPath()!=null&&(e.remoteAddr=e.listeningAddr),e.remoteAddr?.getPath()!=null&&(e.localAddr=e.remoteAddr);let a;if(e.remoteAddr!=null)a=e.remoteAddr;else{if(r.remoteAddress==null||r.remotePort==null)throw new I("Could not determine remote address or port","ERR_NO_REMOTE_ADDRESS");a=Er(r.remoteAddress,r.remotePort)}let p=fe(a),f=p.path??`${p.host??""}:${p.port??""}`,{sink:m,source:v}=Mr.default.duplex(r);r.setTimeout(s,()=>{t("%s socket read timeout",f),n?.increment({[`${o}timeout`]:!0});let u;r.readable&&(u=new I("Socket read timeout","ERR_SOCKET_READ_TIMEOUT")),r.destroy(u)}),r.once("close",()=>{t("%s socket close",f),n?.increment({[`${o}close`]:!0}),x.timeline.close==null&&(x.timeline.close=Date.now())}),r.once("end",()=>{t("%s socket end",f),n?.increment({[`${o}end`]:!0})});let x={async sink(u){try{await m(async function*(){for await(let d of u)d instanceof Uint8Array?yield d:yield d.subarray()}())}catch(d){d.type!=="aborted"&&t.error("%s error in sink",f,d)}r.end()},source:v,remoteAddr:a,timeline:{open:Date.now()},async close(u={}){if(r.destroyed){t("%s socket was already destroyed when trying to close",f);return}if(u.signal==null){let d=AbortSignal.timeout(i);u={...u,signal:d}}try{t("%s closing socket",f),await new Promise((d,E)=>{r.once("close",()=>{t("%s socket closed",f),d()}),r.once("error",N=>{t("%s socket error",f,N),x.timeline.close==null&&(x.timeline.close=Date.now()),E(N)}),r.setTimeout(i),r.end(),r.writableLength>0?r.once("drain",()=>{t("%s socket drained",f),r.destroy()}):r.destroy()})}catch(d){this.abort(d)}},abort:u=>{t("%s socket abort due to error",f,u),r.destroy(u)},log:t};return x};async function Tt(r,e){try{await r.close()}catch(t){e.log.error("an error occurred closing the connection",t)}}var A;(function(r){r[r.INACTIVE=0]="INACTIVE",r[r.ACTIVE=1]="ACTIVE",r[r.PAUSED=2]="PAUSED"})(A||(A={}));var Ue=class extends ye{context;server;connections=new Set;status={code:A.INACTIVE};metrics;addr;log;constructor(e){if(super(),this.context=e,e.keepAlive=e.keepAlive??!0,e.noDelay=e.noDelay??!0,this.log=e.logger.forComponent("libp2p:tcp:listener"),this.addr="unknown",this.server=Ur.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 I("closeAbove must be >= listenBelow","ERROR_CONNECTION_LIMITS");this.server.on("listening",()=>{if(e.metrics!=null){let t=this.server.address();t==null?this.addr="unknown":typeof t=="string"?this.addr=t:this.addr=`${t.address}:${t.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]:A.ACTIVE})}this.dispatchEvent(new ne("listening"))}).on("error",t=>{this.metrics?.errors.increment({[`${this.addr} listen_error`]:!0}),this.dispatchEvent(new ne("error",{detail:t}))}).on("close",()=>{this.metrics?.status.update({[this.addr]:this.status.code}),this.status.code!==A.PAUSED&&this.dispatchEvent(new ne("close"))})}onSocket(e){if(this.status.code!==A.ACTIVE)throw new I("Server is is not listening yet","ERR_SERVER_NOT_RUNNING");e.on("error",n=>{this.log("socket error",n),this.metrics?.events.increment({[`${this.addr} error`]:!0})});let t;try{t=Me(e,{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",t.remoteAddr);try{this.context.upgrader.upgradeInbound(t).then(n=>{this.log("inbound connection upgraded %s",t.remoteAddr),this.connections.add(t),e.once("close",()=>{this.connections.delete(t),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 ne("connection",{detail:n}))}).catch(async n=>{this.log.error("inbound connection failed",n),this.metrics?.errors.increment({[`${this.addr} inbound_upgrade`]:!0}),await Tt(t,{log:this.log})}).catch(n=>{this.log.error("closing inbound connection failed",n)})}catch(n){this.log.error("inbound connection failed",n),Tt(t,{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 e=[],t=this.server.address(),{listeningAddr:n,peerId:o}=this.status;if(t==null)return[];if(typeof t=="string")e=[n];else try{n.toString().startsWith("/ip4")?e=e.concat(St("ip4",t.address,t.port)):t.family==="IPv6"&&(e=e.concat(St("ip6",t.address,t.port)))}catch(s){this.log.error("could not turn %s:%s into multiaddr",t.address,t.port,s)}return e.map(s=>o!=null?s.encapsulate(`/p2p/${o}`):s)}async listen(e){if(this.status.code===A.ACTIVE||this.status.code===A.PAUSED)throw new I("server is already listening","ERR_SERVER_ALREADY_LISTENING");let t=e.getPeerId(),n=t==null?e.decapsulateCode(421):e,{backlog:o}=this.context;try{this.status={code:A.ACTIVE,listeningAddr:n,peerId:t,netConfig:fe(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 e=>Tt(e,{log:this.log}))),this.pause(!0).catch(e=>{this.log.error("error attempting to close server once connection count over limit",e)})])}async resume(){if(this.server.listening||this.status.code===A.INACTIVE)return;let e=this.status.netConfig;await new Promise((t,n)=>{this.server.once("error",n),this.server.listen(e,t)}),this.status={...this.status,code:A.ACTIVE},this.log("Listening on %s",this.server.address())}async pause(e){if(!this.server.listening&&this.status.code===A.PAUSED&&e){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=e?{code:A.INACTIVE}:{...this.status,code:A.PAUSED},await new Promise((t,n)=>{this.server.close(o=>{o!=null?n(o):t()})}))}};var Pt=class{opts;metrics;components;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:tcp"),this.opts=t,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"})})}[Dt]=!0;[Symbol.toStringTag]="@libp2p/tcp";async dial(e,t){t.keepAlive=t.keepAlive??!0,t.noDelay=t.noDelay??!0;let n=await this._connect(e,t);n.on("error",a=>{this.log("socket error",a)});let o=Me(n,{remoteAddr:e,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)})};t.signal?.addEventListener("abort",s,{once:!0}),this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o);if(this.log("outbound connection %s upgraded",o.remoteAddr),t.signal?.removeEventListener("abort",s),t.signal?.aborted===!0)throw i.close().catch(a=>{this.log.error("Error closing conn after abort",a)}),new re;return i}async _connect(e,t){if(t.signal?.aborted===!0)throw new re;return new Promise((n,o)=>{let s=Date.now(),i=fe(e,{...this.opts.dialOpts??{},...t});this.log("dialing %a",e);let a=kr.default.connect(i),p=u=>{let d=i.path??`${i.host??""}:${i.port}`;u.message=`connection error ${d}: ${u.message}`,this.metrics?.dialerEvents.increment({error:!0}),x(u)},f=()=>{this.log("connection timeout %a",e),this.metrics?.dialerEvents.increment({timeout:!0});let u=new I(`connection timeout after ${Date.now()-s}ms`,"ERR_CONNECT_TIMEOUT");a.emit("error",u)},m=()=>{this.log("connection opened %a",e),this.metrics?.dialerEvents.increment({connect:!0}),x()},v=()=>{this.log("connection aborted %a",e),this.metrics?.dialerEvents.increment({abort:!0}),a.destroy(),x(new re)},x=u=>{if(a.removeListener("error",p),a.removeListener("timeout",f),a.removeListener("connect",m),t.signal!=null&&t.signal.removeEventListener("abort",v),u!=null){o(u);return}n(a)};a.on("error",p),a.on("timeout",f),a.on("connect",m),t.signal!=null&&t.signal.addEventListener("abort",v)})}createListener(e){return new Ue({...this.opts.listenOpts??{},...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,logger:this.components.logger})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>t.protoCodes().includes(290)?!1:t.protoCodes().includes(400)?!0:W.matches(t.decapsulateCode(421)))}};function $o(r={}){return e=>new Pt(e,r)}return $r(zo);})();
|
|
2
|
+
"use strict";var Libp2PTcp=(()=>{var $r=Object.create;var we=Object.defineProperty;var zr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var qr=Object.getPrototypeOf,jr=Object.prototype.hasOwnProperty;var k=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Z=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),R=(r,e)=>{for(var t in e)we(r,t,{get:e[t],enumerable:!0})},Tt=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Br(e))!jr.call(r,o)&&o!==t&&we(r,o,{get:()=>e[o],enumerable:!(n=zr(e,o))||n.enumerable});return r};var ee=(r,e,t)=>(t=r!=null?$r(qr(r)):{},Tt(e||!r||!r.__esModule?we(t,"default",{value:r,enumerable:!0}):t,r)),Gr=r=>Tt(we({},"__esModule",{value:!0}),r);var Ne=Z((_c,Tr)=>{Tr.exports=r=>{if(r[Symbol.asyncIterator])return r;if(r.getReader)return async function*(){let e=r.getReader();try{for(;;){let{done:t,value:n}=await e.read();if(t)return;yield n}}finally{e.releaseLock()}}();throw new Error("unknown stream")}});var Rr=Z((Uc,Pr)=>{Pr.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 vt=Z((kc,Nr)=>{var Oo=Rr();Nr.exports=r=>async e=>{e=Oo(e);let t=m=>{typeof m.return=="function"&&m.return()},n=null,o=null,s=m=>{n=m,o&&o(m),t(e)},i=null,a=!1,p=()=>{a=!0,i&&i()},f=null,g=!1,v=()=>{g=!0,f&&f()},x=null,u=()=>{x&&x()},l=()=>new Promise((m,C)=>{i=x=m,o=C,r.once("drain",u)}),b=()=>(t(e),new Promise((m,C)=>{if(a||g||n)return m();f=i=m,o=C})),_=()=>{r.removeListener("error",s),r.removeListener("close",p),r.removeListener("finish",v),r.removeListener("drain",u)};r.once("error",s),r.once("close",p),r.once("finish",v);try{for await(let m of e){if(!r.writable||r.destroyed||n)break;r.write(m)===!1&&await l()}}catch(m){n||r.destroy(),n=m}try{if(r.writable&&r.end(),await b(),n)throw n}finally{_()}}});var At=Z((Lc,Dr)=>{var Vo=vt(),Fo=Ne();Dr.exports=r=>({sink:Vo(r),source:Fo(r)})});var _r=Z((Oc,Mr)=>{var $o=At();Mr.exports=r=>async function*(e){let t=$o(r),n;if(t.sink(e).catch(o=>{n=o}),yield*t.source,n)throw n}});var Ur=Z((Vc,le)=>{le.exports=Ne();le.exports.source=Ne();le.exports.sink=vt();le.exports.transform=_r();le.exports.duplex=At()});var Ho={};R(Ho,{tcp:()=>Wo});var Fr=ee(k("net"),1);var Rt=Symbol.for("@libp2p/transport");var Pt;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Pt||(Pt={}));var te=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.name="AbortError",this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},A=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}};var Nt=k("events"),Dt=(r,...e)=>{try{(0,Nt.setMaxListeners)(r,...e)}catch{}};var xe=class extends EventTarget{#e=new Map;constructor(){super(),Dt(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new Wr(e,t))}},_e=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},Wr=globalThis.CustomEvent??_e;var Ve={};R(Ve,{base58btc:()=>T,base58flickr:()=>Yr});var es=new Uint8Array(0);function Mt(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function 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")}function _t(r){return new TextEncoder().encode(r)}function Ut(r){return new TextDecoder().decode(r)}function Hr(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,p=r.charAt(0),f=Math.log(a)/Math.log(256),g=Math.log(256)/Math.log(a);function v(l){if(l instanceof Uint8Array||(ArrayBuffer.isView(l)?l=new Uint8Array(l.buffer,l.byteOffset,l.byteLength):Array.isArray(l)&&(l=Uint8Array.from(l))),!(l instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(l.length===0)return"";for(var b=0,_=0,m=0,C=l.length;m!==C&&l[m]===0;)m++,b++;for(var O=(C-m)*g+1>>>0,N=new Uint8Array(O);m!==C;){for(var V=l[m],q=0,U=O-1;(V!==0||q<_)&&U!==-1;U--,q++)V+=256*N[U]>>>0,N[U]=V%a>>>0,V=V/a>>>0;if(V!==0)throw new Error("Non-zero carry");_=q,m++}for(var $=O-_;$!==O&&N[$]===0;)$++;for(var ge=p.repeat(b);$<O;++$)ge+=r.charAt(N[$]);return ge}function x(l){if(typeof l!="string")throw new TypeError("Expected String");if(l.length===0)return new Uint8Array;var b=0;if(l[b]!==" "){for(var _=0,m=0;l[b]===p;)_++,b++;for(var C=(l.length-b)*f+1>>>0,O=new Uint8Array(C);l[b];){var N=t[l.charCodeAt(b)];if(N===255)return;for(var V=0,q=C-1;(N!==0||V<m)&&q!==-1;q--,V++)N+=a*O[q]>>>0,O[q]=N%256>>>0,N=N/256>>>0;if(N!==0)throw new Error("Non-zero carry");m=V,b++}if(l[b]!==" "){for(var U=C-m;U!==C&&O[U]===0;)U++;for(var $=new Uint8Array(_+(C-U)),ge=_;U!==C;)$[ge++]=O[U++];return $}}}function u(l){var b=x(l);if(b)return b;throw new Error(`Non-${e} character`)}return{encode:v,decodeUnsafe:x,decode:u}}var Xr=Hr,Jr=Xr,Lt=Jr;var Ue=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},ke=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.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 Ot(this,e)}},Le=class{decoders;constructor(e){this.decoders=e}or(e){return Ot(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function Ot(r,e){return new Le({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Oe=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Ue(e,t,n),this.decoder=new ke(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function re({name:r,prefix:e,encode:t,decode:n}){return new Oe(r,e,t,n)}function j({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=Lt(t,r);return re({prefix:e,name:r,encode:n,decode:s=>D(o(s))})}function Qr(r,e,t,n){let o={};for(let g=0;g<e.length;++g)o[e[g]]=g;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,p=0,f=0;for(let g=0;g<s;++g){let v=o[r[g]];if(v===void 0)throw new SyntaxError(`Non-${n} character`);p=p<<t|v,a+=t,a>=8&&(a-=8,i[f++]=255&p>>a)}if(a>=t||255&p<<8-a)throw new SyntaxError("Unexpected end of data");return i}function Kr(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let p=0;p<r.length;++p)for(a=a<<8|r[p],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function y({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return re({prefix:e,name:r,encode(o){return Kr(o,n,t)},decode(o){return Qr(o,n,t,r)}})}var T=j({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Yr=j({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Fe={};R(Fe,{base32:()=>z,base32hex:()=>rn,base32hexpad:()=>on,base32hexpadupper:()=>sn,base32hexupper:()=>nn,base32pad:()=>en,base32padupper:()=>tn,base32upper:()=>Zr,base32z:()=>cn});var z=y({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Zr=y({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),en=y({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),tn=y({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),rn=y({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),nn=y({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),on=y({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),sn=y({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),cn=y({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var an=$t,Vt=128,dn=127,ln=~dn,un=Math.pow(2,31);function $t(r,e,t){e=e||[],t=t||0;for(var n=t;r>=un;)e[t++]=r&255|Vt,r/=128;for(;r&ln;)e[t++]=r&255|Vt,r>>>=7;return e[t]=r|0,$t.bytes=t-n+1,e}var pn=$e,fn=128,Ft=127;function $e(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw $e.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&Ft)<<o:(i&Ft)*Math.pow(2,o),o+=7}while(i>=fn);return $e.bytes=s-n,t}var hn=Math.pow(2,7),mn=Math.pow(2,14),gn=Math.pow(2,21),wn=Math.pow(2,28),xn=Math.pow(2,35),bn=Math.pow(2,42),yn=Math.pow(2,49),En=Math.pow(2,56),vn=Math.pow(2,63),An=function(r){return r<hn?1:r<mn?2:r<gn?3:r<wn?4:r<xn?5:r<bn?6:r<yn?7:r<En?8:r<vn?9:10},In={encode:an,decode:pn,encodingLength:An},Sn=In,pe=Sn;function fe(r,e=0){return[pe.decode(r,e),pe.decode.bytes]}function ne(r,e,t=0){return pe.encode(r,e,t),e}function oe(r){return pe.encodingLength(r)}function X(r,e){let t=e.byteLength,n=oe(r),o=n+oe(t),s=new Uint8Array(o+t);return ne(r,s,0),ne(t,s,n),s.set(e,o),new se(r,t,e,s)}function ye(r){let e=D(r),[t,n]=fe(e),[o,s]=fe(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new se(t,o,i,e)}function zt(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&Mt(r.bytes,t.bytes)}}var se=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function Bt(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Tn(t,ze(r),e??T.encoder);default:return Pn(t,ze(r),e??z.encoder)}}var qt=new WeakMap;function ze(r){let e=qt.get(r);if(e==null){let t=new Map;return qt.set(r,t),t}return e}var G=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,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:t}=this;if(e!==he)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Rn)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}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:t}=this.multihash,n=X(e,t);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(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&zt(e.multihash,n.multihash)}toString(e){return Bt(this,e)}toJSON(){return{"/":Bt(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:s,bytes:i}=t;return new r(n,o,s,i??jt(n,o,s.bytes))}else if(t[Nn]===!0){let{version:n,multihash:o,code:s}=t,i=ye(o);return r.create(n,s,i)}else return null}static create(e,t,n){if(typeof t!="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(t!==he)throw new Error(`Version 0 CID must use dag-pb (code: ${he}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=jt(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,he,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=D(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new se(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[v,x]=fe(e.subarray(t));return t+=x,v},o=n(),s=he;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),p=n(),f=t+p,g=f-i;return{version:o,codec:s,multihashCode:a,digestSize:p,multihashSize:g,size:f}}static parse(e,t){let[n,o]=Cn(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return ze(s).set(n,e),s}};function Cn(r,e){switch(r[0]){case"Q":{let t=e??T;return[T.prefix,t.decode(`${T.prefix}${r}`)]}case T.prefix:{let t=e??T;return[T.prefix,t.decode(r)]}case z.prefix:{let t=e??z;return[z.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Tn(r,e,t){let{prefix:n}=t;if(n!==T.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function Pn(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var he=112,Rn=18;function jt(r,e,t){let n=oe(r),o=n+oe(e),s=new Uint8Array(o+t.byteLength);return ne(r,s,0),ne(e,s,n),s.set(t,o),s}var Nn=Symbol.for("@ipld/js-cid/CID");function Gt(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var Zt=k("node:buffer");var Be={};R(Be,{base10:()=>Dn});var Dn=j({prefix:"9",name:"base10",alphabet:"0123456789"});var qe={};R(qe,{base16:()=>Mn,base16upper:()=>_n});var Mn=y({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),_n=y({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var je={};R(je,{base2:()=>Un});var Un=y({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Ge={};R(Ge,{base256emoji:()=>Fn});var Wt=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}"),kn=Wt.reduce((r,e,t)=>(r[t]=e,r),[]),Ln=Wt.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function On(r){return r.reduce((e,t)=>(e+=kn[t],e),"")}function Vn(r){let e=[];for(let t of r){let n=Ln[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Fn=re({prefix:"\u{1F680}",name:"base256emoji",encode:On,decode:Vn});var We={};R(We,{base36:()=>$n,base36upper:()=>zn});var $n=j({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),zn=j({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var He={};R(He,{base64:()=>Bn,base64pad:()=>qn,base64url:()=>jn,base64urlpad:()=>Gn});var Bn=y({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),qn=y({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),jn=y({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Gn=y({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Xe={};R(Xe,{base8:()=>Wn});var Wn=y({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Je={};R(Je,{identity:()=>Hn});var Hn=re({prefix:"\0",name:"identity",encode:r=>Ut(r),decode:r=>_t(r)});var Ss=new TextEncoder,Cs=new TextDecoder;var Qe={};R(Qe,{identity:()=>Yn});var Ht=0,Qn="identity",Xt=D;function Kn(r){return X(Ht,Xt(r))}var Yn={code:Ht,name:Qn,encode:Xt,digest:Kn};var et={};R(et,{sha256:()=>Zn,sha512:()=>eo});var Ze=ee(k("crypto"),1);function Ye({name:r,code:e,encode:t}){return new Ke(r,e,t)}var Ke=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?X(this.code,t):t.then(n=>X(this.code,n))}else throw Error("Unknown type, must be binary type")}};var Zn=Ye({name:"sha2-256",code:18,encode:r=>D(Ze.default.createHash("sha256").update(r).digest())}),eo=Ye({name:"sha2-512",code:19,encode:r=>D(Ze.default.createHash("sha512").update(r).digest())});var me={...Je,...je,...Xe,...Be,...qe,...Fe,...We,...Ve,...He,...Ge},$s={...et,...Qe};var Qt=k("node:buffer");function ce(r){return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function Ee(r=0){return ce(Qt.Buffer.allocUnsafe(r))}function Yt(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Kt=Yt("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),tt=Yt("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ee(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),to={utf8:Kt,"utf-8":Kt,hex:me.base16,latin1:tt,ascii:tt,binary:tt,...me},ve=to;function P(r,e="utf8"){let t=ve[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return e==="utf8"||e==="utf-8"?Zt.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):t.encoder.encode(r).substring(1)}var ro=Math.pow(2,7),no=Math.pow(2,14),oo=Math.pow(2,21),rt=Math.pow(2,28),nt=Math.pow(2,35),ot=Math.pow(2,42),st=Math.pow(2,49),h=128,S=127;function F(r){if(r<ro)return 1;if(r<no)return 2;if(r<oo)return 3;if(r<rt)return 4;if(r<nt)return 5;if(r<ot)return 6;if(r<st)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function so(r,e,t=0){switch(F(r)){case 8:e[t++]=r&255|h,r/=128;case 7:e[t++]=r&255|h,r/=128;case 6:e[t++]=r&255|h,r/=128;case 5:e[t++]=r&255|h,r/=128;case 4:e[t++]=r&255|h,r>>>=7;case 3:e[t++]=r&255|h,r>>>=7;case 2:e[t++]=r&255|h,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function io(r,e,t=0){switch(F(r)){case 8:e.set(t++,r&255|h),r/=128;case 7:e.set(t++,r&255|h),r/=128;case 6:e.set(t++,r&255|h),r/=128;case 5:e.set(t++,r&255|h),r/=128;case 4:e.set(t++,r&255|h),r>>>=7;case 3:e.set(t++,r&255|h),r>>>=7;case 2:e.set(t++,r&255|h),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function co(r,e){let t=r[e],n=0;if(n+=t&S,t<h||(t=r[e+1],n+=(t&S)<<7,t<h)||(t=r[e+2],n+=(t&S)<<14,t<h)||(t=r[e+3],n+=(t&S)<<21,t<h)||(t=r[e+4],n+=(t&S)*rt,t<h)||(t=r[e+5],n+=(t&S)*nt,t<h)||(t=r[e+6],n+=(t&S)*ot,t<h)||(t=r[e+7],n+=(t&S)*st,t<h))return n;throw new RangeError("Could not decode varint")}function ao(r,e){let t=r.get(e),n=0;if(n+=t&S,t<h||(t=r.get(e+1),n+=(t&S)<<7,t<h)||(t=r.get(e+2),n+=(t&S)<<14,t<h)||(t=r.get(e+3),n+=(t&S)<<21,t<h)||(t=r.get(e+4),n+=(t&S)*rt,t<h)||(t=r.get(e+5),n+=(t&S)*nt,t<h)||(t=r.get(e+6),n+=(t&S)*ot,t<h)||(t=r.get(e+7),n+=(t&S)*st,t<h))return n;throw new RangeError("Could not decode varint")}function ae(r,e,t=0){return e==null&&(e=Ee(F(r))),e instanceof Uint8Array?so(r,e,t):io(r,e,t)}function J(r,e=0){return r instanceof Uint8Array?co(r,e):ao(r,e)}var tr=k("node:buffer");function B(r,e){return ce(tr.Buffer.concat(r,e))}var Ae=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}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 t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let p=a==="0",f=2**(8*o)-1;for(;;){let g=this.readAtomically(()=>{let v=this.readChar();if(v===void 0)return;let x=Number.parseInt(v,e);if(!Number.isNaN(x))return x});if(g===void 0)break;if(s*=e,s+=g,s>f||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&p&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[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];t[o]=s>>8,t[o+1]=s&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;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 t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var ti=new Ae;var di=parseInt("0xFFFF",16),li=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var or=k("node:buffer");function it(r,e="utf8"){let t=ve[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return e==="utf8"||e==="utf-8"?ce(or.Buffer.from(r,"utf-8")):t.decoder.decode(`${t.prefix}${r}`)}var M=k("node:net");function Ie(r){return!!(0,M.isIP)(r)}var sr=M.isIPv4,mo=M.isIPv6,ct=function(r){let e=0;if(r=r.toString().trim(),sr(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(mo(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=sr(t[n]),i;s&&(i=ct(t[n]),t[n]=P(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,P(i.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},ir=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var de={},at={},wo=[[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"]];wo.forEach(r=>{let e=xo(...r);at[e.code]=e,de[e.name]=e});function xo(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function w(r){if(typeof r=="number"){if(at[r]!=null)return at[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(de[r]!=null)return de[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var Ki=w("ip4"),Yi=w("ip6"),Zi=w("ipcidr");function lt(r,e){switch(w(r).code){case 4:case 41:return yo(e);case 42:return dr(e);case 6:case 273:case 33:case 132:return ur(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return dr(e);case 421:return Io(e);case 444:return lr(e);case 445:return lr(e);case 466:return Ao(e);default:return P(e,"base16")}}function ut(r,e){switch(w(r).code){case 4:return cr(e);case 41:return cr(e);case 42:return ar(e);case 6:case 273:case 33:case 132:return pt(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return ar(e);case 421:return Eo(e);case 444:return So(e);case 445:return Co(e);case 466:return vo(e);default:return it(e,"base16")}}var dt=Object.values(me).map(r=>r.decoder),bo=function(){let r=dt[0].or(dt[1]);return dt.slice(2).forEach(e=>r=r.or(e)),r}();function cr(r){if(!Ie(r))throw new Error("invalid ip address");return ct(r)}function yo(r){let e=ir(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Ie(e))throw new Error("invalid ip address");return e}function pt(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function ur(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function ar(r){let e=it(r),t=Uint8Array.from(ae(e.length));return B([t,e],t.length+e.length)}function dr(r){let e=J(r);if(r=r.slice(F(e)),r.length!==e)throw new Error("inconsistent lengths");return P(r)}function Eo(r){let e;r[0]==="Q"||r[0]==="1"?e=ye(T.decode(`z${r}`)).bytes:e=G.parse(r).multihash.bytes;let t=Uint8Array.from(ae(e.length));return B([t,e],t.length+e.length)}function vo(r){let e=bo.decode(r),t=Uint8Array.from(ae(e.length));return B([t,e],t.length+e.length)}function Ao(r){let e=J(r),t=r.slice(F(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+P(t,"base64url")}function Io(r){let e=J(r),t=r.slice(F(e));if(t.length!==e)throw new Error("inconsistent lengths");return P(t,"base58btc")}function So(r){let e=r.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 t=z.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=pt(n);return B([t,o],t.length+o.length)}function Co(r){let e=r.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 t=z.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=pt(n);return B([t,o],t.length+o.length)}function lr(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=P(e,"base32"),o=ur(t);return`${n}:${o}`}function pr(r){r=ft(r);let e=[],t=[],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=w(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw hr("invalid address: "+r);if(a.path===!0){n=ft(o.slice(s).join("/")),e.push([a.code,ut(a.code,n)]),t.push([a.code,n]);break}let p=ut(a.code,o[s]);e.push([a.code,p]),t.push([a.code,lt(a.code,p)])}return{string:fr(t),bytes:mt(e),tuples:e,stringTuples:t,path:n}}function ht(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=J(r,o),i=F(s),a=w(s),p=To(a,r.slice(o+i));if(p===0){e.push([s]),t.push([s]),o+=i;continue}let f=r.slice(o+i,o+i+p);if(o+=p+i,o>r.length)throw hr("Invalid address Uint8Array: "+P(r,"base16"));e.push([s,f]);let g=lt(s,f);if(t.push([s,g]),a.path===!0){n=g;break}}return{bytes:Uint8Array.from(r),string:fr(t),tuples:e,stringTuples:t,path:n}}function fr(r){let e=[];return r.map(t=>{let n=w(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),ft(e.join("/"))}function mt(r){return B(r.map(e=>{let t=w(e[0]),n=Uint8Array.from(ae(t.code));return e.length>1&&e[1]!=null&&(n=B([n,e[1]])),n}))}function To(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=J(e instanceof Uint8Array?e:Uint8Array.from(e));return t+F(t)}}function ft(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function hr(r){return new Error("Error parsing address: "+r)}var Po=Symbol.for("nodejs.util.inspect.custom"),gt=Symbol.for("@multiformats/js-multiaddr/multiaddr"),Ro=[w("dns").code,w("dns4").code,w("dns6").code,w("dnsaddr").code],Se=class r{bytes;#e;#t;#r;#n;[gt]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=ht(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=pr(e)}else if(gr(e))t=ht(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#n=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=w("tcp"),a=w("udp"),p=w("ip4"),f=w("ip6"),g=w("dns6"),v=w("ip6zone");for(let[u,l]of this.stringTuples())u===v.code&&(s=`%${l??""}`),Ro.includes(u)&&(t=i.name,o=443,n=`${l??""}${s}`,e=u===g.code?6:4),(u===i.code||u===a.code)&&(t=w(u).name,o=parseInt(l??"")),(u===p.code||u===f.code)&&(t=w(u).name,n=`${l??""}${s}`,e=u===f.code?6:4);if(e==null||t==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:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},w(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>w(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(mt(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===de.p2p.code&&e.push([n,o]),n===de["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?P(T.decode(`z${n}`),"base58btc"):P(G.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#n}equals(e){return Gt(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=mr.get(t.name);if(n==null)throw new A(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>L(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 t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[Po](){return`Multiaddr(${this.#e})`}};var mr=new Map;function gr(r){return!!r?.[gt]}function L(r){return new Se(r)}var No=c("dns4"),Do=c("dns6"),Mo=c("dnsaddr"),K=E(c("dns"),Mo,No,Do),Pe=E(c("ip4"),c("ip6")),H=E(d(Pe,c("tcp")),d(K,c("tcp"))),Re=d(Pe,c("udp")),_o=d(Re,c("utp")),Uo=d(Re,c("quic")),ko=d(Re,c("quic-v1")),wt=E(d(H,c("ws")),d(K,c("ws"))),Ce=E(d(wt,c("p2p")),wt),xt=E(d(H,c("wss")),d(K,c("wss")),d(H,c("tls"),c("ws")),d(K,c("tls"),c("ws"))),Te=E(d(xt,c("p2p")),xt),bt=E(d(H,c("http")),d(Pe,c("http")),d(K,c("http"))),yt=E(d(H,c("https")),d(Pe,c("https")),d(K,c("https"))),wr=d(Re,c("webrtc-direct"),c("certhash")),yr=E(d(wr,c("p2p")),wr),xr=d(ko,c("webtransport"),c("certhash"),c("certhash")),Er=E(d(xr,c("p2p")),xr),vr=E(d(Ce,c("p2p-webrtc-star"),c("p2p")),d(Te,c("p2p-webrtc-star"),c("p2p")),d(Ce,c("p2p-webrtc-star")),d(Te,c("p2p-webrtc-star"))),Sc=E(d(Ce,c("p2p-websocket-star"),c("p2p")),d(Te,c("p2p-websocket-star"),c("p2p")),d(Ce,c("p2p-websocket-star")),d(Te,c("p2p-websocket-star"))),Ar=E(d(bt,c("p2p-webrtc-direct"),c("p2p")),d(yt,c("p2p-webrtc-direct"),c("p2p")),d(bt,c("p2p-webrtc-direct")),d(yt,c("p2p-webrtc-direct"))),Y=E(wt,xt,bt,yt,vr,Ar,H,_o,Uo,K,yr,Er),Cc=E(d(Y,c("p2p-stardust"),c("p2p")),d(Y,c("p2p-stardust"))),W=E(d(Y,c("p2p")),vr,Ar,yr,Er,c("p2p")),br=E(d(W,c("p2p-circuit"),W),d(W,c("p2p-circuit")),d(c("p2p-circuit"),W),d(Y,c("p2p-circuit")),d(c("p2p-circuit"),Y),c("p2p-circuit")),Ir=()=>E(d(br,Ir),br),Q=Ir(),Tc=E(d(Q,W,Q),d(W,Q),d(Q,W),Q,W);var Pc=E(d(Q,c("webrtc"),c("p2p")),d(Q,c("webrtc")),d(Y,c("webrtc"),c("p2p")),d(Y,c("webrtc")),c("webrtc"));function Sr(r){function e(t){let n;try{n=L(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function d(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Sr(e),partialMatch:e}}function E(...r){function e(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:Sr(e),partialMatch:e}}function c(r){let e=r;function t(o){let s;try{s=L(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:t,partialMatch:n}}var Vr=ee(k("net"),1);var Et={ERR_INVALID_IP_PARAMETER:"ERR_INVALID_IP_PARAMETER",ERR_INVALID_PORT_PARAMETER:"ERR_INVALID_PORT_PARAMETER",ERR_INVALID_IP:"ERR_INVALID_IP"};function Cr(r,e){if(typeof r!="string")throw new A(`invalid ip provided: ${r}`,Et.ERR_INVALID_IP_PARAMETER);if(typeof e=="string"&&(e=parseInt(e)),isNaN(e))throw new A(`invalid port provided: ${e}`,Et.ERR_INVALID_PORT_PARAMETER);if((0,M.isIPv4)(r))return L(`/ip4/${r}/tcp/${e}`);if((0,M.isIPv6)(r))return L(`/ip6/${r}/tcp/${e}`);throw new A(`invalid ip:port for creating a multiaddr: ${r}:${e}`,Et.ERR_INVALID_IP)}var Lr=ee(Ur(),1);var It=ee(k("os"),1),kr=ee(k("path"),1);var zo={ip4:"IPv4",ip6:"IPv6"};function ue(r,e={}){let t=r.getPath();return t!=null?It.default.platform()==="win32"?{path:kr.default.join("\\\\.\\pipe\\",t)}:{path:t}:{...e,...r.toOptions()}}function St(r,e,t){let n=o=>L(`/${r}/${o}/tcp/${t}`);return(Bo(e)?jo(zo[r]):[e]).map(n)}function Bo(r){return["0.0.0.0","::"].includes(r)}var qo=It.default.networkInterfaces();function jo(r){let e=[];for(let[,t]of Object.entries(qo))if(t!=null)for(let n of t)n.family===r&&e.push(n.address);return e}var De=(r,e)=>{let t=e.logger.forComponent("libp2p:tcp:socket"),n=e.metrics,o=e.metricPrefix??"",s=e.socketInactivityTimeout??3e5,i=e.socketCloseTimeout??500;e.listeningAddr?.getPath()!=null&&(e.remoteAddr=e.listeningAddr),e.remoteAddr?.getPath()!=null&&(e.localAddr=e.remoteAddr);let a;if(e.remoteAddr!=null)a=e.remoteAddr;else{if(r.remoteAddress==null||r.remotePort==null)throw new A("Could not determine remote address or port","ERR_NO_REMOTE_ADDRESS");a=Cr(r.remoteAddress,r.remotePort)}let p=ue(a),f=p.path??`${p.host??""}:${p.port??""}`,{sink:g,source:v}=Lr.default.duplex(r);r.setTimeout(s,()=>{t("%s socket read timeout",f),n?.increment({[`${o}timeout`]:!0});let u;r.readable&&(u=new A("Socket read timeout","ERR_SOCKET_READ_TIMEOUT")),r.destroy(u)}),r.once("close",()=>{t("%s socket close",f),n?.increment({[`${o}close`]:!0}),x.timeline.close==null&&(x.timeline.close=Date.now())}),r.once("end",()=>{t("%s socket end",f),n?.increment({[`${o}end`]:!0})});let x={async sink(u){try{await g(async function*(){for await(let l of u)l instanceof Uint8Array?yield l:yield l.subarray()}())}catch(l){l.type!=="aborted"&&t.error("%s error in sink",f,l)}r.end()},source:v,remoteAddr:a,timeline:{open:Date.now()},async close(u={}){if(r.destroyed){t("%s socket was already destroyed when trying to close",f);return}if(u.signal==null){let b=AbortSignal.timeout(i);u={...u,signal:b}}let l=()=>{r.destroy(new A("Destroying socket after timeout","ERR_CLOSE_TIMEOUT"))};u.signal?.addEventListener("abort",l);try{t("%s closing socket",f),await new Promise((b,_)=>{r.once("close",()=>{t("%s socket closed",f),b()}),r.once("error",m=>{t("%s socket error",f,m),x.timeline.close==null&&(x.timeline.close=Date.now()),_(m)}),r.setTimeout(i),r.end(),r.writableLength>0?r.once("drain",()=>{t("%s socket drained",f),r.destroy()}):r.destroy()})}catch(b){this.abort(b)}finally{u.signal?.removeEventListener("abort",l)}},abort:u=>{t("%s socket abort due to error",f,u),r.destroy(u),x.timeline.close==null&&(x.timeline.close=Date.now())},log:t};return x};async function Or(r,e){try{await r.close()}catch(t){e.log.error("an error occurred closing the connection",t),r.abort(t)}}var I;(function(r){r[r.INACTIVE=0]="INACTIVE",r[r.ACTIVE=1]="ACTIVE",r[r.PAUSED=2]="PAUSED"})(I||(I={}));var Me=class extends xe{context;server;connections=new Set;status={code:I.INACTIVE};metrics;addr;log;constructor(e){if(super(),this.context=e,e.keepAlive=e.keepAlive??!0,e.noDelay=e.noDelay??!0,this.log=e.logger.forComponent("libp2p:tcp:listener"),this.addr="unknown",this.server=Vr.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 A("closeAbove must be >= listenBelow","ERR_CONNECTION_LIMITS");this.server.on("listening",()=>{if(e.metrics!=null){let t=this.server.address();t==null?this.addr="unknown":typeof t=="string"?this.addr=t:this.addr=`${t.address}:${t.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.safeDispatchEvent("listening")}).on("error",t=>{this.metrics?.errors.increment({[`${this.addr} listen_error`]:!0}),this.safeDispatchEvent("error",{detail:t})}).on("close",()=>{this.metrics?.status.update({[this.addr]:this.status.code}),this.status.code!==I.PAUSED&&this.safeDispatchEvent("close")})}onSocket(e){if(this.status.code!==I.ACTIVE)throw new A("Server is is not listening yet","ERR_SERVER_NOT_RUNNING");e.on("error",n=>{this.log("socket error",n),this.metrics?.events.increment({[`${this.addr} error`]:!0})});let t;try{t=De(e,{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",t.remoteAddr);try{this.context.upgrader.upgradeInbound(t).then(n=>{this.log("inbound connection upgraded %s",t.remoteAddr),this.connections.add(t),e.once("close",()=>{this.connections.delete(t),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.safeDispatchEvent("connection",{detail:n})}).catch(async n=>{this.log.error("inbound connection failed",n),this.metrics?.errors.increment({[`${this.addr} inbound_upgrade`]:!0}),await Or(t,{log:this.log})}).catch(n=>{this.log.error("closing inbound connection failed",n)})}catch(n){this.log.error("inbound connection failed",n),Or(t,{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===I.INACTIVE)return[];let e=[],t=this.server.address(),{listeningAddr:n,peerId:o}=this.status;if(t==null)return[];if(typeof t=="string")e=[n];else try{n.toString().startsWith("/ip4")?e=e.concat(St("ip4",t.address,t.port)):t.family==="IPv6"&&(e=e.concat(St("ip6",t.address,t.port)))}catch(s){this.log.error("could not turn %s:%s into multiaddr",t.address,t.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 A("server is already listening","ERR_SERVER_ALREADY_LISTENING");let t=e.getPeerId(),n=t==null?e.decapsulateCode(421):e,{backlog:o}=this.context;try{this.status={code:I.ACTIVE,listeningAddr:n,peerId:t,netConfig:ue(n,{backlog:o})},await this.resume()}catch(s){throw this.status={code:I.INACTIVE},s}}async close(){let e=new A("Listener is closing","ERR_LISTENER_CLOSING");this.connections.forEach(t=>{t.abort(e)}),await this.pause(!0)}async resume(){if(this.server.listening||this.status.code===I.INACTIVE)return;let e=this.status.netConfig;await new Promise((t,n)=>{this.server.once("error",n),this.server.listen(e,t)}),this.status={...this.status,code:I.ACTIVE},this.log("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||(this.log("closing server on %s",this.server.address()),this.status=e?{code:I.INACTIVE}:{...this.status,code:I.PAUSED},await new Promise((t,n)=>{this.server.close(o=>{if(o!=null){n(o);return}t()})}))}};var Ct=class{opts;metrics;components;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:tcp"),this.opts=t,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"})})}[Rt]=!0;[Symbol.toStringTag]="@libp2p/tcp";async dial(e,t){t.keepAlive=t.keepAlive??!0,t.noDelay=t.noDelay??!0;let n=await this._connect(e,t);n.on("error",a=>{this.log("socket error",a)});let o=De(n,{remoteAddr:e,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)})};t.signal?.addEventListener("abort",s,{once:!0}),this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o);if(this.log("outbound connection %s upgraded",o.remoteAddr),t.signal?.removeEventListener("abort",s),t.signal?.aborted===!0)throw i.close().catch(a=>{this.log.error("Error closing conn after abort",a)}),new te;return i}async _connect(e,t){if(t.signal?.aborted===!0)throw new te;return new Promise((n,o)=>{let s=Date.now(),i=ue(e,{...this.opts.dialOpts??{},...t});this.log("dialing %a",e);let a=Fr.default.connect(i),p=u=>{let l=i.path??`${i.host??""}:${i.port}`;u.message=`connection error ${l}: ${u.message}`,this.metrics?.dialerEvents.increment({error:!0}),x(u)},f=()=>{this.log("connection timeout %a",e),this.metrics?.dialerEvents.increment({timeout:!0});let u=new A(`connection timeout after ${Date.now()-s}ms`,"ERR_CONNECT_TIMEOUT");a.emit("error",u)},g=()=>{this.log("connection opened %a",e),this.metrics?.dialerEvents.increment({connect:!0}),x()},v=()=>{this.log("connection aborted %a",e),this.metrics?.dialerEvents.increment({abort:!0}),a.destroy(),x(new te)},x=u=>{if(a.removeListener("error",p),a.removeListener("timeout",f),a.removeListener("connect",g),t.signal!=null&&t.signal.removeEventListener("abort",v),u!=null){o(u);return}n(a)};a.on("error",p),a.on("timeout",f),a.on("connect",g),t.signal!=null&&t.signal.addEventListener("abort",v)})}createListener(e){return new Me({...this.opts.listenOpts??{},...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,logger:this.components.logger})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>t.protoCodes().includes(290)?!1:t.protoCodes().includes(400)?!0:H.matches(t.decapsulateCode(421)))}};function Wo(r={}){return e=>new Ct(e,r)}return Gr(Ho);})();
|
|
3
3
|
return Libp2PTcp}));
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,51 +6,24 @@
|
|
|
6
6
|
* @example
|
|
7
7
|
*
|
|
8
8
|
* ```TypeScript
|
|
9
|
+
* import { createLibp2p } from 'libp2p'
|
|
9
10
|
* import { tcp } from '@libp2p/tcp'
|
|
10
11
|
* import { multiaddr } from '@multiformats/multiaddr'
|
|
11
|
-
* import { pipe } from 'it-pipe'
|
|
12
|
-
* import all from 'it-all'
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* }
|
|
19
|
-
*
|
|
20
|
-
* const transport = tcp()()
|
|
21
|
-
*
|
|
22
|
-
* const listener = transport.createListener({
|
|
23
|
-
* upgrader,
|
|
24
|
-
* handler: (socket) => {
|
|
25
|
-
* console.log('new connection opened')
|
|
26
|
-
* pipe(
|
|
27
|
-
* ['hello', ' ', 'World!'],
|
|
28
|
-
* socket
|
|
29
|
-
* )
|
|
30
|
-
* }
|
|
13
|
+
* const node = await createLibp2p({
|
|
14
|
+
* transports: [
|
|
15
|
+
* tcp()
|
|
16
|
+
* ]
|
|
31
17
|
* })
|
|
32
18
|
*
|
|
33
|
-
* const
|
|
34
|
-
* await listener.listen(addr)
|
|
35
|
-
* console.log('listening')
|
|
36
|
-
*
|
|
37
|
-
* const socket = await transport.dial(addr, { upgrader })
|
|
38
|
-
* const values = await pipe(
|
|
39
|
-
* socket,
|
|
40
|
-
* all
|
|
41
|
-
* )
|
|
42
|
-
* console.log(`Value: ${values.toString()}`)
|
|
19
|
+
* const ma = multiaddr('/ip4/123.123.123.123/tcp/1234')
|
|
43
20
|
*
|
|
44
|
-
* //
|
|
45
|
-
* await
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* Outputs:
|
|
21
|
+
* // dial a TCP connection, timing out after 10 seconds
|
|
22
|
+
* const connection = await node.dial(ma, {
|
|
23
|
+
* signal: AbortSignal.timeout(10_000)
|
|
24
|
+
* })
|
|
49
25
|
*
|
|
50
|
-
*
|
|
51
|
-
* listening
|
|
52
|
-
* new connection opened
|
|
53
|
-
* Value: hello World!
|
|
26
|
+
* // use connection...
|
|
54
27
|
* ```
|
|
55
28
|
*/
|
|
56
29
|
import { type CloseServerOnMaxConnectionsOpts } from './listener.js';
|
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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,EAAE,KAAK,+BAA+B,EAAe,MAAM,eAAe,CAAA;AAGjF,OAAO,KAAK,EAAE,eAAe,EAAsB,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,SAAS,EAAY,MAAM,mBAAmB,CAAA;AAC5J,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;IAE7D;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAE3B;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;OAEG;IACH,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;AAqLD,wBAAgB,GAAG,CAAE,IAAI,GAAE,UAAe,GAAG,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAIpF"}
|
package/dist/src/index.js
CHANGED
|
@@ -6,51 +6,24 @@
|
|
|
6
6
|
* @example
|
|
7
7
|
*
|
|
8
8
|
* ```TypeScript
|
|
9
|
+
* import { createLibp2p } from 'libp2p'
|
|
9
10
|
* import { tcp } from '@libp2p/tcp'
|
|
10
11
|
* import { multiaddr } from '@multiformats/multiaddr'
|
|
11
|
-
* import { pipe } from 'it-pipe'
|
|
12
|
-
* import all from 'it-all'
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* }
|
|
19
|
-
*
|
|
20
|
-
* const transport = tcp()()
|
|
21
|
-
*
|
|
22
|
-
* const listener = transport.createListener({
|
|
23
|
-
* upgrader,
|
|
24
|
-
* handler: (socket) => {
|
|
25
|
-
* console.log('new connection opened')
|
|
26
|
-
* pipe(
|
|
27
|
-
* ['hello', ' ', 'World!'],
|
|
28
|
-
* socket
|
|
29
|
-
* )
|
|
30
|
-
* }
|
|
13
|
+
* const node = await createLibp2p({
|
|
14
|
+
* transports: [
|
|
15
|
+
* tcp()
|
|
16
|
+
* ]
|
|
31
17
|
* })
|
|
32
18
|
*
|
|
33
|
-
* const
|
|
34
|
-
* await listener.listen(addr)
|
|
35
|
-
* console.log('listening')
|
|
36
|
-
*
|
|
37
|
-
* const socket = await transport.dial(addr, { upgrader })
|
|
38
|
-
* const values = await pipe(
|
|
39
|
-
* socket,
|
|
40
|
-
* all
|
|
41
|
-
* )
|
|
42
|
-
* console.log(`Value: ${values.toString()}`)
|
|
19
|
+
* const ma = multiaddr('/ip4/123.123.123.123/tcp/1234')
|
|
43
20
|
*
|
|
44
|
-
* //
|
|
45
|
-
* await
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* Outputs:
|
|
21
|
+
* // dial a TCP connection, timing out after 10 seconds
|
|
22
|
+
* const connection = await node.dial(ma, {
|
|
23
|
+
* signal: AbortSignal.timeout(10_000)
|
|
24
|
+
* })
|
|
49
25
|
*
|
|
50
|
-
*
|
|
51
|
-
* listening
|
|
52
|
-
* new connection opened
|
|
53
|
-
* Value: hello World!
|
|
26
|
+
* // use connection...
|
|
54
27
|
* ```
|
|
55
28
|
*/
|
|
56
29
|
import net from 'net';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/listener.d.ts
CHANGED
|
@@ -3,10 +3,17 @@ import type { TCPCreateListenerOptions } from './index.js';
|
|
|
3
3
|
import type { ComponentLogger, Connection, CounterGroup, MetricGroup, Metrics, Listener, ListenerEvents, Upgrader } from '@libp2p/interface';
|
|
4
4
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
5
5
|
export interface CloseServerOnMaxConnectionsOpts {
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Server listens once connection count is less than `listenBelow`
|
|
8
|
+
*/
|
|
7
9
|
listenBelow: number;
|
|
8
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Close server once connection count is greater than or equal to `closeAbove`
|
|
12
|
+
*/
|
|
9
13
|
closeAbove: number;
|
|
14
|
+
/**
|
|
15
|
+
* Invoked when there was an error listening on a socket
|
|
16
|
+
*/
|
|
10
17
|
onListenError?(err: Error): void;
|
|
11
18
|
}
|
|
12
19
|
interface Context extends TCPCreateListenerOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,iBAAiB,
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAQhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAA8C,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACxL,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAcxD,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,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;AAqBD,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;IA2F9C,OAAO,CAAC,QAAQ;IA6FhB,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;YAkBN,KAAK;CAwCpB"}
|
package/dist/src/listener.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import net from 'net';
|
|
2
|
-
import { CodeError, TypedEventEmitter
|
|
2
|
+
import { CodeError, TypedEventEmitter } from '@libp2p/interface';
|
|
3
3
|
import { CODE_P2P } from './constants.js';
|
|
4
4
|
import { toMultiaddrConnection } from './socket-to-conn.js';
|
|
5
5
|
import { getMultiaddrs, multiaddrToNetConfig } from './utils.js';
|
|
@@ -12,13 +12,15 @@ async function attemptClose(maConn, options) {
|
|
|
12
12
|
}
|
|
13
13
|
catch (err) {
|
|
14
14
|
options.log.error('an error occurred closing the connection', err);
|
|
15
|
+
maConn.abort(err);
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
var TCPListenerStatusCode;
|
|
18
19
|
(function (TCPListenerStatusCode) {
|
|
19
20
|
/**
|
|
20
|
-
* When server object is initialized but we don't know the listening address
|
|
21
|
-
* the server object is stopped manually, can be resumed only by
|
|
21
|
+
* When server object is initialized but we don't know the listening address
|
|
22
|
+
* yet or the server object is stopped manually, can be resumed only by
|
|
23
|
+
* calling listen()
|
|
22
24
|
**/
|
|
23
25
|
TCPListenerStatusCode[TCPListenerStatusCode["INACTIVE"] = 0] = "INACTIVE";
|
|
24
26
|
TCPListenerStatusCode[TCPListenerStatusCode["ACTIVE"] = 1] = "ACTIVE";
|
|
@@ -44,14 +46,15 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
44
46
|
this.server = net.createServer(context, this.onSocket.bind(this));
|
|
45
47
|
// https://nodejs.org/api/net.html#servermaxconnections
|
|
46
48
|
// If set reject connections when the server's connection count gets high
|
|
47
|
-
// Useful to prevent too resource exhaustion via many open connections on
|
|
49
|
+
// Useful to prevent too resource exhaustion via many open connections on
|
|
50
|
+
// high bursts of activity
|
|
48
51
|
if (context.maxConnections !== undefined) {
|
|
49
52
|
this.server.maxConnections = context.maxConnections;
|
|
50
53
|
}
|
|
51
54
|
if (context.closeServerOnMaxConnections != null) {
|
|
52
55
|
// Sanity check options
|
|
53
56
|
if (context.closeServerOnMaxConnections.closeAbove < context.closeServerOnMaxConnections.listenBelow) {
|
|
54
|
-
throw new CodeError('closeAbove must be >= listenBelow', '
|
|
57
|
+
throw new CodeError('closeAbove must be >= listenBelow', 'ERR_CONNECTION_LIMITS');
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
this.server
|
|
@@ -96,21 +99,22 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
96
99
|
[this.addr]: TCPListenerStatusCode.ACTIVE
|
|
97
100
|
});
|
|
98
101
|
}
|
|
99
|
-
this.
|
|
102
|
+
this.safeDispatchEvent('listening');
|
|
100
103
|
})
|
|
101
104
|
.on('error', err => {
|
|
102
105
|
this.metrics?.errors.increment({ [`${this.addr} listen_error`]: true });
|
|
103
|
-
this.
|
|
106
|
+
this.safeDispatchEvent('error', { detail: err });
|
|
104
107
|
})
|
|
105
108
|
.on('close', () => {
|
|
106
109
|
this.metrics?.status.update({
|
|
107
110
|
[this.addr]: this.status.code
|
|
108
111
|
});
|
|
109
|
-
// If this event is emitted, the transport manager will remove the
|
|
110
|
-
// in the meanwhile if the connections are
|
|
111
|
-
//
|
|
112
|
+
// If this event is emitted, the transport manager will remove the
|
|
113
|
+
// listener from it's cache in the meanwhile if the connections are
|
|
114
|
+
// dropped then listener will start listening again and the transport
|
|
115
|
+
// manager will not be able to close the server
|
|
112
116
|
if (this.status.code !== TCPListenerStatusCode.PAUSED) {
|
|
113
|
-
this.
|
|
117
|
+
this.safeDispatchEvent('close');
|
|
114
118
|
}
|
|
115
119
|
});
|
|
116
120
|
}
|
|
@@ -149,10 +153,12 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
149
153
|
this.connections.delete(maConn);
|
|
150
154
|
if (this.context.closeServerOnMaxConnections != null &&
|
|
151
155
|
this.connections.size < this.context.closeServerOnMaxConnections.listenBelow) {
|
|
152
|
-
// The most likely case of error is if the port taken by this
|
|
153
|
-
// another process during the time the
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
+
// The most likely case of error is if the port taken by this
|
|
157
|
+
// application is bound by another process during the time the
|
|
158
|
+
// server if closed. In that case there's not much we can do.
|
|
159
|
+
// resume() will be called again every time a connection is
|
|
160
|
+
// dropped, which acts as an eventual retry mechanism.
|
|
161
|
+
// onListenError allows the consumer act on this.
|
|
156
162
|
this.resume().catch(e => {
|
|
157
163
|
this.log.error('error attempting to listen server once connection count under limit', e);
|
|
158
164
|
this.context.closeServerOnMaxConnections?.onListenError?.(e);
|
|
@@ -168,7 +174,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
168
174
|
this.log.error('error attempting to close server once connection count over limit', e);
|
|
169
175
|
});
|
|
170
176
|
}
|
|
171
|
-
this.
|
|
177
|
+
this.safeDispatchEvent('connection', { detail: conn });
|
|
172
178
|
})
|
|
173
179
|
.catch(async (err) => {
|
|
174
180
|
this.log.error('inbound connection failed', err);
|
|
@@ -244,15 +250,13 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
244
250
|
}
|
|
245
251
|
}
|
|
246
252
|
async close() {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
})
|
|
255
|
-
]);
|
|
253
|
+
const err = new CodeError('Listener is closing', 'ERR_LISTENER_CLOSING');
|
|
254
|
+
// synchronously close each connection
|
|
255
|
+
this.connections.forEach(conn => {
|
|
256
|
+
conn.abort(err);
|
|
257
|
+
});
|
|
258
|
+
// shut down the server socket, permanently
|
|
259
|
+
await this.pause(true);
|
|
256
260
|
}
|
|
257
261
|
/**
|
|
258
262
|
* Can resume a stopped or start an inert server
|
|
@@ -263,12 +267,13 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
263
267
|
}
|
|
264
268
|
const netConfig = this.status.netConfig;
|
|
265
269
|
await new Promise((resolve, reject) => {
|
|
266
|
-
// NOTE: 'listening' event is only fired on success. Any error such as
|
|
270
|
+
// NOTE: 'listening' event is only fired on success. Any error such as
|
|
271
|
+
// port already bound, is emitted via 'error'
|
|
267
272
|
this.server.once('error', reject);
|
|
268
273
|
this.server.listen(netConfig, resolve);
|
|
269
274
|
});
|
|
270
275
|
this.status = { ...this.status, code: TCPListenerStatusCode.ACTIVE };
|
|
271
|
-
this.log('
|
|
276
|
+
this.log('listening on %s', this.server.address());
|
|
272
277
|
}
|
|
273
278
|
async pause(permanent) {
|
|
274
279
|
if (!this.server.listening && this.status.code === TCPListenerStatusCode.PAUSED && permanent) {
|
|
@@ -278,7 +283,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
278
283
|
if (!this.server.listening || this.status.code !== TCPListenerStatusCode.ACTIVE) {
|
|
279
284
|
return;
|
|
280
285
|
}
|
|
281
|
-
this.log('
|
|
286
|
+
this.log('closing server on %s', this.server.address());
|
|
282
287
|
// NodeJS implementation tracks listening status with `this._handle` property.
|
|
283
288
|
// - Server.close() sets this._handle to null immediately. If this._handle is null, ERR_SERVER_NOT_RUNNING is thrown
|
|
284
289
|
// - Server.listening returns `this._handle !== null` https://github.com/nodejs/node/blob/386d761943bb1b217fba27d6b80b658c23009e60/lib/net.js#L1675
|
|
@@ -294,7 +299,13 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
294
299
|
// during the time the server is closing
|
|
295
300
|
this.status = permanent ? { code: TCPListenerStatusCode.INACTIVE } : { ...this.status, code: TCPListenerStatusCode.PAUSED };
|
|
296
301
|
await new Promise((resolve, reject) => {
|
|
297
|
-
this.server.close(err => {
|
|
302
|
+
this.server.close(err => {
|
|
303
|
+
if (err != null) {
|
|
304
|
+
reject(err);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
resolve();
|
|
308
|
+
});
|
|
298
309
|
});
|
|
299
310
|
}
|
|
300
311
|
}
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-to-conn.d.ts","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC3F,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,
|
|
1
|
+
{"version":3,"file":"socket-to-conn.d.ts","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC3F,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,mBAwLpF,CAAA"}
|
|
@@ -108,6 +108,10 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
108
108
|
signal
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
|
+
const abortSignalListener = () => {
|
|
112
|
+
socket.destroy(new CodeError('Destroying socket after timeout', 'ERR_CLOSE_TIMEOUT'));
|
|
113
|
+
};
|
|
114
|
+
options.signal?.addEventListener('abort', abortSignalListener);
|
|
111
115
|
try {
|
|
112
116
|
log('%s closing socket', lOptsStr);
|
|
113
117
|
await new Promise((resolve, reject) => {
|
|
@@ -145,10 +149,16 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
145
149
|
catch (err) {
|
|
146
150
|
this.abort(err);
|
|
147
151
|
}
|
|
152
|
+
finally {
|
|
153
|
+
options.signal?.removeEventListener('abort', abortSignalListener);
|
|
154
|
+
}
|
|
148
155
|
},
|
|
149
156
|
abort: (err) => {
|
|
150
157
|
log('%s socket abort due to error', lOptsStr, err);
|
|
151
158
|
socket.destroy(err);
|
|
159
|
+
if (maConn.timeline.close == null) {
|
|
160
|
+
maConn.timeline.close = Date.now();
|
|
161
|
+
}
|
|
152
162
|
},
|
|
153
163
|
log
|
|
154
164
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-to-conn.js","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"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
|
|
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": "9.0.
|
|
3
|
+
"version": "9.0.16-1fc929c1c",
|
|
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/main/packages/transport-tcp#readme",
|
|
@@ -49,28 +49,29 @@
|
|
|
49
49
|
"clean": "aegir clean",
|
|
50
50
|
"lint": "aegir lint",
|
|
51
51
|
"dep-check": "aegir dep-check",
|
|
52
|
+
"doc-check": "aegir doc-check",
|
|
52
53
|
"build": "aegir build",
|
|
53
54
|
"test": "aegir test -t node -t electron-main",
|
|
54
55
|
"test:node": "aegir test -t node --cov",
|
|
55
56
|
"test:electron-main": "aegir test -t electron-main"
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
58
|
-
"@libp2p/interface": "
|
|
59
|
-
"@libp2p/utils": "
|
|
59
|
+
"@libp2p/interface": "1.1.4-1fc929c1c",
|
|
60
|
+
"@libp2p/utils": "5.2.6-1fc929c1c",
|
|
60
61
|
"@multiformats/mafmt": "^12.1.6",
|
|
61
62
|
"@multiformats/multiaddr": "^12.1.14",
|
|
62
63
|
"@types/sinon": "^17.0.3",
|
|
63
64
|
"stream-to-it": "^0.2.4"
|
|
64
65
|
},
|
|
65
66
|
"devDependencies": {
|
|
66
|
-
"@libp2p/interface-compliance-tests": "
|
|
67
|
-
"@libp2p/logger": "
|
|
68
|
-
"aegir": "^42.2.
|
|
67
|
+
"@libp2p/interface-compliance-tests": "5.3.2-1fc929c1c",
|
|
68
|
+
"@libp2p/logger": "4.0.7-1fc929c1c",
|
|
69
|
+
"aegir": "^42.2.4",
|
|
69
70
|
"it-all": "^3.0.4",
|
|
70
71
|
"it-pipe": "^3.0.1",
|
|
71
72
|
"p-defer": "^4.0.0",
|
|
72
73
|
"sinon": "^17.0.1",
|
|
73
|
-
"uint8arrays": "^5.0.
|
|
74
|
+
"uint8arrays": "^5.0.2"
|
|
74
75
|
},
|
|
75
76
|
"sideEffects": false
|
|
76
77
|
}
|
package/src/index.ts
CHANGED
|
@@ -6,51 +6,24 @@
|
|
|
6
6
|
* @example
|
|
7
7
|
*
|
|
8
8
|
* ```TypeScript
|
|
9
|
+
* import { createLibp2p } from 'libp2p'
|
|
9
10
|
* import { tcp } from '@libp2p/tcp'
|
|
10
11
|
* import { multiaddr } from '@multiformats/multiaddr'
|
|
11
|
-
* import { pipe } from 'it-pipe'
|
|
12
|
-
* import all from 'it-all'
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* }
|
|
19
|
-
*
|
|
20
|
-
* const transport = tcp()()
|
|
21
|
-
*
|
|
22
|
-
* const listener = transport.createListener({
|
|
23
|
-
* upgrader,
|
|
24
|
-
* handler: (socket) => {
|
|
25
|
-
* console.log('new connection opened')
|
|
26
|
-
* pipe(
|
|
27
|
-
* ['hello', ' ', 'World!'],
|
|
28
|
-
* socket
|
|
29
|
-
* )
|
|
30
|
-
* }
|
|
13
|
+
* const node = await createLibp2p({
|
|
14
|
+
* transports: [
|
|
15
|
+
* tcp()
|
|
16
|
+
* ]
|
|
31
17
|
* })
|
|
32
18
|
*
|
|
33
|
-
* const
|
|
34
|
-
* await listener.listen(addr)
|
|
35
|
-
* console.log('listening')
|
|
36
|
-
*
|
|
37
|
-
* const socket = await transport.dial(addr, { upgrader })
|
|
38
|
-
* const values = await pipe(
|
|
39
|
-
* socket,
|
|
40
|
-
* all
|
|
41
|
-
* )
|
|
42
|
-
* console.log(`Value: ${values.toString()}`)
|
|
19
|
+
* const ma = multiaddr('/ip4/123.123.123.123/tcp/1234')
|
|
43
20
|
*
|
|
44
|
-
* //
|
|
45
|
-
* await
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* Outputs:
|
|
21
|
+
* // dial a TCP connection, timing out after 10 seconds
|
|
22
|
+
* const connection = await node.dial(ma, {
|
|
23
|
+
* signal: AbortSignal.timeout(10_000)
|
|
24
|
+
* })
|
|
49
25
|
*
|
|
50
|
-
*
|
|
51
|
-
* listening
|
|
52
|
-
* new connection opened
|
|
53
|
-
* Value: hello World!
|
|
26
|
+
* // use connection...
|
|
54
27
|
* ```
|
|
55
28
|
*/
|
|
56
29
|
|
package/src/listener.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import net from 'net'
|
|
2
|
-
import { CodeError, TypedEventEmitter
|
|
2
|
+
import { CodeError, TypedEventEmitter } from '@libp2p/interface'
|
|
3
3
|
import { CODE_P2P } from './constants.js'
|
|
4
4
|
import { toMultiaddrConnection } from './socket-to-conn.js'
|
|
5
5
|
import {
|
|
@@ -17,16 +17,26 @@ import type { Multiaddr } from '@multiformats/multiaddr'
|
|
|
17
17
|
async function attemptClose (maConn: MultiaddrConnection, options: LoggerOptions): Promise<void> {
|
|
18
18
|
try {
|
|
19
19
|
await maConn.close()
|
|
20
|
-
} catch (err) {
|
|
20
|
+
} catch (err: any) {
|
|
21
21
|
options.log.error('an error occurred closing the connection', err)
|
|
22
|
+
maConn.abort(err)
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export interface CloseServerOnMaxConnectionsOpts {
|
|
26
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Server listens once connection count is less than `listenBelow`
|
|
29
|
+
*/
|
|
27
30
|
listenBelow: number
|
|
28
|
-
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Close server once connection count is greater than or equal to `closeAbove`
|
|
34
|
+
*/
|
|
29
35
|
closeAbove: number
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Invoked when there was an error listening on a socket
|
|
39
|
+
*/
|
|
30
40
|
onListenError?(err: Error): void
|
|
31
41
|
}
|
|
32
42
|
|
|
@@ -50,8 +60,9 @@ export interface TCPListenerMetrics {
|
|
|
50
60
|
|
|
51
61
|
enum TCPListenerStatusCode {
|
|
52
62
|
/**
|
|
53
|
-
* When server object is initialized but we don't know the listening address
|
|
54
|
-
* the server object is stopped manually, can be resumed only by
|
|
63
|
+
* When server object is initialized but we don't know the listening address
|
|
64
|
+
* yet or the server object is stopped manually, can be resumed only by
|
|
65
|
+
* calling listen()
|
|
55
66
|
**/
|
|
56
67
|
INACTIVE = 0,
|
|
57
68
|
ACTIVE = 1,
|
|
@@ -87,7 +98,8 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
87
98
|
|
|
88
99
|
// https://nodejs.org/api/net.html#servermaxconnections
|
|
89
100
|
// If set reject connections when the server's connection count gets high
|
|
90
|
-
// Useful to prevent too resource exhaustion via many open connections on
|
|
101
|
+
// Useful to prevent too resource exhaustion via many open connections on
|
|
102
|
+
// high bursts of activity
|
|
91
103
|
if (context.maxConnections !== undefined) {
|
|
92
104
|
this.server.maxConnections = context.maxConnections
|
|
93
105
|
}
|
|
@@ -95,7 +107,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
95
107
|
if (context.closeServerOnMaxConnections != null) {
|
|
96
108
|
// Sanity check options
|
|
97
109
|
if (context.closeServerOnMaxConnections.closeAbove < context.closeServerOnMaxConnections.listenBelow) {
|
|
98
|
-
throw new CodeError('closeAbove must be >= listenBelow', '
|
|
110
|
+
throw new CodeError('closeAbove must be >= listenBelow', 'ERR_CONNECTION_LIMITS')
|
|
99
111
|
}
|
|
100
112
|
}
|
|
101
113
|
|
|
@@ -144,22 +156,23 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
144
156
|
})
|
|
145
157
|
}
|
|
146
158
|
|
|
147
|
-
this.
|
|
159
|
+
this.safeDispatchEvent('listening')
|
|
148
160
|
})
|
|
149
161
|
.on('error', err => {
|
|
150
162
|
this.metrics?.errors.increment({ [`${this.addr} listen_error`]: true })
|
|
151
|
-
this.
|
|
163
|
+
this.safeDispatchEvent('error', { detail: err })
|
|
152
164
|
})
|
|
153
165
|
.on('close', () => {
|
|
154
166
|
this.metrics?.status.update({
|
|
155
167
|
[this.addr]: this.status.code
|
|
156
168
|
})
|
|
157
169
|
|
|
158
|
-
// If this event is emitted, the transport manager will remove the
|
|
159
|
-
// in the meanwhile if the connections are
|
|
160
|
-
//
|
|
170
|
+
// If this event is emitted, the transport manager will remove the
|
|
171
|
+
// listener from it's cache in the meanwhile if the connections are
|
|
172
|
+
// dropped then listener will start listening again and the transport
|
|
173
|
+
// manager will not be able to close the server
|
|
161
174
|
if (this.status.code !== TCPListenerStatusCode.PAUSED) {
|
|
162
|
-
this.
|
|
175
|
+
this.safeDispatchEvent('close')
|
|
163
176
|
}
|
|
164
177
|
})
|
|
165
178
|
}
|
|
@@ -191,6 +204,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
191
204
|
}
|
|
192
205
|
|
|
193
206
|
this.log('new inbound connection %s', maConn.remoteAddr)
|
|
207
|
+
|
|
194
208
|
try {
|
|
195
209
|
this.context.upgrader.upgradeInbound(maConn)
|
|
196
210
|
.then((conn) => {
|
|
@@ -204,10 +218,12 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
204
218
|
this.context.closeServerOnMaxConnections != null &&
|
|
205
219
|
this.connections.size < this.context.closeServerOnMaxConnections.listenBelow
|
|
206
220
|
) {
|
|
207
|
-
// The most likely case of error is if the port taken by this
|
|
208
|
-
// another process during the time the
|
|
209
|
-
//
|
|
210
|
-
//
|
|
221
|
+
// The most likely case of error is if the port taken by this
|
|
222
|
+
// application is bound by another process during the time the
|
|
223
|
+
// server if closed. In that case there's not much we can do.
|
|
224
|
+
// resume() will be called again every time a connection is
|
|
225
|
+
// dropped, which acts as an eventual retry mechanism.
|
|
226
|
+
// onListenError allows the consumer act on this.
|
|
211
227
|
this.resume().catch(e => {
|
|
212
228
|
this.log.error('error attempting to listen server once connection count under limit', e)
|
|
213
229
|
this.context.closeServerOnMaxConnections?.onListenError?.(e as Error)
|
|
@@ -228,7 +244,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
228
244
|
})
|
|
229
245
|
}
|
|
230
246
|
|
|
231
|
-
this.
|
|
247
|
+
this.safeDispatchEvent('connection', { detail: conn })
|
|
232
248
|
})
|
|
233
249
|
.catch(async err => {
|
|
234
250
|
this.log.error('inbound connection failed', err)
|
|
@@ -311,15 +327,15 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
311
327
|
}
|
|
312
328
|
|
|
313
329
|
async close (): Promise<void> {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
330
|
+
const err = new CodeError('Listener is closing', 'ERR_LISTENER_CLOSING')
|
|
331
|
+
|
|
332
|
+
// synchronously close each connection
|
|
333
|
+
this.connections.forEach(conn => {
|
|
334
|
+
conn.abort(err)
|
|
335
|
+
})
|
|
336
|
+
|
|
337
|
+
// shut down the server socket, permanently
|
|
338
|
+
await this.pause(true)
|
|
323
339
|
}
|
|
324
340
|
|
|
325
341
|
/**
|
|
@@ -333,13 +349,14 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
333
349
|
const netConfig = this.status.netConfig
|
|
334
350
|
|
|
335
351
|
await new Promise<void>((resolve, reject) => {
|
|
336
|
-
// NOTE: 'listening' event is only fired on success. Any error such as
|
|
352
|
+
// NOTE: 'listening' event is only fired on success. Any error such as
|
|
353
|
+
// port already bound, is emitted via 'error'
|
|
337
354
|
this.server.once('error', reject)
|
|
338
355
|
this.server.listen(netConfig, resolve)
|
|
339
356
|
})
|
|
340
357
|
|
|
341
358
|
this.status = { ...this.status, code: TCPListenerStatusCode.ACTIVE }
|
|
342
|
-
this.log('
|
|
359
|
+
this.log('listening on %s', this.server.address())
|
|
343
360
|
}
|
|
344
361
|
|
|
345
362
|
private async pause (permanent: boolean): Promise<void> {
|
|
@@ -352,7 +369,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
352
369
|
return
|
|
353
370
|
}
|
|
354
371
|
|
|
355
|
-
this.log('
|
|
372
|
+
this.log('closing server on %s', this.server.address())
|
|
356
373
|
|
|
357
374
|
// NodeJS implementation tracks listening status with `this._handle` property.
|
|
358
375
|
// - Server.close() sets this._handle to null immediately. If this._handle is null, ERR_SERVER_NOT_RUNNING is thrown
|
|
@@ -370,8 +387,16 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
370
387
|
// We need to set this status before closing server, so other procedures are aware
|
|
371
388
|
// during the time the server is closing
|
|
372
389
|
this.status = permanent ? { code: TCPListenerStatusCode.INACTIVE } : { ...this.status, code: TCPListenerStatusCode.PAUSED }
|
|
390
|
+
|
|
373
391
|
await new Promise<void>((resolve, reject) => {
|
|
374
|
-
this.server.close(err => {
|
|
392
|
+
this.server.close(err => {
|
|
393
|
+
if (err != null) {
|
|
394
|
+
reject(err)
|
|
395
|
+
return
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
resolve()
|
|
399
|
+
})
|
|
375
400
|
})
|
|
376
401
|
}
|
|
377
402
|
}
|
package/src/socket-to-conn.ts
CHANGED
|
@@ -141,12 +141,19 @@ export const toMultiaddrConnection = (socket: Socket, options: ToConnectionOptio
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
const abortSignalListener = (): void => {
|
|
145
|
+
socket.destroy(new CodeError('Destroying socket after timeout', 'ERR_CLOSE_TIMEOUT'))
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
options.signal?.addEventListener('abort', abortSignalListener)
|
|
149
|
+
|
|
144
150
|
try {
|
|
145
151
|
log('%s closing socket', lOptsStr)
|
|
146
152
|
await new Promise<void>((resolve, reject) => {
|
|
147
153
|
socket.once('close', () => {
|
|
148
154
|
// socket completely closed
|
|
149
155
|
log('%s socket closed', lOptsStr)
|
|
156
|
+
|
|
150
157
|
resolve()
|
|
151
158
|
})
|
|
152
159
|
socket.once('error', (err: Error) => {
|
|
@@ -181,6 +188,8 @@ export const toMultiaddrConnection = (socket: Socket, options: ToConnectionOptio
|
|
|
181
188
|
})
|
|
182
189
|
} catch (err: any) {
|
|
183
190
|
this.abort(err)
|
|
191
|
+
} finally {
|
|
192
|
+
options.signal?.removeEventListener('abort', abortSignalListener)
|
|
184
193
|
}
|
|
185
194
|
},
|
|
186
195
|
|
|
@@ -188,6 +197,10 @@ export const toMultiaddrConnection = (socket: Socket, options: ToConnectionOptio
|
|
|
188
197
|
log('%s socket abort due to error', lOptsStr, err)
|
|
189
198
|
|
|
190
199
|
socket.destroy(err)
|
|
200
|
+
|
|
201
|
+
if (maConn.timeline.close == null) {
|
|
202
|
+
maConn.timeline.close = Date.now()
|
|
203
|
+
}
|
|
191
204
|
},
|
|
192
205
|
|
|
193
206
|
log
|
package/dist/typedoc-urls.json
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"TCPComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPComponents.html",
|
|
3
|
-
".:TCPComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPComponents.html",
|
|
4
|
-
"TCPCreateListenerOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPCreateListenerOptions.html",
|
|
5
|
-
".:TCPCreateListenerOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPCreateListenerOptions.html",
|
|
6
|
-
"TCPDialOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPDialOptions.html",
|
|
7
|
-
".:TCPDialOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPDialOptions.html",
|
|
8
|
-
"TCPMetrics": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPMetrics.html",
|
|
9
|
-
".:TCPMetrics": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPMetrics.html",
|
|
10
|
-
"TCPOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPOptions.html",
|
|
11
|
-
".:TCPOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPOptions.html",
|
|
12
|
-
"TCPSocketOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPSocketOptions.html",
|
|
13
|
-
".:TCPSocketOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPSocketOptions.html",
|
|
14
|
-
"tcp": "https://libp2p.github.io/js-libp2p/functions/_libp2p_tcp.tcp.html",
|
|
15
|
-
".:tcp": "https://libp2p.github.io/js-libp2p/functions/_libp2p_tcp.tcp.html"
|
|
16
|
-
}
|