helia 1.3.12-45faaa7 → 1.3.12-703aa6d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -81,7 +81,7 @@ a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
81
81
  a=ice-ufrag:`+e+`
82
82
  `).replace(/\na=ice-pwd:[^\n]*\n/,`
83
83
  a=ice-pwd:`+e+`
84
- `),r}var bN=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),wN=r=>[...Array(r)].map(()=>bN.at(Math.floor(Math.random()*bN.length))).join("");var W1=C("libp2p:webrtc:transport"),Vre=1e4,zre=se("webrtc-direct").code,I6=se("certhash").code,Y1=class{metrics;components;init;constructor(e,t={}){this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dial events by type"})})}async dial(e,t){let n=await this._connect(e,t);return W1(`dialing address - ${e.toString()}`),n}createListener(e){throw cP("WebRTCTransport.createListener")}filter(e){return e.filter(Kre)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[Ps]=!0;async _connect(e,t){let n=new AbortController,s=n.signal,i=e.getPeerId();if(i===null)throw I1("we need to have the remote's PeerId");let o=he(i),a=S6(G1(e)),c=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:A6(a.name)}),l=new RTCPeerConnection({certificates:[c]}),u=new Promise((A,D)=>{let H=l.createDataChannel("",{negotiated:!0,id:0}),ee=setTimeout(()=>{let j=`Data channel was never opened: state: ${H.readyState}`;W1.error(j),this.metrics?.dialerEvents.increment({open_error:!0}),D(yy("data",j))},Vre);H.onopen=j=>{clearTimeout(ee),A(H)},H.onerror=j=>{clearTimeout(ee);let Re=`Error opening a data channel for handshaking: ${j.target?.toString()??"not specified"}`;W1.error(Re),this.metrics?.dialerEvents.increment({unknown_error:!0}),D(yy("data",Re))}}),f="libp2p+webrtc+v1/"+wN(32),h=await l.createOffer(),p=yN(h,f);await l.setLocalDescription(p);let d=gN(e,f);await l.setRemoteDescription(d);let m=await u,g=this.components.peerId,y=this.generateNoisePrologue(l,a.code,e),b=dl({prologueBytes:y})(),w=Il({channel:m,direction:"inbound",dataChannelOptions:this.init.dataChannel}),v={...w,sink:w.sink.bind(w),source:async function*(){for await(let A of w.source)for(let D of A)yield D}()},x=new Ra({peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),_=uh?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(_,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(A=>{W1.error("error closing connection",A)}).finally(()=>{n.abort()});break;default:break}},{signal:s}),this.metrics?.dialerEvents.increment({peer_connection:!0});let S=new Ta({peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(g,v,o),t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:S})}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw lh("no local certificate");let s=mN(e);if(s==null)throw lh("no local fingerprint found");let i=s.trim().toLowerCase().replaceAll(":",""),o=$(i,"hex"),a=xN.encode(o,t),c=_6.decode(G1(n)),l=$("libp2p-webrtc-noise:");return Ee([l,a,c])}};function Kre(r){let e=r.protoCodes();return e.includes(zre)&&e.includes(I6)&&r.getPeerId()!=null&&!e.includes(se("p2p-circuit").code)}function EN(r){return e=>new Y1(e,r)}function vN(r){return e=>new k1(e,r)}function _N(r){let e;try{e=se("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function SN(r){return r.some(([e,t])=>e===se("tls").code)}function yn(r,e,t){let n=AN[se(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${se(r).name}`);let s=n(e,t);return r===se("ip6").code?`[${s}]`:s}var AN={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${yn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${yn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=SN(e),n=_N(e);if(t&&n!==null)return`https://${n}`;let s=t?"https://":"http://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=yn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return yn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return yn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=yn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=SN(e),n=_N(e);if(t&&n!==null)return`wss://${n}`;let s=t?"wss://":"ws://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=yn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=yn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function IN(r,e){let n=fe(r).stringTuples(),s=n.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=se(s[0]),o=AN[i.name];if(o==null)throw new Error(`No interpreter found for ${i.name}`);let a=o(s[1]??"",n);return e?.assumeHttp!==!1&&s[0]===se("tcp").code&&(a=a.replace("tcp://","http://"),(s[1]==="443"||s[1]==="80")&&(s[1]==="443"&&(a=a.replace("http://","https://")),a=a.substring(0,a.lastIndexOf(":")))),a}var RN=WebSocket;var PN=W(DN(),1);function CN(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var kN=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,o)=>{if(n){i();return}if(s!=null){o(s);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{o(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new PN.EventIterator(({push:o,stop:a,fail:c})=>{let l=f=>{let h=null;typeof f.data=="string"&&(h=$(f.data)),CN(f.data)&&(h=new Uint8Array(f.data)),f.data instanceof Uint8Array&&(h=f.data),h!=null&&o(h)},u=f=>{c(f.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let o of i)yield CN(o)?new Uint8Array(o):o}(),n=r.readyState===1,s;return r.addEventListener("open",()=>{n=!0,s=null}),r.addEventListener("close",()=>{n=!1,s=null}),r.addEventListener("error",i=>{n||(s=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var NN=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",s),r.removeEventListener("error",i)}function s(){n(),e()}function i(o){n(),t(o.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",s),r.addEventListener("error",i)})};var ON=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let s of n){try{await NN(r)}catch(i){if(i.message==="socket closed")break;throw i}r.send(s)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((s,i)=>{r.addEventListener("close",o=>{if(o.wasClean||o.code===1006)s();else{let a=Object.assign(new Error("ws error"),{event:o});i(a)}}),setTimeout(()=>{r.close()})})});var LN=(r,e)=>{e=e??{};let t=kN(r),n=e.remoteAddress,s=e.remotePort;if(r.url!=null)try{let o=new URL(r.url);n=o.hostname,s=parseInt(o.port,10)}catch{}if(n==null||s==null)throw new Error("Remote connection did not have address and/or port");return{sink:ON(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(o=>{r.addEventListener("close",()=>{o()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:s,socket:r}};var qN=W(KN(),1),Jre={http:"ws",https:"wss"},ene="ws",$N=(r,e)=>(0,qN.relative)(r,e,Jre,ene);function HN(r,e){let t=typeof window>"u"?"":window.location;e=e??{};let n=$N(r,t.toString()),s=new RN(n,e.websocket);return LN(s,e)}var YN=W(WN(),1),P6=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,j1=(0,YN.default)(),Z1=P6&&!j1,QN=j1&&!P6,XN=j1&&P6,jN=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!j1,J1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,fke=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+(()=>"_")()+"ENV"]==="test",ZN=typeof navigator<"u"&&navigator.product==="ReactNative";function tO(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return gl.matches(t)||va.matches(t)})}function rO(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return va.matches(t)})}function nO(){throw new Error("WebSocket Servers can not be created in the browser!")}var k6=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},N6=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},sO=r=>globalThis.DOMException===void 0?new N6(r):new DOMException(r),iO=r=>{let e=r.reason===void 0?sO("This operation was aborted."):r.reason;return e instanceof Error?e:sO(e)};function O6(r,e){let{milliseconds:t,fallback:n,message:s,customTimers:i={setTimeout,clearTimeout}}=e,o,c=new Promise((l,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(iO(h)),h.addEventListener("abort",()=>{u(iO(h))})}if(t===Number.POSITIVE_INFINITY){r.then(l,u);return}let f=new k6;o=i.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),s===!1?l():s instanceof Error?u(s):(f.message=s??`Promise timed out after ${t} milliseconds`,u(f))},t),(async()=>{try{l(await r)}catch(h){u(h)}})()}).finally(()=>{c.clear()});return c.clear=()=>{i.clearTimeout.call(void 0,o),o=void 0},c}var oO=C("libp2p:websockets:socket");function aO(r,e,t){t=t??{};let n={async sink(s){t?.signal!=null&&(s=ht(s,t.signal));try{await r.sink(s)}catch(i){i.type!=="aborted"&&oO.error(i)}},source:t.signal!=null?ht(r.source,t.signal):r.source,remoteAddr:e,timeline:{open:Date.now()},async close(){let s=Date.now();try{await O6(r.close(),{milliseconds:2e3})}catch{let{host:o,port:a}=n.remoteAddr.toOptions();oO("timeout closing stream to %s:%s after %dms, destroying it manually",o,a,Date.now()-s),r.destroy()}finally{n.timeline.close=Date.now()}}};return r.socket.addEventListener("close",()=>{n.timeline.close==null&&(n.timeline.close=Date.now())},{once:!0}),n}var vo=C("libp2p:websockets"),L6=class{init;constructor(e){this.init=e}[Symbol.toStringTag]="@libp2p/websockets";[Ps]=!0;async dial(e,t){vo("dialing %s",e),t=t??{};let n=await this._connect(e,t),s=aO(n,e);vo("new outbound connection %s",s.remoteAddr);let i=await t.upgrader.upgradeOutbound(s);return vo("outbound connection %s upgraded",s.remoteAddr),i}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Vn;let n=e.toOptions();vo("dialing %s:%s",n.host,n.port);let s=De(),i=l=>{vo.error("connection error:",l),s.reject(l)},o=HN(IN(e),this.init);if(o.socket.on!=null?o.socket.on("error",i):o.socket.onerror=i,t.signal==null)return await Promise.race([o.connected(),s.promise]),vo("connected %s",e),o;let a,c=new Promise((l,u)=>{if(a=()=>{u(new Vn),o.close().catch(f=>{vo.error("error closing raw socket",f)})},t?.signal?.aborted===!0){a();return}t?.signal?.addEventListener("abort",a)});try{await Promise.race([c,s.promise,o.connected()])}finally{a!=null&&t?.signal?.removeEventListener("abort",a)}return vo("connected %s",e),o}createListener(e){return nO({...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Z1||J1?rO(e):tO(e)}};function cO(r={}){return()=>new L6(r)}var V6={};Y(V6,{identity:()=>lne});function sne(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var s=0;s<r.length;s++){var i=r.charAt(s),o=i.charCodeAt(0);if(t[o]!==255)throw new TypeError(i+" is ambiguous");t[o]=s}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function f(d){if(d instanceof Uint8Array||(ArrayBuffer.isView(d)?d=new Uint8Array(d.buffer,d.byteOffset,d.byteLength):Array.isArray(d)&&(d=Uint8Array.from(d))),!(d instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(d.length===0)return"";for(var m=0,g=0,y=0,b=d.length;y!==b&&d[y]===0;)y++,m++;for(var w=(b-y)*u+1>>>0,v=new Uint8Array(w);y!==b;){for(var x=d[y],_=0,S=w-1;(x!==0||_<g)&&S!==-1;S--,_++)x+=256*v[S]>>>0,v[S]=x%a>>>0,x=x/a>>>0;if(x!==0)throw new Error("Non-zero carry");g=_,y++}for(var A=w-g;A!==w&&v[A]===0;)A++;for(var D=c.repeat(m);A<w;++A)D+=r.charAt(v[A]);return D}function h(d){if(typeof d!="string")throw new TypeError("Expected String");if(d.length===0)return new Uint8Array;var m=0;if(d[m]!==" "){for(var g=0,y=0;d[m]===c;)g++,m++;for(var b=(d.length-m)*l+1>>>0,w=new Uint8Array(b);d[m];){var v=t[d.charCodeAt(m)];if(v===255)return;for(var x=0,_=b-1;(v!==0||x<y)&&_!==-1;_--,x++)v+=a*w[_]>>>0,w[_]=v%256>>>0,v=v/256>>>0;if(v!==0)throw new Error("Non-zero carry");y=x,m++}if(d[m]!==" "){for(var S=b-y;S!==b&&w[S]===0;)S++;for(var A=new Uint8Array(g+(b-S)),D=g;S!==b;)A[D++]=w[S++];return A}}}function p(d){var m=h(d);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:p}}var ine=sne,one=ine,lO=one;var Bke=new Uint8Array(0);var uO=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},yi=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var fO=r=>new TextEncoder().encode(r),hO=r=>new TextDecoder().decode(r);var B6=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},M6=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return pO(this,e)}},U6=class{constructor(e){this.decoders=e}or(e){return pO(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},pO=(r,e)=>new U6({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),F6=class{constructor(e,t,n,s){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=s,this.encoder=new B6(e,t,n),this.decoder=new M6(e,t,s)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},zl=({name:r,prefix:e,encode:t,decode:n})=>new F6(r,e,t,n),_o=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:s}=lO(t,e);return zl({prefix:r,name:e,encode:n,decode:i=>yi(s(i))})},ane=(r,e,t,n)=>{let s={};for(let u=0;u<e.length;++u)s[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let o=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let f=s[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|f,a+=t,a>=8&&(a-=8,o[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return o},cne=(r,e,t)=>{let n=e[e.length-1]==="=",s=(1<<t)-1,i="",o=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],o+=8;o>t;)o-=t,i+=e[s&a>>o];if(o&&(i+=e[s&a<<t-o]),n)for(;i.length*t&7;)i+="=";return i},kt=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>zl({prefix:e,name:r,encode(s){return cne(s,n,t)},decode(s){return ane(s,n,t,r)}});var lne=zl({prefix:"\0",name:"identity",encode:r=>hO(r),decode:r=>fO(r)});var z6={};Y(z6,{base2:()=>une});var une=kt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var K6={};Y(K6,{base8:()=>fne});var fne=kt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var q6={};Y(q6,{base10:()=>hne});var hne=_o({prefix:"9",name:"base10",alphabet:"0123456789"});var $6={};Y($6,{base16:()=>dne,base16upper:()=>pne});var dne=kt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),pne=kt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var H6={};Y(H6,{base32:()=>Kl,base32hex:()=>bne,base32hexpad:()=>xne,base32hexpadupper:()=>Ene,base32hexupper:()=>wne,base32pad:()=>gne,base32padupper:()=>yne,base32upper:()=>mne,base32z:()=>vne});var Kl=kt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),mne=kt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),gne=kt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),yne=kt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),bne=kt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),wne=kt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),xne=kt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Ene=kt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),vne=kt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var G6={};Y(G6,{base36:()=>_ne,base36upper:()=>Sne});var _ne=_o({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Sne=_o({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var W6={};Y(W6,{base58btc:()=>Fs,base58flickr:()=>Ane});var Fs=_o({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Ane=_o({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Y6={};Y(Y6,{base64:()=>Ine,base64pad:()=>Rne,base64url:()=>Tne,base64urlpad:()=>Dne});var Ine=kt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Rne=kt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Tne=kt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Dne=kt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Q6={};Y(Q6,{base256emoji:()=>One});var mO=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}"),Cne=mO.reduce((r,e,t)=>(r[t]=e,r),[]),Pne=mO.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function kne(r){return r.reduce((e,t)=>(e+=Cne[t],e),"")}function Nne(r){let e=[];for(let t of r){let n=Pne[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var One=zl({prefix:"\u{1F680}",name:"base256emoji",encode:kne,decode:Nne});var t7={};Y(t7,{sha256:()=>Jne,sha512:()=>ese});var Ao={};Y(Ao,{Digest:()=>Na,create:()=>So,decode:()=>j6,equals:()=>Z6});var Lne=bO,gO=128,Bne=127,Mne=~Bne,Une=Math.pow(2,31);function bO(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Une;)e[t++]=r&255|gO,r/=128;for(;r&Mne;)e[t++]=r&255|gO,r>>>=7;return e[t]=r|0,bO.bytes=t-n+1,e}var Fne=X6,Vne=128,yO=127;function X6(r,n){var t=0,n=n||0,s=0,i=n,o,a=r.length;do{if(i>=a)throw X6.bytes=0,new RangeError("Could not decode varint");o=r[i++],t+=s<28?(o&yO)<<s:(o&yO)*Math.pow(2,s),s+=7}while(o>=Vne);return X6.bytes=i-n,t}var zne=Math.pow(2,7),Kne=Math.pow(2,14),qne=Math.pow(2,21),$ne=Math.pow(2,28),Hne=Math.pow(2,35),Gne=Math.pow(2,42),Wne=Math.pow(2,49),Yne=Math.pow(2,56),Qne=Math.pow(2,63),Xne=function(r){return r<zne?1:r<Kne?2:r<qne?3:r<$ne?4:r<Hne?5:r<Gne?6:r<Wne?7:r<Yne?8:r<Qne?9:10},jne={encode:Lne,decode:Fne,encodingLength:Xne},Zne=jne,Sh=Zne;var Ah=(r,e=0)=>[Sh.decode(r,e),Sh.decode.bytes],ql=(r,e,t=0)=>(Sh.encode(r,e,t),e),$l=r=>Sh.encodingLength(r);var So=(r,e)=>{let t=e.byteLength,n=$l(r),s=n+$l(t),i=new Uint8Array(s+t);return ql(r,i,0),ql(t,i,n),i.set(e,s),new Na(r,t,e,i)},j6=r=>{let e=yi(r),[t,n]=Ah(e),[s,i]=Ah(e.subarray(n)),o=e.subarray(n+i);if(o.byteLength!==s)throw new Error("Incorrect length");return new Na(t,s,o,e)},Z6=(r,e)=>{if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&uO(r.bytes,t.bytes)}},Na=class{constructor(e,t,n,s){this.code=e,this.size=t,this.digest=n,this.bytes=s}};var e7=({name:r,code:e,encode:t})=>new J6(r,e,t),J6=class{constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?So(this.code,t):t.then(n=>So(this.code,n))}else throw Error("Unknown type, must be binary type")}};var xO=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),Jne=e7({name:"sha2-256",code:18,encode:xO("SHA-256")}),ese=e7({name:"sha2-512",code:19,encode:xO("SHA-512")});var r7={};Y(r7,{identity:()=>nse});var EO=0,tse="identity",vO=yi,rse=r=>So(EO,vO(r)),nse={code:EO,name:tse,encode:vO,digest:rse};var nNe=new TextEncoder,sNe=new TextDecoder;var _O=(r,e)=>{let{bytes:t,version:n}=r;switch(n){case 0:return ase(t,n7(r),e||Fs.encoder);default:return cse(t,n7(r),e||Kl.encoder)}};var SO=new WeakMap,n7=r=>{let e=SO.get(r);if(e==null){let t=new Map;return SO.set(r,t),t}return e},t2=class r{constructor(e,t,n,s){this.code=t,this.version=e,this.multihash=n,this.bytes=s,this["/"]=s}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Ih)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==lse)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=So(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n&&e.code===n.code&&e.version===n.version&&Z6(e.multihash,n.multihash)}toString(e){return _O(this,e)}toJSON(){return{"/":_O(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:s,multihash:i,bytes:o}=t;return new r(n,s,i,o||AO(n,s,i.bytes))}else if(t[use]===!0){let{version:n,multihash:s,code:i}=t,o=j6(s);return r.create(n,i,o)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Ih)throw new Error(`Version 0 CID must use dag-pb (code: ${Ih}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let s=AO(e,t,n.bytes);return new r(e,t,n,s)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Ih,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,s=yi(e.subarray(n,n+t.multihashSize));if(s.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=s.subarray(t.multihashSize-t.digestSize),o=new Na(t.multihashCode,t.digestSize,i,s);return[t.version===0?r.createV0(o):r.createV1(t.codec,o),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=Ah(e.subarray(t));return t+=h,f},s=n(),i=Ih;if(s===18?(s=0,t=0):i=n(),s!==0&&s!==1)throw new RangeError(`Invalid CID version ${s}`);let o=t,a=n(),c=n(),l=t+c,u=l-o;return{version:s,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,s]=ose(e,t),i=r.decode(s);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return n7(i).set(n,e),i}},ose=(r,e)=>{switch(r[0]){case"Q":{let t=e||Fs;return[Fs.prefix,t.decode(`${Fs.prefix}${r}`)]}case Fs.prefix:{let t=e||Fs;return[Fs.prefix,t.decode(r)]}case Kl.prefix:{let t=e||Kl;return[Kl.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},ase=(r,e,t)=>{let{prefix:n}=t;if(n!==Fs.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let s=e.get(n);if(s==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return s},cse=(r,e,t)=>{let{prefix:n}=t,s=e.get(n);if(s==null){let i=t.encode(r);return e.set(n,i),i}else return s},Ih=112,lse=18,AO=(r,e,t)=>{let n=$l(r),s=n+$l(e),i=new Uint8Array(s+t.byteLength);return ql(r,i,0),ql(e,i,n),i.set(t,s),i},use=Symbol.for("@ipld/js-cid/CID");var IO={...V6,...z6,...K6,...q6,...$6,...H6,...G6,...W6,...Y6,...Q6},pNe={...t7,...r7};var qr=C("libp2p:webtransport"),fse=Object.values(IO).map(r=>r.decoder).reduce((r,e)=>r.or(e));function hse(r){return Ao.decode(fse.decode(r))}function RO(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}async function TO(r,e,t,n,s){let i=r.writable.getWriter(),o=r.readable.getReader();await i.ready;function a(){let h=n.findIndex(p=>p===f);h!==-1&&(n.splice(h,1),f.stat.timeline.close=Date.now(),s?.(f))}let c=!1,l=!1;(async function(){let h=await i.closed.catch(p=>p);if(h!=null){let p=h.message;p.includes("aborted by the remote server")||p.includes("STOP_SENDING")||qr.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}c=!0,c&&l&&a()})().catch(()=>{qr.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await o.closed.catch(p=>p);h!=null&&qr.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),l=!0,c&&l&&a()}().catch(()=>{qr.error("WebTransport failed to cleanup closed stream")});let u=!1,f={id:e,abort(h){c||(i.abort(),c=!0),f.closeRead(),l=!0,a()},close(){f.closeRead(),f.closeWrite(),a()},closeRead(){l||(o.cancel().catch(h=>{h.toString().includes("RESET_STREAM")===!0&&(c=!0)}),l=!0),c&&a()},closeWrite(){c||(c=!0,i.close().catch(h=>{h.toString().includes("RESET_STREAM")===!0&&(l=!0)})),l&&a()},reset(){f.close()},stat:{direction:t,timeline:{open:Date.now()}},metadata:{},source:async function*(){for(;;){let h=await o.read();if(h.done===!0){l=!0,c&&a();return}yield new we(h.value)}}(),sink:async function(h){if(u)throw new Error("sink already called on stream");u=!0;try{for await(let p of h)if(p instanceof Uint8Array)await i.write(p);else for(let d of p)await i.write(d)}finally{f.closeWrite()}}};return f}function dse(r){let e=r.stringTuples(),{url:t,certhashes:n,remotePeer:s}=e.reduce((i,[o,a])=>{switch(o){case se("ip6").code:case se("dns6").code:a?.includes(":")===!0&&(a=`[${a}]`);case se("ip4").code:case se("dns4").code:if(i.seenHost||i.seenPort)throw new Error("Invalid multiaddr, saw host and already saw the host or port");return{...i,url:`${i.url}${a??""}`,seenHost:!0};case se("quic").code:case se("quic-v1").code:case se("webtransport").code:if(!i.seenHost||!i.seenPort)throw new Error("Invalid multiaddr, Didn't see host and port, but saw quic/webtransport");return i;case se("udp").code:if(i.seenPort)throw new Error("Invalid multiaddr, saw port but already saw the port");return{...i,url:`${i.url}:${a??""}`,seenPort:!0};case se("certhash").code:if(!i.seenHost||!i.seenPort)throw new Error("Invalid multiaddr, saw the certhash before seeing the host and port");return{...i,certhashes:i.certhashes.concat([hse(a??"")])};case se("p2p").code:return{...i,remotePeer:he(a??"")};default:throw new Error(`unexpected component in multiaddr: ${o} ${se(o).name} ${a??""} `)}},{url:"https://",seenHost:!1,seenPort:!1,certhashes:[]});return{url:t,certhashes:n,remotePeer:s}}function pse(r,e){return e.filter(n=>!!r.find(s=>{if(n.length!==s.length)return!1;for(let i=0;i<n.length;i++)if(s[i]!==n[i])return!1;return!0})).length===e.length}var s7=class{components;config;constructor(e,t={}){this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3}}[Symbol.toStringTag]="@libp2p/webtransport";[Ps]=!0;async dial(e,t){qr("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:s,certhashes:i,remotePeer:o}=dse(e);if(i.length===0)throw new Error("Expected multiaddr to contain certhashes");let a=new WebTransport(`${s}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:i.map(l=>({algorithm:"sha-256",value:l.digest}))});if(a.closed.catch(l=>{qr.error("WebTransport transport closed due to:",l)}),await a.ready,o==null)throw new Error("Need a target peerid");if(!await this.authenticateWebTransport(a,n,o,i))throw new Error("Failed to authenticate webtransport");let c={close:async l=>{l!=null&&qr("Closing webtransport with err:",l),a.close()},remoteAddr:e,timeline:{open:Date.now()},...RO()};a.closed.catch(l=>{qr.error("WebTransport connection closed:",l),c.timeline.close=Date.now()});try{t?.signal?.throwIfAborted()}catch(l){throw a.close(),l}return t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(a),skipProtection:!0})}async authenticateWebTransport(e,t,n,s){let i=await e.createBidirectionalStream(),o=i.writable.getWriter(),a=i.readable.getReader();await o.ready;let c={source:async function*(){for(;;){let f=await a.read();if(f.value!=null&&(yield f.value),f.done===!0)break}}(),sink:async function(f){for await(let h of f)await o.write(h)}},l=dl()(),{remoteExtensions:u}=await l.secureOutbound(t,c,n);if(o.close().catch(f=>{qr.error(`Failed to close authentication stream writer: ${f.message}`)}),a.cancel().catch(f=>{qr.error(`Failed to close authentication stream reader: ${f.message}`)}),!pse(u?.webtransportCerthashes??[],s.map(f=>f.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];(async function(){let a=e.incomingBidirectionalStreams.getReader();for(;;){let{done:c,value:l}=await a.read();if(c===!0)break;if(i.length>=n.maxInboundStreams)l.writable.close().catch(u=>{qr.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),l.readable.cancel().catch(u=>{qr.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await TO(l,String(t++),"inbound",i,s?.onStreamEnd);i.push(u),s?.onIncomingStream?.(u)}}})().catch(()=>{qr.error("WebTransport failed to receive incoming stream")});let o={protocol:"webtransport",streams:i,newStream:async a=>{let c=await e.createBidirectionalStream(),l=await TO(c,String(t++),s?.direction??"outbound",i,s?.onStreamEnd);return i.push(l),l},close:a=>{a!=null&&qr("Closing webtransport muxer with err:",a),e.close()},...RO()};try{s?.signal?.throwIfAborted()}catch(a){throw e.close(),a}return o}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(t=>t.protoNames().includes("webtransport"))}};function DO(r={}){return e=>new s7(e,r)}var Vs;(function(r){let e;(function(s){s.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(s){s[s.EOL=0]="EOL"})(t||(t={})),function(s){s.codec=()=>vt(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=me((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.value!=null&&(i.uint32(10),i.bytes(s.value)),s.signature!=null&&(i.uint32(18),i.bytes(s.signature)),s.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(s.validityType,i)),s.validity!=null&&(i.uint32(34),i.bytes(s.validity)),s.sequence!=null&&(i.uint32(40),i.uint64(s.sequence)),s.ttl!=null&&(i.uint32(48),i.uint64(s.ttl)),s.pubKey!=null&&(i.uint32(58),i.bytes(s.pubKey)),s.signatureV2!=null&&(i.uint32(66),i.bytes(s.signatureV2)),s.data!=null&&(i.uint32(74),i.bytes(s.data)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.value=s.bytes();break;case 2:o.signature=s.bytes();break;case 3:o.validityType=r.ValidityType.codec().decode(s);break;case 4:o.validity=s.bytes();break;case 5:o.sequence=s.uint64();break;case 6:o.ttl=s.uint64();break;case 7:o.pubKey=s.bytes();break;case 8:o.signatureV2=s.bytes();break;case 9:o.data=s.bytes();break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>pe(s,r.codec()),r.decode=s=>de(s,r.codec())})(Vs||(Vs={}));var Rh=W(Po(),1);var CO="ERR_IPNS_EXPIRED_RECORD",r2="ERR_UNRECOGNIZED_VALIDITY";var Io="ERR_SIGNATURE_VERIFICATION",PO="ERR_UNRECOGNIZED_FORMAT";var i7="ERR_UNDEFINED_PARAMETER",kO="ERR_INVALID_RECORD_DATA",NO="ERR_INVALID_EMBEDDED_KEY";var OO="ERR_RECORD_TOO_LARGE";var BO=C("ipns:utils"),mse=$("/ipns/");function Th(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),s=parseInt(t[2],10)-1,i=parseInt(t[3],10),o=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,s,i,o,a,c,l))}var MO=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw BO.error(n),(0,Rh.default)(n,i7)}let t;if(e.pubKey!=null){try{t=Mr(e.pubKey)}catch(s){throw BO.error(s),s}if(!(await pr(e.pubKey)).equals(r))throw(0,Rh.default)(new Error("Embedded public key did not match PeerID"),NO)}else r.publicKey!=null&&(t=Mr(r.publicKey));if(t!=null)return t;throw(0,Rh.default)(new Error("no public key is available"),i7)};var UO=r=>{let e=$("ipns-signature:");return Ee([e,r])};var FO=r=>{let e=Vs.decode(r);return e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),{value:e.value??new Uint8Array(0),signature:e.signature??new Uint8Array(0),validityType:e.validityType??Vs.ValidityType.EOL,validity:e.validity??new Uint8Array(0),sequence:e.sequence??0n,pubKey:e.pubKey,ttl:e.ttl??void 0,signatureV2:e.signatureV2,data:e.data}};var VO=r=>mt(r.slice(mse.length));var zO=r=>{let e=Hn(r);if(e.ValidityType===0)e.ValidityType=Vs.ValidityType.EOL;else throw(0,Rh.default)(new Error("Unknown validity type"),r2);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e};var KO=(r,e)=>{let t=e.map((n,s)=>({entry:Vs.decode(n),index:s}));return t.sort((n,s)=>{if(n.entry.signatureV2!=null&&s.entry.signatureV2==null)return-1;if(n.entry.signatureV2==null&&s.entry.signatureV2!=null)return 1;let i=n.entry.sequence??0n,o=s.entry.sequence??0n;if(i>o)return-1;if(i<o)return 1;let a=n.entry.validity??new Uint8Array(0),c=s.entry.validity??new Uint8Array(0),l=Th(M(a)),u=Th(M(c));return l.getTime()>u.getTime()?-1:l.getTime()<u.getTime()?1:0}),t[0].index};var bn=W(Po(),1);var Dh=C("ipns:validator"),gse=1024*10,yse=async(r,e)=>{let{value:t,validityType:n,validity:s}=e,i,o;if(e.signatureV2!=null&&e.data!=null)o=e.signatureV2,i=UO(e.data),bse(e);else throw(0,bn.default)(new Error("missing data or signatureV2"),Io);let a;try{a=await r.verify(i,o)}catch{a=!1}if(!a)throw Dh.error("record signature verification failed"),(0,bn.default)(new Error("record signature verification failed"),Io);if(s!=null&&n===Vs.ValidityType.EOL){let c;try{c=Th(M(s))}catch{throw Dh.error("unrecognized validity format (not an rfc3339 format)"),(0,bn.default)(new Error("unrecognized validity format (not an rfc3339 format)"),PO)}if(c.getTime()<Date.now())throw Dh.error("record has expired"),(0,bn.default)(new Error("record has expired"),CO)}else if(n!=null)throw Dh.error("unrecognized validity type"),(0,bn.default)(new Error("unrecognized validity type"),r2);Dh("ipns entry for %b is valid",t)},bse=r=>{if(r.data==null)throw(0,bn.default)(new Error("Record data is missing"),kO);let e=zO(r.data);if(!ye(e.Value,r.value))throw(0,bn.default)(new Error('Field "value" did not match between protobuf and CBOR'),Io);if(!ye(e.Validity,r.validity))throw(0,bn.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Io);if(e.ValidityType!==r.validityType)throw(0,bn.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Io);if(e.Sequence!==r.sequence)throw(0,bn.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Io);if(e.TTL!==r.ttl)throw(0,bn.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Io)},qO=async(r,e)=>{if(e.byteLength>gse)throw(0,bn.default)(new Error("record too large"),OO);let t=VO(r),n=FO(e),s=await MO(t,n);await yse(s,n)};var a7=W(jr(),1);var $O="libp2p",HO="autonat",GO="1.0.0";var Ae;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>vt(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(s||(s={})),function(l){l.codec=()=>vt(s)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=me((f,h,p={})=>{if(p.lengthDelimited!==!1&&h.fork(),f.id!=null&&(h.uint32(10),h.bytes(f.id)),f.addrs!=null)for(let d of f.addrs)h.uint32(18),h.bytes(d);p.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let p={addrs:[]},d=h==null?f.len:f.pos+h;for(;f.pos<d;){let m=f.uint32();switch(m>>>3){case 1:p.id=f.bytes();break;case 2:p.addrs.push(f.bytes());break;default:f.skipType(m&7);break}}return p})),u),l.encode=f=>pe(f,l.codec()),l.decode=f=>de(f,l.codec())})(i=r.PeerInfo||(r.PeerInfo={}));let o;(function(l){let u;l.codec=()=>(u==null&&(u=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(f.peer,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let p={},d=h==null?f.len:f.pos+h;for(;f.pos<d;){let m=f.uint32();switch(m>>>3){case 1:p.peer=r.PeerInfo.codec().decode(f,f.uint32());break;default:f.skipType(m&7);break}}return p})),u),l.encode=f=>pe(f,l.codec()),l.decode=f=>de(f,l.codec())})(o=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(f.status,h)),f.statusText!=null&&(h.uint32(18),h.string(f.statusText)),f.addr!=null&&(h.uint32(26),h.bytes(f.addr)),p.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let p={},d=h==null?f.len:f.pos+h;for(;f.pos<d;){let m=f.uint32();switch(m>>>3){case 1:p.status=r.ResponseStatus.codec().decode(f);break;case 2:p.statusText=f.string();break;case 3:p.addr=f.bytes();break;default:f.skipType(m&7);break}}return p})),u),l.encode=f=>pe(f,l.codec()),l.decode=f=>de(f,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=me((l,u,f={})=>{f.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),f.lengthDelimited!==!1&&u.ldelim()},(l,u)=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:f.type=r.MessageType.codec().decode(l);break;case 2:f.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:f.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(p&7);break}}return f})),c),r.encode=l=>pe(l,r.codec()),r.decode=l=>de(l,r.codec())})(Ae||(Ae={}));var He=C("libp2p:autonat"),o7=4,c7=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;constructor(e,t){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??$O}/${HO}/${GO}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{He.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=et([AbortSignal.timeout(this.timeout)]);try{(0,a7.setMaxListeners)?.(1/0,t)}catch{}let n=this.components.addressManager.getAddresses().map(s=>s.toOptions().host);try{let s=hr(e.stream,t),i=this;await Ie(s,o=>_t(o),async function*(o){let a=await rs(o);if(a==null){He("no message received"),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=Ae.decode(a)}catch(m){He.error("could not decode message",m),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){He.error("dial was missing from message"),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let u,f=l.peer;if(f==null||f.id==null){He.error("PeerId missing from message"),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{u=mt(f.id)}catch(m){He.error("invalid PeerId",m),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(He("incoming request from %p",u),!e.connection.remotePeer.equals(u)){He("target peer %p did not equal sending peer %p",u,e.connection.remotePeer),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let h=f.addrs.map(m=>fe(m)).filter(m=>{let g=m.toOptions().host===e.connection.remoteAddr.toOptions().host;return He.trace("request to dial %s was sent from %s is same host %s",m,e.connection.remoteAddr,g),g}).filter(m=>{let g=m.toOptions().host,y=!(Cn(g)??!1);return He.trace("host %s was public %s",g,y),y}).filter(m=>{let g=m.toOptions().host,y=!n.includes(g);return He.trace("host %s was not our host %s",g,y),y}).filter(m=>{let g=!!i.components.transportManager.transportForMultiaddr(m);return He.trace("transport for %s is supported %s",m,g),g}).map(m=>(m.getPeerId()==null&&(m=m.encapsulate(`/p2p/${u.toString()}`)),m));if(h.length===0){He("no valid multiaddrs for %p in message",u),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}He("dial multiaddrs %s for peer %p",h.map(m=>m.toString()).join(", "),u);let p="",d=h[0];for await(let m of h){let g;d=m;try{if(g=await i.components.connectionManager.openConnection(m,{signal:t}),!g.remoteAddr.equals(m))throw He.error("tried to dial %s but dialed %s",m,g.remoteAddr),new Error("Unexpected remote address");He("Success %p",u),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.OK,addr:g.remoteAddr.decapsulateCode(se("p2p").code).bytes}});return}catch(y){He("could not dial %p",u,y),p=y.message}finally{g!=null&&await g.close()}}yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_DIAL_ERROR,statusText:p,addr:d.bytes}})},o=>dt(o),e.stream)}catch(s){He.error("error handling incoming autonat stream",s)}finally{t.clear()}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{He.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(i=>{let o=i.toOptions();return!(Cn(o.host)??!1)});if(t.length===0){He("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);try{(0,a7.setMaxListeners)?.(1/0,n)}catch{}let s=this;try{He("verify multiaddrs %s",t.map(f=>f.toString()).join(", "));let i=Ae.encode({type:Ae.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(f=>f.bytes)}}}),a=(await kd()).toBytes(),c={},l=[],u=async f=>{try{He("asking %p to verify multiaddr",f.id);let h=await s.components.connectionManager.openConnection(f.id,{signal:n}),p=await h.newStream(this.protocol,{signal:n}),d=hr(p,n),m=await Ie([i],y=>dt(y),d,y=>_t(y),async y=>rs(y));if(m==null){He("no response received from %p",h.remotePeer);return}let g=Ae.decode(m);if(g.type!==Ae.MessageType.DIAL_RESPONSE||g.dialResponse==null){He("invalid autonat response from %p",h.remotePeer);return}if(g.dialResponse.status===Ae.ResponseStatus.OK){let y=h.remoteAddr.toOptions(),b;if(y.family===4)b=y.host.split(".")[0];else if(y.family===6)b=y.host.split(":")[0];else{He('remote address "%s" was not IP4 or IP6?',y.host);return}if(l.includes(b)){He("already have response from network segment %d - %s",b,y.host);return}l.push(b)}return g.dialResponse}catch(h){He.error("error asking remote to verify multiaddr",h)}};for await(let f of Sa(Fn(this.components.peerRouting.getClosestPeers(a,{signal:n}),h=>async()=>u(h)),{concurrency:o7}))try{if(f==null)continue;let h=f.addr==null?t[0]:fe(f.addr);if(He("autonat response for %a is %s",h,f.status),f.status===Ae.ResponseStatus.E_BAD_REQUEST||f.status===Ae.ResponseStatus.E_DIAL_REFUSED||f.addr==null&&t.length>1)continue;if(!t.some(d=>d.equals(h))){He("peer reported %a as %s but it was not in our observed address list",h,f.status);continue}let p=h.toString();if(c[p]==null&&(c[p]={success:0,failure:0}),f.status===Ae.ResponseStatus.OK?c[p].success++:f.status===Ae.ResponseStatus.E_DIAL_ERROR&&c[p].failure++,c[p].success===o7){He("%a is externally dialable",h),e.confirmObservedAddr(h);return}if(c[p].failure===o7){He("%a is not externally dialable",h),e.removeObservedAddr(h);return}}catch(h){He.error("could not verify external address",h)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function WO(r={}){return e=>new c7(e,r)}var nie=W(jr(),1);var l7="/libp2p/relay";var YO="circuit-relay-relay";var QO=BigInt(131072),Ro="/libp2p/circuit/relay/0.2.0/hop",n2="/libp2p/circuit/relay/0.2.0/stop",Sse=30*1e3,Ase=30*1e3;var bi;(function(r){let e;(function(s){s.RESERVE="RESERVE",s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.RESERVE=0]="RESERVE",s[s.CONNECT=1]="CONNECT",s[s.STATUS=2]="STATUS"})(t||(t={})),function(s){s.codec=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Hl.codec().encode(s.peer,i)),s.reservation!=null&&(i.uint32(26),s2.codec().encode(s.reservation,i)),s.limit!=null&&(i.uint32(34),Gl.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(40),nr.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Hl.codec().decode(s,s.uint32());break;case 3:o.reservation=s2.codec().decode(s,s.uint32());break;case 4:o.limit=Gl.codec().decode(s,s.uint32());break;case 5:o.status=nr.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>pe(s,r.codec()),r.decode=s=>de(s,r.codec())})(bi||(bi={}));var fs;(function(r){let e;(function(s){s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.CONNECT=0]="CONNECT",s[s.STATUS=1]="STATUS"})(t||(t={})),function(s){s.codec=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Hl.codec().encode(s.peer,i)),s.limit!=null&&(i.uint32(26),Gl.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(32),nr.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Hl.codec().decode(s,s.uint32());break;case 3:o.limit=Gl.codec().decode(s,s.uint32());break;case 4:o.status=nr.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>pe(s,r.codec()),r.decode=s=>de(s,r.codec())})(fs||(fs={}));var Hl;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={id:new Uint8Array(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.id=t.bytes();break;case 2:s.addrs.push(t.bytes());break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(Hl||(Hl={}));var s2;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.expire=t.uint64();break;case 2:s.addrs.push(t.bytes());break;case 3:s.voucher=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(s2||(s2={}));var Gl;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.duration=t.uint32();break;case 2:s.data=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(Gl||(Gl={}));var nr;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(nr||(nr={}));var u7;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(u7||(u7={}));(function(r){r.codec=()=>vt(u7)})(nr||(nr={}));var f7;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.relay=t.bytes();break;case 2:s.peer=t.bytes();break;case 3:s.expiration=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(f7||(f7={}));var Ise=ZO,XO=128,Rse=127,Tse=~Rse,Dse=Math.pow(2,31);function ZO(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Dse;)e[t++]=r&255|XO,r/=128;for(;r&Tse;)e[t++]=r&255|XO,r>>>=7;return e[t]=r|0,ZO.bytes=t-n+1,e}var Cse=h7,Pse=128,jO=127;function h7(r,n){var t=0,n=n||0,s=0,i=n,o,a=r.length;do{if(i>=a)throw h7.bytes=0,new RangeError("Could not decode varint");o=r[i++],t+=s<28?(o&jO)<<s:(o&jO)*Math.pow(2,s),s+=7}while(o>=Pse);return h7.bytes=i-n,t}var kse=Math.pow(2,7),Nse=Math.pow(2,14),Ose=Math.pow(2,21),Lse=Math.pow(2,28),Bse=Math.pow(2,35),Mse=Math.pow(2,42),Use=Math.pow(2,49),Fse=Math.pow(2,56),Vse=Math.pow(2,63),zse=function(r){return r<kse?1:r<Nse?2:r<Ose?3:r<Lse?4:r<Bse?5:r<Mse?6:r<Use?7:r<Fse?8:r<Vse?9:10},Kse={encode:Ise,decode:Cse,encodingLength:zse},qse=Kse,Ch=qse;var Ph=(r,e=0)=>[Ch.decode(r,e),Ch.decode.bytes],Wl=(r,e,t=0)=>(Ch.encode(r,e,t),e),Yl=r=>Ch.encodingLength(r);var fOe=new Uint8Array(0);var eL=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},Ql=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var kh=(r,e)=>{let t=e.byteLength,n=Yl(r),s=n+Yl(t),i=new Uint8Array(s+t);return Wl(r,i,0),Wl(t,i,n),i.set(e,s),new Xl(r,t,e,i)},tL=r=>{let e=Ql(r),[t,n]=Ph(e),[s,i]=Ph(e.subarray(n)),o=e.subarray(n+i);if(o.byteLength!==s)throw new Error("Incorrect length");return new Xl(t,s,o,e)},rL=(r,e)=>{if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&eL(r.bytes,t.bytes)}},Xl=class{constructor(e,t,n,s){this.code=e,this.size=t,this.digest=n,this.bytes=s}};function $se(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var s=0;s<r.length;s++){var i=r.charAt(s),o=i.charCodeAt(0);if(t[o]!==255)throw new TypeError(i+" is ambiguous");t[o]=s}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function f(d){if(d instanceof Uint8Array||(ArrayBuffer.isView(d)?d=new Uint8Array(d.buffer,d.byteOffset,d.byteLength):Array.isArray(d)&&(d=Uint8Array.from(d))),!(d instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(d.length===0)return"";for(var m=0,g=0,y=0,b=d.length;y!==b&&d[y]===0;)y++,m++;for(var w=(b-y)*u+1>>>0,v=new Uint8Array(w);y!==b;){for(var x=d[y],_=0,S=w-1;(x!==0||_<g)&&S!==-1;S--,_++)x+=256*v[S]>>>0,v[S]=x%a>>>0,x=x/a>>>0;if(x!==0)throw new Error("Non-zero carry");g=_,y++}for(var A=w-g;A!==w&&v[A]===0;)A++;for(var D=c.repeat(m);A<w;++A)D+=r.charAt(v[A]);return D}function h(d){if(typeof d!="string")throw new TypeError("Expected String");if(d.length===0)return new Uint8Array;var m=0;if(d[m]!==" "){for(var g=0,y=0;d[m]===c;)g++,m++;for(var b=(d.length-m)*l+1>>>0,w=new Uint8Array(b);d[m];){var v=t[d.charCodeAt(m)];if(v===255)return;for(var x=0,_=b-1;(v!==0||x<y)&&_!==-1;_--,x++)v+=a*w[_]>>>0,w[_]=v%256>>>0,v=v/256>>>0;if(v!==0)throw new Error("Non-zero carry");y=x,m++}if(d[m]!==" "){for(var S=b-y;S!==b&&w[S]===0;)S++;for(var A=new Uint8Array(g+(b-S)),D=g;S!==b;)A[D++]=w[S++];return A}}}function p(d){var m=h(d);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:p}}var Hse=$se,Gse=Hse,sL=Gse;var d7=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},p7=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return iL(this,e)}},m7=class{constructor(e){this.decoders=e}or(e){return iL(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},iL=(r,e)=>new m7({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),g7=class{constructor(e,t,n,s){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=s,this.encoder=new d7(e,t,n),this.decoder=new p7(e,t,s)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},oL=({name:r,prefix:e,encode:t,decode:n})=>new g7(r,e,t,n),y7=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:s}=sL(t,e);return oL({prefix:r,name:e,encode:n,decode:i=>Ql(s(i))})},Wse=(r,e,t,n)=>{let s={};for(let u=0;u<e.length;++u)s[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let o=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let f=s[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|f,a+=t,a>=8&&(a-=8,o[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return o},Yse=(r,e,t)=>{let n=e[e.length-1]==="=",s=(1<<t)-1,i="",o=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],o+=8;o>t;)o-=t,i+=e[s&a>>o];if(o&&(i+=e[s&a<<t-o]),n)for(;i.length*t&7;)i+="=";return i},zs=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>oL({prefix:e,name:r,encode(s){return Yse(s,n,t)},decode(s){return Wse(s,n,t,r)}});var wi=y7({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),wOe=y7({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Nh=zs({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),vOe=zs({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),_Oe=zs({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),SOe=zs({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),AOe=zs({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),IOe=zs({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),ROe=zs({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),TOe=zs({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),DOe=zs({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var aL=(r,e)=>{let{bytes:t,version:n}=r;switch(n){case 0:return Xse(t,b7(r),e||wi.encoder);default:return jse(t,b7(r),e||Nh.encoder)}};var cL=new WeakMap,b7=r=>{let e=cL.get(r);if(e==null){let t=new Map;return cL.set(r,t),t}return e},i2=class r{constructor(e,t,n,s){this.code=t,this.version=e,this.multihash=n,this.bytes=s,this["/"]=s}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Oh)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Zse)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=kh(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n&&e.code===n.code&&e.version===n.version&&rL(e.multihash,n.multihash)}toString(e){return aL(this,e)}toJSON(){return{"/":aL(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:s,multihash:i,bytes:o}=t;return new r(n,s,i,o||lL(n,s,i.bytes))}else if(t[Jse]===!0){let{version:n,multihash:s,code:i}=t,o=tL(s);return r.create(n,i,o)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Oh)throw new Error(`Version 0 CID must use dag-pb (code: ${Oh}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let s=lL(e,t,n.bytes);return new r(e,t,n,s)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Oh,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,s=Ql(e.subarray(n,n+t.multihashSize));if(s.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=s.subarray(t.multihashSize-t.digestSize),o=new Xl(t.multihashCode,t.digestSize,i,s);return[t.version===0?r.createV0(o):r.createV1(t.codec,o),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=Ph(e.subarray(t));return t+=h,f},s=n(),i=Oh;if(s===18?(s=0,t=0):i=n(),s!==0&&s!==1)throw new RangeError(`Invalid CID version ${s}`);let o=t,a=n(),c=n(),l=t+c,u=l-o;return{version:s,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,s]=Qse(e,t),i=r.decode(s);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return b7(i).set(n,e),i}},Qse=(r,e)=>{switch(r[0]){case"Q":{let t=e||wi;return[wi.prefix,t.decode(`${wi.prefix}${r}`)]}case wi.prefix:{let t=e||wi;return[wi.prefix,t.decode(r)]}case Nh.prefix:{let t=e||Nh;return[Nh.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},Xse=(r,e,t)=>{let{prefix:n}=t;if(n!==wi.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let s=e.get(n);if(s==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return s},jse=(r,e,t)=>{let{prefix:n}=t,s=e.get(n);if(s==null){let i=t.encode(r);return e.set(n,i),i}else return s},Oh=112,Zse=18,lL=(r,e,t)=>{let n=Yl(r),s=n+Yl(e),i=new Uint8Array(s+t.byteLength);return Wl(r,i,0),Wl(e,i,n),i.set(t,s),i},Jse=Symbol.for("@ipld/js-cid/CID");var x7=({name:r,code:e,encode:t})=>new w7(r,e,t),w7=class{constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?kh(this.code,t):t.then(n=>kh(this.code,n))}else throw Error("Unknown type, must be binary type")}};var uL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),fL=x7({name:"sha2-256",code:18,encode:uL("SHA-256")}),UOe=x7({name:"sha2-512",code:19,encode:uL("SHA-512")});var GOe=C("libp2p:circuit-relay:utils");async function E7(r){let e=new TextEncoder().encode(r),t=await fL.digest(e);return i2.createV0(t)}function v7(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var rie=W(gL(),1);var iLe=C("libp2p:circuit-relay:advert-service");var LLe=C("libp2p:circuit-relay:server");var sie=C("libp2p:stream:converter");function _7(r,e={}){let{stream:t,remoteAddr:n}=r,{sink:s,source:i}=t,o=async function*(){for await(let l of i)l instanceof Uint8Array?yield l:yield*l}(),a={async sink(l){e.signal!=null&&(l=ht(l,e.signal));try{await s(l),await c()}catch(u){u.type!=="aborted"&&sie(u)}},source:e.signal!=null?ht(o,e.signal):o,remoteAddr:n,timeline:{open:Date.now(),close:void 0},async close(){await s(async function*(){yield new Uint8Array(0)}()),await c()}};async function c(){a.timeline.close==null&&(a.timeline.close=Date.now()),await Promise.resolve()}return a}var To=C("libp2p:circuit-relay:discover-relays"),o2=class extends Ve{peerId;peerStore;contentRouting;registrar;started;topologyId;constructor(e){super(),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Ro,Ri({onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}})),this.discover().catch(e=>{To.error("error listening on relays",e)}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){To("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Ro)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)To("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});To("found %d relay peers in peer store",e.length);try{To("searching content routing for relays");let t=await E7(l7),n=0;for await(let s of this.contentRouting.findProviders(t))if(s.multiaddrs.length>0&&!s.id.equals(this.peerId)){let i=s.id;n++,await this.peerStore.merge(i,{multiaddrs:s.multiaddrs}),To("found relay peer %p in content routing",i),this.safeDispatchEvent("relay:discover",{detail:i})}To("found %d relay peers in content routing",n)}catch(t){To.error("failed when finding relays on the network",t)}}};var bL=C("libp2p:circuit-relay:transport:listener"),S7=class extends Ve{connectionManager;relayStore;listeningAddrs;constructor(e){super(),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new mr,this.relayStore.addEventListener("relay:removed",t=>{this.#e(t.detail)})}async listen(e){bL("listen on %s",e);let t=e.getPeerId(),n;if(t!=null){let i=he(t),o=this.connectionManager.getConnectionsMap().get(i)??[];o.length>0&&(n=o[0])}if(n==null){let i=e.toString().split("/p2p-circuit").find(a=>a!==""),o=fe(i);n=await this.connectionManager.openConnection(o)}if(!this.relayStore.hasReservation(n.remotePeer)){await this.relayStore.addRelay(n.remotePeer,"configured");return}let s=this.relayStore.getReservation(n.remotePeer);if(s==null)throw new E("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){bL("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,s.addrs.map(i=>fe(i).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.listeningAddrs.delete(e),t&&this.safeDispatchEvent("close",{})}};function wL(r){return new S7(r)}var Pr=C("libp2p:circuit-relay:transport:reservation-store"),oie=60*1e3*10,aie=60*1e3*5,cie=30*1e3,a2=class extends Ve{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;started;constructor(e,t){super(),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new mr,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.started=!1,this.reserveQueue=new Zc({concurrency:t?.reservationConcurrency??1}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!0}async addRelay(e,t){if(this.peerId.equals(e)){Pr("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){Pr("not adding relay as the queue is full");return}if(this.reserveQueue.hasJob(e)){Pr("relay peer is already in the reservation queue");return}Pr("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(v7(n.reservation.expire)>oie){Pr("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((l,u)=>(u.type==="discovered"&&l++,l),0)>=this.maxDiscoveredRelays){Pr("already have enough discovered relays");return}let s=await this.connectionManager.openConnection(e);if(s.remoteAddr.protoNames().includes("p2p-circuit")){Pr("not creating reservation over relayed connection");return}let i=await this.#e(s);Pr("created reservation on relay peer %p",e);let o=v7(i.expire),a=Math.min(Math.max(o-aie,cie),Math.pow(2,31)-1),c=setTimeout(()=>{this.addRelay(e,t).catch(l=>{Pr.error("could not refresh reservation to relay %p",e,l)})},a);this.reservations.set(e,{timeout:c,reservation:i,type:t}),await this.peerStore.merge(e,{tags:{[YO]:{value:1,ttl:o}}}),await this.transportManager.listen([fe(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){Pr.error("could not reserve slot on %p",e,n),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e){Pr("requesting reservation from %s",e.remotePeer);let t=await e.newStream(Ro),s=Vr(t).pb(bi);s.write({type:bi.Type.RESERVE});let i;try{i=await s.read()}catch(a){throw Pr.error("error parsing reserve message response from %p because",e.remotePeer,a),a}finally{t.close()}if(i.status===nr.OK&&i.reservation!=null)return i.reservation;let o=`reservation failed with status ${i.status??"undefined"}`;throw Pr.error(o),new Error(o)}#t(e){let t=this.reservations.get(e);t!=null&&(Pr("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(Pr("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var $r=C("libp2p:circuit-relay:transport"),lie=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(fe)}catch{return!1}return!0},xL={maxInboundStopStreams:300,maxOutboundStopStreams:300},A7=class{discovery;registrar;peerStore;connectionManager;peerId;upgrader;addressManager;connectionGater;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;constructor(e,t){this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??xL.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??xL.maxOutboundStopStreams,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new o2(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(s=>{$r.error("could not add discovered relay %p",n.detail,s)})})),this.reservationStore=new a2(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{$r.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){await this.reservationStore.start(),await this.discovery?.start(),await this.registrar.handle(n2,e=>{this.onStop(e).catch(t=>{$r.error(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams}),this.started=!0}async stop(){this.discovery?.stop(),await this.reservationStore.stop(),await this.registrar.unhandle(n2),this.started=!1}[Ps]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(d=>d===290).length!==1){let d="Invalid circuit relay address";throw $r.error(d,e),new E(d,z.ERR_RELAYED_DIAL)}let n=e.toString().split("/p2p-circuit"),s=fe(n[0]),i=fe(n[n.length-1]),o=s.getPeerId(),a=i.getPeerId();if(o==null||a==null){let d=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw $r.error(d),new E(d,z.ERR_RELAYED_DIAL)}let c=he(o),l=he(a),u=!1,h=this.connectionManager.getConnections(c)[0];h==null&&(await this.peerStore.merge(c,{multiaddrs:[s]}),h=await this.connectionManager.openConnection(c,t),u=!0);let p;try{return p=await h.newStream([Ro]),await this.connectV2({stream:p,connection:h,destinationPeer:l,destinationAddr:i,relayAddr:s,ma:e,disconnectOnFailure:u})}catch(d){throw $r.error(`Circuit relay dial to destination ${l.toString()} via relay ${c.toString()} failed`,d),p?.abort(d),u&&await h.close(),d}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:s,relayAddr:i,ma:o,disconnectOnFailure:a}){try{let c=Vr(e),l=c.pb(bi);l.write({type:bi.Type.CONNECT,peer:{id:n.toBytes(),addrs:[fe(s).bytes]}});let u=await l.read();if(u.status!==nr.OK)throw new E(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`,z.ERR_HOP_REQUEST_FAILED);let f=_7({stream:c.unwrap(),remoteAddr:o,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`)});return $r("new outbound connection %s",f.remoteAddr),await this.upgrader.upgradeOutbound(f)}catch(c){throw $r.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return wL({connectionManager:this.connectionManager,relayStore:this.reservationStore})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>as.matches(t))}async onStop({connection:e,stream:t}){let n=Vr(t),s=await n.readPB(fs);if($r("received circuit v2 stop protocol request from %s",e.remotePeer),s?.type===void 0)return;let i=n.pb(fs);if($r("new circuit relay v2 stop stream from %s",e.remotePeer),s.type!==fs.Type.CONNECT){$r.error("invalid stop connect request via peer %s",e.remotePeer),i.write({type:fs.Type.STATUS,status:nr.UNEXPECTED_MESSAGE});return}if(!lie(s)){$r.error("invalid stop connect request via peer %s",e.remotePeer),i.write({type:fs.Type.STATUS,status:nr.MALFORMED_MESSAGE});return}let o=mt(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,o)===!0){i.write({type:fs.Type.STATUS,status:nr.PERMISSION_DENIED});return}i.write({type:fs.Type.STATUS,status:nr.OK});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${o.toString()}`),c=this.addressManager.getAddresses()[0],l=_7({stream:n.unwrap(),remoteAddr:a,localAddr:c});$r("new inbound connection %s",l.remoteAddr),await this.upgrader.upgradeInbound(l),$r("%s connection %s upgraded","inbound",l.remoteAddr)}};function I7(r={}){return e=>new A7(e,r)}var EL="0.45.9";var R7=`js-libp2p/${EL}`;var vL="0.1.0",_L="id",SL="id/push",AL="1.0.0",IL="1.0.0";var c2=W(jr(),1);var Do;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 5:s.protocolVersion=t.string();break;case 6:s.agentVersion=t.string();break;case 1:s.publicKey=t.bytes();break;case 2:s.listenAddrs.push(t.bytes());break;case 4:s.observedAddr=t.bytes();break;case 3:s.protocols.push(t.string());break;case 8:s.signedPeerRecord=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(Do||(Do={}));var kr=C("libp2p:identify"),RL=1024*8,hs={protocolPrefix:"ipfs",agentVersion:R7,timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192},l2=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;constructor(e,t){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.identifyProtocolStr=`/${t.protocolPrefix??hs.protocolPrefix}/${_L}/${AL}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??hs.protocolPrefix}/${SL}/${IL}`,this.timeout=t.timeout??hs.timeout,this.maxInboundStreams=t.maxInboundStreams??hs.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??hs.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??hs.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??hs.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??hs.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??hs.maxObservedAddresses,this.host={protocolVersion:`${t.protocolPrefix??hs.protocolPrefix}/${vL}`,agentVersion:t.agentVersion??hs.agentVersion},e.events.addEventListener("connection:open",n=>{let s=n.detail;this.identify(s).catch(i=>{kr.error("error during identify trigged by connection:open",i)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(s=>{kr.error(s)})}),this.host.agentVersion===R7&&(jN||QN?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(Z1||J1||XN||ZN)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:$(this.host.agentVersion),ProtocolVersion:$(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{kr.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{kr.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(u=>u.decapsulateCode(se("p2p").code)),n=new cn({peerId:this.peerId,multiaddrs:t}),s=await Dn.seal(n,this.peerId),i=this.registrar.getProtocols(),o=await this.peerStore.get(this.peerId),a=M(o.metadata.get("AgentVersion")??$(this.host.agentVersion)),c=M(o.metadata.get("ProtocolVersion")??$(this.host.protocolVersion)),l=e.map(async u=>{let f,h=AbortSignal.timeout(this.timeout);try{(0,c2.setMaxListeners)?.(1/0,h)}catch{}try{f=await u.newStream([this.identifyPushProtocolStr],{signal:h}),await hr(f,h).sink(Ie([Do.encode({listenAddrs:t.map(d=>d.bytes),signedPeerRecord:s.marshal(),protocols:i,agentVersion:a,protocolVersion:c})],d=>dt(d)))}catch(p){kr.error("could not push identify update to peer",p)}finally{f?.close()}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==z.ERR_NOT_FOUND)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n,s=et([AbortSignal.timeout(this.timeout),t?.signal]);try{(0,c2.setMaxListeners)?.(1/0,s)}catch{}try{n=await e.newStream([this.identifyProtocolStr],{signal:s});let i=hr(n,s),o=await Ie([],i,a=>_t(a,{maxDataLength:this.maxIdentifyMessageSize??RL}),async a=>rs(a));if(o==null)throw new E("No data could be retrieved",z.ERR_CONNECTION_ENDED);try{return Do.decode(o)}catch(a){throw new E(String(a),z.ERR_INVALID_MESSAGE)}}finally{n?.close(),s.clear()}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:s,protocols:i,observedAddr:o}=n;if(s==null)throw new E("public key was missing from identify message",z.ERR_MISSING_PUBLIC_KEY);let a=await pr(s);if(!e.remotePeer.equals(a))throw new E("identified peer does not match the expected peer",z.ERR_INVALID_PEER);if(this.peerId.equals(a))throw new E("identified peer is our own peer id?",z.ERR_INVALID_PEER);let c=uie(o);kr("identify completed for peer %p and protocols %o",a,i),kr("our observed address is %s",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(kr("storing our observed address %s",c?.toString()),this.addressManager.addObservedAddr(c));let l=await this.#e(e.remotePeer,n),u={peerId:a,protocolVersion:n.protocolVersion,agentVersion:n.agentVersion,publicKey:n.publicKey,listenAddrs:n.listenAddrs.map(f=>fe(f)),observedAddr:n.observedAddr==null?void 0:fe(n.observedAddr),protocols:n.protocols,signedPeerRecord:l};this.events.safeDispatchEvent("peer:identify",{detail:u})}async _handleIdentify(e){let{connection:t,stream:n}=e,s=AbortSignal.timeout(this.timeout);try{(0,c2.setMaxListeners)?.(1/0,s)}catch{}try{let i=this.peerId.publicKey??new Uint8Array(0),o=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(h=>h.decapsulateCode(se("p2p").code)),c=o.peerRecordEnvelope;if(a.length>0&&c==null){let h=new cn({peerId:this.peerId,multiaddrs:a});c=(await Dn.seal(h,this.peerId)).marshal().subarray()}let l=Do.encode({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:i,listenAddrs:a.map(h=>h.bytes),signedPeerRecord:c,observedAddr:t.remoteAddr.bytes,protocols:o.protocols}),u=hr(n,s),f=Ie([l],h=>dt(h));await u.sink(f)}catch(i){kr.error("could not respond to identify request",i)}finally{n.close()}}async _handlePush(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let s=hr(n,AbortSignal.timeout(this.timeout)),o=await Vr(s,{maxDataLength:this.maxIdentifyMessageSize??RL}).readPB(Do);await this.#e(t.remotePeer,o)}catch(s){kr.error("received invalid message",s);return}finally{n.close()}kr("handled push from %p",t.remotePeer)}async#e(e,t){if(kr("received identify from %p",e),t==null)throw new Error("Message was null or undefined");let n={addresses:t.listenAddrs.map(i=>({isCertified:!1,multiaddr:fe(i)})),protocols:t.protocols,metadata:new Map,peerRecordEnvelope:t.signedPeerRecord},s;if(t.signedPeerRecord!=null){kr("received signedPeerRecord in push from %p",e);let i=t.signedPeerRecord,o=await Dn.openAndCertify(i,cn.DOMAIN),a=cn.createFromProtobuf(o.payload);if(!a.peerId.equals(o.peerId))throw new Error("signing key does not match PeerId in the PeerRecord");if(!e.equals(a.peerId))throw new Error("signing key does not match remote PeerId");let c;try{c=await this.peerStore.get(a.peerId)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null&&(n.metadata=c.metadata,c.peerRecordEnvelope!=null)){let l=await Dn.createFromProtobuf(c.peerRecordEnvelope),u=cn.createFromProtobuf(l.payload);u.seqNumber>=a.seqNumber&&(kr("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,a.seqNumber),a=u,i=c.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=a.multiaddrs.map(l=>({isCertified:!0,multiaddr:l})),s={seq:a.seqNumber,addresses:a.multiaddrs}}else kr("%p did not send a signed peer record",e);return t.agentVersion!=null&&n.metadata.set("AgentVersion",$(t.agentVersion)),t.protocolVersion!=null&&n.metadata.set("ProtocolVersion",$(t.protocolVersion)),await this.peerStore.patch(e,n),s}};function uie(r){if(r!=null&&r.length>0)try{return fe(r)}catch{}}function TL(r={}){return e=>new l2(e,r)}var DL={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function CL(){return{addresses:{listen:["/webrtc"]},transports:[vN(),EN(),DO(),cO(),I7({discoverRelays:1})],connectionEncryption:[dl()],streamMuxers:[GD(),aP()],peerDiscovery:[sC(DL)],contentRouters:[fC("https://cid.contact")],services:{identify:TL(),autoNAT:WO(),pubsub:LT(),dht:XC({clientMode:!0,validators:{ipns:qO},selectors:{ipns:KO}})}}}async function PL(r,e){let t=CL();return e=e??{},xR({datastore:r,...t,...e,start:!1})}var T7="1.3.12-45faaa7",u2="helia";var fie=C("helia");async function hie(r={}){let e=r.datastore??new Lo,t=r.blockstore??new ru,n;die(r.libp2p)?n=r.libp2p:n=await PL(e,r.libp2p);let s=new H0({...r,datastore:e,blockstore:t,libp2p:n});return r.start!==!1&&await s.start(),s.libp2p.isStarted()?await kL(s):s.libp2p.addEventListener("start",()=>{kL(s).catch(i=>{fie.error("could not add Helia to agent version",i)})}),s}function die(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}async function kL(r){let t=(await r.libp2p.peerStore.get(r.libp2p.peerId)).metadata.get("AgentVersion");if(t==null)return;let n=new TextDecoder().decode(t);n.match(/js-libp2p\/\d+\.\d+\.\d+\sUserAgent=/)!=null&&(n.includes(u2)?n=`${u2}/${T7} ${n.split(" ").slice(1).join(" ")}`:n=`${u2}/${T7} ${n}`,await r.libp2p.peerStore.merge(r.libp2p.peerId,{metadata:{AgentVersion:new TextEncoder().encode(n)}}))}return Uh(pie);})();
84
+ `),r}var bN=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),wN=r=>[...Array(r)].map(()=>bN.at(Math.floor(Math.random()*bN.length))).join("");var W1=C("libp2p:webrtc:transport"),Vre=1e4,zre=se("webrtc-direct").code,I6=se("certhash").code,Y1=class{metrics;components;init;constructor(e,t={}){this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dial events by type"})})}async dial(e,t){let n=await this._connect(e,t);return W1(`dialing address - ${e.toString()}`),n}createListener(e){throw cP("WebRTCTransport.createListener")}filter(e){return e.filter(Kre)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[Ps]=!0;async _connect(e,t){let n=new AbortController,s=n.signal,i=e.getPeerId();if(i===null)throw I1("we need to have the remote's PeerId");let o=he(i),a=S6(G1(e)),c=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:A6(a.name)}),l=new RTCPeerConnection({certificates:[c]}),u=new Promise((A,D)=>{let H=l.createDataChannel("",{negotiated:!0,id:0}),ee=setTimeout(()=>{let j=`Data channel was never opened: state: ${H.readyState}`;W1.error(j),this.metrics?.dialerEvents.increment({open_error:!0}),D(yy("data",j))},Vre);H.onopen=j=>{clearTimeout(ee),A(H)},H.onerror=j=>{clearTimeout(ee);let Re=`Error opening a data channel for handshaking: ${j.target?.toString()??"not specified"}`;W1.error(Re),this.metrics?.dialerEvents.increment({unknown_error:!0}),D(yy("data",Re))}}),f="libp2p+webrtc+v1/"+wN(32),h=await l.createOffer(),p=yN(h,f);await l.setLocalDescription(p);let d=gN(e,f);await l.setRemoteDescription(d);let m=await u,g=this.components.peerId,y=this.generateNoisePrologue(l,a.code,e),b=dl({prologueBytes:y})(),w=Il({channel:m,direction:"inbound",dataChannelOptions:this.init.dataChannel}),v={...w,sink:w.sink.bind(w),source:async function*(){for await(let A of w.source)for(let D of A)yield D}()},x=new Ra({peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),_=uh?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(_,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(A=>{W1.error("error closing connection",A)}).finally(()=>{n.abort()});break;default:break}},{signal:s}),this.metrics?.dialerEvents.increment({peer_connection:!0});let S=new Ta({peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(g,v,o),t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:S})}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw lh("no local certificate");let s=mN(e);if(s==null)throw lh("no local fingerprint found");let i=s.trim().toLowerCase().replaceAll(":",""),o=$(i,"hex"),a=xN.encode(o,t),c=_6.decode(G1(n)),l=$("libp2p-webrtc-noise:");return Ee([l,a,c])}};function Kre(r){let e=r.protoCodes();return e.includes(zre)&&e.includes(I6)&&r.getPeerId()!=null&&!e.includes(se("p2p-circuit").code)}function EN(r){return e=>new Y1(e,r)}function vN(r){return e=>new k1(e,r)}function _N(r){let e;try{e=se("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function SN(r){return r.some(([e,t])=>e===se("tls").code)}function yn(r,e,t){let n=AN[se(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${se(r).name}`);let s=n(e,t);return r===se("ip6").code?`[${s}]`:s}var AN={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${yn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${yn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=SN(e),n=_N(e);if(t&&n!==null)return`https://${n}`;let s=t?"https://":"http://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=yn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return yn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return yn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=yn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=SN(e),n=_N(e);if(t&&n!==null)return`wss://${n}`;let s=t?"wss://":"ws://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=yn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=yn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${yn(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function IN(r,e){let n=fe(r).stringTuples(),s=n.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=se(s[0]),o=AN[i.name];if(o==null)throw new Error(`No interpreter found for ${i.name}`);let a=o(s[1]??"",n);return e?.assumeHttp!==!1&&s[0]===se("tcp").code&&(a=a.replace("tcp://","http://"),(s[1]==="443"||s[1]==="80")&&(s[1]==="443"&&(a=a.replace("http://","https://")),a=a.substring(0,a.lastIndexOf(":")))),a}var RN=WebSocket;var PN=W(DN(),1);function CN(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var kN=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,o)=>{if(n){i();return}if(s!=null){o(s);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{o(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new PN.EventIterator(({push:o,stop:a,fail:c})=>{let l=f=>{let h=null;typeof f.data=="string"&&(h=$(f.data)),CN(f.data)&&(h=new Uint8Array(f.data)),f.data instanceof Uint8Array&&(h=f.data),h!=null&&o(h)},u=f=>{c(f.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let o of i)yield CN(o)?new Uint8Array(o):o}(),n=r.readyState===1,s;return r.addEventListener("open",()=>{n=!0,s=null}),r.addEventListener("close",()=>{n=!1,s=null}),r.addEventListener("error",i=>{n||(s=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var NN=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",s),r.removeEventListener("error",i)}function s(){n(),e()}function i(o){n(),t(o.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",s),r.addEventListener("error",i)})};var ON=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let s of n){try{await NN(r)}catch(i){if(i.message==="socket closed")break;throw i}r.send(s)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((s,i)=>{r.addEventListener("close",o=>{if(o.wasClean||o.code===1006)s();else{let a=Object.assign(new Error("ws error"),{event:o});i(a)}}),setTimeout(()=>{r.close()})})});var LN=(r,e)=>{e=e??{};let t=kN(r),n=e.remoteAddress,s=e.remotePort;if(r.url!=null)try{let o=new URL(r.url);n=o.hostname,s=parseInt(o.port,10)}catch{}if(n==null||s==null)throw new Error("Remote connection did not have address and/or port");return{sink:ON(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(o=>{r.addEventListener("close",()=>{o()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:s,socket:r}};var qN=W(KN(),1),Jre={http:"ws",https:"wss"},ene="ws",$N=(r,e)=>(0,qN.relative)(r,e,Jre,ene);function HN(r,e){let t=typeof window>"u"?"":window.location;e=e??{};let n=$N(r,t.toString()),s=new RN(n,e.websocket);return LN(s,e)}var YN=W(WN(),1),P6=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,j1=(0,YN.default)(),Z1=P6&&!j1,QN=j1&&!P6,XN=j1&&P6,jN=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!j1,J1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,fke=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+(()=>"_")()+"ENV"]==="test",ZN=typeof navigator<"u"&&navigator.product==="ReactNative";function tO(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return gl.matches(t)||va.matches(t)})}function rO(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return va.matches(t)})}function nO(){throw new Error("WebSocket Servers can not be created in the browser!")}var k6=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},N6=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},sO=r=>globalThis.DOMException===void 0?new N6(r):new DOMException(r),iO=r=>{let e=r.reason===void 0?sO("This operation was aborted."):r.reason;return e instanceof Error?e:sO(e)};function O6(r,e){let{milliseconds:t,fallback:n,message:s,customTimers:i={setTimeout,clearTimeout}}=e,o,c=new Promise((l,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(iO(h)),h.addEventListener("abort",()=>{u(iO(h))})}if(t===Number.POSITIVE_INFINITY){r.then(l,u);return}let f=new k6;o=i.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),s===!1?l():s instanceof Error?u(s):(f.message=s??`Promise timed out after ${t} milliseconds`,u(f))},t),(async()=>{try{l(await r)}catch(h){u(h)}})()}).finally(()=>{c.clear()});return c.clear=()=>{i.clearTimeout.call(void 0,o),o=void 0},c}var oO=C("libp2p:websockets:socket");function aO(r,e,t){t=t??{};let n={async sink(s){t?.signal!=null&&(s=ht(s,t.signal));try{await r.sink(s)}catch(i){i.type!=="aborted"&&oO.error(i)}},source:t.signal!=null?ht(r.source,t.signal):r.source,remoteAddr:e,timeline:{open:Date.now()},async close(){let s=Date.now();try{await O6(r.close(),{milliseconds:2e3})}catch{let{host:o,port:a}=n.remoteAddr.toOptions();oO("timeout closing stream to %s:%s after %dms, destroying it manually",o,a,Date.now()-s),r.destroy()}finally{n.timeline.close=Date.now()}}};return r.socket.addEventListener("close",()=>{n.timeline.close==null&&(n.timeline.close=Date.now())},{once:!0}),n}var vo=C("libp2p:websockets"),L6=class{init;constructor(e){this.init=e}[Symbol.toStringTag]="@libp2p/websockets";[Ps]=!0;async dial(e,t){vo("dialing %s",e),t=t??{};let n=await this._connect(e,t),s=aO(n,e);vo("new outbound connection %s",s.remoteAddr);let i=await t.upgrader.upgradeOutbound(s);return vo("outbound connection %s upgraded",s.remoteAddr),i}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Vn;let n=e.toOptions();vo("dialing %s:%s",n.host,n.port);let s=De(),i=l=>{vo.error("connection error:",l),s.reject(l)},o=HN(IN(e),this.init);if(o.socket.on!=null?o.socket.on("error",i):o.socket.onerror=i,t.signal==null)return await Promise.race([o.connected(),s.promise]),vo("connected %s",e),o;let a,c=new Promise((l,u)=>{if(a=()=>{u(new Vn),o.close().catch(f=>{vo.error("error closing raw socket",f)})},t?.signal?.aborted===!0){a();return}t?.signal?.addEventListener("abort",a)});try{await Promise.race([c,s.promise,o.connected()])}finally{a!=null&&t?.signal?.removeEventListener("abort",a)}return vo("connected %s",e),o}createListener(e){return nO({...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Z1||J1?rO(e):tO(e)}};function cO(r={}){return()=>new L6(r)}var V6={};Y(V6,{identity:()=>lne});function sne(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var s=0;s<r.length;s++){var i=r.charAt(s),o=i.charCodeAt(0);if(t[o]!==255)throw new TypeError(i+" is ambiguous");t[o]=s}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function f(d){if(d instanceof Uint8Array||(ArrayBuffer.isView(d)?d=new Uint8Array(d.buffer,d.byteOffset,d.byteLength):Array.isArray(d)&&(d=Uint8Array.from(d))),!(d instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(d.length===0)return"";for(var m=0,g=0,y=0,b=d.length;y!==b&&d[y]===0;)y++,m++;for(var w=(b-y)*u+1>>>0,v=new Uint8Array(w);y!==b;){for(var x=d[y],_=0,S=w-1;(x!==0||_<g)&&S!==-1;S--,_++)x+=256*v[S]>>>0,v[S]=x%a>>>0,x=x/a>>>0;if(x!==0)throw new Error("Non-zero carry");g=_,y++}for(var A=w-g;A!==w&&v[A]===0;)A++;for(var D=c.repeat(m);A<w;++A)D+=r.charAt(v[A]);return D}function h(d){if(typeof d!="string")throw new TypeError("Expected String");if(d.length===0)return new Uint8Array;var m=0;if(d[m]!==" "){for(var g=0,y=0;d[m]===c;)g++,m++;for(var b=(d.length-m)*l+1>>>0,w=new Uint8Array(b);d[m];){var v=t[d.charCodeAt(m)];if(v===255)return;for(var x=0,_=b-1;(v!==0||x<y)&&_!==-1;_--,x++)v+=a*w[_]>>>0,w[_]=v%256>>>0,v=v/256>>>0;if(v!==0)throw new Error("Non-zero carry");y=x,m++}if(d[m]!==" "){for(var S=b-y;S!==b&&w[S]===0;)S++;for(var A=new Uint8Array(g+(b-S)),D=g;S!==b;)A[D++]=w[S++];return A}}}function p(d){var m=h(d);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:p}}var ine=sne,one=ine,lO=one;var Bke=new Uint8Array(0);var uO=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},yi=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var fO=r=>new TextEncoder().encode(r),hO=r=>new TextDecoder().decode(r);var B6=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},M6=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return pO(this,e)}},U6=class{constructor(e){this.decoders=e}or(e){return pO(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},pO=(r,e)=>new U6({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),F6=class{constructor(e,t,n,s){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=s,this.encoder=new B6(e,t,n),this.decoder=new M6(e,t,s)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},zl=({name:r,prefix:e,encode:t,decode:n})=>new F6(r,e,t,n),_o=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:s}=lO(t,e);return zl({prefix:r,name:e,encode:n,decode:i=>yi(s(i))})},ane=(r,e,t,n)=>{let s={};for(let u=0;u<e.length;++u)s[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let o=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let f=s[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|f,a+=t,a>=8&&(a-=8,o[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return o},cne=(r,e,t)=>{let n=e[e.length-1]==="=",s=(1<<t)-1,i="",o=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],o+=8;o>t;)o-=t,i+=e[s&a>>o];if(o&&(i+=e[s&a<<t-o]),n)for(;i.length*t&7;)i+="=";return i},kt=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>zl({prefix:e,name:r,encode(s){return cne(s,n,t)},decode(s){return ane(s,n,t,r)}});var lne=zl({prefix:"\0",name:"identity",encode:r=>hO(r),decode:r=>fO(r)});var z6={};Y(z6,{base2:()=>une});var une=kt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var K6={};Y(K6,{base8:()=>fne});var fne=kt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var q6={};Y(q6,{base10:()=>hne});var hne=_o({prefix:"9",name:"base10",alphabet:"0123456789"});var $6={};Y($6,{base16:()=>dne,base16upper:()=>pne});var dne=kt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),pne=kt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var H6={};Y(H6,{base32:()=>Kl,base32hex:()=>bne,base32hexpad:()=>xne,base32hexpadupper:()=>Ene,base32hexupper:()=>wne,base32pad:()=>gne,base32padupper:()=>yne,base32upper:()=>mne,base32z:()=>vne});var Kl=kt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),mne=kt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),gne=kt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),yne=kt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),bne=kt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),wne=kt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),xne=kt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Ene=kt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),vne=kt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var G6={};Y(G6,{base36:()=>_ne,base36upper:()=>Sne});var _ne=_o({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Sne=_o({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var W6={};Y(W6,{base58btc:()=>Fs,base58flickr:()=>Ane});var Fs=_o({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Ane=_o({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Y6={};Y(Y6,{base64:()=>Ine,base64pad:()=>Rne,base64url:()=>Tne,base64urlpad:()=>Dne});var Ine=kt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Rne=kt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Tne=kt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Dne=kt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Q6={};Y(Q6,{base256emoji:()=>One});var mO=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}"),Cne=mO.reduce((r,e,t)=>(r[t]=e,r),[]),Pne=mO.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function kne(r){return r.reduce((e,t)=>(e+=Cne[t],e),"")}function Nne(r){let e=[];for(let t of r){let n=Pne[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var One=zl({prefix:"\u{1F680}",name:"base256emoji",encode:kne,decode:Nne});var t7={};Y(t7,{sha256:()=>Jne,sha512:()=>ese});var Ao={};Y(Ao,{Digest:()=>Na,create:()=>So,decode:()=>j6,equals:()=>Z6});var Lne=bO,gO=128,Bne=127,Mne=~Bne,Une=Math.pow(2,31);function bO(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Une;)e[t++]=r&255|gO,r/=128;for(;r&Mne;)e[t++]=r&255|gO,r>>>=7;return e[t]=r|0,bO.bytes=t-n+1,e}var Fne=X6,Vne=128,yO=127;function X6(r,n){var t=0,n=n||0,s=0,i=n,o,a=r.length;do{if(i>=a)throw X6.bytes=0,new RangeError("Could not decode varint");o=r[i++],t+=s<28?(o&yO)<<s:(o&yO)*Math.pow(2,s),s+=7}while(o>=Vne);return X6.bytes=i-n,t}var zne=Math.pow(2,7),Kne=Math.pow(2,14),qne=Math.pow(2,21),$ne=Math.pow(2,28),Hne=Math.pow(2,35),Gne=Math.pow(2,42),Wne=Math.pow(2,49),Yne=Math.pow(2,56),Qne=Math.pow(2,63),Xne=function(r){return r<zne?1:r<Kne?2:r<qne?3:r<$ne?4:r<Hne?5:r<Gne?6:r<Wne?7:r<Yne?8:r<Qne?9:10},jne={encode:Lne,decode:Fne,encodingLength:Xne},Zne=jne,Sh=Zne;var Ah=(r,e=0)=>[Sh.decode(r,e),Sh.decode.bytes],ql=(r,e,t=0)=>(Sh.encode(r,e,t),e),$l=r=>Sh.encodingLength(r);var So=(r,e)=>{let t=e.byteLength,n=$l(r),s=n+$l(t),i=new Uint8Array(s+t);return ql(r,i,0),ql(t,i,n),i.set(e,s),new Na(r,t,e,i)},j6=r=>{let e=yi(r),[t,n]=Ah(e),[s,i]=Ah(e.subarray(n)),o=e.subarray(n+i);if(o.byteLength!==s)throw new Error("Incorrect length");return new Na(t,s,o,e)},Z6=(r,e)=>{if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&uO(r.bytes,t.bytes)}},Na=class{constructor(e,t,n,s){this.code=e,this.size=t,this.digest=n,this.bytes=s}};var e7=({name:r,code:e,encode:t})=>new J6(r,e,t),J6=class{constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?So(this.code,t):t.then(n=>So(this.code,n))}else throw Error("Unknown type, must be binary type")}};var xO=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),Jne=e7({name:"sha2-256",code:18,encode:xO("SHA-256")}),ese=e7({name:"sha2-512",code:19,encode:xO("SHA-512")});var r7={};Y(r7,{identity:()=>nse});var EO=0,tse="identity",vO=yi,rse=r=>So(EO,vO(r)),nse={code:EO,name:tse,encode:vO,digest:rse};var nNe=new TextEncoder,sNe=new TextDecoder;var _O=(r,e)=>{let{bytes:t,version:n}=r;switch(n){case 0:return ase(t,n7(r),e||Fs.encoder);default:return cse(t,n7(r),e||Kl.encoder)}};var SO=new WeakMap,n7=r=>{let e=SO.get(r);if(e==null){let t=new Map;return SO.set(r,t),t}return e},t2=class r{constructor(e,t,n,s){this.code=t,this.version=e,this.multihash=n,this.bytes=s,this["/"]=s}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Ih)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==lse)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=So(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n&&e.code===n.code&&e.version===n.version&&Z6(e.multihash,n.multihash)}toString(e){return _O(this,e)}toJSON(){return{"/":_O(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:s,multihash:i,bytes:o}=t;return new r(n,s,i,o||AO(n,s,i.bytes))}else if(t[use]===!0){let{version:n,multihash:s,code:i}=t,o=j6(s);return r.create(n,i,o)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Ih)throw new Error(`Version 0 CID must use dag-pb (code: ${Ih}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let s=AO(e,t,n.bytes);return new r(e,t,n,s)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Ih,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,s=yi(e.subarray(n,n+t.multihashSize));if(s.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=s.subarray(t.multihashSize-t.digestSize),o=new Na(t.multihashCode,t.digestSize,i,s);return[t.version===0?r.createV0(o):r.createV1(t.codec,o),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=Ah(e.subarray(t));return t+=h,f},s=n(),i=Ih;if(s===18?(s=0,t=0):i=n(),s!==0&&s!==1)throw new RangeError(`Invalid CID version ${s}`);let o=t,a=n(),c=n(),l=t+c,u=l-o;return{version:s,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,s]=ose(e,t),i=r.decode(s);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return n7(i).set(n,e),i}},ose=(r,e)=>{switch(r[0]){case"Q":{let t=e||Fs;return[Fs.prefix,t.decode(`${Fs.prefix}${r}`)]}case Fs.prefix:{let t=e||Fs;return[Fs.prefix,t.decode(r)]}case Kl.prefix:{let t=e||Kl;return[Kl.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},ase=(r,e,t)=>{let{prefix:n}=t;if(n!==Fs.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let s=e.get(n);if(s==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return s},cse=(r,e,t)=>{let{prefix:n}=t,s=e.get(n);if(s==null){let i=t.encode(r);return e.set(n,i),i}else return s},Ih=112,lse=18,AO=(r,e,t)=>{let n=$l(r),s=n+$l(e),i=new Uint8Array(s+t.byteLength);return ql(r,i,0),ql(e,i,n),i.set(t,s),i},use=Symbol.for("@ipld/js-cid/CID");var IO={...V6,...z6,...K6,...q6,...$6,...H6,...G6,...W6,...Y6,...Q6},pNe={...t7,...r7};var qr=C("libp2p:webtransport"),fse=Object.values(IO).map(r=>r.decoder).reduce((r,e)=>r.or(e));function hse(r){return Ao.decode(fse.decode(r))}function RO(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}async function TO(r,e,t,n,s){let i=r.writable.getWriter(),o=r.readable.getReader();await i.ready;function a(){let h=n.findIndex(p=>p===f);h!==-1&&(n.splice(h,1),f.stat.timeline.close=Date.now(),s?.(f))}let c=!1,l=!1;(async function(){let h=await i.closed.catch(p=>p);if(h!=null){let p=h.message;p.includes("aborted by the remote server")||p.includes("STOP_SENDING")||qr.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}c=!0,c&&l&&a()})().catch(()=>{qr.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await o.closed.catch(p=>p);h!=null&&qr.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),l=!0,c&&l&&a()}().catch(()=>{qr.error("WebTransport failed to cleanup closed stream")});let u=!1,f={id:e,abort(h){c||(i.abort(),c=!0),f.closeRead(),l=!0,a()},close(){f.closeRead(),f.closeWrite(),a()},closeRead(){l||(o.cancel().catch(h=>{h.toString().includes("RESET_STREAM")===!0&&(c=!0)}),l=!0),c&&a()},closeWrite(){c||(c=!0,i.close().catch(h=>{h.toString().includes("RESET_STREAM")===!0&&(l=!0)})),l&&a()},reset(){f.close()},stat:{direction:t,timeline:{open:Date.now()}},metadata:{},source:async function*(){for(;;){let h=await o.read();if(h.done===!0){l=!0,c&&a();return}yield new we(h.value)}}(),sink:async function(h){if(u)throw new Error("sink already called on stream");u=!0;try{for await(let p of h)if(p instanceof Uint8Array)await i.write(p);else for(let d of p)await i.write(d)}finally{f.closeWrite()}}};return f}function dse(r){let e=r.stringTuples(),{url:t,certhashes:n,remotePeer:s}=e.reduce((i,[o,a])=>{switch(o){case se("ip6").code:case se("dns6").code:a?.includes(":")===!0&&(a=`[${a}]`);case se("ip4").code:case se("dns4").code:if(i.seenHost||i.seenPort)throw new Error("Invalid multiaddr, saw host and already saw the host or port");return{...i,url:`${i.url}${a??""}`,seenHost:!0};case se("quic").code:case se("quic-v1").code:case se("webtransport").code:if(!i.seenHost||!i.seenPort)throw new Error("Invalid multiaddr, Didn't see host and port, but saw quic/webtransport");return i;case se("udp").code:if(i.seenPort)throw new Error("Invalid multiaddr, saw port but already saw the port");return{...i,url:`${i.url}:${a??""}`,seenPort:!0};case se("certhash").code:if(!i.seenHost||!i.seenPort)throw new Error("Invalid multiaddr, saw the certhash before seeing the host and port");return{...i,certhashes:i.certhashes.concat([hse(a??"")])};case se("p2p").code:return{...i,remotePeer:he(a??"")};default:throw new Error(`unexpected component in multiaddr: ${o} ${se(o).name} ${a??""} `)}},{url:"https://",seenHost:!1,seenPort:!1,certhashes:[]});return{url:t,certhashes:n,remotePeer:s}}function pse(r,e){return e.filter(n=>!!r.find(s=>{if(n.length!==s.length)return!1;for(let i=0;i<n.length;i++)if(s[i]!==n[i])return!1;return!0})).length===e.length}var s7=class{components;config;constructor(e,t={}){this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3}}[Symbol.toStringTag]="@libp2p/webtransport";[Ps]=!0;async dial(e,t){qr("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:s,certhashes:i,remotePeer:o}=dse(e);if(i.length===0)throw new Error("Expected multiaddr to contain certhashes");let a=new WebTransport(`${s}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:i.map(l=>({algorithm:"sha-256",value:l.digest}))});if(a.closed.catch(l=>{qr.error("WebTransport transport closed due to:",l)}),await a.ready,o==null)throw new Error("Need a target peerid");if(!await this.authenticateWebTransport(a,n,o,i))throw new Error("Failed to authenticate webtransport");let c={close:async l=>{l!=null&&qr("Closing webtransport with err:",l),a.close()},remoteAddr:e,timeline:{open:Date.now()},...RO()};a.closed.catch(l=>{qr.error("WebTransport connection closed:",l),c.timeline.close=Date.now()});try{t?.signal?.throwIfAborted()}catch(l){throw a.close(),l}return t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(a),skipProtection:!0})}async authenticateWebTransport(e,t,n,s){let i=await e.createBidirectionalStream(),o=i.writable.getWriter(),a=i.readable.getReader();await o.ready;let c={source:async function*(){for(;;){let f=await a.read();if(f.value!=null&&(yield f.value),f.done===!0)break}}(),sink:async function(f){for await(let h of f)await o.write(h)}},l=dl()(),{remoteExtensions:u}=await l.secureOutbound(t,c,n);if(o.close().catch(f=>{qr.error(`Failed to close authentication stream writer: ${f.message}`)}),a.cancel().catch(f=>{qr.error(`Failed to close authentication stream reader: ${f.message}`)}),!pse(u?.webtransportCerthashes??[],s.map(f=>f.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];(async function(){let a=e.incomingBidirectionalStreams.getReader();for(;;){let{done:c,value:l}=await a.read();if(c===!0)break;if(i.length>=n.maxInboundStreams)l.writable.close().catch(u=>{qr.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),l.readable.cancel().catch(u=>{qr.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await TO(l,String(t++),"inbound",i,s?.onStreamEnd);i.push(u),s?.onIncomingStream?.(u)}}})().catch(()=>{qr.error("WebTransport failed to receive incoming stream")});let o={protocol:"webtransport",streams:i,newStream:async a=>{let c=await e.createBidirectionalStream(),l=await TO(c,String(t++),s?.direction??"outbound",i,s?.onStreamEnd);return i.push(l),l},close:a=>{a!=null&&qr("Closing webtransport muxer with err:",a),e.close()},...RO()};try{s?.signal?.throwIfAborted()}catch(a){throw e.close(),a}return o}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(t=>t.protoNames().includes("webtransport"))}};function DO(r={}){return e=>new s7(e,r)}var Vs;(function(r){let e;(function(s){s.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(s){s[s.EOL=0]="EOL"})(t||(t={})),function(s){s.codec=()=>vt(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=me((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.value!=null&&(i.uint32(10),i.bytes(s.value)),s.signature!=null&&(i.uint32(18),i.bytes(s.signature)),s.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(s.validityType,i)),s.validity!=null&&(i.uint32(34),i.bytes(s.validity)),s.sequence!=null&&(i.uint32(40),i.uint64(s.sequence)),s.ttl!=null&&(i.uint32(48),i.uint64(s.ttl)),s.pubKey!=null&&(i.uint32(58),i.bytes(s.pubKey)),s.signatureV2!=null&&(i.uint32(66),i.bytes(s.signatureV2)),s.data!=null&&(i.uint32(74),i.bytes(s.data)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.value=s.bytes();break;case 2:o.signature=s.bytes();break;case 3:o.validityType=r.ValidityType.codec().decode(s);break;case 4:o.validity=s.bytes();break;case 5:o.sequence=s.uint64();break;case 6:o.ttl=s.uint64();break;case 7:o.pubKey=s.bytes();break;case 8:o.signatureV2=s.bytes();break;case 9:o.data=s.bytes();break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>pe(s,r.codec()),r.decode=s=>de(s,r.codec())})(Vs||(Vs={}));var Rh=W(Po(),1);var CO="ERR_IPNS_EXPIRED_RECORD",r2="ERR_UNRECOGNIZED_VALIDITY";var Io="ERR_SIGNATURE_VERIFICATION",PO="ERR_UNRECOGNIZED_FORMAT";var i7="ERR_UNDEFINED_PARAMETER",kO="ERR_INVALID_RECORD_DATA",NO="ERR_INVALID_EMBEDDED_KEY";var OO="ERR_RECORD_TOO_LARGE";var BO=C("ipns:utils"),mse=$("/ipns/");function Th(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),s=parseInt(t[2],10)-1,i=parseInt(t[3],10),o=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,s,i,o,a,c,l))}var MO=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw BO.error(n),(0,Rh.default)(n,i7)}let t;if(e.pubKey!=null){try{t=Mr(e.pubKey)}catch(s){throw BO.error(s),s}if(!(await pr(e.pubKey)).equals(r))throw(0,Rh.default)(new Error("Embedded public key did not match PeerID"),NO)}else r.publicKey!=null&&(t=Mr(r.publicKey));if(t!=null)return t;throw(0,Rh.default)(new Error("no public key is available"),i7)};var UO=r=>{let e=$("ipns-signature:");return Ee([e,r])};var FO=r=>{let e=Vs.decode(r);return e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),{value:e.value??new Uint8Array(0),signature:e.signature??new Uint8Array(0),validityType:e.validityType??Vs.ValidityType.EOL,validity:e.validity??new Uint8Array(0),sequence:e.sequence??0n,pubKey:e.pubKey,ttl:e.ttl??void 0,signatureV2:e.signatureV2,data:e.data}};var VO=r=>mt(r.slice(mse.length));var zO=r=>{let e=Hn(r);if(e.ValidityType===0)e.ValidityType=Vs.ValidityType.EOL;else throw(0,Rh.default)(new Error("Unknown validity type"),r2);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e};var KO=(r,e)=>{let t=e.map((n,s)=>({entry:Vs.decode(n),index:s}));return t.sort((n,s)=>{if(n.entry.signatureV2!=null&&s.entry.signatureV2==null)return-1;if(n.entry.signatureV2==null&&s.entry.signatureV2!=null)return 1;let i=n.entry.sequence??0n,o=s.entry.sequence??0n;if(i>o)return-1;if(i<o)return 1;let a=n.entry.validity??new Uint8Array(0),c=s.entry.validity??new Uint8Array(0),l=Th(M(a)),u=Th(M(c));return l.getTime()>u.getTime()?-1:l.getTime()<u.getTime()?1:0}),t[0].index};var bn=W(Po(),1);var Dh=C("ipns:validator"),gse=1024*10,yse=async(r,e)=>{let{value:t,validityType:n,validity:s}=e,i,o;if(e.signatureV2!=null&&e.data!=null)o=e.signatureV2,i=UO(e.data),bse(e);else throw(0,bn.default)(new Error("missing data or signatureV2"),Io);let a;try{a=await r.verify(i,o)}catch{a=!1}if(!a)throw Dh.error("record signature verification failed"),(0,bn.default)(new Error("record signature verification failed"),Io);if(s!=null&&n===Vs.ValidityType.EOL){let c;try{c=Th(M(s))}catch{throw Dh.error("unrecognized validity format (not an rfc3339 format)"),(0,bn.default)(new Error("unrecognized validity format (not an rfc3339 format)"),PO)}if(c.getTime()<Date.now())throw Dh.error("record has expired"),(0,bn.default)(new Error("record has expired"),CO)}else if(n!=null)throw Dh.error("unrecognized validity type"),(0,bn.default)(new Error("unrecognized validity type"),r2);Dh("ipns entry for %b is valid",t)},bse=r=>{if(r.data==null)throw(0,bn.default)(new Error("Record data is missing"),kO);let e=zO(r.data);if(!ye(e.Value,r.value))throw(0,bn.default)(new Error('Field "value" did not match between protobuf and CBOR'),Io);if(!ye(e.Validity,r.validity))throw(0,bn.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Io);if(e.ValidityType!==r.validityType)throw(0,bn.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Io);if(e.Sequence!==r.sequence)throw(0,bn.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Io);if(e.TTL!==r.ttl)throw(0,bn.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Io)},qO=async(r,e)=>{if(e.byteLength>gse)throw(0,bn.default)(new Error("record too large"),OO);let t=VO(r),n=FO(e),s=await MO(t,n);await yse(s,n)};var a7=W(jr(),1);var $O="libp2p",HO="autonat",GO="1.0.0";var Ae;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>vt(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(s||(s={})),function(l){l.codec=()=>vt(s)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=me((f,h,p={})=>{if(p.lengthDelimited!==!1&&h.fork(),f.id!=null&&(h.uint32(10),h.bytes(f.id)),f.addrs!=null)for(let d of f.addrs)h.uint32(18),h.bytes(d);p.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let p={addrs:[]},d=h==null?f.len:f.pos+h;for(;f.pos<d;){let m=f.uint32();switch(m>>>3){case 1:p.id=f.bytes();break;case 2:p.addrs.push(f.bytes());break;default:f.skipType(m&7);break}}return p})),u),l.encode=f=>pe(f,l.codec()),l.decode=f=>de(f,l.codec())})(i=r.PeerInfo||(r.PeerInfo={}));let o;(function(l){let u;l.codec=()=>(u==null&&(u=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(f.peer,h)),p.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let p={},d=h==null?f.len:f.pos+h;for(;f.pos<d;){let m=f.uint32();switch(m>>>3){case 1:p.peer=r.PeerInfo.codec().decode(f,f.uint32());break;default:f.skipType(m&7);break}}return p})),u),l.encode=f=>pe(f,l.codec()),l.decode=f=>de(f,l.codec())})(o=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=me((f,h,p={})=>{p.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(f.status,h)),f.statusText!=null&&(h.uint32(18),h.string(f.statusText)),f.addr!=null&&(h.uint32(26),h.bytes(f.addr)),p.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let p={},d=h==null?f.len:f.pos+h;for(;f.pos<d;){let m=f.uint32();switch(m>>>3){case 1:p.status=r.ResponseStatus.codec().decode(f);break;case 2:p.statusText=f.string();break;case 3:p.addr=f.bytes();break;default:f.skipType(m&7);break}}return p})),u),l.encode=f=>pe(f,l.codec()),l.decode=f=>de(f,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=me((l,u,f={})=>{f.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),f.lengthDelimited!==!1&&u.ldelim()},(l,u)=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:f.type=r.MessageType.codec().decode(l);break;case 2:f.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:f.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(p&7);break}}return f})),c),r.encode=l=>pe(l,r.codec()),r.decode=l=>de(l,r.codec())})(Ae||(Ae={}));var He=C("libp2p:autonat"),o7=4,c7=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;constructor(e,t){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??$O}/${HO}/${GO}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{He.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=et([AbortSignal.timeout(this.timeout)]);try{(0,a7.setMaxListeners)?.(1/0,t)}catch{}let n=this.components.addressManager.getAddresses().map(s=>s.toOptions().host);try{let s=hr(e.stream,t),i=this;await Ie(s,o=>_t(o),async function*(o){let a=await rs(o);if(a==null){He("no message received"),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=Ae.decode(a)}catch(m){He.error("could not decode message",m),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){He.error("dial was missing from message"),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let u,f=l.peer;if(f==null||f.id==null){He.error("PeerId missing from message"),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{u=mt(f.id)}catch(m){He.error("invalid PeerId",m),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(He("incoming request from %p",u),!e.connection.remotePeer.equals(u)){He("target peer %p did not equal sending peer %p",u,e.connection.remotePeer),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let h=f.addrs.map(m=>fe(m)).filter(m=>{let g=m.toOptions().host===e.connection.remoteAddr.toOptions().host;return He.trace("request to dial %s was sent from %s is same host %s",m,e.connection.remoteAddr,g),g}).filter(m=>{let g=m.toOptions().host,y=!(Cn(g)??!1);return He.trace("host %s was public %s",g,y),y}).filter(m=>{let g=m.toOptions().host,y=!n.includes(g);return He.trace("host %s was not our host %s",g,y),y}).filter(m=>{let g=!!i.components.transportManager.transportForMultiaddr(m);return He.trace("transport for %s is supported %s",m,g),g}).map(m=>(m.getPeerId()==null&&(m=m.encapsulate(`/p2p/${u.toString()}`)),m));if(h.length===0){He("no valid multiaddrs for %p in message",u),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}He("dial multiaddrs %s for peer %p",h.map(m=>m.toString()).join(", "),u);let p="",d=h[0];for await(let m of h){let g;d=m;try{if(g=await i.components.connectionManager.openConnection(m,{signal:t}),!g.remoteAddr.equals(m))throw He.error("tried to dial %s but dialed %s",m,g.remoteAddr),new Error("Unexpected remote address");He("Success %p",u),yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.OK,addr:g.remoteAddr.decapsulateCode(se("p2p").code).bytes}});return}catch(y){He("could not dial %p",u,y),p=y.message}finally{g!=null&&await g.close()}}yield Ae.encode({type:Ae.MessageType.DIAL_RESPONSE,dialResponse:{status:Ae.ResponseStatus.E_DIAL_ERROR,statusText:p,addr:d.bytes}})},o=>dt(o),e.stream)}catch(s){He.error("error handling incoming autonat stream",s)}finally{t.clear()}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{He.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(i=>{let o=i.toOptions();return!(Cn(o.host)??!1)});if(t.length===0){He("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);try{(0,a7.setMaxListeners)?.(1/0,n)}catch{}let s=this;try{He("verify multiaddrs %s",t.map(f=>f.toString()).join(", "));let i=Ae.encode({type:Ae.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(f=>f.bytes)}}}),a=(await kd()).toBytes(),c={},l=[],u=async f=>{try{He("asking %p to verify multiaddr",f.id);let h=await s.components.connectionManager.openConnection(f.id,{signal:n}),p=await h.newStream(this.protocol,{signal:n}),d=hr(p,n),m=await Ie([i],y=>dt(y),d,y=>_t(y),async y=>rs(y));if(m==null){He("no response received from %p",h.remotePeer);return}let g=Ae.decode(m);if(g.type!==Ae.MessageType.DIAL_RESPONSE||g.dialResponse==null){He("invalid autonat response from %p",h.remotePeer);return}if(g.dialResponse.status===Ae.ResponseStatus.OK){let y=h.remoteAddr.toOptions(),b;if(y.family===4)b=y.host.split(".")[0];else if(y.family===6)b=y.host.split(":")[0];else{He('remote address "%s" was not IP4 or IP6?',y.host);return}if(l.includes(b)){He("already have response from network segment %d - %s",b,y.host);return}l.push(b)}return g.dialResponse}catch(h){He.error("error asking remote to verify multiaddr",h)}};for await(let f of Sa(Fn(this.components.peerRouting.getClosestPeers(a,{signal:n}),h=>async()=>u(h)),{concurrency:o7}))try{if(f==null)continue;let h=f.addr==null?t[0]:fe(f.addr);if(He("autonat response for %a is %s",h,f.status),f.status===Ae.ResponseStatus.E_BAD_REQUEST||f.status===Ae.ResponseStatus.E_DIAL_REFUSED||f.addr==null&&t.length>1)continue;if(!t.some(d=>d.equals(h))){He("peer reported %a as %s but it was not in our observed address list",h,f.status);continue}let p=h.toString();if(c[p]==null&&(c[p]={success:0,failure:0}),f.status===Ae.ResponseStatus.OK?c[p].success++:f.status===Ae.ResponseStatus.E_DIAL_ERROR&&c[p].failure++,c[p].success===o7){He("%a is externally dialable",h),e.confirmObservedAddr(h);return}if(c[p].failure===o7){He("%a is not externally dialable",h),e.removeObservedAddr(h);return}}catch(h){He.error("could not verify external address",h)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function WO(r={}){return e=>new c7(e,r)}var nie=W(jr(),1);var l7="/libp2p/relay";var YO="circuit-relay-relay";var QO=BigInt(131072),Ro="/libp2p/circuit/relay/0.2.0/hop",n2="/libp2p/circuit/relay/0.2.0/stop",Sse=30*1e3,Ase=30*1e3;var bi;(function(r){let e;(function(s){s.RESERVE="RESERVE",s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.RESERVE=0]="RESERVE",s[s.CONNECT=1]="CONNECT",s[s.STATUS=2]="STATUS"})(t||(t={})),function(s){s.codec=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Hl.codec().encode(s.peer,i)),s.reservation!=null&&(i.uint32(26),s2.codec().encode(s.reservation,i)),s.limit!=null&&(i.uint32(34),Gl.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(40),nr.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Hl.codec().decode(s,s.uint32());break;case 3:o.reservation=s2.codec().decode(s,s.uint32());break;case 4:o.limit=Gl.codec().decode(s,s.uint32());break;case 5:o.status=nr.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>pe(s,r.codec()),r.decode=s=>de(s,r.codec())})(bi||(bi={}));var fs;(function(r){let e;(function(s){s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.CONNECT=0]="CONNECT",s[s.STATUS=1]="STATUS"})(t||(t={})),function(s){s.codec=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=me((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Hl.codec().encode(s.peer,i)),s.limit!=null&&(i.uint32(26),Gl.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(32),nr.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Hl.codec().decode(s,s.uint32());break;case 3:o.limit=Gl.codec().decode(s,s.uint32());break;case 4:o.status=nr.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>pe(s,r.codec()),r.decode=s=>de(s,r.codec())})(fs||(fs={}));var Hl;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={id:new Uint8Array(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.id=t.bytes();break;case 2:s.addrs.push(t.bytes());break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(Hl||(Hl={}));var s2;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.expire=t.uint64();break;case 2:s.addrs.push(t.bytes());break;case 3:s.voucher=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(s2||(s2={}));var Gl;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.duration=t.uint32();break;case 2:s.data=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(Gl||(Gl={}));var nr;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(nr||(nr={}));var u7;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(u7||(u7={}));(function(r){r.codec=()=>vt(u7)})(nr||(nr={}));var f7;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.relay=t.bytes();break;case 2:s.peer=t.bytes();break;case 3:s.expiration=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(f7||(f7={}));var Ise=ZO,XO=128,Rse=127,Tse=~Rse,Dse=Math.pow(2,31);function ZO(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Dse;)e[t++]=r&255|XO,r/=128;for(;r&Tse;)e[t++]=r&255|XO,r>>>=7;return e[t]=r|0,ZO.bytes=t-n+1,e}var Cse=h7,Pse=128,jO=127;function h7(r,n){var t=0,n=n||0,s=0,i=n,o,a=r.length;do{if(i>=a)throw h7.bytes=0,new RangeError("Could not decode varint");o=r[i++],t+=s<28?(o&jO)<<s:(o&jO)*Math.pow(2,s),s+=7}while(o>=Pse);return h7.bytes=i-n,t}var kse=Math.pow(2,7),Nse=Math.pow(2,14),Ose=Math.pow(2,21),Lse=Math.pow(2,28),Bse=Math.pow(2,35),Mse=Math.pow(2,42),Use=Math.pow(2,49),Fse=Math.pow(2,56),Vse=Math.pow(2,63),zse=function(r){return r<kse?1:r<Nse?2:r<Ose?3:r<Lse?4:r<Bse?5:r<Mse?6:r<Use?7:r<Fse?8:r<Vse?9:10},Kse={encode:Ise,decode:Cse,encodingLength:zse},qse=Kse,Ch=qse;var Ph=(r,e=0)=>[Ch.decode(r,e),Ch.decode.bytes],Wl=(r,e,t=0)=>(Ch.encode(r,e,t),e),Yl=r=>Ch.encodingLength(r);var fOe=new Uint8Array(0);var eL=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},Ql=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var kh=(r,e)=>{let t=e.byteLength,n=Yl(r),s=n+Yl(t),i=new Uint8Array(s+t);return Wl(r,i,0),Wl(t,i,n),i.set(e,s),new Xl(r,t,e,i)},tL=r=>{let e=Ql(r),[t,n]=Ph(e),[s,i]=Ph(e.subarray(n)),o=e.subarray(n+i);if(o.byteLength!==s)throw new Error("Incorrect length");return new Xl(t,s,o,e)},rL=(r,e)=>{if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&eL(r.bytes,t.bytes)}},Xl=class{constructor(e,t,n,s){this.code=e,this.size=t,this.digest=n,this.bytes=s}};function $se(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var s=0;s<r.length;s++){var i=r.charAt(s),o=i.charCodeAt(0);if(t[o]!==255)throw new TypeError(i+" is ambiguous");t[o]=s}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function f(d){if(d instanceof Uint8Array||(ArrayBuffer.isView(d)?d=new Uint8Array(d.buffer,d.byteOffset,d.byteLength):Array.isArray(d)&&(d=Uint8Array.from(d))),!(d instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(d.length===0)return"";for(var m=0,g=0,y=0,b=d.length;y!==b&&d[y]===0;)y++,m++;for(var w=(b-y)*u+1>>>0,v=new Uint8Array(w);y!==b;){for(var x=d[y],_=0,S=w-1;(x!==0||_<g)&&S!==-1;S--,_++)x+=256*v[S]>>>0,v[S]=x%a>>>0,x=x/a>>>0;if(x!==0)throw new Error("Non-zero carry");g=_,y++}for(var A=w-g;A!==w&&v[A]===0;)A++;for(var D=c.repeat(m);A<w;++A)D+=r.charAt(v[A]);return D}function h(d){if(typeof d!="string")throw new TypeError("Expected String");if(d.length===0)return new Uint8Array;var m=0;if(d[m]!==" "){for(var g=0,y=0;d[m]===c;)g++,m++;for(var b=(d.length-m)*l+1>>>0,w=new Uint8Array(b);d[m];){var v=t[d.charCodeAt(m)];if(v===255)return;for(var x=0,_=b-1;(v!==0||x<y)&&_!==-1;_--,x++)v+=a*w[_]>>>0,w[_]=v%256>>>0,v=v/256>>>0;if(v!==0)throw new Error("Non-zero carry");y=x,m++}if(d[m]!==" "){for(var S=b-y;S!==b&&w[S]===0;)S++;for(var A=new Uint8Array(g+(b-S)),D=g;S!==b;)A[D++]=w[S++];return A}}}function p(d){var m=h(d);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:p}}var Hse=$se,Gse=Hse,sL=Gse;var d7=class{constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},p7=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return iL(this,e)}},m7=class{constructor(e){this.decoders=e}or(e){return iL(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},iL=(r,e)=>new m7({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),g7=class{constructor(e,t,n,s){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=s,this.encoder=new d7(e,t,n),this.decoder=new p7(e,t,s)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},oL=({name:r,prefix:e,encode:t,decode:n})=>new g7(r,e,t,n),y7=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:s}=sL(t,e);return oL({prefix:r,name:e,encode:n,decode:i=>Ql(s(i))})},Wse=(r,e,t,n)=>{let s={};for(let u=0;u<e.length;++u)s[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let o=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let f=s[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|f,a+=t,a>=8&&(a-=8,o[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return o},Yse=(r,e,t)=>{let n=e[e.length-1]==="=",s=(1<<t)-1,i="",o=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],o+=8;o>t;)o-=t,i+=e[s&a>>o];if(o&&(i+=e[s&a<<t-o]),n)for(;i.length*t&7;)i+="=";return i},zs=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>oL({prefix:e,name:r,encode(s){return Yse(s,n,t)},decode(s){return Wse(s,n,t,r)}});var wi=y7({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),wOe=y7({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Nh=zs({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),vOe=zs({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),_Oe=zs({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),SOe=zs({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),AOe=zs({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),IOe=zs({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),ROe=zs({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),TOe=zs({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),DOe=zs({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var aL=(r,e)=>{let{bytes:t,version:n}=r;switch(n){case 0:return Xse(t,b7(r),e||wi.encoder);default:return jse(t,b7(r),e||Nh.encoder)}};var cL=new WeakMap,b7=r=>{let e=cL.get(r);if(e==null){let t=new Map;return cL.set(r,t),t}return e},i2=class r{constructor(e,t,n,s){this.code=t,this.version=e,this.multihash=n,this.bytes=s,this["/"]=s}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Oh)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Zse)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=kh(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n&&e.code===n.code&&e.version===n.version&&rL(e.multihash,n.multihash)}toString(e){return aL(this,e)}toJSON(){return{"/":aL(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:s,multihash:i,bytes:o}=t;return new r(n,s,i,o||lL(n,s,i.bytes))}else if(t[Jse]===!0){let{version:n,multihash:s,code:i}=t,o=tL(s);return r.create(n,i,o)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Oh)throw new Error(`Version 0 CID must use dag-pb (code: ${Oh}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let s=lL(e,t,n.bytes);return new r(e,t,n,s)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Oh,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,s=Ql(e.subarray(n,n+t.multihashSize));if(s.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=s.subarray(t.multihashSize-t.digestSize),o=new Xl(t.multihashCode,t.digestSize,i,s);return[t.version===0?r.createV0(o):r.createV1(t.codec,o),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=Ph(e.subarray(t));return t+=h,f},s=n(),i=Oh;if(s===18?(s=0,t=0):i=n(),s!==0&&s!==1)throw new RangeError(`Invalid CID version ${s}`);let o=t,a=n(),c=n(),l=t+c,u=l-o;return{version:s,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,s]=Qse(e,t),i=r.decode(s);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return b7(i).set(n,e),i}},Qse=(r,e)=>{switch(r[0]){case"Q":{let t=e||wi;return[wi.prefix,t.decode(`${wi.prefix}${r}`)]}case wi.prefix:{let t=e||wi;return[wi.prefix,t.decode(r)]}case Nh.prefix:{let t=e||Nh;return[Nh.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},Xse=(r,e,t)=>{let{prefix:n}=t;if(n!==wi.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let s=e.get(n);if(s==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return s},jse=(r,e,t)=>{let{prefix:n}=t,s=e.get(n);if(s==null){let i=t.encode(r);return e.set(n,i),i}else return s},Oh=112,Zse=18,lL=(r,e,t)=>{let n=Yl(r),s=n+Yl(e),i=new Uint8Array(s+t.byteLength);return Wl(r,i,0),Wl(e,i,n),i.set(t,s),i},Jse=Symbol.for("@ipld/js-cid/CID");var x7=({name:r,code:e,encode:t})=>new w7(r,e,t),w7=class{constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?kh(this.code,t):t.then(n=>kh(this.code,n))}else throw Error("Unknown type, must be binary type")}};var uL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),fL=x7({name:"sha2-256",code:18,encode:uL("SHA-256")}),UOe=x7({name:"sha2-512",code:19,encode:uL("SHA-512")});var GOe=C("libp2p:circuit-relay:utils");async function E7(r){let e=new TextEncoder().encode(r),t=await fL.digest(e);return i2.createV0(t)}function v7(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var rie=W(gL(),1);var iLe=C("libp2p:circuit-relay:advert-service");var LLe=C("libp2p:circuit-relay:server");var sie=C("libp2p:stream:converter");function _7(r,e={}){let{stream:t,remoteAddr:n}=r,{sink:s,source:i}=t,o=async function*(){for await(let l of i)l instanceof Uint8Array?yield l:yield*l}(),a={async sink(l){e.signal!=null&&(l=ht(l,e.signal));try{await s(l),await c()}catch(u){u.type!=="aborted"&&sie(u)}},source:e.signal!=null?ht(o,e.signal):o,remoteAddr:n,timeline:{open:Date.now(),close:void 0},async close(){await s(async function*(){yield new Uint8Array(0)}()),await c()}};async function c(){a.timeline.close==null&&(a.timeline.close=Date.now()),await Promise.resolve()}return a}var To=C("libp2p:circuit-relay:discover-relays"),o2=class extends Ve{peerId;peerStore;contentRouting;registrar;started;topologyId;constructor(e){super(),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Ro,Ri({onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}})),this.discover().catch(e=>{To.error("error listening on relays",e)}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){To("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Ro)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)To("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});To("found %d relay peers in peer store",e.length);try{To("searching content routing for relays");let t=await E7(l7),n=0;for await(let s of this.contentRouting.findProviders(t))if(s.multiaddrs.length>0&&!s.id.equals(this.peerId)){let i=s.id;n++,await this.peerStore.merge(i,{multiaddrs:s.multiaddrs}),To("found relay peer %p in content routing",i),this.safeDispatchEvent("relay:discover",{detail:i})}To("found %d relay peers in content routing",n)}catch(t){To.error("failed when finding relays on the network",t)}}};var bL=C("libp2p:circuit-relay:transport:listener"),S7=class extends Ve{connectionManager;relayStore;listeningAddrs;constructor(e){super(),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new mr,this.relayStore.addEventListener("relay:removed",t=>{this.#e(t.detail)})}async listen(e){bL("listen on %s",e);let t=e.getPeerId(),n;if(t!=null){let i=he(t),o=this.connectionManager.getConnectionsMap().get(i)??[];o.length>0&&(n=o[0])}if(n==null){let i=e.toString().split("/p2p-circuit").find(a=>a!==""),o=fe(i);n=await this.connectionManager.openConnection(o)}if(!this.relayStore.hasReservation(n.remotePeer)){await this.relayStore.addRelay(n.remotePeer,"configured");return}let s=this.relayStore.getReservation(n.remotePeer);if(s==null)throw new E("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){bL("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,s.addrs.map(i=>fe(i).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.listeningAddrs.delete(e),t&&this.safeDispatchEvent("close",{})}};function wL(r){return new S7(r)}var Pr=C("libp2p:circuit-relay:transport:reservation-store"),oie=60*1e3*10,aie=60*1e3*5,cie=30*1e3,a2=class extends Ve{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;started;constructor(e,t){super(),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new mr,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.started=!1,this.reserveQueue=new Zc({concurrency:t?.reservationConcurrency??1}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!0}async addRelay(e,t){if(this.peerId.equals(e)){Pr("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){Pr("not adding relay as the queue is full");return}if(this.reserveQueue.hasJob(e)){Pr("relay peer is already in the reservation queue");return}Pr("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(v7(n.reservation.expire)>oie){Pr("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((l,u)=>(u.type==="discovered"&&l++,l),0)>=this.maxDiscoveredRelays){Pr("already have enough discovered relays");return}let s=await this.connectionManager.openConnection(e);if(s.remoteAddr.protoNames().includes("p2p-circuit")){Pr("not creating reservation over relayed connection");return}let i=await this.#e(s);Pr("created reservation on relay peer %p",e);let o=v7(i.expire),a=Math.min(Math.max(o-aie,cie),Math.pow(2,31)-1),c=setTimeout(()=>{this.addRelay(e,t).catch(l=>{Pr.error("could not refresh reservation to relay %p",e,l)})},a);this.reservations.set(e,{timeout:c,reservation:i,type:t}),await this.peerStore.merge(e,{tags:{[YO]:{value:1,ttl:o}}}),await this.transportManager.listen([fe(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){Pr.error("could not reserve slot on %p",e,n),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e){Pr("requesting reservation from %s",e.remotePeer);let t=await e.newStream(Ro),s=Vr(t).pb(bi);s.write({type:bi.Type.RESERVE});let i;try{i=await s.read()}catch(a){throw Pr.error("error parsing reserve message response from %p because",e.remotePeer,a),a}finally{t.close()}if(i.status===nr.OK&&i.reservation!=null)return i.reservation;let o=`reservation failed with status ${i.status??"undefined"}`;throw Pr.error(o),new Error(o)}#t(e){let t=this.reservations.get(e);t!=null&&(Pr("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(Pr("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var $r=C("libp2p:circuit-relay:transport"),lie=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(fe)}catch{return!1}return!0},xL={maxInboundStopStreams:300,maxOutboundStopStreams:300},A7=class{discovery;registrar;peerStore;connectionManager;peerId;upgrader;addressManager;connectionGater;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;constructor(e,t){this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??xL.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??xL.maxOutboundStopStreams,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new o2(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(s=>{$r.error("could not add discovered relay %p",n.detail,s)})})),this.reservationStore=new a2(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{$r.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){await this.reservationStore.start(),await this.discovery?.start(),await this.registrar.handle(n2,e=>{this.onStop(e).catch(t=>{$r.error(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams}),this.started=!0}async stop(){this.discovery?.stop(),await this.reservationStore.stop(),await this.registrar.unhandle(n2),this.started=!1}[Ps]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(d=>d===290).length!==1){let d="Invalid circuit relay address";throw $r.error(d,e),new E(d,z.ERR_RELAYED_DIAL)}let n=e.toString().split("/p2p-circuit"),s=fe(n[0]),i=fe(n[n.length-1]),o=s.getPeerId(),a=i.getPeerId();if(o==null||a==null){let d=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw $r.error(d),new E(d,z.ERR_RELAYED_DIAL)}let c=he(o),l=he(a),u=!1,h=this.connectionManager.getConnections(c)[0];h==null&&(await this.peerStore.merge(c,{multiaddrs:[s]}),h=await this.connectionManager.openConnection(c,t),u=!0);let p;try{return p=await h.newStream([Ro]),await this.connectV2({stream:p,connection:h,destinationPeer:l,destinationAddr:i,relayAddr:s,ma:e,disconnectOnFailure:u})}catch(d){throw $r.error(`Circuit relay dial to destination ${l.toString()} via relay ${c.toString()} failed`,d),p?.abort(d),u&&await h.close(),d}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:s,relayAddr:i,ma:o,disconnectOnFailure:a}){try{let c=Vr(e),l=c.pb(bi);l.write({type:bi.Type.CONNECT,peer:{id:n.toBytes(),addrs:[fe(s).bytes]}});let u=await l.read();if(u.status!==nr.OK)throw new E(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`,z.ERR_HOP_REQUEST_FAILED);let f=_7({stream:c.unwrap(),remoteAddr:o,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`)});return $r("new outbound connection %s",f.remoteAddr),await this.upgrader.upgradeOutbound(f)}catch(c){throw $r.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return wL({connectionManager:this.connectionManager,relayStore:this.reservationStore})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>as.matches(t))}async onStop({connection:e,stream:t}){let n=Vr(t),s=await n.readPB(fs);if($r("received circuit v2 stop protocol request from %s",e.remotePeer),s?.type===void 0)return;let i=n.pb(fs);if($r("new circuit relay v2 stop stream from %s",e.remotePeer),s.type!==fs.Type.CONNECT){$r.error("invalid stop connect request via peer %s",e.remotePeer),i.write({type:fs.Type.STATUS,status:nr.UNEXPECTED_MESSAGE});return}if(!lie(s)){$r.error("invalid stop connect request via peer %s",e.remotePeer),i.write({type:fs.Type.STATUS,status:nr.MALFORMED_MESSAGE});return}let o=mt(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,o)===!0){i.write({type:fs.Type.STATUS,status:nr.PERMISSION_DENIED});return}i.write({type:fs.Type.STATUS,status:nr.OK});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${o.toString()}`),c=this.addressManager.getAddresses()[0],l=_7({stream:n.unwrap(),remoteAddr:a,localAddr:c});$r("new inbound connection %s",l.remoteAddr),await this.upgrader.upgradeInbound(l),$r("%s connection %s upgraded","inbound",l.remoteAddr)}};function I7(r={}){return e=>new A7(e,r)}var EL="0.45.9";var R7=`js-libp2p/${EL}`;var vL="0.1.0",_L="id",SL="id/push",AL="1.0.0",IL="1.0.0";var c2=W(jr(),1);var Do;(function(r){let e;r.codec=()=>(e==null&&(e=me((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 5:s.protocolVersion=t.string();break;case 6:s.agentVersion=t.string();break;case 1:s.publicKey=t.bytes();break;case 2:s.listenAddrs.push(t.bytes());break;case 4:s.observedAddr=t.bytes();break;case 3:s.protocols.push(t.string());break;case 8:s.signedPeerRecord=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>pe(t,r.codec()),r.decode=t=>de(t,r.codec())})(Do||(Do={}));var kr=C("libp2p:identify"),RL=1024*8,hs={protocolPrefix:"ipfs",agentVersion:R7,timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192},l2=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;constructor(e,t){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.identifyProtocolStr=`/${t.protocolPrefix??hs.protocolPrefix}/${_L}/${AL}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??hs.protocolPrefix}/${SL}/${IL}`,this.timeout=t.timeout??hs.timeout,this.maxInboundStreams=t.maxInboundStreams??hs.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??hs.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??hs.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??hs.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??hs.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??hs.maxObservedAddresses,this.host={protocolVersion:`${t.protocolPrefix??hs.protocolPrefix}/${vL}`,agentVersion:t.agentVersion??hs.agentVersion},e.events.addEventListener("connection:open",n=>{let s=n.detail;this.identify(s).catch(i=>{kr.error("error during identify trigged by connection:open",i)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(s=>{kr.error(s)})}),this.host.agentVersion===R7&&(jN||QN?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(Z1||J1||XN||ZN)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:$(this.host.agentVersion),ProtocolVersion:$(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{kr.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{kr.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(u=>u.decapsulateCode(se("p2p").code)),n=new cn({peerId:this.peerId,multiaddrs:t}),s=await Dn.seal(n,this.peerId),i=this.registrar.getProtocols(),o=await this.peerStore.get(this.peerId),a=M(o.metadata.get("AgentVersion")??$(this.host.agentVersion)),c=M(o.metadata.get("ProtocolVersion")??$(this.host.protocolVersion)),l=e.map(async u=>{let f,h=AbortSignal.timeout(this.timeout);try{(0,c2.setMaxListeners)?.(1/0,h)}catch{}try{f=await u.newStream([this.identifyPushProtocolStr],{signal:h}),await hr(f,h).sink(Ie([Do.encode({listenAddrs:t.map(d=>d.bytes),signedPeerRecord:s.marshal(),protocols:i,agentVersion:a,protocolVersion:c})],d=>dt(d)))}catch(p){kr.error("could not push identify update to peer",p)}finally{f?.close()}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==z.ERR_NOT_FOUND)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n,s=et([AbortSignal.timeout(this.timeout),t?.signal]);try{(0,c2.setMaxListeners)?.(1/0,s)}catch{}try{n=await e.newStream([this.identifyProtocolStr],{signal:s});let i=hr(n,s),o=await Ie([],i,a=>_t(a,{maxDataLength:this.maxIdentifyMessageSize??RL}),async a=>rs(a));if(o==null)throw new E("No data could be retrieved",z.ERR_CONNECTION_ENDED);try{return Do.decode(o)}catch(a){throw new E(String(a),z.ERR_INVALID_MESSAGE)}}finally{n?.close(),s.clear()}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:s,protocols:i,observedAddr:o}=n;if(s==null)throw new E("public key was missing from identify message",z.ERR_MISSING_PUBLIC_KEY);let a=await pr(s);if(!e.remotePeer.equals(a))throw new E("identified peer does not match the expected peer",z.ERR_INVALID_PEER);if(this.peerId.equals(a))throw new E("identified peer is our own peer id?",z.ERR_INVALID_PEER);let c=uie(o);kr("identify completed for peer %p and protocols %o",a,i),kr("our observed address is %s",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(kr("storing our observed address %s",c?.toString()),this.addressManager.addObservedAddr(c));let l=await this.#e(e.remotePeer,n),u={peerId:a,protocolVersion:n.protocolVersion,agentVersion:n.agentVersion,publicKey:n.publicKey,listenAddrs:n.listenAddrs.map(f=>fe(f)),observedAddr:n.observedAddr==null?void 0:fe(n.observedAddr),protocols:n.protocols,signedPeerRecord:l};this.events.safeDispatchEvent("peer:identify",{detail:u})}async _handleIdentify(e){let{connection:t,stream:n}=e,s=AbortSignal.timeout(this.timeout);try{(0,c2.setMaxListeners)?.(1/0,s)}catch{}try{let i=this.peerId.publicKey??new Uint8Array(0),o=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(h=>h.decapsulateCode(se("p2p").code)),c=o.peerRecordEnvelope;if(a.length>0&&c==null){let h=new cn({peerId:this.peerId,multiaddrs:a});c=(await Dn.seal(h,this.peerId)).marshal().subarray()}let l=Do.encode({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:i,listenAddrs:a.map(h=>h.bytes),signedPeerRecord:c,observedAddr:t.remoteAddr.bytes,protocols:o.protocols}),u=hr(n,s),f=Ie([l],h=>dt(h));await u.sink(f)}catch(i){kr.error("could not respond to identify request",i)}finally{n.close()}}async _handlePush(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let s=hr(n,AbortSignal.timeout(this.timeout)),o=await Vr(s,{maxDataLength:this.maxIdentifyMessageSize??RL}).readPB(Do);await this.#e(t.remotePeer,o)}catch(s){kr.error("received invalid message",s);return}finally{n.close()}kr("handled push from %p",t.remotePeer)}async#e(e,t){if(kr("received identify from %p",e),t==null)throw new Error("Message was null or undefined");let n={addresses:t.listenAddrs.map(i=>({isCertified:!1,multiaddr:fe(i)})),protocols:t.protocols,metadata:new Map,peerRecordEnvelope:t.signedPeerRecord},s;if(t.signedPeerRecord!=null){kr("received signedPeerRecord in push from %p",e);let i=t.signedPeerRecord,o=await Dn.openAndCertify(i,cn.DOMAIN),a=cn.createFromProtobuf(o.payload);if(!a.peerId.equals(o.peerId))throw new Error("signing key does not match PeerId in the PeerRecord");if(!e.equals(a.peerId))throw new Error("signing key does not match remote PeerId");let c;try{c=await this.peerStore.get(a.peerId)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null&&(n.metadata=c.metadata,c.peerRecordEnvelope!=null)){let l=await Dn.createFromProtobuf(c.peerRecordEnvelope),u=cn.createFromProtobuf(l.payload);u.seqNumber>=a.seqNumber&&(kr("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,a.seqNumber),a=u,i=c.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=a.multiaddrs.map(l=>({isCertified:!0,multiaddr:l})),s={seq:a.seqNumber,addresses:a.multiaddrs}}else kr("%p did not send a signed peer record",e);return t.agentVersion!=null&&n.metadata.set("AgentVersion",$(t.agentVersion)),t.protocolVersion!=null&&n.metadata.set("ProtocolVersion",$(t.protocolVersion)),await this.peerStore.patch(e,n),s}};function uie(r){if(r!=null&&r.length>0)try{return fe(r)}catch{}}function TL(r={}){return e=>new l2(e,r)}var DL={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function CL(){return{addresses:{listen:["/webrtc"]},transports:[vN(),EN(),DO(),cO(),I7({discoverRelays:1})],connectionEncryption:[dl()],streamMuxers:[GD(),aP()],peerDiscovery:[sC(DL)],contentRouters:[fC("https://cid.contact")],services:{identify:TL(),autoNAT:WO(),pubsub:LT(),dht:XC({clientMode:!0,validators:{ipns:qO},selectors:{ipns:KO}})}}}async function PL(r,e){let t=CL();return e=e??{},xR({datastore:r,...t,...e,start:!1})}var T7="1.3.12-703aa6d",u2="helia";var fie=C("helia");async function hie(r={}){let e=r.datastore??new Lo,t=r.blockstore??new ru,n;die(r.libp2p)?n=r.libp2p:n=await PL(e,r.libp2p);let s=new H0({...r,datastore:e,blockstore:t,libp2p:n});return r.start!==!1&&await s.start(),s.libp2p.isStarted()?await kL(s):s.libp2p.addEventListener("start",()=>{kL(s).catch(i=>{fie.error("could not add Helia to agent version",i)})}),s}function die(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}async function kL(r){let t=(await r.libp2p.peerStore.get(r.libp2p.peerId)).metadata.get("AgentVersion");if(t==null)return;let n=new TextDecoder().decode(t);n.match(/js-libp2p\/\d+\.\d+\.\d+\sUserAgent=/)!=null&&(n.includes(u2)?n=`${u2}/${T7} ${n.split(" ").slice(1).join(" ")}`:n=`${u2}/${T7} ${n}`,await r.libp2p.peerStore.merge(r.libp2p.peerId,{metadata:{AgentVersion:new TextEncoder().encode(n)}}))}return Uh(pie);})();
85
85
  /*! Bundled license information:
86
86
 
87
87
  @noble/ed25519/lib/esm/index.js:
@@ -1,3 +1,3 @@
1
- export declare const version = "1.3.12-45faaa7";
1
+ export declare const version = "1.3.12-703aa6d";
2
2
  export declare const name = "helia";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
- export const version = '1.3.12-45faaa7';
1
+ export const version = '1.3.12-703aa6d';
2
2
  export const name = 'helia';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helia",
3
- "version": "1.3.12-45faaa7",
3
+ "version": "1.3.12-703aa6d",
4
4
  "description": "An implementation of IPFS in JavaScript",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia/tree/master/packages/helia#readme",
@@ -52,7 +52,7 @@
52
52
  "@chainsafe/libp2p-gossipsub": "^8.0.0",
53
53
  "@chainsafe/libp2p-noise": "^12.0.0",
54
54
  "@chainsafe/libp2p-yamux": "^4.0.2",
55
- "@helia/interface": "1.2.2-45faaa7",
55
+ "@helia/interface": "1.2.2-703aa6d",
56
56
  "@ipld/dag-pb": "^4.0.3",
57
57
  "@libp2p/bootstrap": "^8.0.0",
58
58
  "@libp2p/interface-libp2p": "^3.2.0",
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '1.3.12-45faaa7'
1
+ export const version = '1.3.12-703aa6d'
2
2
  export const name = 'helia'