@libp2p/websockets 9.0.13 → 9.1.0
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 +2 -36
- package/dist/index.min.js +1 -1
- package/dist/src/index.d.ts +27 -38
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -43
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts +50 -5
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js +294 -97
- package/dist/src/listener.js.map +1 -1
- package/package.json +14 -14
- package/src/index.ts +35 -48
- package/src/listener.ts +348 -110
- package/LICENSE +0 -4
package/README.md
CHANGED
|
@@ -41,44 +41,10 @@ const node = await createLibp2p({
|
|
|
41
41
|
})
|
|
42
42
|
await node.start()
|
|
43
43
|
|
|
44
|
-
const ma = multiaddr('/
|
|
44
|
+
const ma = multiaddr('/dns4/example.com/tcp/9090/tls/ws')
|
|
45
45
|
await node.dial(ma)
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
## Filters
|
|
49
|
-
|
|
50
|
-
When run in a browser by default this module will only connect to secure web socket addresses.
|
|
51
|
-
|
|
52
|
-
To change this you should pass a filter to the factory function.
|
|
53
|
-
|
|
54
|
-
You can create your own address filters for this transports, or rely in the filters [provided](./src/filters.js).
|
|
55
|
-
|
|
56
|
-
The available filters are:
|
|
57
|
-
|
|
58
|
-
- `filters.all`
|
|
59
|
-
- Returns all TCP and DNS based addresses, both with `ws` or `wss`.
|
|
60
|
-
- `filters.dnsWss`
|
|
61
|
-
- Returns all DNS based addresses with `wss`.
|
|
62
|
-
- `filters.dnsWsOrWss`
|
|
63
|
-
- Returns all DNS based addresses, both with `ws` or `wss`.
|
|
64
|
-
|
|
65
|
-
## Example - Allow dialing insecure WebSockets
|
|
66
|
-
|
|
67
|
-
```TypeScript
|
|
68
|
-
import { createLibp2p } from 'libp2p'
|
|
69
|
-
import { webSockets } from '@libp2p/websockets'
|
|
70
|
-
import * as filters from '@libp2p/websockets/filters'
|
|
71
|
-
|
|
72
|
-
const node = await createLibp2p({
|
|
73
|
-
transports: [
|
|
74
|
-
webSockets({
|
|
75
|
-
// connect to all sockets, even insecure ones
|
|
76
|
-
filter: filters.all
|
|
77
|
-
})
|
|
78
|
-
]
|
|
79
|
-
})
|
|
80
|
-
```
|
|
81
|
-
|
|
82
48
|
# Install
|
|
83
49
|
|
|
84
50
|
```console
|
|
@@ -87,7 +53,7 @@ $ npm i @libp2p/websockets
|
|
|
87
53
|
|
|
88
54
|
## Browser `<script>` tag
|
|
89
55
|
|
|
90
|
-
Loading this module through a script tag will make
|
|
56
|
+
Loading this module through a script tag will make its exports available as `Libp2pWebsockets` in the global namespace.
|
|
91
57
|
|
|
92
58
|
```html
|
|
93
59
|
<script src="https://unpkg.com/@libp2p/websockets/dist/index.min.js"></script>
|
package/dist/index.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2PWebsockets = factory()}(typeof self !== 'undefined' ? self : this, function () {
|
|
2
|
-
"use strict";var Libp2PWebsockets=(()=>{var on=Object.create;var we=Object.defineProperty;var sn=Object.getOwnPropertyDescriptor;var an=Object.getOwnPropertyNames;var cn=Object.getPrototypeOf,pn=Object.prototype.hasOwnProperty;var ze=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),T=(t,e)=>{for(var r in e)we(t,r,{get:e[r],enumerable:!0})},kt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of an(e))!pn.call(t,o)&&o!==r&&we(t,o,{get:()=>e[o],enumerable:!(n=sn(e,o))||n.enumerable});return t};var Ot=(t,e,r)=>(r=t!=null?on(cn(t)):{},kt(e||!t||!t.__esModule?we(r,"default",{value:t,enumerable:!0}):r,t)),un=t=>kt(we({},"__esModule",{value:!0}),t);var Nr=ze(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});var At=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let r={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(r)}else this.pushQueue.push(Promise.resolve(r)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let r of this.pullQueue)r.reject(e);this.pullQueue.length=0}else{let r=Promise.reject(e);r.catch(()=>{}),this.pushQueue.push(r)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let r=this.pushQueue.shift();return r?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),r):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Ue=class{constructor(e,{highWaterMark:r=100,lowWaterMark:n=1}={}){let o=new At;o.highWaterMark=r,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Ne.EventIterator=Ue;Ne.default=Ue});var Dr=ze(de=>{"use strict";Object.defineProperty(de,"__esModule",{value:!0});var Ct=Nr();de.EventIterator=Ct.EventIterator;function qo(t,e,r){return new Ct.EventIterator(({push:n})=>(this.addEventListener(t,n,e),()=>this.removeEventListener(t,n,e)),r)}de.subscribe=qo;de.default=Ct.EventIterator});var Rr=ze((Ec,Br)=>{function Go(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}Br.exports=Go});var is={};T(is,{webSockets:()=>ss});var Vt=Symbol.for("@libp2p/transport");var zt;(function(t){t[t.FATAL_ALL=0]="FATAL_ALL",t[t.NO_FATAL=1]="NO_FATAL"})(zt||(zt={}));var ge=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}};var be=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}};var Wt=Symbol.for("@libp2p/service-capabilities"),us=Symbol.for("@libp2p/service-dependencies");var _e={};T(_e,{base58btc:()=>v,base58flickr:()=>xn});var Fs=new Uint8Array(0);function Bt(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}function z(t){if(t instanceof Uint8Array&&t.constructor.name==="Uint8Array")return t;if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new Error("Unknown type, must be binary type")}function Rt(t){return new TextEncoder().encode(t)}function _t(t){return new TextDecoder().decode(t)}function ln(t,e){if(t.length>=255)throw new TypeError("Alphabet too long");for(var r=new Uint8Array(256),n=0;n<r.length;n++)r[n]=255;for(var o=0;o<t.length;o++){var s=t.charAt(o),i=s.charCodeAt(0);if(r[i]!==255)throw new TypeError(s+" is ambiguous");r[i]=o}var a=t.length,c=t.charAt(0),w=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function b(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var P=0,Q=0,D=0,$=h.length;D!==$&&h[D]===0;)D++,P++;for(var F=($-D)*u+1>>>0,N=new Uint8Array(F);D!==$;){for(var M=h[D],R=0,L=F-1;(M!==0||R<Q)&&L!==-1;L--,R++)M+=256*N[L]>>>0,N[L]=M%a>>>0,M=M/a>>>0;if(M!==0)throw new Error("Non-zero carry");Q=R,D++}for(var O=F-Q;O!==F&&N[O]===0;)O++;for(var xe=c.repeat(P);O<F;++O)xe+=t.charAt(N[O]);return xe}function I(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var P=0;if(h[P]!==" "){for(var Q=0,D=0;h[P]===c;)Q++,P++;for(var $=(h.length-P)*w+1>>>0,F=new Uint8Array($);h[P];){var N=r[h.charCodeAt(P)];if(N===255)return;for(var M=0,R=$-1;(N!==0||M<D)&&R!==-1;R--,M++)N+=a*F[R]>>>0,F[R]=N%256>>>0,N=N/256>>>0;if(N!==0)throw new Error("Non-zero carry");D=M,P++}if(h[P]!==" "){for(var L=$-D;L!==$&&F[L]===0;)L++;for(var O=new Uint8Array(Q+($-L)),xe=Q;L!==$;)O[xe++]=F[L++];return O}}}function U(h){var P=I(h);if(P)return P;throw new Error(`Non-${e} character`)}return{encode:b,decodeUnsafe:I,decode:U}}var dn=ln,fn=dn,Qt=fn;var Ve=class{name;prefix;baseEncode;constructor(e,r,n){this.name=e,this.prefix=r,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},We=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,r,n){this.name=e,this.prefix=r;let o=r.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,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 qt(this,e)}},Be=class{decoders;constructor(e){this.decoders=e}or(e){return qt(this,e)}decode(e){let r=e[0],n=this.decoders[r];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 qt(t,e){return new Be({...t.decoders??{[t.prefix]:t},...e.decoders??{[e.prefix]:e}})}var Re=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,r,n,o){this.name=e,this.prefix=r,this.baseEncode=n,this.baseDecode=o,this.encoder=new Ve(e,r,n),this.decoder=new We(e,r,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function J({name:t,prefix:e,encode:r,decode:n}){return new Re(t,e,r,n)}function _({name:t,prefix:e,alphabet:r}){let{encode:n,decode:o}=Qt(r,t);return J({prefix:e,name:t,encode:n,decode:s=>z(o(s))})}function hn(t,e,r,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let s=t.length;for(;t[s-1]==="=";)--s;let i=new Uint8Array(s*r/8|0),a=0,c=0,w=0;for(let u=0;u<s;++u){let b=o[t[u]];if(b===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<r|b,a+=r,a>=8&&(a-=8,i[w++]=255&c>>a)}if(a>=r||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function mn(t,e,r){let n=e[e.length-1]==="=",o=(1<<r)-1,s="",i=0,a=0;for(let c=0;c<t.length;++c)for(a=a<<8|t[c],i+=8;i>r;)i-=r,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<r-i]),n)for(;s.length*r&7;)s+="=";return s}function y({name:t,prefix:e,bitsPerChar:r,alphabet:n}){return J({prefix:e,name:t,encode(o){return mn(o,n,r)},decode(o){return hn(o,n,r,t)}})}var v=_({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),xn=_({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var je={};T(je,{base32:()=>V,base32hex:()=>yn,base32hexpad:()=>En,base32hexpadupper:()=>Sn,base32hexupper:()=>vn,base32pad:()=>gn,base32padupper:()=>bn,base32upper:()=>wn,base32z:()=>In});var V=y({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),wn=y({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),gn=y({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),bn=y({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),yn=y({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),vn=y({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),En=y({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Sn=y({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),In=y({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Qe={};T(Qe,{base36:()=>se,base36upper:()=>Pn});var se=_({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Pn=_({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var An=Jt,Ht=128,Cn=127,Tn=~Cn,Un=Math.pow(2,31);function Jt(t,e,r){e=e||[],r=r||0;for(var n=r;t>=Un;)e[r++]=t&255|Ht,t/=128;for(;t&Tn;)e[r++]=t&255|Ht,t>>>=7;return e[r]=t|0,Jt.bytes=r-n+1,e}var Nn=qe,Dn=128,Gt=127;function qe(t,n){var r=0,n=n||0,o=0,s=n,i,a=t.length;do{if(s>=a)throw qe.bytes=0,new RangeError("Could not decode varint");i=t[s++],r+=o<28?(i&Gt)<<o:(i&Gt)*Math.pow(2,o),o+=7}while(i>=Dn);return qe.bytes=s-n,r}var Ln=Math.pow(2,7),$n=Math.pow(2,14),Fn=Math.pow(2,21),Mn=Math.pow(2,28),kn=Math.pow(2,35),On=Math.pow(2,42),zn=Math.pow(2,49),Vn=Math.pow(2,56),Wn=Math.pow(2,63),Bn=function(t){return t<Ln?1:t<$n?2:t<Fn?3:t<Mn?4:t<kn?5:t<On?6:t<zn?7:t<Vn?8:t<Wn?9:10},Rn={encode:An,decode:Nn,encodingLength:Bn},_n=Rn,ie=_n;function ae(t,e=0){return[ie.decode(t,e),ie.decode.bytes]}function X(t,e,r=0){return ie.encode(t,e,r),e}function K(t){return ie.encodingLength(t)}function q(t,e){let r=e.byteLength,n=K(t),o=n+K(r),s=new Uint8Array(o+r);return X(t,s,0),X(r,s,n),s.set(e,o),new Z(t,r,e,s)}function ve(t){let e=z(t),[r,n]=ae(e),[o,s]=ae(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Z(r,o,i,e)}function Xt(t,e){if(t===e)return!0;{let r=e;return t.code===r.code&&t.size===r.size&&r.bytes instanceof Uint8Array&&Bt(t.bytes,r.bytes)}}var Z=class{code;size;digest;bytes;constructor(e,r,n,o){this.code=e,this.size=r,this.digest=n,this.bytes=o}};function Kt(t,e){let{bytes:r,version:n}=t;switch(n){case 0:return Qn(r,He(t),e??v.encoder);default:return qn(r,He(t),e??V.encoder)}}var Zt=new WeakMap;function He(t){let e=Zt.get(t);if(e==null){let r=new Map;return Zt.set(t,r),r}return e}var j=class t{code;version;multihash;bytes;"/";constructor(e,r,n,o){this.code=r,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:r}=this;if(e!==ce)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(r.code!==Hn)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return t.createV0(r)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:r}=this.multihash,n=q(e,r);return t.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return t.equals(this,e)}static equals(e,r){let n=r;return n!=null&&e.code===n.code&&e.version===n.version&&Xt(e.multihash,n.multihash)}toString(e){return Kt(this,e)}toJSON(){return{"/":Kt(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 r=e;if(r instanceof t)return r;if(r["/"]!=null&&r["/"]===r.bytes||r.asCID===r){let{version:n,code:o,multihash:s,bytes:i}=r;return new t(n,o,s,i??Yt(n,o,s.bytes))}else if(r[Gn]===!0){let{version:n,multihash:o,code:s}=r,i=ve(o);return t.create(n,s,i)}else return null}static create(e,r,n){if(typeof r!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(r!==ce)throw new Error(`Version 0 CID must use dag-pb (code: ${ce}) block encoding`);return new t(e,r,n,n.bytes)}case 1:{let o=Yt(e,r,n.bytes);return new t(e,r,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return t.create(0,ce,e)}static createV1(e,r){return t.create(1,e,r)}static decode(e){let[r,n]=t.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return r}static decodeFirst(e){let r=t.inspectBytes(e),n=r.size-r.multihashSize,o=z(e.subarray(n,n+r.multihashSize));if(o.byteLength!==r.multihashSize)throw new Error("Incorrect length");let s=o.subarray(r.multihashSize-r.digestSize),i=new Z(r.multihashCode,r.digestSize,s,o);return[r.version===0?t.createV0(i):t.createV1(r.codec,i),e.subarray(r.size)]}static inspectBytes(e){let r=0,n=()=>{let[b,I]=ae(e.subarray(r));return r+=I,b},o=n(),s=ce;if(o===18?(o=0,r=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=r,a=n(),c=n(),w=r+c,u=w-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:u,size:w}}static parse(e,r){let[n,o]=jn(e,r),s=t.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return He(s).set(n,e),s}};function jn(t,e){switch(t[0]){case"Q":{let r=e??v;return[v.prefix,r.decode(`${v.prefix}${t}`)]}case v.prefix:{let r=e??v;return[v.prefix,r.decode(t)]}case V.prefix:{let r=e??V;return[V.prefix,r.decode(t)]}case se.prefix:{let r=e??se;return[se.prefix,r.decode(t)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[t[0],e.decode(t)]}}}function Qn(t,e,r){let{prefix:n}=r;if(n!==v.prefix)throw Error(`Cannot string encode V0 in ${r.name} encoding`);let o=e.get(n);if(o==null){let s=r.encode(t).slice(1);return e.set(n,s),s}else return o}function qn(t,e,r){let{prefix:n}=r,o=e.get(n);if(o==null){let s=r.encode(t);return e.set(n,s),s}else return o}var ce=112,Hn=18;function Yt(t,e,r){let n=K(t),o=n+K(e),s=new Uint8Array(o+r.byteLength);return X(t,s,0),X(e,s,n),s.set(r,o),s}var Gn=Symbol.for("@ipld/js-cid/CID");function er(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}var Ge={};T(Ge,{base10:()=>Jn});var Jn=_({prefix:"9",name:"base10",alphabet:"0123456789"});var Je={};T(Je,{base16:()=>Xn,base16upper:()=>Kn});var Xn=y({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Kn=y({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Xe={};T(Xe,{base2:()=>Zn});var Zn=y({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Ke={};T(Ke,{base256emoji:()=>no});var tr=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}"),Yn=tr.reduce((t,e,r)=>(t[r]=e,t),[]),eo=tr.reduce((t,e,r)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return t[n]=r,t},[]);function to(t){return t.reduce((e,r)=>(e+=Yn[r],e),"")}function ro(t){let e=[];for(let r of t){let n=r.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${r}`);let o=eo[n];if(o==null)throw new Error(`Non-base256emoji character: ${r}`);e.push(o)}return new Uint8Array(e)}var no=J({prefix:"\u{1F680}",name:"base256emoji",encode:to,decode:ro});var Ye={};T(Ye,{base64:()=>oo,base64pad:()=>so,base64url:()=>Ze,base64urlpad:()=>io});var oo=y({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),so=y({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Ze=y({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),io=y({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var et={};T(et,{base8:()=>ao});var ao=y({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var tt={};T(tt,{identity:()=>co});var co=J({prefix:"\0",name:"identity",encode:t=>_t(t),decode:t=>Rt(t)});var ii=new TextEncoder,ai=new TextDecoder;var rt={};T(rt,{identity:()=>ho});var rr=0,lo="identity",nr=z;function fo(t){return q(rr,nr(t))}var ho={code:rr,name:lo,encode:nr,digest:fo};var st={};T(st,{sha256:()=>mo,sha512:()=>xo});function ot({name:t,code:e,encode:r}){return new nt(t,e,r)}var nt=class{name;code;encode;constructor(e,r,n){this.name=e,this.code=r,this.encode=n}digest(e){if(e instanceof Uint8Array){let r=this.encode(e);return r instanceof Uint8Array?q(this.code,r):r.then(n=>q(this.code,n))}else throw Error("Unknown type, must be binary type")}};function sr(t){return async e=>new Uint8Array(await crypto.subtle.digest(t,e))}var mo=ot({name:"sha2-256",code:18,encode:sr("SHA-256")}),xo=ot({name:"sha2-512",code:19,encode:sr("SHA-512")});var pe={...tt,...Xe,...et,...Ge,...Je,...je,...Qe,..._e,...Ye,...Ke},yi={...st,...rt};function ee(t=0){return new Uint8Array(t)}function ar(t,e,r,n){return{name:t,prefix:e,encoder:{name:t,prefix:e,encode:r},decoder:{decode:n}}}var ir=ar("utf8","u",t=>"u"+new TextDecoder("utf8").decode(t),t=>new TextEncoder().encode(t.substring(1))),it=ar("ascii","a",t=>{let e="a";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},t=>{t=t.substring(1);let e=ee(t.length);for(let r=0;r<t.length;r++)e[r]=t.charCodeAt(r);return e}),wo={utf8:ir,"utf-8":ir,hex:pe.base16,latin1:it,ascii:it,binary:it,...pe},Ee=wo;function A(t,e="utf8"){let r=Ee[e];if(r==null)throw new Error(`Unsupported encoding "${e}"`);return r.encoder.encode(t).substring(1)}var go=Math.pow(2,7),bo=Math.pow(2,14),yo=Math.pow(2,21),at=Math.pow(2,28),ct=Math.pow(2,35),pt=Math.pow(2,42),ut=Math.pow(2,49),m=128,E=127;function k(t){if(t<go)return 1;if(t<bo)return 2;if(t<yo)return 3;if(t<at)return 4;if(t<ct)return 5;if(t<pt)return 6;if(t<ut)return 7;if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function vo(t,e,r=0){switch(k(t)){case 8:e[r++]=t&255|m,t/=128;case 7:e[r++]=t&255|m,t/=128;case 6:e[r++]=t&255|m,t/=128;case 5:e[r++]=t&255|m,t/=128;case 4:e[r++]=t&255|m,t>>>=7;case 3:e[r++]=t&255|m,t>>>=7;case 2:e[r++]=t&255|m,t>>>=7;case 1:{e[r++]=t&255,t>>>=7;break}default:throw new Error("unreachable")}return e}function Eo(t,e,r=0){switch(k(t)){case 8:e.set(r++,t&255|m),t/=128;case 7:e.set(r++,t&255|m),t/=128;case 6:e.set(r++,t&255|m),t/=128;case 5:e.set(r++,t&255|m),t/=128;case 4:e.set(r++,t&255|m),t>>>=7;case 3:e.set(r++,t&255|m),t>>>=7;case 2:e.set(r++,t&255|m),t>>>=7;case 1:{e.set(r++,t&255),t>>>=7;break}default:throw new Error("unreachable")}return e}function So(t,e){let r=t[e],n=0;if(n+=r&E,r<m||(r=t[e+1],n+=(r&E)<<7,r<m)||(r=t[e+2],n+=(r&E)<<14,r<m)||(r=t[e+3],n+=(r&E)<<21,r<m)||(r=t[e+4],n+=(r&E)*at,r<m)||(r=t[e+5],n+=(r&E)*ct,r<m)||(r=t[e+6],n+=(r&E)*pt,r<m)||(r=t[e+7],n+=(r&E)*ut,r<m))return n;throw new RangeError("Could not decode varint")}function Io(t,e){let r=t.get(e),n=0;if(n+=r&E,r<m||(r=t.get(e+1),n+=(r&E)<<7,r<m)||(r=t.get(e+2),n+=(r&E)<<14,r<m)||(r=t.get(e+3),n+=(r&E)<<21,r<m)||(r=t.get(e+4),n+=(r&E)*at,r<m)||(r=t.get(e+5),n+=(r&E)*ct,r<m)||(r=t.get(e+6),n+=(r&E)*pt,r<m)||(r=t.get(e+7),n+=(r&E)*ut,r<m))return n;throw new RangeError("Could not decode varint")}function te(t,e,r=0){return e==null&&(e=ee(k(t))),e instanceof Uint8Array?vo(t,e,r):Eo(t,e,r)}function H(t,e=0){return t instanceof Uint8Array?So(t,e):Io(t,e)}function W(t,e){e==null&&(e=t.reduce((o,s)=>o+s.length,0));let r=ee(e),n=0;for(let o of t)r.set(o,n),n+=o.length;return r}var Se=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let r=this.index,n=e();return n===void 0&&(this.index=r),n}parseWith(e){let r=e();if(this.index===this.input.length)return r}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let r=this.readChar();if(r===e)return r})}readSeparator(e,r,n){return this.readAtomically(()=>{if(!(r>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,r,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",w=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let b=this.readChar();if(b===void 0)return;let I=Number.parseInt(b,e);if(!Number.isNaN(I))return I});if(u===void 0)break;if(s*=e,s+=u,s>w||(i+=1,r!==void 0&&i>r))return}if(i!==0)return!n&&c&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let r=0;r<e.length;r++){let n=this.readSeparator(".",r,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[r]=n}return e})}readIPv6Addr(){let e=r=>{for(let n=0;n<r.length/2;n++){let o=n*2;if(n<r.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return r[o]=i[0],r[o+1]=i[1],r[o+2]=i[2],r[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];r[o]=s>>8,r[o+1]=s&255}return[r.length,!1]};return this.readAtomically(()=>{let r=new Uint8Array(16),[n,o]=e(r);if(n===16)return r;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return r.set(s.subarray(0,a),16-a),r})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var pr=45,Po=15,re=new Se;function lt(t){if(!(t.length>Po))return re.new(t).parseWith(()=>re.readIPv4Addr())}function dt(t){if(t.includes("%")&&(t=t.split("%")[0]),!(t.length>pr))return re.new(t).parseWith(()=>re.readIPv6Addr())}function Ie(t){if(t.includes("%")&&(t=t.split("%")[0]),!(t.length>pr))return re.new(t).parseWith(()=>re.readIPAddr())}var _i=parseInt("0xFFFF",16),ji=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function ue(t,e="utf8"){let r=Ee[e];if(r==null)throw new Error(`Unsupported encoding "${e}"`);return r.decoder.decode(`${r.prefix}${t}`)}function Pe(t){return!!lt(t)}function Ae(t){return!!dt(t)}function Ce(t){return!!Ie(t)}var dr=Pe,No=Ae,ft=function(t){let e=0;if(t=t.toString().trim(),dr(t)){let r=new Uint8Array(e+4);return t.split(/\./g).forEach(n=>{r[e++]=parseInt(n,10)&255}),r}if(No(t)){let r=t.split(":",8),n;for(n=0;n<r.length;n++){let s=dr(r[n]),i;s&&(i=ft(r[n]),r[n]=A(i.slice(0,2),"base16")),i!=null&&++n<8&&r.splice(n,0,A(i.slice(2,4),"base16"))}if(r[0]==="")for(;r.length<8;)r.unshift("0");else if(r[r.length-1]==="")for(;r.length<8;)r.push("0");else if(r.length<8){for(n=0;n<r.length&&r[n]!=="";n++);let s=[n,1];for(n=9-r.length;n>0;n--)s.push("0");r.splice.apply(r,s)}let o=new Uint8Array(e+16);for(n=0;n<r.length;n++){let s=parseInt(r[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},fr=function(t,e=0,r){e=~~e,r=r??t.length-e;let n=new DataView(t.buffer);if(r===4){let o=[];for(let s=0;s<r;s++)o.push(t[e+s]);return o.join(".")}if(r===16){let o=[];for(let s=0;s<r;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var ne={},ht={},Lo=[[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"],[481,-1,"http-path"],[777,-1,"memory"]];Lo.forEach(t=>{let e=$o(...t);ht[e.code]=e,ne[e.name]=e});function $o(t,e,r,n,o){return{code:t,size:e,name:r,resolvable:!!n,path:!!o}}function p(t){if(typeof t=="number"){if(ht[t]!=null)return ht[t];throw new Error(`no protocol with code: ${t}`)}else if(typeof t=="string"){if(ne[t]!=null)return ne[t];throw new Error(`no protocol with name: ${t}`)}throw new Error(`invalid protocol id type: ${typeof t}`)}var Ua=p("ip4"),Na=p("ip6"),Da=p("ipcidr");function gt(t,e){switch(p(t).code){case 4:case 41:return Mo(e);case 42:return wt(e);case 6:case 273:case 33:case 132:return xr(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return wt(e);case 421:return Vo(e);case 444:return mr(e);case 445:return mr(e);case 466:return zo(e);case 481:return globalThis.encodeURIComponent(wt(e));default:return A(e,"base16")}}function bt(t,e){switch(p(t).code){case 4:return hr(e);case 41:return hr(e);case 42:return xt(e);case 6:case 273:case 33:case 132:return yt(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return xt(e);case 421:return ko(e);case 444:return Wo(e);case 445:return Bo(e);case 466:return Oo(e);case 481:return xt(globalThis.decodeURIComponent(e));default:return ue(e,"base16")}}var mt=Object.values(pe).map(t=>t.decoder),Fo=function(){let t=mt[0].or(mt[1]);return mt.slice(2).forEach(e=>t=t.or(e)),t}();function hr(t){if(!Ce(t))throw new Error("invalid ip address");return ft(t)}function Mo(t){let e=fr(t,0,t.length);if(e==null)throw new Error("ipBuff is required");if(!Ce(e))throw new Error("invalid ip address");return e}function yt(t){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,t),new Uint8Array(e)}function xr(t){return new DataView(t.buffer).getUint16(t.byteOffset)}function xt(t){let e=ue(t),r=Uint8Array.from(te(e.length));return W([r,e],r.length+e.length)}function wt(t){let e=H(t);if(t=t.slice(k(e)),t.length!==e)throw new Error("inconsistent lengths");return A(t)}function ko(t){let e;t[0]==="Q"||t[0]==="1"?e=ve(v.decode(`z${t}`)).bytes:e=j.parse(t).multihash.bytes;let r=Uint8Array.from(te(e.length));return W([r,e],r.length+e.length)}function Oo(t){let e=Fo.decode(t),r=Uint8Array.from(te(e.length));return W([r,e],r.length+e.length)}function zo(t){let e=H(t),r=t.slice(k(e));if(r.length!==e)throw new Error("inconsistent lengths");return"u"+A(r,"base64url")}function Vo(t){let e=H(t),r=t.slice(k(e));if(r.length!==e)throw new Error("inconsistent lengths");return A(r,"base58btc")}function Wo(t){let e=t.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let r=V.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=yt(n);return W([r,o],r.length+o.length)}function Bo(t){let e=t.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let r=V.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=yt(n);return W([r,o],r.length+o.length)}function mr(t){let e=t.slice(0,t.length-2),r=t.slice(t.length-2),n=A(e,"base32"),o=xr(r);return`${n}:${o}`}function wr(t){t=vt(t);let e=[],r=[],n=null,o=t.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=p(i);if(a.size===0){e.push([a.code]),r.push([a.code]);continue}if(s++,s>=o.length)throw br("invalid address: "+t);if(a.path===!0){n=vt(o.slice(s).join("/")),e.push([a.code,bt(a.code,n)]),r.push([a.code,n]);break}let c=bt(a.code,o[s]);e.push([a.code,c]),r.push([a.code,gt(a.code,c)])}return{string:gr(r),bytes:St(e),tuples:e,stringTuples:r,path:n}}function Et(t){let e=[],r=[],n=null,o=0;for(;o<t.length;){let s=H(t,o),i=k(s),a=p(s),c=Ro(a,t.slice(o+i));if(c===0){e.push([s]),r.push([s]),o+=i;continue}let w=t.slice(o+i,o+i+c);if(o+=c+i,o>t.length)throw br("Invalid address Uint8Array: "+A(t,"base16"));e.push([s,w]);let u=gt(s,w);if(r.push([s,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(t),string:gr(r),tuples:e,stringTuples:r,path:n}}function gr(t){let e=[];return t.map(r=>{let n=p(r[0]);return e.push(n.name),r.length>1&&r[1]!=null&&e.push(r[1]),null}),vt(e.join("/"))}function St(t){return W(t.map(e=>{let r=p(e[0]),n=Uint8Array.from(te(r.code));return e.length>1&&e[1]!=null&&(n=W([n,e[1]])),n}))}function Ro(t,e){if(t.size>0)return t.size/8;if(t.size===0)return 0;{let r=H(e instanceof Uint8Array?e:Uint8Array.from(e));return r+k(r)}}function vt(t){return"/"+t.trim().split("/").filter(e=>e).join("/")}function br(t){return new Error("Error parsing address: "+t)}var _o=Symbol.for("nodejs.util.inspect.custom"),Pt=Symbol.for("@multiformats/js-multiaddr/multiaddr"),jo=[p("dns").code,p("dns4").code,p("dns6").code,p("dnsaddr").code],It=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Te=class t{bytes;#t;#e;#r;#n;[Pt]=!0;constructor(e){e==null&&(e="");let r;if(e instanceof Uint8Array)r=Et(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);r=wr(e)}else if(vr(e))r=Et(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=r.bytes,this.#t=r.string,this.#e=r.tuples,this.#r=r.stringTuples,this.#n=r.path}toString(){return this.#t}toJSON(){return this.toString()}toOptions(){let e,r,n,o,s="",i=p("tcp"),a=p("udp"),c=p("ip4"),w=p("ip6"),u=p("dns6"),b=p("ip6zone");for(let[U,h]of this.stringTuples())U===b.code&&(s=`%${h??""}`),jo.includes(U)&&(r=i.name,o=443,n=`${h??""}${s}`,e=U===u.code?6:4),(U===i.code||U===a.code)&&(r=p(U).name,o=parseInt(h??"")),(U===c.code||U===w.code)&&(r=p(U).name,n=`${h??""}${s}`,e=U===w.code?6:4);if(e==null||r==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:r,port:o}}protos(){return this.#e.map(([e])=>Object.assign({},p(e)))}protoCodes(){return this.#e.map(([e])=>e)}protoNames(){return this.#e.map(([e])=>p(e).name)}tuples(){return this.#e}stringTuples(){return this.#r}encapsulate(e){return e=new t(e),new t(this.toString()+e.toString())}decapsulate(e){let r=e.toString(),n=this.toString(),o=n.lastIndexOf(r);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new t(n.slice(0,o))}decapsulateCode(e){let r=this.tuples();for(let n=r.length-1;n>=0;n--)if(r[n][0]===e)return new t(St(r.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===ne.p2p.code&&e.push([n,o]),n===ne["p2p-circuit"].code&&(e=[])});let r=e.pop();if(r?.[1]!=null){let n=r[1];return n[0]==="Q"||n[0]==="1"?A(v.decode(`z${n}`),"base58btc"):A(j.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#n}equals(e){return er(this.bytes,e.bytes)}async resolve(e){let r=this.protos().find(s=>s.resolvable);if(r==null)return[this];let n=yr.get(r.name);if(n==null)throw new It(`no available resolver for ${r.name}`);return(await n(this,e)).map(s=>le(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let r=(e??this).protos();return!(r.length!==2||r[0].code!==4&&r[0].code!==41||r[1].code!==6&&r[1].code!==273)}[_o](){return`Multiaddr(${this.#t})`}};var yr=new Map;function vr(t){return!!t?.[Pt]}function le(t){return new Te(t)}var Qo=[p("tcp").code,p("dns").code,p("dnsaddr").code,p("dns4").code,p("dns6").code];function Er(t){return Pr("sni",t)?.[1]}function Sr(t){let e=Pr("tcp",t)?.[1];return e==null?"":`:${e}`}function Pr(t,e){let r;try{r=p(t).code}catch{return}for(let[n,o]of e)if(n===r&&o!=null)return[n,o]}function Ir(t){return t.some(([e,r])=>e===p("tls").code)}function C(t,e,r){let n=Ar[p(t).name];if(n==null)throw new Error(`Can't interpret protocol ${p(t).name}`);let o=n(e,r);return t===p("ip6").code?`[${o}]`:o}var Ar={ip4:(t,e)=>t,ip6:(t,e)=>e.length===0?t:`[${t}]`,tcp:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`tcp://${C(r[0],r[1]??"",e)}:${t}`},udp:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`udp://${C(r[0],r[1]??"",e)}:${t}`},dnsaddr:(t,e)=>t,dns4:(t,e)=>t,dns6:(t,e)=>t,dns:(t,e)=>t,ipfs:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${C(r[0],r[1]??"",e)}/ipfs/${t}`},p2p:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${C(r[0],r[1]??"",e)}/p2p/${t}`},http:(t,e)=>{let r=Ir(e),n=Er(e),o=Sr(e);if(r&&n!=null)return`https://${n}${o}`;let s=r?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=C(i[0],i[1]??"",e);return a=a.replace("tcp://",""),`${s}${a}`},"http-path":(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");let n=C(r[0],r[1]??"",e),o=decodeURIComponent(t);return`${n}/${o}`},tls:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return C(r[0],r[1]??"",e)},sni:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return C(r[0],r[1]??"",e)},https:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");let n=C(r[0],r[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(t,e)=>{let r=Ir(e),n=Er(e),o=Sr(e);if(r&&n!=null)return`wss://${n}${o}`;let s=r?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=C(i[0],i[1]??"",e);return a=a.replace("tcp://",""),`${s}${a}`},wss:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");let n=C(r[0],r[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${C(r[0],r[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${C(r[0],r[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${C(r[0],r[1]??"",e)}/p2p-webrtc-direct`}};function Cr(t,e){let n=le(t).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=p(o[0]),i=Ar[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&Qo.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Tr=async t=>{if(t.readyState>=2)throw new Error("socket closed");t.readyState!==1&&await new Promise((e,r)=>{function n(){t.removeEventListener("open",o),t.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),r(i.error??new Error(`connect ECONNREFUSED ${t.url}`))}t.addEventListener("open",o),t.addEventListener("error",s)})};var Ur=(t,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Tr(t)}catch(s){if(s.message==="socket closed")break;throw s}if(t.readyState===t.CLOSING||t.readyState===t.CLOSED)break;t.send(o)}e.closeOnEnd!=null&&t.readyState<=1&&await new Promise((o,s)=>{t.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{t.close()})})});var $r=Ot(Dr(),1);function Lr(t){return t instanceof ArrayBuffer||t?.constructor?.name==="ArrayBuffer"&&typeof t?.byteLength=="number"}var Fr=t=>{t.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=u=>{t.removeEventListener("open",c),t.removeEventListener("error",w),u()},c=()=>{a(s)},w=u=>{a(()=>{i(u.error??new Error(`connect ECONNREFUSED ${t.url}`))})};t.addEventListener("open",c),t.addEventListener("error",w)})},r=async function*(){let s=new $r.EventIterator(({push:i,stop:a,fail:c})=>{let w=b=>{let I=null;typeof b.data=="string"&&(I=ue(b.data)),Lr(b.data)&&(I=new Uint8Array(b.data)),b.data instanceof Uint8Array&&(I=b.data),I!=null&&i(I)},u=b=>{c(b.error??new Error("Socket error"))};return t.addEventListener("message",w),t.addEventListener("error",u),t.addEventListener("close",a),()=>{t.removeEventListener("message",w),t.removeEventListener("error",u),t.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield Lr(i)?new Uint8Array(i):i}(),n=t.readyState===1,o;return t.addEventListener("open",()=>{n=!0,o=null}),t.addEventListener("close",()=>{n=!1,o=null}),t.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${t.url}`))}),Object.assign(r,{connected:e})};var Mr=(t,e)=>{e=e??{};let r=Fr(t),n=e.remoteAddress,o=e.remotePort;if(t.url!=null)try{let i=new URL(t.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Ur(t,e),source:r,connected:async()=>{await r.connected()},close:async()=>{(t.readyState===t.CONNECTING||t.readyState===t.OPEN)&&await new Promise(i=>{t.addEventListener("close",()=>{i()}),t.close()})},destroy:()=>{t.terminate!=null?t.terminate():t.close()},remoteAddress:n,remotePort:o,socket:t}};var kr=WebSocket;var Ho={"http:":"ws:","https:":"wss:"},Or="ws:",zr=(t,e)=>{if(t.startsWith("//")&&(t=`${e?.protocol??Or}${t}`),t.startsWith("/")&&e!=null){let n=e.protocol??Or,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";t=`${n}//${o}${s}${t}`}let r=new URL(t);for(let[n,o]of Object.entries(Ho))r.protocol===n&&(r.protocol=o);return r};function Vr(t,e){let r=typeof window>"u"?void 0:window.location;e=e??{};let n=zr(t,r),o=new kr(n.toString(),e.websocket);return Mr(o,e)}function Tt(){let t={};return t.promise=new Promise((e,r)=>{t.resolve=e,t.reject=r}),t}var De=class extends Event{type;detail;constructor(e,r){super(e),this.type=e,this.detail=r}};var Le=class extends Error{type;code;constructor(e,r,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=r??"ABORT_ERR"}};async function Wr(t,e,r){if(e==null)return t;if(e.aborted)return Promise.reject(new Le(r?.errorMessage,r?.errorCode,r?.errorName));let n,o=new Le(r?.errorMessage,r?.errorCode,r?.errorName);try{return await Promise.race([t,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var _r=Ot(Rr(),1),Jo=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,jr=(0,_r.default)(),Qr=Jo&&!jr;var Sc=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!jr,qr=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Ic=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",Pc=typeof navigator<"u"&&navigator.product==="ReactNative";var Xo=t=>t.toString().split("/").slice(1),oe=t=>({match:e=>e.length<1?!1:t(e[0])?e.slice(1):!1,pattern:"fn"}),l=t=>({match:e=>oe(r=>r===t).match(e),pattern:t}),G=()=>({match:t=>oe(e=>typeof e=="string").match(t),pattern:"{string}"}),fe=()=>({match:t=>oe(e=>!isNaN(parseInt(e))).match(t),pattern:"{number}"}),x=()=>({match:t=>{if(t.length<2||t[0]!=="p2p"&&t[0]!=="ipfs")return!1;if(t[1].startsWith("Q")||t[1].startsWith("1"))try{v.decode(`z${t[1]}`)}catch{return!1}else return!1;return t.slice(2)},pattern:"/p2p/{peerid}"}),he=()=>({match:t=>{if(t.length<2||t[0]!=="certhash")return!1;try{Ze.decode(t[1])}catch{return!1}return t.slice(2)},pattern:"/certhash/{certhash}"}),f=t=>({match:e=>{let r=t.match(e);return r===!1?e:r},pattern:`optional(${t.pattern})`}),S=(...t)=>({match:e=>{let r;for(let n of t){let o=n.match(e);o!==!1&&(r==null||o.length<r.length)&&(r=o)}return r??!1},pattern:`or(${t.map(e=>e.pattern).join(", ")})`}),d=(...t)=>({match:e=>{for(let r of t){let n=r.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${t.map(e=>e.pattern).join(", ")})`});function g(...t){function e(o){let s=Xo(o);for(let i of t){let a=i.match(s);if(a===!1)return!1;s=a}return s}function r(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matchers:t,matches:r,exactMatch:n}}var Fe=d(l("dns4"),G()),Me=d(l("dns6"),G()),ke=d(l("dnsaddr"),G()),Nt=d(l("dns"),G()),Lc=g(Fe,f(x())),$c=g(Me,f(x())),Fc=g(ke,f(x())),Ko=g(S(Nt,ke,Fe,Me),f(x())),Hr=d(l("ip4"),oe(Pe)),Gr=d(l("ip6"),oe(Ae)),Dt=S(Hr,Gr),B=S(Dt,Nt,Fe,Me,ke),Mc=g(S(Dt,d(S(Nt,ke,Fe,Me),f(x())))),kc=g(Hr),Oc=g(Gr),zc=g(Dt),Lt=d(B,l("tcp"),fe()),me=d(B,l("udp"),fe()),Vc=g(d(Lt,f(x()))),Wc=g(me),$t=d(me,l("quic"),f(x())),Oe=d(me,l("quic-v1"),f(x())),Zo=S($t,Oe),Bc=g($t),Rc=g(Oe),Ut=S(B,Lt,me,$t,Oe),Jr=S(d(Ut,l("ws"),f(x()))),Xr=g(Jr),Kr=S(d(Ut,l("wss"),f(x())),d(Ut,l("tls"),f(d(l("sni"),G())),l("ws"),f(x()))),Ft=g(Kr),Zr=d(me,l("webrtc-direct"),f(he()),f(he()),f(x())),_c=g(Zr),Yr=d(Oe,l("webtransport"),f(he()),f(he()),f(x())),jc=g(Yr),$e=S(Jr,Kr,d(Lt,f(x())),d(Zo,f(x())),d(B,f(x())),Zr,Yr,x()),Qc=g($e),Yo=d($e,l("p2p-circuit"),x()),qc=g(Yo),es=S(d($e,l("p2p-circuit"),l("webrtc"),f(x())),d($e,l("webrtc"),f(x())),d(l("webrtc"),f(x()))),Hc=g(es),ts=S(d(B,l("tcp"),fe(),l("http"),f(x())),d(B,l("http"),f(x()))),Gc=g(ts),rs=S(d(B,l("tcp"),S(d(l("443"),l("http")),d(fe(),l("https"))),f(x())),d(B,l("tls"),l("http"),f(x())),d(B,l("https"),f(x()))),Jc=g(rs),ns=S(d(l("memory"),G(),f(x()))),Xc=g(ns);function en(t){return t.filter(e=>Ft.exactMatch(e)||Xr.exactMatch(e))}function tn(t){return t.filter(e=>Ft.exactMatch(e))}function rn(){throw new Error("WebSocket Servers can not be created in the browser!")}function nn(t,e,r){let n=r.logger.forComponent("libp2p:websockets:maconn"),o=r.metrics,s=r.metricPrefix??"",i={log:n,async sink(a){try{await t.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:t.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let w=()=>{let{host:u,port:b}=i.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,b,Date.now()-c),this.abort(new ge("Socket close timeout"))};a.signal?.addEventListener("abort",w);try{await t.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",w),i.timeline.close=Date.now()}},abort(a){let{host:c,port:w}=i.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,w,a),t.destroy(),i.timeline.close=Date.now(),o?.increment({[`${s}error`]:!0})}};return t.socket.addEventListener("close",()=>{o?.increment({[`${s}close`]:!0}),i.timeline.close==null&&(i.timeline.close=Date.now())},{once:!0}),i}var Mt=class{log;init;logger;metrics;components;constructor(e,r){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=r,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[Vt]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Wt]=["@libp2p/transport"];async dial(e,r){this.log("dialing %s",e),r=r??{};let n=await this._connect(e,r),o=nn(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let s=await r.upgrader.upgradeOutbound(o,r);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,r){r?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=Tt(),s=Vr(Cr(e),this.init);s.socket.addEventListener("error",()=>{let i=new be(`Could not connect to ${e.toString()}`);this.log.error("connection error:",i),this.metrics?.dialerEvents.increment({error:!0}),o.reject(i)});try{r.onProgress?.(new De("websockets:open-connection")),await Wr(Promise.race([s.connected(),o.promise]),r.signal)}catch(i){throw r.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),s.close().catch(a=>{this.log.error("error closing raw socket",a)}),i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),s}createListener(e){return rn({logger:this.logger,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Qr||qr?tn(e):en(e)}dialFilter(e){return this.listenFilter(e)}};function ss(t={}){return e=>new Mt(e,t)}return un(is);})();
|
|
2
|
+
"use strict";var Libp2PWebsockets=(()=>{var Xr=Object.create;var we=Object.defineProperty;var Kr=Object.getOwnPropertyDescriptor;var Zr=Object.getOwnPropertyNames;var Yr=Object.getPrototypeOf,en=Object.prototype.hasOwnProperty;var Ft=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),C=(t,e)=>{for(var r in e)we(t,r,{get:e[r],enumerable:!0})},Mt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Zr(e))!en.call(t,o)&&o!==r&&we(t,o,{get:()=>e[o],enumerable:!(n=Kr(e,o))||n.enumerable});return t};var tn=(t,e,r)=>(r=t!=null?Xr(Yr(t)):{},Mt(e||!t||!t.__esModule?we(r,"default",{value:t,enumerable:!0}):r,t)),rn=t=>Mt(we({},"__esModule",{value:!0}),t);var Ur=Ft(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});var Pt=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let r={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(r)}else this.pushQueue.push(Promise.resolve(r)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let r of this.pullQueue)r.reject(e);this.pullQueue.length=0}else{let r=Promise.reject(e);r.catch(()=>{}),this.pushQueue.push(r)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let r=this.pushQueue.shift();return r?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),r):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Te=class{constructor(e,{highWaterMark:r=100,lowWaterMark:n=1}={}){let o=new Pt;o.highWaterMark=r,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Ne.EventIterator=Te;Ne.default=Te});var Tr=Ft(de=>{"use strict";Object.defineProperty(de,"__esModule",{value:!0});var At=Ur();de.EventIterator=At.EventIterator;function Vo(t,e,r){return new At.EventIterator(({push:n})=>(this.addEventListener(t,n,e),()=>this.removeEventListener(t,n,e)),r)}de.subscribe=Vo;de.default=At.EventIterator});var Ko={};C(Ko,{webSockets:()=>Xo});var kt=Symbol.for("@libp2p/transport");var Ot;(function(t){t[t.FATAL_ALL=0]="FATAL_ALL",t[t.NO_FATAL=1]="NO_FATAL"})(Ot||(Ot={}));var ge=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}};var be=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}};var zt=Symbol.for("@libp2p/service-capabilities"),ts=Symbol.for("@libp2p/service-dependencies");var _e={};C(_e,{base58btc:()=>E,base58flickr:()=>un});var Ps=new Uint8Array(0);function Vt(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}function z(t){if(t instanceof Uint8Array&&t.constructor.name==="Uint8Array")return t;if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new Error("Unknown type, must be binary type")}function Bt(t){return new TextEncoder().encode(t)}function Wt(t){return new TextDecoder().decode(t)}function nn(t,e){if(t.length>=255)throw new TypeError("Alphabet too long");for(var r=new Uint8Array(256),n=0;n<r.length;n++)r[n]=255;for(var o=0;o<t.length;o++){var s=t.charAt(o),i=s.charCodeAt(0);if(r[i]!==255)throw new TypeError(s+" is ambiguous");r[i]=o}var a=t.length,c=t.charAt(0),w=Math.log(a)/Math.log(256),l=Math.log(256)/Math.log(a);function b(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var A=0,Q=0,N=0,$=h.length;N!==$&&h[N]===0;)N++,A++;for(var F=($-N)*l+1>>>0,T=new Uint8Array(F);N!==$;){for(var M=h[N],_=0,D=F-1;(M!==0||_<Q)&&D!==-1;D--,_++)M+=256*T[D]>>>0,T[D]=M%a>>>0,M=M/a>>>0;if(M!==0)throw new Error("Non-zero carry");Q=_,N++}for(var k=F-Q;k!==F&&T[k]===0;)k++;for(var xe=c.repeat(A);k<F;++k)xe+=t.charAt(T[k]);return xe}function P(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var A=0;if(h[A]!==" "){for(var Q=0,N=0;h[A]===c;)Q++,A++;for(var $=(h.length-A)*w+1>>>0,F=new Uint8Array($);h[A];){var T=r[h.charCodeAt(A)];if(T===255)return;for(var M=0,_=$-1;(T!==0||M<N)&&_!==-1;_--,M++)T+=a*F[_]>>>0,F[_]=T%256>>>0,T=T/256>>>0;if(T!==0)throw new Error("Non-zero carry");N=M,A++}if(h[A]!==" "){for(var D=$-N;D!==$&&F[D]===0;)D++;for(var k=new Uint8Array(Q+($-D)),xe=Q;D!==$;)k[xe++]=F[D++];return k}}}function U(h){var A=P(h);if(A)return A;throw new Error(`Non-${e} character`)}return{encode:b,decodeUnsafe:P,decode:U}}var on=nn,sn=on,Rt=sn;var ze=class{name;prefix;baseEncode;constructor(e,r,n){this.name=e,this.prefix=r,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},Ve=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,r,n){this.name=e,this.prefix=r;let o=r.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,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 jt(this,e)}},Be=class{decoders;constructor(e){this.decoders=e}or(e){return jt(this,e)}decode(e){let r=e[0],n=this.decoders[r];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 jt(t,e){return new Be({...t.decoders??{[t.prefix]:t},...e.decoders??{[e.prefix]:e}})}var We=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,r,n,o){this.name=e,this.prefix=r,this.baseEncode=n,this.baseDecode=o,this.encoder=new ze(e,r,n),this.decoder=new Ve(e,r,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function J({name:t,prefix:e,encode:r,decode:n}){return new We(t,e,r,n)}function R({name:t,prefix:e,alphabet:r}){let{encode:n,decode:o}=Rt(r,t);return J({prefix:e,name:t,encode:n,decode:s=>z(o(s))})}function an(t,e,r,n){let o={};for(let l=0;l<e.length;++l)o[e[l]]=l;let s=t.length;for(;t[s-1]==="=";)--s;let i=new Uint8Array(s*r/8|0),a=0,c=0,w=0;for(let l=0;l<s;++l){let b=o[t[l]];if(b===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<r|b,a+=r,a>=8&&(a-=8,i[w++]=255&c>>a)}if(a>=r||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function cn(t,e,r){let n=e[e.length-1]==="=",o=(1<<r)-1,s="",i=0,a=0;for(let c=0;c<t.length;++c)for(a=a<<8|t[c],i+=8;i>r;)i-=r,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<r-i]),n)for(;s.length*r&7;)s+="=";return s}function y({name:t,prefix:e,bitsPerChar:r,alphabet:n}){return J({prefix:e,name:t,encode(o){return cn(o,n,r)},decode(o){return an(o,n,r,t)}})}var E=R({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),un=R({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Re={};C(Re,{base32:()=>V,base32hex:()=>fn,base32hexpad:()=>mn,base32hexpadupper:()=>xn,base32hexupper:()=>hn,base32pad:()=>pn,base32padupper:()=>dn,base32upper:()=>ln,base32z:()=>wn});var V=y({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),ln=y({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),pn=y({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),dn=y({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),fn=y({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),hn=y({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),mn=y({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),xn=y({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),wn=y({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var je={};C(je,{base36:()=>ie,base36upper:()=>gn});var ie=R({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),gn=R({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var bn=Ht,Qt=128,yn=127,En=~yn,vn=Math.pow(2,31);function Ht(t,e,r){e=e||[],r=r||0;for(var n=r;t>=vn;)e[r++]=t&255|Qt,t/=128;for(;t&En;)e[r++]=t&255|Qt,t>>>=7;return e[r]=t|0,Ht.bytes=r-n+1,e}var Sn=Qe,In=128,qt=127;function Qe(t,n){var r=0,n=n||0,o=0,s=n,i,a=t.length;do{if(s>=a)throw Qe.bytes=0,new RangeError("Could not decode varint");i=t[s++],r+=o<28?(i&qt)<<o:(i&qt)*Math.pow(2,o),o+=7}while(i>=In);return Qe.bytes=s-n,r}var Pn=Math.pow(2,7),An=Math.pow(2,14),Cn=Math.pow(2,21),Un=Math.pow(2,28),Tn=Math.pow(2,35),Nn=Math.pow(2,42),Dn=Math.pow(2,49),Ln=Math.pow(2,56),$n=Math.pow(2,63),Fn=function(t){return t<Pn?1:t<An?2:t<Cn?3:t<Un?4:t<Tn?5:t<Nn?6:t<Dn?7:t<Ln?8:t<$n?9:10},Mn={encode:bn,decode:Sn,encodingLength:Fn},On=Mn,ae=On;function ce(t,e=0){return[ae.decode(t,e),ae.decode.bytes]}function X(t,e,r=0){return ae.encode(t,e,r),e}function K(t){return ae.encodingLength(t)}function q(t,e){let r=e.byteLength,n=K(t),o=n+K(r),s=new Uint8Array(o+r);return X(t,s,0),X(r,s,n),s.set(e,o),new Z(t,r,e,s)}function Ee(t){let e=z(t),[r,n]=ce(e),[o,s]=ce(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Z(r,o,i,e)}function Gt(t,e){if(t===e)return!0;{let r=e;return t.code===r.code&&t.size===r.size&&r.bytes instanceof Uint8Array&&Vt(t.bytes,r.bytes)}}var Z=class{code;size;digest;bytes;constructor(e,r,n,o){this.code=e,this.size=r,this.digest=n,this.bytes=o}};function Jt(t,e){let{bytes:r,version:n}=t;switch(n){case 0:return zn(r,qe(t),e??E.encoder);default:return Vn(r,qe(t),e??V.encoder)}}var Xt=new WeakMap;function qe(t){let e=Xt.get(t);if(e==null){let r=new Map;return Xt.set(t,r),r}return e}var j=class t{code;version;multihash;bytes;"/";constructor(e,r,n,o){this.code=r,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:r}=this;if(e!==ue)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(r.code!==Bn)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return t.createV0(r)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:r}=this.multihash,n=q(e,r);return t.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return t.equals(this,e)}static equals(e,r){let n=r;return n!=null&&e.code===n.code&&e.version===n.version&&Gt(e.multihash,n.multihash)}toString(e){return Jt(this,e)}toJSON(){return{"/":Jt(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 r=e;if(r instanceof t)return r;if(r["/"]!=null&&r["/"]===r.bytes||r.asCID===r){let{version:n,code:o,multihash:s,bytes:i}=r;return new t(n,o,s,i??Kt(n,o,s.bytes))}else if(r[Wn]===!0){let{version:n,multihash:o,code:s}=r,i=Ee(o);return t.create(n,s,i)}else return null}static create(e,r,n){if(typeof r!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(r!==ue)throw new Error(`Version 0 CID must use dag-pb (code: ${ue}) block encoding`);return new t(e,r,n,n.bytes)}case 1:{let o=Kt(e,r,n.bytes);return new t(e,r,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return t.create(0,ue,e)}static createV1(e,r){return t.create(1,e,r)}static decode(e){let[r,n]=t.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return r}static decodeFirst(e){let r=t.inspectBytes(e),n=r.size-r.multihashSize,o=z(e.subarray(n,n+r.multihashSize));if(o.byteLength!==r.multihashSize)throw new Error("Incorrect length");let s=o.subarray(r.multihashSize-r.digestSize),i=new Z(r.multihashCode,r.digestSize,s,o);return[r.version===0?t.createV0(i):t.createV1(r.codec,i),e.subarray(r.size)]}static inspectBytes(e){let r=0,n=()=>{let[b,P]=ce(e.subarray(r));return r+=P,b},o=n(),s=ue;if(o===18?(o=0,r=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=r,a=n(),c=n(),w=r+c,l=w-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:l,size:w}}static parse(e,r){let[n,o]=kn(e,r),s=t.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return qe(s).set(n,e),s}};function kn(t,e){switch(t[0]){case"Q":{let r=e??E;return[E.prefix,r.decode(`${E.prefix}${t}`)]}case E.prefix:{let r=e??E;return[E.prefix,r.decode(t)]}case V.prefix:{let r=e??V;return[V.prefix,r.decode(t)]}case ie.prefix:{let r=e??ie;return[ie.prefix,r.decode(t)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[t[0],e.decode(t)]}}}function zn(t,e,r){let{prefix:n}=r;if(n!==E.prefix)throw Error(`Cannot string encode V0 in ${r.name} encoding`);let o=e.get(n);if(o==null){let s=r.encode(t).slice(1);return e.set(n,s),s}else return o}function Vn(t,e,r){let{prefix:n}=r,o=e.get(n);if(o==null){let s=r.encode(t);return e.set(n,s),s}else return o}var ue=112,Bn=18;function Kt(t,e,r){let n=K(t),o=n+K(e),s=new Uint8Array(o+r.byteLength);return X(t,s,0),X(e,s,n),s.set(r,o),s}var Wn=Symbol.for("@ipld/js-cid/CID");function Zt(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}var He={};C(He,{base10:()=>_n});var _n=R({prefix:"9",name:"base10",alphabet:"0123456789"});var Ge={};C(Ge,{base16:()=>Rn,base16upper:()=>jn});var Rn=y({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),jn=y({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Je={};C(Je,{base2:()=>Qn});var Qn=y({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Xe={};C(Xe,{base256emoji:()=>Xn});var Yt=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}"),qn=Yt.reduce((t,e,r)=>(t[r]=e,t),[]),Hn=Yt.reduce((t,e,r)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return t[n]=r,t},[]);function Gn(t){return t.reduce((e,r)=>(e+=qn[r],e),"")}function Jn(t){let e=[];for(let r of t){let n=r.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${r}`);let o=Hn[n];if(o==null)throw new Error(`Non-base256emoji character: ${r}`);e.push(o)}return new Uint8Array(e)}var Xn=J({prefix:"\u{1F680}",name:"base256emoji",encode:Gn,decode:Jn});var Ze={};C(Ze,{base64:()=>Kn,base64pad:()=>Zn,base64url:()=>Ke,base64urlpad:()=>Yn});var Kn=y({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Zn=y({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Ke=y({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Yn=y({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Ye={};C(Ye,{base8:()=>eo});var eo=y({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var et={};C(et,{identity:()=>to});var to=J({prefix:"\0",name:"identity",encode:t=>Wt(t),decode:t=>Bt(t)});var Ks=new TextEncoder,Zs=new TextDecoder;var tt={};C(tt,{identity:()=>io});var er=0,oo="identity",tr=z;function so(t){return q(er,tr(t))}var io={code:er,name:oo,encode:tr,digest:so};var ot={};C(ot,{sha256:()=>ao,sha512:()=>co});function nt({name:t,code:e,encode:r}){return new rt(t,e,r)}var rt=class{name;code;encode;constructor(e,r,n){this.name=e,this.code=r,this.encode=n}digest(e){if(e instanceof Uint8Array){let r=this.encode(e);return r instanceof Uint8Array?q(this.code,r):r.then(n=>q(this.code,n))}else throw Error("Unknown type, must be binary type")}};function nr(t){return async e=>new Uint8Array(await crypto.subtle.digest(t,e))}var ao=nt({name:"sha2-256",code:18,encode:nr("SHA-256")}),co=nt({name:"sha2-512",code:19,encode:nr("SHA-512")});var le={...et,...Je,...Ye,...He,...Ge,...Re,...je,..._e,...Ze,...Xe},pi={...ot,...tt};function ee(t=0){return new Uint8Array(t)}function sr(t,e,r,n){return{name:t,prefix:e,encoder:{name:t,prefix:e,encode:r},decoder:{decode:n}}}var or=sr("utf8","u",t=>"u"+new TextDecoder("utf8").decode(t),t=>new TextEncoder().encode(t.substring(1))),st=sr("ascii","a",t=>{let e="a";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},t=>{t=t.substring(1);let e=ee(t.length);for(let r=0;r<t.length;r++)e[r]=t.charCodeAt(r);return e}),uo={utf8:or,"utf-8":or,hex:le.base16,latin1:st,ascii:st,binary:st,...le},ve=uo;function I(t,e="utf8"){let r=ve[e];if(r==null)throw new Error(`Unsupported encoding "${e}"`);return r.encoder.encode(t).substring(1)}var lo=Math.pow(2,7),po=Math.pow(2,14),fo=Math.pow(2,21),it=Math.pow(2,28),at=Math.pow(2,35),ct=Math.pow(2,42),ut=Math.pow(2,49),m=128,v=127;function O(t){if(t<lo)return 1;if(t<po)return 2;if(t<fo)return 3;if(t<it)return 4;if(t<at)return 5;if(t<ct)return 6;if(t<ut)return 7;if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function ho(t,e,r=0){switch(O(t)){case 8:e[r++]=t&255|m,t/=128;case 7:e[r++]=t&255|m,t/=128;case 6:e[r++]=t&255|m,t/=128;case 5:e[r++]=t&255|m,t/=128;case 4:e[r++]=t&255|m,t>>>=7;case 3:e[r++]=t&255|m,t>>>=7;case 2:e[r++]=t&255|m,t>>>=7;case 1:{e[r++]=t&255,t>>>=7;break}default:throw new Error("unreachable")}return e}function mo(t,e,r=0){switch(O(t)){case 8:e.set(r++,t&255|m),t/=128;case 7:e.set(r++,t&255|m),t/=128;case 6:e.set(r++,t&255|m),t/=128;case 5:e.set(r++,t&255|m),t/=128;case 4:e.set(r++,t&255|m),t>>>=7;case 3:e.set(r++,t&255|m),t>>>=7;case 2:e.set(r++,t&255|m),t>>>=7;case 1:{e.set(r++,t&255),t>>>=7;break}default:throw new Error("unreachable")}return e}function xo(t,e){let r=t[e],n=0;if(n+=r&v,r<m||(r=t[e+1],n+=(r&v)<<7,r<m)||(r=t[e+2],n+=(r&v)<<14,r<m)||(r=t[e+3],n+=(r&v)<<21,r<m)||(r=t[e+4],n+=(r&v)*it,r<m)||(r=t[e+5],n+=(r&v)*at,r<m)||(r=t[e+6],n+=(r&v)*ct,r<m)||(r=t[e+7],n+=(r&v)*ut,r<m))return n;throw new RangeError("Could not decode varint")}function wo(t,e){let r=t.get(e),n=0;if(n+=r&v,r<m||(r=t.get(e+1),n+=(r&v)<<7,r<m)||(r=t.get(e+2),n+=(r&v)<<14,r<m)||(r=t.get(e+3),n+=(r&v)<<21,r<m)||(r=t.get(e+4),n+=(r&v)*it,r<m)||(r=t.get(e+5),n+=(r&v)*at,r<m)||(r=t.get(e+6),n+=(r&v)*ct,r<m)||(r=t.get(e+7),n+=(r&v)*ut,r<m))return n;throw new RangeError("Could not decode varint")}function te(t,e,r=0){return e==null&&(e=ee(O(t))),e instanceof Uint8Array?ho(t,e,r):mo(t,e,r)}function H(t,e=0){return t instanceof Uint8Array?xo(t,e):wo(t,e)}function B(t,e){e==null&&(e=t.reduce((o,s)=>o+s.length,0));let r=ee(e),n=0;for(let o of t)r.set(o,n),n+=o.length;return r}var Se=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let r=this.index,n=e();return n===void 0&&(this.index=r),n}parseWith(e){let r=e();if(this.index===this.input.length)return r}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let r=this.readChar();if(r===e)return r})}readSeparator(e,r,n){return this.readAtomically(()=>{if(!(r>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,r,n,o){return this.readAtomically(()=>{let s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",w=2**(8*o)-1;for(;;){let l=this.readAtomically(()=>{let b=this.readChar();if(b===void 0)return;let P=Number.parseInt(b,e);if(!Number.isNaN(P))return P});if(l===void 0)break;if(s*=e,s+=l,s>w||(i+=1,r!==void 0&&i>r))return}if(i!==0)return!n&&c&&i>1?void 0:s})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let r=0;r<e.length;r++){let n=this.readSeparator(".",r,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[r]=n}return e})}readIPv6Addr(){let e=r=>{for(let n=0;n<r.length/2;n++){let o=n*2;if(n<r.length-3){let i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return r[o]=i[0],r[o+1]=i[1],r[o+2]=i[2],r[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];r[o]=s>>8,r[o+1]=s&255}return[r.length,!1]};return this.readAtomically(()=>{let r=new Uint8Array(16),[n,o]=e(r);if(n===16)return r;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return r.set(s.subarray(0,a),16-a),r})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var ar=45,go=15,re=new Se;function lt(t){if(!(t.length>go))return re.new(t).parseWith(()=>re.readIPv4Addr())}function pt(t){if(t.includes("%")&&(t=t.split("%")[0]),!(t.length>ar))return re.new(t).parseWith(()=>re.readIPv6Addr())}function Ie(t){if(t.includes("%")&&(t=t.split("%")[0]),!(t.length>ar))return re.new(t).parseWith(()=>re.readIPAddr())}var Fi=parseInt("0xFFFF",16),Mi=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function ne(t,e="utf8"){let r=ve[e];if(r==null)throw new Error(`Unsupported encoding "${e}"`);return r.decoder.decode(`${r.prefix}${t}`)}function Pe(t){return!!lt(t)}function Ae(t){return!!pt(t)}function Ce(t){return!!Ie(t)}var lr=Pe,So=Ae,dt=function(t){let e=0;if(t=t.toString().trim(),lr(t)){let r=new Uint8Array(e+4);return t.split(/\./g).forEach(n=>{r[e++]=parseInt(n,10)&255}),r}if(So(t)){let r=t.split(":",8),n;for(n=0;n<r.length;n++){let s=lr(r[n]),i;s&&(i=dt(r[n]),r[n]=I(i.slice(0,2),"base16")),i!=null&&++n<8&&r.splice(n,0,I(i.slice(2,4),"base16"))}if(r[0]==="")for(;r.length<8;)r.unshift("0");else if(r[r.length-1]==="")for(;r.length<8;)r.push("0");else if(r.length<8){for(n=0;n<r.length&&r[n]!=="";n++);let s=[n,1];for(n=9-r.length;n>0;n--)s.push("0");r.splice.apply(r,s)}let o=new Uint8Array(e+16);for(n=0;n<r.length;n++){let s=parseInt(r[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},pr=function(t,e=0,r){e=~~e,r=r??t.length-e;let n=new DataView(t.buffer);if(r===4){let o=[];for(let s=0;s<r;s++)o.push(t[e+s]);return o.join(".")}if(r===16){let o=[];for(let s=0;s<r;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var oe={},ft={},Po=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];Po.forEach(t=>{let e=Ao(...t);ft[e.code]=e,oe[e.name]=e});function Ao(t,e,r,n,o){return{code:t,size:e,name:r,resolvable:!!n,path:!!o}}function u(t){if(typeof t=="number"){if(ft[t]!=null)return ft[t];throw new Error(`no protocol with code: ${t}`)}else if(typeof t=="string"){if(oe[t]!=null)return oe[t];throw new Error(`no protocol with name: ${t}`)}throw new Error(`invalid protocol id type: ${typeof t}`)}var ya=u("ip4"),Ea=u("ip6"),va=u("ipcidr");function wt(t,e){switch(u(t).code){case 4:case 41:return Uo(e);case 42:return xt(e);case 43:return I(e,"base10");case 6:case 273:case 33:case 132:return hr(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return xt(e);case 421:return Lo(e);case 444:return fr(e);case 445:return fr(e);case 466:return Do(e);case 481:return globalThis.encodeURIComponent(xt(e));default:return I(e,"base16")}}function gt(t,e){switch(u(t).code){case 4:return dr(e);case 41:return dr(e);case 42:return mt(e);case 43:return ne(e,"base10");case 6:case 273:case 33:case 132:return bt(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return mt(e);case 421:return To(e);case 444:return $o(e);case 445:return Fo(e);case 466:return No(e);case 481:return mt(globalThis.decodeURIComponent(e));default:return ne(e,"base16")}}var ht=Object.values(le).map(t=>t.decoder),Co=function(){let t=ht[0].or(ht[1]);return ht.slice(2).forEach(e=>t=t.or(e)),t}();function dr(t){if(!Ce(t))throw new Error("invalid ip address");return dt(t)}function Uo(t){let e=pr(t,0,t.length);if(e==null)throw new Error("ipBuff is required");if(!Ce(e))throw new Error("invalid ip address");return e}function bt(t){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,t),new Uint8Array(e)}function hr(t){return new DataView(t.buffer).getUint16(t.byteOffset)}function mt(t){let e=ne(t),r=Uint8Array.from(te(e.length));return B([r,e],r.length+e.length)}function xt(t){let e=H(t);if(t=t.slice(O(e)),t.length!==e)throw new Error("inconsistent lengths");return I(t)}function To(t){let e;t[0]==="Q"||t[0]==="1"?e=Ee(E.decode(`z${t}`)).bytes:e=j.parse(t).multihash.bytes;let r=Uint8Array.from(te(e.length));return B([r,e],r.length+e.length)}function No(t){let e=Co.decode(t),r=Uint8Array.from(te(e.length));return B([r,e],r.length+e.length)}function Do(t){let e=H(t),r=t.slice(O(e));if(r.length!==e)throw new Error("inconsistent lengths");return"u"+I(r,"base64url")}function Lo(t){let e=H(t),r=t.slice(O(e));if(r.length!==e)throw new Error("inconsistent lengths");return I(r,"base58btc")}function $o(t){let e=t.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let r=V.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=bt(n);return B([r,o],r.length+o.length)}function Fo(t){let e=t.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let r=V.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=bt(n);return B([r,o],r.length+o.length)}function fr(t){let e=t.slice(0,t.length-2),r=t.slice(t.length-2),n=I(e,"base32"),o=hr(r);return`${n}:${o}`}function mr(t){t=yt(t);let e=[],r=[],n=null,o=t.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let s=0;s<o.length;s++){let i=o[s],a=u(i);if(a.size===0){e.push([a.code]),r.push([a.code]);continue}if(s++,s>=o.length)throw wr("invalid address: "+t);if(a.path===!0){n=yt(o.slice(s).join("/")),e.push([a.code,gt(a.code,n)]),r.push([a.code,n]);break}let c=gt(a.code,o[s]);e.push([a.code,c]),r.push([a.code,wt(a.code,c)])}return{string:xr(r),bytes:vt(e),tuples:e,stringTuples:r,path:n}}function Et(t){let e=[],r=[],n=null,o=0;for(;o<t.length;){let s=H(t,o),i=O(s),a=u(s),c=Mo(a,t.slice(o+i));if(c===0){e.push([s]),r.push([s]),o+=i;continue}let w=t.slice(o+i,o+i+c);if(o+=c+i,o>t.length)throw wr("Invalid address Uint8Array: "+I(t,"base16"));e.push([s,w]);let l=wt(s,w);if(r.push([s,l]),a.path===!0){n=l;break}}return{bytes:Uint8Array.from(t),string:xr(r),tuples:e,stringTuples:r,path:n}}function xr(t){let e=[];return t.map(r=>{let n=u(r[0]);return e.push(n.name),r.length>1&&r[1]!=null&&e.push(r[1]),null}),yt(e.join("/"))}function vt(t){return B(t.map(e=>{let r=u(e[0]),n=Uint8Array.from(te(r.code));return e.length>1&&e[1]!=null&&(n=B([n,e[1]])),n}))}function Mo(t,e){if(t.size>0)return t.size/8;if(t.size===0)return 0;{let r=H(e instanceof Uint8Array?e:Uint8Array.from(e));return r+O(r)}}function yt(t){return"/"+t.trim().split("/").filter(e=>e).join("/")}function wr(t){return new Error("Error parsing address: "+t)}var Oo=Symbol.for("nodejs.util.inspect.custom"),It=Symbol.for("@multiformats/js-multiaddr/multiaddr"),ko=[u("dns").code,u("dns4").code,u("dns6").code,u("dnsaddr").code],St=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Ue=class t{bytes;#t;#e;#r;#n;[It]=!0;constructor(e){e==null&&(e="");let r;if(e instanceof Uint8Array)r=Et(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);r=mr(e)}else if(br(e))r=Et(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=r.bytes,this.#t=r.string,this.#e=r.tuples,this.#r=r.stringTuples,this.#n=r.path}toString(){return this.#t}toJSON(){return this.toString()}toOptions(){let e,r,n,o,s="",i=u("tcp"),a=u("udp"),c=u("ip4"),w=u("ip6"),l=u("dns6"),b=u("ip6zone");for(let[U,h]of this.stringTuples())U===b.code&&(s=`%${h??""}`),ko.includes(U)&&(r=i.name,o=443,n=`${h??""}${s}`,e=U===l.code?6:4),(U===i.code||U===a.code)&&(r=u(U).name,o=parseInt(h??"")),(U===c.code||U===w.code)&&(r=u(U).name,n=`${h??""}${s}`,e=U===w.code?6:4);if(e==null||r==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:r,port:o}}protos(){return this.#e.map(([e])=>Object.assign({},u(e)))}protoCodes(){return this.#e.map(([e])=>e)}protoNames(){return this.#e.map(([e])=>u(e).name)}tuples(){return this.#e.map(([e,r])=>r==null?[e]:[e,r])}stringTuples(){return this.#r.map(([e,r])=>r==null?[e]:[e,r])}encapsulate(e){return e=new t(e),new t(this.toString()+e.toString())}decapsulate(e){let r=e.toString(),n=this.toString(),o=n.lastIndexOf(r);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new t(n.slice(0,o))}decapsulateCode(e){let r=this.tuples();for(let n=r.length-1;n>=0;n--)if(r[n][0]===e)return new t(vt(r.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===oe.p2p.code&&e.push([n,o]),n===oe["p2p-circuit"].code&&(e=[])});let r=e.pop();if(r?.[1]!=null){let n=r[1];return n[0]==="Q"||n[0]==="1"?I(E.decode(`z${n}`),"base58btc"):I(j.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#n}equals(e){return Zt(this.bytes,e.bytes)}async resolve(e){let r=this.protos().find(s=>s.resolvable);if(r==null)return[this];let n=gr.get(r.name);if(n==null)throw new St(`no available resolver for ${r.name}`);return(await n(this,e)).map(s=>pe(s))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let r=(e??this).protos();return!(r.length!==2||r[0].code!==4&&r[0].code!==41||r[1].code!==6&&r[1].code!==273)}[Oo](){return`Multiaddr(${this.#t})`}};var gr=new Map;function br(t){return!!t?.[It]}function pe(t){return new Ue(t)}var zo=[u("tcp").code,u("dns").code,u("dnsaddr").code,u("dns4").code,u("dns6").code];function yr(t){return Sr("sni",t)?.[1]}function Er(t){let e=Sr("tcp",t)?.[1];return e==null?"":`:${e}`}function Sr(t,e){let r;try{r=u(t).code}catch{return}for(let[n,o]of e)if(n===r&&o!=null)return[n,o]}function vr(t){return t.some(([e,r])=>e===u("tls").code)}function L(t,e,r){let n=Ir[u(t).name];if(n==null)throw new Error(`Can't interpret protocol ${u(t).name}`);let o=n(e,r);return t===u("ip6").code?`[${o}]`:o}var Ir={ip4:(t,e)=>t,ip6:(t,e)=>e.length===0?t:`[${t}]`,tcp:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`tcp://${L(r[0],r[1]??"",e)}:${t}`},udp:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`udp://${L(r[0],r[1]??"",e)}:${t}`},dnsaddr:(t,e)=>t,dns4:(t,e)=>t,dns6:(t,e)=>t,dns:(t,e)=>t,ipfs:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${L(r[0],r[1]??"",e)}`},p2p:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return`${L(r[0],r[1]??"",e)}`},http:(t,e)=>{let r=vr(e),n=yr(e),o=Er(e);if(r&&n!=null)return`https://${n}${o}`;let s=r?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=L(i[0],i[1]??"",e);return a=a.replace("tcp://",""),`${s}${a}`},"http-path":(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");let n=L(r[0],r[1]??"",e),o=decodeURIComponent(t);return`${n}/${o}`},tls:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return L(r[0],r[1]??"",e)},sni:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");return L(r[0],r[1]??"",e)},https:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");let n=L(r[0],r[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(t,e)=>{let r=vr(e),n=yr(e),o=Er(e);if(r&&n!=null)return`wss://${n}${o}`;let s=r?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=L(i[0],i[1]??"",e);return a=a.replace("tcp://",""),`${s}${a}`},wss:(t,e)=>{let r=e.pop();if(r==null)throw new Error("Unexpected end of multiaddr");let n=L(r[0],r[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Pr(t,e){let n=pe(t).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=u(o[0]),i=Ir[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&zo.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Ar=async t=>{if(t.readyState>=2)throw new Error("socket closed");t.readyState!==1&&await new Promise((e,r)=>{function n(){t.removeEventListener("open",o),t.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),r(i.error??new Error(`connect ECONNREFUSED ${t.url}`))}t.addEventListener("open",o),t.addEventListener("error",s)})};var Cr=(t,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Ar(t)}catch(s){if(s.message==="socket closed")break;throw s}if(t.readyState===t.CLOSING||t.readyState===t.CLOSED)break;t.send(o)}e.closeOnEnd!=null&&t.readyState<=1&&await new Promise((o,s)=>{t.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{t.close()})})});var Dr=tn(Tr(),1);function Nr(t){return t instanceof ArrayBuffer||t?.constructor?.name==="ArrayBuffer"&&typeof t?.byteLength=="number"}var Lr=t=>{t.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=l=>{t.removeEventListener("open",c),t.removeEventListener("error",w),l()},c=()=>{a(s)},w=l=>{a(()=>{i(l.error??new Error(`connect ECONNREFUSED ${t.url}`))})};t.addEventListener("open",c),t.addEventListener("error",w)})},r=async function*(){let s=new Dr.EventIterator(({push:i,stop:a,fail:c})=>{let w=b=>{let P=null;typeof b.data=="string"&&(P=ne(b.data)),Nr(b.data)&&(P=new Uint8Array(b.data)),b.data instanceof Uint8Array&&(P=b.data),P!=null&&i(P)},l=b=>{c(b.error??new Error("Socket error"))};return t.addEventListener("message",w),t.addEventListener("error",l),t.addEventListener("close",a),()=>{t.removeEventListener("message",w),t.removeEventListener("error",l),t.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield Nr(i)?new Uint8Array(i):i}(),n=t.readyState===1,o;return t.addEventListener("open",()=>{n=!0,o=null}),t.addEventListener("close",()=>{n=!1,o=null}),t.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${t.url}`))}),Object.assign(r,{connected:e})};var $r=(t,e)=>{e=e??{};let r=Lr(t),n=e.remoteAddress,o=e.remotePort;if(t.url!=null)try{let i=new URL(t.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Cr(t,e),source:r,connected:async()=>{await r.connected()},close:async()=>{(t.readyState===t.CONNECTING||t.readyState===t.OPEN)&&await new Promise(i=>{t.addEventListener("close",()=>{i()}),t.close()})},destroy:()=>{t.terminate!=null?t.terminate():t.close()},remoteAddress:n,remotePort:o,socket:t}};var Fr=WebSocket;var Bo={"http:":"ws:","https:":"wss:"},Mr="ws:",Or=(t,e)=>{if(t.startsWith("//")&&(t=`${e?.protocol??Mr}${t}`),t.startsWith("/")&&e!=null){let n=e.protocol??Mr,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";t=`${n}//${o}${s}${t}`}let r=new URL(t);for(let[n,o]of Object.entries(Bo))r.protocol===n&&(r.protocol=o);return r};function kr(t,e){let r=typeof window>"u"?void 0:window.location;e=e??{};let n=Or(t,r),o=new Fr(n.toString(),e.websocket);return $r(o,e)}function Ct(){let t={};return t.promise=new Promise((e,r)=>{t.resolve=e,t.reject=r}),t}var De=class extends Event{type;detail;constructor(e,r){super(e),this.type=e,this.detail=r}};var Le=class extends Error{type;code;constructor(e,r,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=r??"ABORT_ERR"}};async function zr(t,e,r){if(e==null)return t;if(e.aborted)return Promise.reject(new Le(r?.errorMessage,r?.errorCode,r?.errorName));let n,o=new Le(r?.errorMessage,r?.errorCode,r?.errorName);try{return await Promise.race([t,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Wo=t=>t.toString().split("/").slice(1),se=t=>({match:e=>e.length<1?!1:t(e[0])?e.slice(1):!1,pattern:"fn"}),p=t=>({match:e=>se(r=>r===t).match(e),pattern:t}),G=()=>({match:t=>se(e=>typeof e=="string").match(t),pattern:"{string}"}),fe=()=>({match:t=>se(e=>!isNaN(parseInt(e))).match(t),pattern:"{number}"}),x=()=>({match:t=>{if(t.length<2||t[0]!=="p2p"&&t[0]!=="ipfs")return!1;if(t[1].startsWith("Q")||t[1].startsWith("1"))try{E.decode(`z${t[1]}`)}catch{return!1}else return!1;return t.slice(2)},pattern:"/p2p/{peerid}"}),he=()=>({match:t=>{if(t.length<2||t[0]!=="certhash")return!1;try{Ke.decode(t[1])}catch{return!1}return t.slice(2)},pattern:"/certhash/{certhash}"}),f=t=>({match:e=>{let r=t.match(e);return r===!1?e:r},pattern:`optional(${t.pattern})`}),S=(...t)=>({match:e=>{let r;for(let n of t){let o=n.match(e);o!==!1&&(r==null||o.length<r.length)&&(r=o)}return r??!1},pattern:`or(${t.map(e=>e.pattern).join(", ")})`}),d=(...t)=>({match:e=>{for(let r of t){let n=r.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${t.map(e=>e.pattern).join(", ")})`});function g(...t){function e(o){let s=Wo(o);for(let i of t){let a=i.match(s);if(a===!1)return!1;s=a}return s}function r(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matchers:t,matches:r,exactMatch:n}}var Fe=d(p("dns4"),G()),Me=d(p("dns6"),G()),Oe=d(p("dnsaddr"),G()),Tt=d(p("dns"),G()),gc=g(Fe,f(x())),bc=g(Me,f(x())),yc=g(Oe,f(x())),_o=g(S(Tt,Oe,Fe,Me),f(x())),Vr=d(p("ip4"),se(Pe)),Br=d(p("ip6"),se(Ae)),Nt=S(Vr,Br),W=S(Nt,Tt,Fe,Me,Oe),Ec=g(S(Nt,d(S(Tt,Oe,Fe,Me),f(x())))),vc=g(Vr),Sc=g(Br),Ic=g(Nt),Dt=d(W,p("tcp"),fe()),me=d(W,p("udp"),fe()),Pc=g(d(Dt,f(x()))),Ac=g(me),Lt=d(me,p("quic"),f(x())),ke=d(me,p("quic-v1"),f(x())),Ro=S(Lt,ke),Cc=g(Lt),Uc=g(ke),Ut=S(W,Dt,me,Lt,ke),Wr=S(d(Ut,p("ws"),f(x()))),_r=g(Wr),Rr=S(d(Ut,p("wss"),f(x())),d(Ut,p("tls"),f(d(p("sni"),G())),p("ws"),f(x()))),jr=g(Rr),Qr=d(me,p("webrtc-direct"),f(he()),f(he()),f(x())),Tc=g(Qr),qr=d(ke,p("webtransport"),f(he()),f(he()),f(x())),Nc=g(qr),$e=S(Wr,Rr,d(Dt,f(x())),d(Ro,f(x())),d(W,f(x())),Qr,qr,x()),Dc=g($e),jo=d($e,p("p2p-circuit"),x()),Lc=g(jo),Qo=S(d($e,p("p2p-circuit"),p("webrtc"),f(x())),d($e,p("webrtc"),f(x())),d(p("webrtc"),f(x()))),$c=g(Qo),qo=S(d(W,p("tcp"),fe(),p("http"),f(x())),d(W,p("http"),f(x()))),Fc=g(qo),Ho=S(d(W,p("tcp"),S(d(p("443"),p("http")),d(fe(),p("https"))),f(x())),d(W,p("tls"),p("http"),f(x())),d(W,p("https"),f(x()))),Mc=g(Ho),Go=S(d(p("memory"),G(),f(x()))),Oc=g(Go);function Hr(t){return t.filter(e=>jr.exactMatch(e)||_r.exactMatch(e))}function Gr(){throw new Error("WebSocket Servers can not be created in the browser!")}function Jr(t,e,r){let n=r.logger.forComponent("libp2p:websockets:maconn"),o=r.metrics,s=r.metricPrefix??"",i={log:n,async sink(a){try{await t.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:t.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let l=AbortSignal.timeout(500);a={...a,signal:l}}let w=()=>{let{host:l,port:b}=i.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",l,b,Date.now()-c),this.abort(new ge("Socket close timeout"))};a.signal?.addEventListener("abort",w);try{await t.close()}catch(l){n.error("error closing WebSocket gracefully",l),this.abort(l)}finally{a.signal?.removeEventListener("abort",w),i.timeline.close=Date.now()}},abort(a){let{host:c,port:w}=i.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,w,a),t.destroy(),i.timeline.close=Date.now(),o?.increment({[`${s}error`]:!0})}};return t.socket.addEventListener("close",()=>{o?.increment({[`${s}close`]:!0}),i.timeline.close==null&&(i.timeline.close=Date.now())},{once:!0}),i}var $t=class{log;init;logger;metrics;components;constructor(e,r={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=r,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[kt]=!0;[Symbol.toStringTag]="@libp2p/websockets";[zt]=["@libp2p/transport"];async dial(e,r){this.log("dialing %s",e),r=r??{};let n=await this._connect(e,r),o=Jr(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let s=await r.upgrader.upgradeOutbound(o,r);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,r){r?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=Ct(),s=kr(Pr(e),this.init);s.socket.addEventListener("error",()=>{let i=new be(`Could not connect to ${e.toString()}`);this.log.error("connection error:",i),this.metrics?.dialerEvents.increment({error:!0}),o.reject(i)});try{r.onProgress?.(new De("websockets:open-connection")),await zr(Promise.race([s.connected(),o.promise]),r.signal)}catch(i){throw r.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),s.close().catch(a=>{this.log.error("error closing raw socket",a)}),i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),s}createListener(e){return Gr({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Hr(e)}dialFilter(e){return this.listenFilter(e)}};function Xo(t={}){return e=>new $t(e,t)}return rn(Ko);})();
|
|
3
3
|
return Libp2PWebsockets}));
|
package/dist/src/index.d.ts
CHANGED
|
@@ -18,57 +18,46 @@
|
|
|
18
18
|
* })
|
|
19
19
|
* await node.start()
|
|
20
20
|
*
|
|
21
|
-
* const ma = multiaddr('/
|
|
21
|
+
* const ma = multiaddr('/dns4/example.com/tcp/9090/tls/ws')
|
|
22
22
|
* await node.dial(ma)
|
|
23
23
|
* ```
|
|
24
|
-
*
|
|
25
|
-
* ## Filters
|
|
26
|
-
*
|
|
27
|
-
* When run in a browser by default this module will only connect to secure web socket addresses.
|
|
28
|
-
*
|
|
29
|
-
* To change this you should pass a filter to the factory function.
|
|
30
|
-
*
|
|
31
|
-
* You can create your own address filters for this transports, or rely in the filters [provided](./src/filters.js).
|
|
32
|
-
*
|
|
33
|
-
* The available filters are:
|
|
34
|
-
*
|
|
35
|
-
* - `filters.all`
|
|
36
|
-
* - Returns all TCP and DNS based addresses, both with `ws` or `wss`.
|
|
37
|
-
* - `filters.dnsWss`
|
|
38
|
-
* - Returns all DNS based addresses with `wss`.
|
|
39
|
-
* - `filters.dnsWsOrWss`
|
|
40
|
-
* - Returns all DNS based addresses, both with `ws` or `wss`.
|
|
41
|
-
*
|
|
42
|
-
* @example Allow dialing insecure WebSockets
|
|
43
|
-
*
|
|
44
|
-
* ```TypeScript
|
|
45
|
-
* import { createLibp2p } from 'libp2p'
|
|
46
|
-
* import { webSockets } from '@libp2p/websockets'
|
|
47
|
-
* import * as filters from '@libp2p/websockets/filters'
|
|
48
|
-
*
|
|
49
|
-
* const node = await createLibp2p({
|
|
50
|
-
* transports: [
|
|
51
|
-
* webSockets({
|
|
52
|
-
* // connect to all sockets, even insecure ones
|
|
53
|
-
* filter: filters.all
|
|
54
|
-
* })
|
|
55
|
-
* ]
|
|
56
|
-
* })
|
|
57
|
-
* ```
|
|
58
24
|
*/
|
|
59
25
|
/// <reference types="node" />
|
|
26
|
+
/// <reference types="node" />
|
|
60
27
|
import { type WebSocketOptions } from 'it-ws/client';
|
|
61
|
-
import type { Transport, MultiaddrFilter, AbortOptions, ComponentLogger, OutboundConnectionUpgradeEvents, Metrics, CounterGroup } from '@libp2p/interface';
|
|
62
|
-
import type
|
|
28
|
+
import type { Transport, MultiaddrFilter, AbortOptions, ComponentLogger, OutboundConnectionUpgradeEvents, Metrics, CounterGroup, TypedEventTarget, Libp2pEvents } from '@libp2p/interface';
|
|
29
|
+
import type http from 'node:http';
|
|
30
|
+
import type https from 'node:https';
|
|
63
31
|
import type { ProgressEvent } from 'progress-events';
|
|
64
32
|
import type { ClientOptions } from 'ws';
|
|
65
33
|
export interface WebSocketsInit extends AbortOptions, WebSocketOptions {
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Use a ConnectionGater instead
|
|
36
|
+
*/
|
|
66
37
|
filter?: MultiaddrFilter;
|
|
38
|
+
/**
|
|
39
|
+
* Options used to create WebSockets
|
|
40
|
+
*/
|
|
67
41
|
websocket?: ClientOptions;
|
|
68
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Options used to create the HTTP server
|
|
44
|
+
*/
|
|
45
|
+
http?: http.ServerOptions;
|
|
46
|
+
/**
|
|
47
|
+
* Options used to create the HTTPs server. `options.http` will be used if
|
|
48
|
+
* unspecified.
|
|
49
|
+
*/
|
|
50
|
+
https?: https.ServerOptions;
|
|
51
|
+
/**
|
|
52
|
+
* Inbound connections must complete their upgrade within this many ms
|
|
53
|
+
*
|
|
54
|
+
* @default 5000
|
|
55
|
+
*/
|
|
56
|
+
inboundConnectionUpgradeTimeout?: number;
|
|
69
57
|
}
|
|
70
58
|
export interface WebSocketsComponents {
|
|
71
59
|
logger: ComponentLogger;
|
|
60
|
+
events: TypedEventTarget<Libp2pEvents>;
|
|
72
61
|
metrics?: Metrics;
|
|
73
62
|
}
|
|
74
63
|
export interface WebSocketsMetrics {
|
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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAIH,OAAO,EAAW,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAO7D,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAyD,YAAY,EAAE,eAAe,EAAsB,+BAA+B,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrQ,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAEvC,MAAM,WAAW,cAAe,SAAQ,YAAY,EAAE,gBAAgB;IACpE;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAA;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,CAAA;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAA;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAE3B;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACtC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAC9B,+BAA+B,GAC/B,aAAa,CAAC,4BAA4B,CAAC,CAAA;AA+H7C,wBAAgB,UAAU,CAAE,IAAI,GAAE,cAAmB,GAAG,CAAC,UAAU,EAAE,oBAAoB,KAAK,SAAS,CAItG"}
|
package/dist/src/index.js
CHANGED
|
@@ -18,43 +18,9 @@
|
|
|
18
18
|
* })
|
|
19
19
|
* await node.start()
|
|
20
20
|
*
|
|
21
|
-
* const ma = multiaddr('/
|
|
21
|
+
* const ma = multiaddr('/dns4/example.com/tcp/9090/tls/ws')
|
|
22
22
|
* await node.dial(ma)
|
|
23
23
|
* ```
|
|
24
|
-
*
|
|
25
|
-
* ## Filters
|
|
26
|
-
*
|
|
27
|
-
* When run in a browser by default this module will only connect to secure web socket addresses.
|
|
28
|
-
*
|
|
29
|
-
* To change this you should pass a filter to the factory function.
|
|
30
|
-
*
|
|
31
|
-
* You can create your own address filters for this transports, or rely in the filters [provided](./src/filters.js).
|
|
32
|
-
*
|
|
33
|
-
* The available filters are:
|
|
34
|
-
*
|
|
35
|
-
* - `filters.all`
|
|
36
|
-
* - Returns all TCP and DNS based addresses, both with `ws` or `wss`.
|
|
37
|
-
* - `filters.dnsWss`
|
|
38
|
-
* - Returns all DNS based addresses with `wss`.
|
|
39
|
-
* - `filters.dnsWsOrWss`
|
|
40
|
-
* - Returns all DNS based addresses, both with `ws` or `wss`.
|
|
41
|
-
*
|
|
42
|
-
* @example Allow dialing insecure WebSockets
|
|
43
|
-
*
|
|
44
|
-
* ```TypeScript
|
|
45
|
-
* import { createLibp2p } from 'libp2p'
|
|
46
|
-
* import { webSockets } from '@libp2p/websockets'
|
|
47
|
-
* import * as filters from '@libp2p/websockets/filters'
|
|
48
|
-
*
|
|
49
|
-
* const node = await createLibp2p({
|
|
50
|
-
* transports: [
|
|
51
|
-
* webSockets({
|
|
52
|
-
* // connect to all sockets, even insecure ones
|
|
53
|
-
* filter: filters.all
|
|
54
|
-
* })
|
|
55
|
-
* ]
|
|
56
|
-
* })
|
|
57
|
-
* ```
|
|
58
24
|
*/
|
|
59
25
|
import { transportSymbol, serviceCapabilities, ConnectionFailedError } from '@libp2p/interface';
|
|
60
26
|
import { multiaddrToUri as toUri } from '@multiformats/multiaddr-to-uri';
|
|
@@ -62,7 +28,6 @@ import { connect } from 'it-ws/client';
|
|
|
62
28
|
import pDefer from 'p-defer';
|
|
63
29
|
import { CustomProgressEvent } from 'progress-events';
|
|
64
30
|
import { raceSignal } from 'race-signal';
|
|
65
|
-
import { isBrowser, isWebWorker } from 'wherearewe';
|
|
66
31
|
import * as filters from './filters.js';
|
|
67
32
|
import { createListener } from './listener.js';
|
|
68
33
|
import { socketToMaConn } from './socket-to-conn.js';
|
|
@@ -72,7 +37,7 @@ class WebSockets {
|
|
|
72
37
|
logger;
|
|
73
38
|
metrics;
|
|
74
39
|
components;
|
|
75
|
-
constructor(components, init) {
|
|
40
|
+
constructor(components, init = {}) {
|
|
76
41
|
this.log = components.logger.forComponent('libp2p:websockets');
|
|
77
42
|
this.logger = components.logger;
|
|
78
43
|
this.components = components;
|
|
@@ -138,13 +103,14 @@ class WebSockets {
|
|
|
138
103
|
return rawSocket;
|
|
139
104
|
}
|
|
140
105
|
/**
|
|
141
|
-
* Creates a
|
|
106
|
+
* Creates a WebSockets listener. The provided `handler` function will be called
|
|
142
107
|
* anytime a new incoming Connection has been successfully upgraded via
|
|
143
108
|
* `upgrader.upgradeInbound`
|
|
144
109
|
*/
|
|
145
110
|
createListener(options) {
|
|
146
111
|
return createListener({
|
|
147
112
|
logger: this.logger,
|
|
113
|
+
events: this.components.events,
|
|
148
114
|
metrics: this.components.metrics
|
|
149
115
|
}, {
|
|
150
116
|
...this.init,
|
|
@@ -152,7 +118,7 @@ class WebSockets {
|
|
|
152
118
|
});
|
|
153
119
|
}
|
|
154
120
|
/**
|
|
155
|
-
* Takes a list of `Multiaddr`s and returns only valid
|
|
121
|
+
* Takes a list of `Multiaddr`s and returns only valid WebSockets addresses.
|
|
156
122
|
* By default, in a browser environment only DNS+WSS multiaddr is accepted,
|
|
157
123
|
* while in a Node.js environment DNS+{WS, WSS} multiaddrs are accepted.
|
|
158
124
|
*/
|
|
@@ -161,10 +127,6 @@ class WebSockets {
|
|
|
161
127
|
if (this.init?.filter != null) {
|
|
162
128
|
return this.init?.filter(multiaddrs);
|
|
163
129
|
}
|
|
164
|
-
// Browser
|
|
165
|
-
if (isBrowser || isWebWorker) {
|
|
166
|
-
return filters.wss(multiaddrs);
|
|
167
|
-
}
|
|
168
130
|
return filters.all(multiaddrs);
|
|
169
131
|
}
|
|
170
132
|
/**
|
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
|
@@ -1,17 +1,62 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/// <reference types="node" />
|
|
4
|
+
/// <reference types="node" />
|
|
5
|
+
/// <reference types="node" />
|
|
6
|
+
/// <reference types="node" />
|
|
7
|
+
import http from 'node:http';
|
|
8
|
+
import net from 'node:net';
|
|
9
|
+
import { TypedEventEmitter } from '@libp2p/interface';
|
|
10
|
+
import * as ws from 'ws';
|
|
11
|
+
import type { ComponentLogger, Listener, ListenerEvents, CreateListenerOptions, CounterGroup, MetricGroup, Metrics, TLSCertificate, TypedEventTarget, Libp2pEvents } from '@libp2p/interface';
|
|
12
|
+
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
13
|
+
import type { Server } from 'node:http';
|
|
14
|
+
import type { Duplex } from 'node:stream';
|
|
15
|
+
import type tls from 'node:tls';
|
|
4
16
|
export interface WebSocketListenerComponents {
|
|
5
17
|
logger: ComponentLogger;
|
|
18
|
+
events: TypedEventTarget<Libp2pEvents>;
|
|
6
19
|
metrics?: Metrics;
|
|
7
20
|
}
|
|
8
21
|
export interface WebSocketListenerInit extends CreateListenerOptions {
|
|
9
22
|
server?: Server;
|
|
23
|
+
inboundConnectionUpgradeTimeout?: number;
|
|
24
|
+
cert?: string;
|
|
25
|
+
key?: string;
|
|
26
|
+
http?: http.ServerOptions;
|
|
27
|
+
https?: http.ServerOptions;
|
|
10
28
|
}
|
|
11
29
|
export interface WebSocketListenerMetrics {
|
|
12
|
-
status
|
|
13
|
-
errors
|
|
14
|
-
events
|
|
30
|
+
status?: MetricGroup;
|
|
31
|
+
errors?: CounterGroup;
|
|
32
|
+
events?: CounterGroup;
|
|
33
|
+
}
|
|
34
|
+
export declare class WebSocketListener extends TypedEventEmitter<ListenerEvents> implements Listener {
|
|
35
|
+
private readonly log;
|
|
36
|
+
private readonly logger;
|
|
37
|
+
private readonly server;
|
|
38
|
+
private readonly wsServer;
|
|
39
|
+
private readonly metrics;
|
|
40
|
+
private readonly sockets;
|
|
41
|
+
private readonly upgrader;
|
|
42
|
+
private readonly inboundConnectionUpgradeTimeout;
|
|
43
|
+
private readonly httpOptions?;
|
|
44
|
+
private readonly httpsOptions?;
|
|
45
|
+
private http?;
|
|
46
|
+
private https?;
|
|
47
|
+
private addr?;
|
|
48
|
+
private listeningMultiaddr?;
|
|
49
|
+
constructor(components: WebSocketListenerComponents, init: WebSocketListenerInit);
|
|
50
|
+
onSocketConnection(socket: net.Socket): Promise<void>;
|
|
51
|
+
onWsServerConnection(socket: ws.WebSocket, req: http.IncomingMessage): void;
|
|
52
|
+
onUpgrade(req: http.IncomingMessage, socket: Duplex, head: Buffer): void;
|
|
53
|
+
onTLSClientError(err: Error, socket: tls.TLSSocket): void;
|
|
54
|
+
listen(ma: Multiaddr): Promise<void>;
|
|
55
|
+
onCertificateProvision(event: CustomEvent<TLSCertificate>): void;
|
|
56
|
+
onCertificateRenew(event: CustomEvent<TLSCertificate>): void;
|
|
57
|
+
close(): Promise<void>;
|
|
58
|
+
getAddrs(): Multiaddr[];
|
|
59
|
+
private httpRequestHandler;
|
|
15
60
|
}
|
|
16
61
|
export declare function createListener(components: WebSocketListenerComponents, init: WebSocketListenerInit): Listener;
|
|
17
62
|
//# sourceMappingURL=listener.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"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"}
|