libp2p 0.44.0-102d4c20 → 0.44.0-44b30cc8
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 +2 -2
- package/dist/src/connection-manager/index.d.ts +1 -2
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/insecure/index.js.map +1 -1
- package/dist/src/libp2p.d.ts +1 -7
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/upgrader.d.ts +7 -7
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js.map +1 -1
- package/package.json +30 -30
- package/src/connection-manager/index.ts +1 -2
- package/src/insecure/index.ts +4 -4
- package/src/libp2p.ts +1 -9
- package/src/upgrader.ts +11 -9
- package/src/version.ts +1 -1
package/dist/index.min.js
CHANGED
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
(?:${ze}:){1}(?:(?::${ze}){0,4}:${Vt}|(?::${ze}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
|
|
46
46
|
(?::(?:(?::${ze}){0,5}:${Vt}|(?::${ze}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
|
|
47
47
|
)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
|
|
48
|
-
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),hv=new RegExp(`(?:^${Vt}$)|(?:^${Vs}$)`),dv=new RegExp(`^${Vt}$`),pv=new RegExp(`^${Vs}$`),qu=t=>t&&t.exact?hv:new RegExp(`(?:${Zr(t)}${Vt}${Zr(t)})|(?:${Zr(t)}${Vs}${Zr(t)})`,"g");qu.v4=t=>t&&t.exact?dv:new RegExp(`${Zr(t)}${Vt}${Zr(t)}`,"g");qu.v6=t=>t&&t.exact?pv:new RegExp(`${Zr(t)}${Vs}${Zr(t)}`,"g");var Pd=qu;var Od=U(Ld(),1),{isValid:mv,parse:yv}=Od.default,gv=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],wv=gv.map(t=>new kd.Netmask(t));function Ev(t){for(let e of wv)if(e.contains(t))return!0;return!1}function Nd(t){return/^::$/.test(t)||/^::1$/.test(t)||/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(t)||/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(t)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(t)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(t)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(t)||/^ff([0-9a-fA-F]{2,2}):/i.test(t)}var Md=t=>{if(mv(t)){let e=yv(t);if(e.kind()==="ipv4")return Ev(e.toNormalizedString());if(e.kind()==="ipv6")return Nd(t)}else if(ai(t)&&Pd.v6().test(t))return Nd(t)};var Dn=Md;function $u(t){try{let{address:e}=t.nodeAddress();return!!Dn(e)}catch{return!0}}function vi(t,e){let r=$u(t.multiaddr),n=$u(e.multiaddr);return r&&!n?1:!r&&n||t.isCertified&&!e.isCertified?-1:!t.isCertified&&e.isCertified?1:0}var Hu=U(Ac(),1),Gu=U(Kd(),1);var Vd=globalThis.fetch,qd=globalThis.Headers,k4=globalThis.Request,O4=globalThis.Response;function $s(t,e,r){return`${t}?name=${e}&type=${r}`}async function $d(t,e){return await(await Vd(t,{headers:new qd({accept:"application/dns-json"}),signal:e})).json()}function Ln(t,e){return`${e}_${t}`}var zu=Object.assign((0,Hu.default)("dns-over-http-resolver"),{error:(0,Hu.default)("dns-over-http-resolver:error")}),Yu=class{constructor(e={}){this._cache=new Gu.default({max:e?.maxCache??100}),this._TXTcache=new Gu.default({max:e?.maxCache??100}),this._servers=["https://cloudflare-dns.com/dns-query","https://dns.google/resolve"],this._request=e.request??$d,this._abortControllers=[]}cancel(){this._abortControllers.forEach(e=>e.abort())}getServers(){return this._servers}_getShuffledServers(){let e=[...this._servers];for(let r=e.length-1;r>0;r--){let n=Math.floor(Math.random()*r),i=e[r];e[r]=e[n],e[n]=i}return e}setServers(e){this._servers=e}async resolve(e,r="A"){switch(r){case"A":return await this.resolve4(e);case"AAAA":return await this.resolve6(e);case"TXT":return await this.resolveTxt(e);default:throw new Error(`${r} is not supported`)}}async resolve4(e){let r="A",n=this._cache.get(Ln(e,r));if(n!=null)return n;let i=!1;for(let o of this._getShuffledServers()){let s=new AbortController;this._abortControllers.push(s);try{let a=await this._request($s(o,e,r),s.signal),c=a.Answer.map(l=>l.data),u=Math.min(...a.Answer.map(l=>l.TTL));return this._cache.set(Ln(e,r),c,{ttl:u}),c}catch{s.signal.aborted&&(i=!0),zu.error(`${o} could not resolve ${e} record ${r}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==s)}}throw i?Object.assign(new Error("queryA ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${r}`)}async resolve6(e){let r="AAAA",n=this._cache.get(Ln(e,r));if(n!=null)return n;let i=!1;for(let o of this._getShuffledServers()){let s=new AbortController;this._abortControllers.push(s);try{let a=await this._request($s(o,e,r),s.signal),c=a.Answer.map(l=>l.data),u=Math.min(...a.Answer.map(l=>l.TTL));return this._cache.set(Ln(e,r),c,{ttl:u}),c}catch{s.signal.aborted&&(i=!0),zu.error(`${o} could not resolve ${e} record ${r}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==s)}}throw i?Object.assign(new Error("queryAaaa ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${r}`)}async resolveTxt(e){let r="TXT",n=this._TXTcache.get(Ln(e,r));if(n!=null)return n;let i=!1;for(let o of this._getShuffledServers()){let s=new AbortController;this._abortControllers.push(s);try{let a=await this._request($s(o,e,r),s.signal),c=a.Answer.map(l=>[l.data.replace(/['"]+/g,"")]),u=Math.min(...a.Answer.map(l=>l.TTL));return this._TXTcache.set(Ln(e,r),c,{ttl:u}),c}catch{s.signal.aborted&&(i=!0),zu.error(`${o} could not resolve ${e} record ${r}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==s)}}throw i?Object.assign(new Error("queryTxt ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${r}`)}clearCache(){this._cache.clear(),this._TXTcache.clear()}},zd=Yu;var Hd=zd;var{code:Sv}=j("dnsaddr");async function bi(t,e={}){let r=new Hd;e.signal!=null&&e.signal.addEventListener("abort",()=>{r.cancel()});let n=t.getPeerId(),[,i]=t.stringTuples().find(([a])=>a===Sv)??[];if(i==null)throw new Error("No hostname found in multiaddr");let s=(await r.resolveTxt(`_dnsaddr.${i}`)).flat().map(a=>a.split("=")[1]).filter(Boolean);return n!=null&&(s=s.filter(a=>a.includes(n))),s}function Gd(t){let e=new globalThis.AbortController;function r(){e.abort();for(let o of t)o?.removeEventListener!=null&&o.removeEventListener("abort",r)}for(let o of t){if(o?.aborted===!0){r();break}o?.addEventListener!=null&&o.addEventListener("abort",r)}function n(){for(let o of t)o?.removeEventListener!=null&&o.removeEventListener("abort",r)}let i=e.signal;return i.clear=n,i}var Wu=U(Ar(),1),Yd=M("libp2p:connection-manager:utils");async function Qu(t,e){if(!t.protoNames().includes("dnsaddr"))return[t];let n=await Av(t,e),s=(await Promise.all(n.map(async a=>await Qu(a,e)))).flat().reduce((a,c)=>(a.find(u=>u.equals(c))==null&&a.push(c),a),[]);return Yd("resolved %s to",t,s.map(a=>a.toString())),s}async function Av(t,e){try{return t=Ie(t.toString()),await t.resolve(e)}catch(r){return Yd.error(`multiaddr ${t.toString()} could not be resolved`,r),[]}}function Xu(...t){let e=[];for(let n of t)if(n!=null){try{(0,Wu.setMaxListeners)?.(1/0,n)}catch{}e.push(n)}let r=Gd(e);try{(0,Wu.setMaxListeners)?.(1/0,r)}catch{}return r}function tr(){let t={};return t.promise=new Promise((e,r)=>{t.resolve=e,t.reject=r}),t}var ot=M("libp2p:connection-manager:dial-queue"),mo={addressSorter:vi,maxParallelDials:100,maxPeerAddrsToDial:25,maxParallelDialsPerPeer:10,dialTimeout:3e4,resolvers:{dnsaddr:bi}},zs=class{constructor(e,r={}){this.addressSorter=r.addressSorter??mo.addressSorter,this.maxPeerAddrsToDial=r.maxPeerAddrsToDial??mo.maxPeerAddrsToDial,this.maxParallelDialsPerPeer=r.maxParallelDialsPerPeer??mo.maxParallelDialsPerPeer,this.dialTimeout=r.dialTimeout??mo.dialTimeout,this.peerId=e.peerId,this.peerStore=e.peerStore,this.connectionGater=e.connectionGater,this.transportManager=e.transportManager,this.shutDownController=new AbortController,this.pendingDialCount=e.metrics?.registerMetric("libp2p_dialler_pending_dials"),this.inProgressDialCount=e.metrics?.registerMetric("libp2p_dialler_in_progress_dials"),this.pendingDials=[];for(let[n,i]of Object.entries(r.resolvers??{}))cu.set(n,i);this.queue=new Kt({concurrency:r.maxParallelDials??mo.maxParallelDials}),this.queue.on("add",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("active",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("completed",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("error",n=>{ot.error("error in dial queue",n),this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("empty",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("idle",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)})}stop(){this.shutDownController.abort()}async dial(e,r={}){let{peerId:n,multiaddrs:i}=Cs(e),o=i.map(f=>({multiaddr:f,isCertified:!1})),{timeoutController:s,signal:a}=this.createDialAbortControllers(r.signal),c;try{c=await this.calculateMultiaddrs(n,o,{...r,signal:a})}catch(f){throw a.clear(),s.clear(),f}let u=this.pendingDials.find(f=>!!(f.peerId!=null&&n!=null&&f.peerId.equals(n)||c.map(({multiaddr:h})=>h.toString()).join()===f.multiaddrs.map(h=>h.toString()).join()));if(u!=null)return ot("joining existing dial target for %p",n),a.clear(),s.clear(),await u.promise;ot("creating dial target for",c.map(({multiaddr:f})=>f.toString()));let l={id:Iv(),status:"queued",peerId:n,multiaddrs:c.map(({multiaddr:f})=>f)};return l.promise=this.performDial(l,{...r,signal:a}).finally(()=>{this.pendingDials=this.pendingDials.filter(f=>f.id!==l.id),a.clear(),s.clear()}).catch(f=>{throw ot.error("dial failed to %s",c.map(({multiaddr:h})=>h.toString()).join(", "),f),s.signal.aborted?new w(f.message,S.ERR_TIMEOUT):f}),this.pendingDials.push(l),await l.promise}createDialAbortControllers(e){let r=new Wd.TimeoutController(this.dialTimeout),n=Xu(r.signal,this.shutDownController.signal,e);return{timeoutController:r,signal:n}}async calculateMultiaddrs(e,r=[],n={}){if(e!=null){if(this.peerId.equals(e))throw new w("Tried to dial self",S.ERR_DIALED_SELF);if(await this.connectionGater.denyDialPeer?.(e)===!0)throw new w("The dial request is blocked by gater.allowDialPeer",S.ERR_PEER_DIAL_INTERCEPTED);r.length===0&&(ot("loading multiaddrs for %p",e),r.push(...await this.peerStore.addressBook.get(e)),ot("loaded multiaddrs for %p",e,r.map(({multiaddr:u})=>u.toString())))}let i=(await Promise.all(r.map(async u=>{let l=await Qu(u.multiaddr,n);return l.length===1&&l[0].equals(u.multiaddr)?u:l.map(f=>({multiaddr:f,isCertified:!1}))}))).flat(),o=i.filter(u=>!!this.transportManager.transportForMultiaddr(u.multiaddr)),s=new Map;for(let u of o){let l=u.multiaddr.toString(),f=s.get(l);if(f!=null){f.isCertified=f.isCertified||u.isCertified||!1;continue}s.set(l,u)}let a=[...s.values()];if((a.length===0||a.length>this.maxPeerAddrsToDial)&&(ot("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:u})=>u.toString())),ot("addresses for %p after filtering",e??"unknown peer",a.map(({multiaddr:u})=>u.toString()))),a.length===0)throw new w("The dial request has no valid addresses",S.ERR_NO_VALID_ADDRESSES);if(a.length>this.maxPeerAddrsToDial)throw new w("dial with more addresses than allowed",S.ERR_TOO_MANY_ADDRESSES);if(e!=null){let u=`/p2p/${e.toString()}`;a=a.map(l=>{let f=l.multiaddr.getPeerId();return l.multiaddr.protos().pop()?.path===!0?l:f!==e.toString()?{multiaddr:l.multiaddr.encapsulate(u),isCertified:l.isCertified}:l})}let c=[];for(let u of a)this.connectionGater.denyDialMultiaddr!=null&&await this.connectionGater.denyDialMultiaddr(u.multiaddr)||c.push(u);return c.sort(this.addressSorter)}async performDial(e,r={}){let n=e.multiaddrs.map(()=>new AbortController);try{let i=new Kt({concurrency:this.maxParallelDialsPerPeer});i.on("error",s=>{ot.error("error dialling",s)});let o=await Promise.any(e.multiaddrs.map(async(s,a)=>{let c=n[a];if(c==null)throw new w("dialAction did not come with an AbortController",S.ERR_INVALID_PARAMETERS);let u=Xu(c.signal,r.signal);u.addEventListener("abort",()=>{ot("dial to %s aborted",s)});let l=tr();return await i.add(async()=>{if(u.aborted){ot("dial to %s was aborted before reaching the head of the peer dial queue",s),l.reject(new vr);return}await this.queue.add(async()=>{try{if(u.aborted){ot("dial to %s was aborted before reaching the head of the dial queue",s),l.reject(new vr);return}e.status="active";let f=await this.transportManager.dial(s,{...r,signal:u});if(c.signal.aborted){ot("multiple dials succeeded, closing superfluous connection"),f.close().catch(h=>{ot.error("error closing superfluous connection",h)}),l.reject(new vr);return}n[a]=void 0,n.forEach(h=>{h!==void 0&&h.abort()}),ot("dial to %s succeeded",s),l.resolve(f)}catch(f){ot.error("error during dial of %s",s,f),l.reject(f)}},{...r,signal:u}).catch(f=>{l.reject(f)})},{signal:u}).catch(f=>{l.reject(f)}).finally(()=>{u.clear()}),await l.promise}));if(o==null)throw new w("successful dial led to empty object returned from peer dial queue",S.ERR_TRANSPORT_DIAL_FAILED);return e.status="success",o}catch(i){throw e.status="error",e.multiaddrs.length===1&&i.name==="AggregateError"?i.errors[0]:i}}};function Iv(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Hs=M("libp2p:connection-manager:connection-pruner"),Qd={maxConnections:300,allow:[]},Gs=class{constructor(e,r={}){this.maxConnections=r.maxConnections??Qd.maxConnections,this.allow=r.allow??Qd.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore}async maybePruneConnections(){let e=this.connectionManager.getConnections(),r=e.length,n=Math.max(r-this.maxConnections,0);if(Hs.trace("checking max connections limit %d/%d",r,this.maxConnections),r<=this.maxConnections)return;Hs("max connections limit exceeded %d/%d, pruning %d connection(s)",r,this.maxConnections,n);let i=new Ir;for(let a of e){let c=a.remotePeer;if(i.has(c))continue;let u=await this.peerStore.getTags(c);i.set(c,u.reduce((l,f)=>l+f.value,0))}let o=e.sort((a,c)=>{let u=i.get(a.remotePeer)??0,l=i.get(c.remotePeer)??0;if(u>l)return 1;if(u<l)return-1;let f=a.stat.timeline.open,h=c.stat.timeline.open;return f<h?1:f>h?-1:0}),s=[];for(let a of o)if(Hs("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(u=>a.remoteAddr.toString().startsWith(u.toString()))||s.push(a),s.length===n)break;await Promise.all(s.map(async a=>{try{await a.close()}catch(c){Hs.error(c)}})),this.connectionManager.dispatchEvent(new G("peer:prune",{detail:s.map(a=>a.remotePeer)}))}};var ut=M("libp2p:connection-manager"),Bv=50,_i={minConnections:50,maxConnections:300,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0},Ys=class extends Xe{constructor(e,r={}){super(),this.maxConnections=r.maxConnections??_i.maxConnections;let n=r.minConnections??_i.minConnections;if(this.maxConnections<n)throw new w("Connection Manager maxConnections must be greater than minConnections",S.ERR_INVALID_PARAMETERS);this.connections=new Ir,this.started=!1;try{(0,Xd.setMaxListeners)?.(1/0,this)}catch{}this.peerStore=e.peerStore,this.metrics=e.metrics,this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(r.allow??[]).map(i=>Ie(i)),this.deny=(r.deny??[]).map(i=>Ie(i)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=r.maxIncomingPendingConnections??_i.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Zd.RateLimiterMemory({points:r.inboundConnectionThreshold??_i.inboundConnectionThreshold,duration:1}),this.autoDial=new Ks({connectionManager:this,peerStore:e.peerStore},{minConnections:n,autoDialConcurrency:r.autoDialConcurrency??_i.autoDialConcurrency,autoDialPriority:r.autoDialPriority??_i.autoDialPriority}),this.addEventListener("peer:disconnect",()=>{this.autoDial.autoDial().catch(i=>{ut.error(i)})}),this.connectionPruner=new Gs({connectionManager:this,peerStore:e.peerStore},{maxConnections:this.maxConnections,allow:this.allow}),this.addEventListener("peer:connect",()=>{this.connectionPruner.maybePruneConnections().catch(i=>{ut.error(i)})}),this.dialQueue=new zs({peerId:e.peerId,metrics:e.metrics,peerStore:e.peerStore,transportManager:e.transportManager,connectionGater:e.connectionGater},{addressSorter:r.addressSorter??vi,maxParallelDials:r.maxParallelDials??100,maxPeerAddrsToDial:r.maxPeerAddrsToDial??25,dialTimeout:r.dialTimeout??3e4,resolvers:r.resolvers??{dnsaddr:bi}}),e.upgrader.addEventListener("connection",this.onConnect),e.upgrader.addEventListener("connectionEnd",this.onDisconnect)}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let r of this.connections.values())for(let n of r)n.stat.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let r of this.connections.values())for(let n of r)for(let i of n.streams){let o=`${i.stat.direction} ${i.stat.protocol??"unnegotiated"}`;e[o]=(e[o]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let i of n){let o={};for(let s of i.streams){let a=`${s.stat.direction} ${s.stat.protocol??"unnegotiated"}`;o[a]=(o[a]??0)+1}for(let[s,a]of Object.entries(o))e[s]=e[s]??[],e[s].push(a)}let r={};for(let[n,i]of Object.entries(e)){i=i.sort((s,a)=>s-a);let o=Math.floor(i.length*.9);r[n]=i[o]}return r}}),this.autoDial.start(),this.started=!0,ut("started")}async afterStart(){Promise.resolve().then(async()=>{let e=[];for(let r of await this.peerStore.all())(await this.peerStore.getTags(r.id)).filter(o=>o.name===b0).length>0&&e.push(r.id);await Promise.all(e.map(async r=>{await this.openConnection(r).catch(n=>{ut.error(n)})}))}).catch(e=>{ut.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let r of this.connections.values())for(let n of r)e.push((async()=>{try{await n.close()}catch(i){ut.error(i)}})());ut("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),ut("stopped")}onConnect(e){this._onConnect(e).catch(r=>{ut.error(r)})}async _onConnect(e){let{detail:r}=e;if(!this.started){await r.close();return}let n=r.remotePeer,i=this.connections.get(n);i!=null?i.push(r):this.connections.set(n,[r]),n.publicKey!=null&&await this.peerStore.keyBook.set(n,n.publicKey),this.dispatchEvent(new G("peer:connect",{detail:r}))}onDisconnect(e){let{detail:r}=e;if(!this.started)return;let n=r.remotePeer,i=this.connections.get(n);i!=null&&i.length>1?(i=i.filter(o=>o.id!==r.id),this.connections.set(n,i)):i!=null&&(this.connections.delete(n),this.dispatchEvent(new G("peer:disconnect",{detail:r})))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let r=[];for(let n of this.connections.values())r=r.concat(n);return r}getConnectionsMap(){return this.connections}async openConnection(e,r={}){let{peerId:n}=Cs(e);if(n!=null){ut("dial %p",n);let a=this.getConnections(n);if(a.length>0)return ut("had an existing connection to %p",n),a[0]}let i=await this.dialQueue.dial(e,{...r,priority:r.priority??Bv}),o=this.connections.get(i.remotePeer);o==null&&(o=[],this.connections.set(i.remotePeer,o));let s=!1;for(let a of o)a.id===i.id&&(s=!0);return s||o.push(i),i}async closeConnections(e){let r=this.connections.get(e)??[];await Promise.all(r.map(async n=>{await n.close()}))}async acceptIncomingConnection(e){if(this.deny.some(i=>e.remoteAddr.toString().startsWith(i.toString())))return ut("connection from %s refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(i=>e.remoteAddr.toString().startsWith(i.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return ut("connection from %s refused - incomingPendingConnections exceeded by peer %s",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let i=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(i,1)}catch{return ut("connection from %s refused - inboundConnectionThreshold exceeded by host %s",i,e.remoteAddr),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(ut("connection from %s refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){return this.dialQueue.pendingDials}};var Cg=U(sp(),1);var mp=U(pp(),1),jr=mp.default;var ee;(function(t){t.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",t.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",t.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",t.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",t.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",t.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",t.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",t.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",t.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",t.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",t.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",t.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",t.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",t.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",t.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(ee||(ee={}));var pl=U(sl(),1),rm=U(Wp(),1),nm=U(kn(),1),ml=U(dl(),1),im=U(tm(),1);function r2(){nm.default._configure(),pl.default._configure(rm.default),ml.default._configure(im.default)}r2();var om=["uint64","int64","sint64","fixed64","sfixed64"];function n2(t){for(let e of om){if(t[e]==null)continue;let r=t[e];t[e]=function(){return BigInt(r.call(this).toString())}}return t}function yl(t){return n2(new pl.default(t))}function i2(t){for(let e of om){if(t[e]==null)continue;let r=t[e];t[e]=function(n){return r.call(this,n.toString())}}return t}function gl(){return i2(ml.default.create())}function de(t,e){let r=yl(t instanceof Uint8Array?t:t.subarray());return e.decode(r)}function pe(t,e){let r=gl();return e.encode(t,r,{lengthDelimited:!1}),r.finish()}var Ii;(function(t){t[t.VARINT=0]="VARINT",t[t.BIT64=1]="BIT64",t[t.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",t[t.START_GROUP=3]="START_GROUP",t[t.END_GROUP=4]="END_GROUP",t[t.BIT32=5]="BIT32"})(Ii||(Ii={}));function ea(t,e,r,n){return{name:t,type:e,encode:r,decode:n}}function rn(t){function e(i){if(t[i.toString()]==null)throw new Error("Invalid enum value");return t[i]}let r=function(o,s){let a=e(o);s.int32(a)},n=function(o){let s=o.int32();return e(s)};return ea("enum",Ii.VARINT,r,n)}function me(t,e){return ea("message",Ii.LENGTH_DELIMITED,t,e)}var Te;(function(t){t.RSA="RSA",t.Ed25519="Ed25519",t.Secp256k1="Secp256k1"})(Te||(Te={}));var wl;(function(t){t[t.RSA=0]="RSA",t[t.Ed25519=1]="Ed25519",t[t.Secp256k1=2]="Secp256k1"})(wl||(wl={}));(function(t){t.codec=()=>rn(wl)})(Te||(Te={}));var ir;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),Te.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.Type=Te.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(ir||(ir={}));var or;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),Te.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.Type=Te.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(or||(or={}));var tD=U(vo(),1),rD=U(xy(),1),La=U(fe(),1);var pt={get(t=globalThis){let e=t.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p-crypto/blob/master/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var zB=U(qe(),1),HB=U(ya(),1),by=U(fe(),1);function Gt(t,e){let r=Uint8Array.from(t.abs().toByteArray());if(r=r[0]===0?r.subarray(1):r,e!=null){if(r.length>e)throw new Error("byte array longer than desired length");r=Me([new Uint8Array(e-r.length),r])}return $(r,"base64url")}function St(t){let e=_y(t);return new by.default.jsbn.BigInteger($(e,"base16"),16)}function _y(t,e){let r=F(t,"base64urlpad");if(e!=null){if(r.length>e)throw new Error("byte array longer than desired length");r=Me([new Uint8Array(e-r.length),r])}return r}var C_={"P-256":256,"P-384":384,"P-521":521},B_=Object.keys(C_),rP=B_.join(" / ");function Sy(){return typeof navigator<"u"&&navigator.userAgent.includes("Safari")&&navigator.userAgent.includes("Linux")&&!navigator.userAgent.includes("Chrome")}var Ay={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function xa(t){let e=t?.algorithm??"AES-GCM",r=t?.keyLength??16,n=t?.nonceLength??12,i=t?.digest??"SHA-256",o=t?.saltLength??16,s=t?.iterations??32767,a=pt.get();r*=8;async function c(f,h){let d=a.getRandomValues(new Uint8Array(o)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof h=="string"&&(h=F(h));let y;if(h.length===0&&Sy())y=await a.subtle.importKey("jwk",Ay,{name:"AES-GCM"},!0,["encrypt"]);else{let x={name:"PBKDF2",salt:d,iterations:s,hash:{name:i}},_=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(x,_,{name:e,length:r},!0,["encrypt"])}let g=await a.subtle.encrypt(m,y,f);return Me([d,m.iv,new Uint8Array(g)])}async function u(f,h){let d=f.subarray(0,o),p=f.subarray(o,o+n),m=f.subarray(o+n),y={name:e,iv:p};typeof h=="string"&&(h=F(h));let g;if(h.length===0&&Sy())g=await a.subtle.importKey("jwk",Ay,{name:"AES-GCM"},!0,["decrypt"]);else{let _={name:"PBKDF2",salt:d,iterations:s,hash:{name:i}},k=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(_,k,{name:e,length:r},!0,["decrypt"])}let x=await a.subtle.decrypt(y,g,m);return new Uint8Array(x)}return{encrypt:c,decrypt:u}}async function Iy(t,e){let r=vn.decode(t);return await xa().decrypt(r,e)}var Zl={};rt(Zl,{RsaPrivateKey:()=>Fi,RsaPublicKey:()=>Bo,fromJwk:()=>tS,generateKeyPair:()=>rS,unmarshalRsaPrivateKey:()=>j_,unmarshalRsaPublicKey:()=>eS});var MP=U(Dy(),1),Co=U(fe(),1);var D_=U(Bn(),1);var re=BigInt(0),Ae=BigInt(1),un=BigInt(2),Ro=BigInt(3),Ly=BigInt(8),Ne=Object.freeze({a:re,b:BigInt(7),P:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:Ae,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee")}),Ny=(t,e)=>(t+e/un)/e,va={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar(t){let{n:e}=Ne,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Ae*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),o=r,s=BigInt("0x100000000000000000000000000000000"),a=Ny(o*t,e),c=Ny(-n*t,e),u=L(t-a*r-c*i,e),l=L(-a*n-c*o,e),f=u>s,h=l>s;if(f&&(u=e-u),h&&(l=e-l),u>s||l>s)throw new Error("splitScalarEndo: Endomorphism failed, k="+t);return{k1neg:f,k1:u,k2neg:h,k2:l}}},Yt=32,Ni=32,L_=32,ky=Yt+1,Oy=2*Yt+1;function My(t){let{a:e,b:r}=Ne,n=L(t*t),i=L(n*t);return L(i+e*t+r)}var ba=Ne.a===re,Aa=class extends Error{constructor(e){super(e)}};function Uy(t){if(!(t instanceof se))throw new TypeError("JacobianPoint expected")}var se=class{constructor(e,r,n){this.x=e,this.y=r,this.z=n}static fromAffine(e){if(!(e instanceof ce))throw new TypeError("JacobianPoint#fromAffine: expected Point");return e.equals(ce.ZERO)?se.ZERO:new se(e.x,e.y,Ae)}static toAffineBatch(e){let r=U_(e.map(n=>n.z));return e.map((n,i)=>n.toAffine(r[i]))}static normalizeZ(e){return se.toAffineBatch(e).map(se.fromAffine)}equals(e){Uy(e);let{x:r,y:n,z:i}=this,{x:o,y:s,z:a}=e,c=L(i*i),u=L(a*a),l=L(r*u),f=L(o*c),h=L(L(n*a)*u),d=L(L(s*i)*c);return l===f&&h===d}negate(){return new se(this.x,L(-this.y),this.z)}double(){let{x:e,y:r,z:n}=this,i=L(e*e),o=L(r*r),s=L(o*o),a=e+o,c=L(un*(L(a*a)-i-s)),u=L(Ro*i),l=L(u*u),f=L(l-un*c),h=L(u*(c-f)-Ly*s),d=L(un*r*n);return new se(f,h,d)}add(e){Uy(e);let{x:r,y:n,z:i}=this,{x:o,y:s,z:a}=e;if(o===re||s===re)return this;if(r===re||n===re)return e;let c=L(i*i),u=L(a*a),l=L(r*u),f=L(o*c),h=L(L(n*a)*u),d=L(L(s*i)*c),p=L(f-l),m=L(d-h);if(p===re)return m===re?this.double():se.ZERO;let y=L(p*p),g=L(p*y),x=L(l*y),_=L(m*m-g-un*x),k=L(m*(x-_)-h*g),C=L(i*a*p);return new se(_,k,C)}subtract(e){return this.add(e.negate())}multiplyUnsafe(e){let r=se.ZERO;if(typeof e=="bigint"&&e===re)return r;let n=Vy(e);if(n===Ae)return this;if(!ba){let f=r,h=this;for(;n>re;)n&Ae&&(f=f.add(h)),h=h.double(),n>>=Ae;return f}let{k1neg:i,k1:o,k2neg:s,k2:a}=va.splitScalar(n),c=r,u=r,l=this;for(;o>re||a>re;)o&Ae&&(c=c.add(l)),a&Ae&&(u=u.add(l)),l=l.double(),o>>=Ae,a>>=Ae;return i&&(c=c.negate()),s&&(u=u.negate()),u=new se(L(u.x*va.beta),u.y,u.z),c.add(u)}precomputeWindow(e){let r=ba?128/e+1:256/e+1,n=[],i=this,o=i;for(let s=0;s<r;s++){o=i,n.push(o);for(let a=1;a<2**(e-1);a++)o=o.add(i),n.push(o);i=o.double()}return n}wNAF(e,r){!r&&this.equals(se.BASE)&&(r=ce.BASE);let n=r&&r._WINDOW_SIZE||1;if(256%n)throw new Error("Point#wNAF: Invalid precomputation window, must be power of 2");let i=r&&zl.get(r);i||(i=this.precomputeWindow(n),r&&n!==1&&(i=se.normalizeZ(i),zl.set(r,i)));let o=se.ZERO,s=se.BASE,a=1+(ba?128/n:256/n),c=2**(n-1),u=BigInt(2**n-1),l=2**n,f=BigInt(n);for(let h=0;h<a;h++){let d=h*c,p=Number(e&u);e>>=f,p>c&&(p-=l,e+=Ae);let m=d,y=d+Math.abs(p)-1,g=h%2!==0,x=p<0;p===0?s=s.add(_a(g,i[m])):o=o.add(_a(x,i[y]))}return{p:o,f:s}}multiply(e,r){let n=Vy(e),i,o;if(ba){let{k1neg:s,k1:a,k2neg:c,k2:u}=va.splitScalar(n),{p:l,f}=this.wNAF(a,r),{p:h,f:d}=this.wNAF(u,r);l=_a(s,l),h=_a(c,h),h=new se(L(h.x*va.beta),h.y,h.z),i=l.add(h),o=f.add(d)}else{let{p:s,f:a}=this.wNAF(n,r);i=s,o=a}return se.normalizeZ([i,o])[0]}toAffine(e){let{x:r,y:n,z:i}=this,o=this.equals(se.ZERO);e==null&&(e=o?Ly:Mi(i));let s=e,a=L(s*s),c=L(a*s),u=L(r*a),l=L(n*c),f=L(i*s);if(o)return ce.ZERO;if(f!==Ae)throw new Error("invZ was invalid");return new ce(u,l)}};se.BASE=new se(Ne.Gx,Ne.Gy,Ae);se.ZERO=new se(re,Ae,re);function _a(t,e){let r=e.negate();return t?r:e}var zl=new WeakMap,ce=class{constructor(e,r){this.x=e,this.y=r}_setWindowSize(e){this._WINDOW_SIZE=e,zl.delete(this)}hasEvenY(){return this.y%un===re}static fromCompressedHex(e){let r=e.length===32,n=ln(r?e:e.subarray(1));if(!$l(n))throw new Error("Point is not on curve");let i=My(n),o=M_(i),s=(o&Ae)===Ae;r?s&&(o=L(-o)):(e[0]&1)===1!==s&&(o=L(-o));let a=new ce(n,o);return a.assertValidity(),a}static fromUncompressedHex(e){let r=ln(e.subarray(1,Yt+1)),n=ln(e.subarray(Yt+1,Yt*2+1)),i=new ce(r,n);return i.assertValidity(),i}static fromHex(e){let r=Oi(e),n=r.length,i=r[0];if(n===Yt)return this.fromCompressedHex(r);if(n===ky&&(i===2||i===3))return this.fromCompressedHex(r);if(n===Oy&&i===4)return this.fromUncompressedHex(r);throw new Error(`Point.fromHex: received invalid point. Expected 32-${ky} compressed bytes or ${Oy} uncompressed bytes, not ${n}`)}static fromPrivateKey(e){return ce.BASE.multiply(Ia(e))}static fromSignature(e,r,n){let{r:i,s:o}=qy(r);if(![0,1,2,3].includes(n))throw new Error("Cannot recover: invalid recovery bit");let s=Yl(Oi(e)),{n:a}=Ne,c=n===2||n===3?i+a:i,u=Mi(c,a),l=L(-s*u,a),f=L(o*u,a),h=n&1?"03":"02",d=ce.fromHex(h+Di(c)),p=ce.BASE.multiplyAndAddUnsafe(d,l,f);if(!p)throw new Error("Cannot recover signature: point at infinify");return p.assertValidity(),p}toRawBytes(e=!1){return $n(this.toHex(e))}toHex(e=!1){let r=Di(this.x);return e?`${this.hasEvenY()?"02":"03"}${r}`:`04${r}${Di(this.y)}`}toHexX(){return this.toHex(!0).slice(2)}toRawX(){return this.toRawBytes(!0).slice(1)}assertValidity(){let e="Point is not on elliptic curve",{x:r,y:n}=this;if(!$l(r)||!$l(n))throw new Error(e);let i=L(n*n),o=My(r);if(L(i-o)!==re)throw new Error(e)}equals(e){return this.x===e.x&&this.y===e.y}negate(){return new ce(this.x,L(-this.y))}double(){return se.fromAffine(this).double().toAffine()}add(e){return se.fromAffine(this).add(se.fromAffine(e)).toAffine()}subtract(e){return this.add(e.negate())}multiply(e){return se.fromAffine(this).multiply(e,this).toAffine()}multiplyAndAddUnsafe(e,r,n){let i=se.fromAffine(this),o=r===re||r===Ae||this!==ce.BASE?i.multiplyUnsafe(r):i.multiply(r),s=se.fromAffine(e).multiplyUnsafe(n),a=o.add(s);return a.equals(se.ZERO)?void 0:a.toAffine()}};ce.BASE=new ce(Ne.Gx,Ne.Gy);ce.ZERO=new ce(re,re);function Fy(t){return Number.parseInt(t[0],16)>=8?"00"+t:t}function Ky(t){if(t.length<2||t[0]!==2)throw new Error(`Invalid signature integer tag: ${ki(t)}`);let e=t[1],r=t.subarray(2,e+2);if(!e||r.length!==e)throw new Error("Invalid signature integer: wrong length");if(r[0]===0&&r[1]<=127)throw new Error("Invalid signature integer: trailing length");return{data:ln(r),left:t.subarray(e+2)}}function N_(t){if(t.length<2||t[0]!=48)throw new Error(`Invalid signature tag: ${ki(t)}`);if(t[1]!==t.length-2)throw new Error("Invalid signature: incorrect length");let{data:e,left:r}=Ky(t.subarray(2)),{data:n,left:i}=Ky(r);if(i.length)throw new Error(`Invalid signature: left bytes after parsing: ${ki(i)}`);return{r:e,s:n}}var hr=class{constructor(e,r){this.r=e,this.s=r,this.assertValidity()}static fromCompact(e){let r=e instanceof Uint8Array,n="Signature.fromCompact";if(typeof e!="string"&&!r)throw new TypeError(`${n}: Expected string or Uint8Array`);let i=r?ki(e):e;if(i.length!==128)throw new Error(`${n}: Expected 64-byte hex`);return new hr(Ra(i.slice(0,64)),Ra(i.slice(64,128)))}static fromDER(e){let r=e instanceof Uint8Array;if(typeof e!="string"&&!r)throw new TypeError("Signature.fromDER: Expected string or Uint8Array");let{r:n,s:i}=N_(r?e:$n(e));return new hr(n,i)}static fromHex(e){return this.fromDER(e)}assertValidity(){let{r:e,s:r}=this;if(!To(e))throw new Error("Invalid Signature: r must be 0 < r < n");if(!To(r))throw new Error("Invalid Signature: s must be 0 < s < n")}hasHighS(){let e=Ne.n>>Ae;return this.s>e}normalizeS(){return this.hasHighS()?new hr(this.r,L(-this.s,Ne.n)):this}toDERRawBytes(){return $n(this.toDERHex())}toDERHex(){let e=Fy(Ao(this.s)),r=Fy(Ao(this.r)),n=e.length/2,i=r.length/2,o=Ao(n),s=Ao(i);return`30${Ao(i+n+4)}02${s}${r}02${o}${e}`}toRawBytes(){return this.toDERRawBytes()}toHex(){return this.toDERHex()}toCompactRawBytes(){return $n(this.toCompactHex())}toCompactHex(){return Di(this.r)+Di(this.s)}};function cn(...t){if(!t.every(n=>n instanceof Uint8Array))throw new Error("Uint8Array list expected");if(t.length===1)return t[0];let e=t.reduce((n,i)=>n+i.length,0),r=new Uint8Array(e);for(let n=0,i=0;n<t.length;n++){let o=t[n];r.set(o,i),i+=o.length}return r}var k_=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function ki(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");let e="";for(let r=0;r<t.length;r++)e+=k_[t[r]];return e}var O_=BigInt("0x10000000000000000000000000000000000000000000000000000000000000000");function Di(t){if(typeof t!="bigint")throw new Error("Expected bigint");if(!(re<=t&&t<O_))throw new Error("Expected number 0 <= n < 2^256");return t.toString(16).padStart(64,"0")}function Hl(t){let e=$n(Di(t));if(e.length!==32)throw new Error("Error: expected 32 bytes");return e}function Ao(t){let e=t.toString(16);return e.length&1?`0${e}`:e}function Ra(t){if(typeof t!="string")throw new TypeError("hexToNumber: expected string, got "+typeof t);return BigInt(`0x${t}`)}function $n(t){if(typeof t!="string")throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex"+t.length);let e=new Uint8Array(t.length/2);for(let r=0;r<e.length;r++){let n=r*2,i=t.slice(n,n+2),o=Number.parseInt(i,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");e[r]=o}return e}function ln(t){return Ra(ki(t))}function Oi(t){return t instanceof Uint8Array?Uint8Array.from(t):$n(t)}function Vy(t){if(typeof t=="number"&&Number.isSafeInteger(t)&&t>0)return BigInt(t);if(typeof t=="bigint"&&To(t))return t;throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n")}function L(t,e=Ne.P){let r=t%e;return r>=re?r:e+r}function Lt(t,e){let{P:r}=Ne,n=t;for(;e-- >re;)n*=n,n%=r;return n}function M_(t){let{P:e}=Ne,r=BigInt(6),n=BigInt(11),i=BigInt(22),o=BigInt(23),s=BigInt(44),a=BigInt(88),c=t*t*t%e,u=c*c*t%e,l=Lt(u,Ro)*u%e,f=Lt(l,Ro)*u%e,h=Lt(f,un)*c%e,d=Lt(h,n)*h%e,p=Lt(d,i)*d%e,m=Lt(p,s)*p%e,y=Lt(m,a)*m%e,g=Lt(y,s)*p%e,x=Lt(g,Ro)*u%e,_=Lt(x,o)*d%e,k=Lt(_,r)*c%e,C=Lt(k,un);if(C*C%e!==t)throw new Error("Cannot find square root");return C}function Mi(t,e=Ne.P){if(t===re||e<=re)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=L(t,e),n=e,i=re,o=Ae,s=Ae,a=re;for(;r!==re;){let u=n/r,l=n%r,f=i-s*u,h=o-a*u;n=r,r=l,i=s,o=a,s=f,a=h}if(n!==Ae)throw new Error("invert: does not exist");return L(i,e)}function U_(t,e=Ne.P){let r=new Array(t.length),n=t.reduce((o,s,a)=>s===re?o:(r[a]=o,L(o*s,e)),Ae),i=Mi(n,e);return t.reduceRight((o,s,a)=>s===re?o:(r[a]=L(o*r[a],e),L(o*s,e)),i),r}function F_(t){let e=t.length*8-Ni*8,r=ln(t);return e>0?r>>BigInt(e):r}function Yl(t,e=!1){let r=F_(t);if(e)return r;let{n}=Ne;return r>=n?r-n:r}var Li,Io,Gl=class{constructor(e,r){if(this.hashLen=e,this.qByteLen=r,typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof r!="number"||r<2)throw new Error("qByteLen must be a number");this.v=new Uint8Array(e).fill(1),this.k=new Uint8Array(e).fill(0),this.counter=0}hmac(...e){return Wt.hmacSha256(this.k,...e)}hmacSync(...e){return Io(this.k,...e)}checkSync(){if(typeof Io!="function")throw new Aa("hmacSha256Sync needs to be set")}incr(){if(this.counter>=1e3)throw new Error("Tried 1,000 k values for sign(), all were invalid");this.counter+=1}async reseed(e=new Uint8Array){this.k=await this.hmac(this.v,Uint8Array.from([0]),e),this.v=await this.hmac(this.v),e.length!==0&&(this.k=await this.hmac(this.v,Uint8Array.from([1]),e),this.v=await this.hmac(this.v))}reseedSync(e=new Uint8Array){this.checkSync(),this.k=this.hmacSync(this.v,Uint8Array.from([0]),e),this.v=this.hmacSync(this.v),e.length!==0&&(this.k=this.hmacSync(this.v,Uint8Array.from([1]),e),this.v=this.hmacSync(this.v))}async generate(){this.incr();let e=0,r=[];for(;e<this.qByteLen;){this.v=await this.hmac(this.v);let n=this.v.slice();r.push(n),e+=this.v.length}return cn(...r)}generateSync(){this.checkSync(),this.incr();let e=0,r=[];for(;e<this.qByteLen;){this.v=this.hmacSync(this.v);let n=this.v.slice();r.push(n),e+=this.v.length}return cn(...r)}};function To(t){return re<t&&t<Ne.n}function $l(t){return re<t&&t<Ne.P}function K_(t,e,r,n=!0){let{n:i}=Ne,o=Yl(t,!0);if(!To(o))return;let s=Mi(o,i),a=ce.BASE.multiply(o),c=L(a.x,i);if(c===re)return;let u=L(s*L(e+r*c,i),i);if(u===re)return;let l=new hr(c,u),f=(a.x===l.r?0:2)|Number(a.y&Ae);return n&&l.hasHighS()&&(l=l.normalizeS(),f^=1),{sig:l,recovery:f}}function Ia(t){let e;if(typeof t=="bigint")e=t;else if(typeof t=="number"&&Number.isSafeInteger(t)&&t>0)e=BigInt(t);else if(typeof t=="string"){if(t.length!==2*Ni)throw new Error("Expected 32 bytes of private key");e=Ra(t)}else if(t instanceof Uint8Array){if(t.length!==Ni)throw new Error("Expected 32 bytes of private key");e=ln(t)}else throw new TypeError("Expected valid private key");if(!To(e))throw new Error("Expected private key: 0 < key < n");return e}function V_(t){return t instanceof ce?(t.assertValidity(),t):ce.fromHex(t)}function qy(t){if(t instanceof hr)return t.assertValidity(),t;try{return hr.fromDER(t)}catch{return hr.fromCompact(t)}}function Wl(t,e=!1){return ce.fromPrivateKey(t).toRawBytes(e)}function $y(t){let e=t.length>Yt?t.slice(0,Yt):t;return ln(e)}function q_(t){let e=$y(t),r=L(e,Ne.n);return zy(r<re?e:r)}function zy(t){return Hl(t)}function $_(t,e,r){if(t==null)throw new Error(`sign: expected valid message hash, not "${t}"`);let n=Oi(t),i=Ia(e),o=[zy(i),q_(n)];if(r!=null){r===!0&&(r=Wt.randomBytes(Yt));let c=Oi(r);if(c.length!==Yt)throw new Error(`sign: Expected ${Yt} bytes of extra data`);o.push(c)}let s=cn(...o),a=$y(n);return{seed:s,m:a,d:i}}function z_(t,e){let{sig:r,recovery:n}=t,{der:i,recovered:o}=Object.assign({canonical:!0,der:!0},e),s=i?r.toDERRawBytes():r.toCompactRawBytes();return o?[s,n]:s}async function Hy(t,e,r={}){let{seed:n,m:i,d:o}=$_(t,e,r.extraEntropy),s=new Gl(L_,Ni);await s.reseed(n);let a;for(;!(a=K_(await s.generate(),i,o,r.canonical));)await s.reseed();return z_(a,r)}var H_={strict:!0};function Gy(t,e,r,n=H_){let i;try{i=qy(t),e=Oi(e)}catch{return!1}let{r:o,s}=i;if(n.strict&&i.hasHighS())return!1;let a=Yl(e),c;try{c=V_(r)}catch{return!1}let{n:u}=Ne,l=Mi(s,u),f=L(a*l,u),h=L(o*l,u),d=ce.BASE.multiplyAndAddUnsafe(c,f,h);return d?L(d.x,u)===o:!1}ce.BASE._setWindowSize(8);var At={node:D_,web:typeof self=="object"&&"crypto"in self?self.crypto:void 0};var Sa={},Wt={bytesToHex:ki,hexToBytes:$n,concatBytes:cn,mod:L,invert:Mi,isValidPrivateKey(t){try{return Ia(t),!0}catch{return!1}},_bigintTo32Bytes:Hl,_normalizePrivateKey:Ia,hashToPrivateKey:t=>{t=Oi(t);let e=Ni+8;if(t.length<e||t.length>1024)throw new Error("Expected valid bytes of private key as per FIPS 186");let r=L(ln(t),Ne.n-Ae)+Ae;return Hl(r)},randomBytes:(t=32)=>{if(At.web)return At.web.getRandomValues(new Uint8Array(t));if(At.node){let{randomBytes:e}=At.node;return Uint8Array.from(e(t))}else throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>Wt.hashToPrivateKey(Wt.randomBytes(Ni+8)),precompute(t=8,e=ce.BASE){let r=e===ce.BASE?e:new ce(e.x,e.y);return r._setWindowSize(t),r.multiply(Ro),r},sha256:async(...t)=>{if(At.web){let e=await At.web.subtle.digest("SHA-256",cn(...t));return new Uint8Array(e)}else if(At.node){let{createHash:e}=At.node,r=e("sha256");return t.forEach(n=>r.update(n)),Uint8Array.from(r.digest())}else throw new Error("The environment doesn't have sha256 function")},hmacSha256:async(t,...e)=>{if(At.web){let r=await At.web.subtle.importKey("raw",t,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),n=cn(...e),i=await At.web.subtle.sign("HMAC",r,n);return new Uint8Array(i)}else if(At.node){let{createHmac:r}=At.node,n=r("sha256",t);return e.forEach(i=>n.update(i)),Uint8Array.from(n.digest())}else throw new Error("The environment doesn't have hmac-sha256 function")},sha256Sync:void 0,hmacSha256Sync:void 0,taggedHash:async(t,...e)=>{let r=Sa[t];if(r===void 0){let n=await Wt.sha256(Uint8Array.from(t,i=>i.charCodeAt(0)));r=cn(n,n),Sa[t]=r}return Wt.sha256(r,...e)},taggedHashSync:(t,...e)=>{if(typeof Li!="function")throw new Aa("sha256Sync is undefined, you need to set it");let r=Sa[t];if(r===void 0){let n=Li(Uint8Array.from(t,i=>i.charCodeAt(0)));r=cn(n,n),Sa[t]=r}return Li(r,...e)},_JacobianPoint:se};Object.defineProperties(Wt,{sha256Sync:{configurable:!1,get(){return Li},set(t){Li||(Li=t)}},hmacSha256Sync:{configurable:!1,get(){return Io},set(t){Io||(Io=t)}}});function Nr(t){if(isNaN(t)||t<=0)throw new w("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return Wt.randomBytes(t)}var zn={};rt(zn,{jwkToPkcs1:()=>W_,jwkToPkix:()=>X_,pkcs1ToJwk:()=>Y_,pkixToJwk:()=>Q_});var yP=U(vo(),1),gP=U(Ea(),1),kr=U(fe(),1);function Y_(t){let e=kr.default.asn1.fromDer($(t,"ascii")),r=kr.default.pki.privateKeyFromAsn1(e);return{kty:"RSA",n:Gt(r.n),e:Gt(r.e),d:Gt(r.d),p:Gt(r.p),q:Gt(r.q),dp:Gt(r.dP),dq:Gt(r.dQ),qi:Gt(r.qInv),alg:"RS256"}}function W_(t){if(t.n==null||t.e==null||t.d==null||t.p==null||t.q==null||t.dp==null||t.dq==null||t.qi==null)throw new w("JWK was missing components","ERR_INVALID_PARAMETERS");let e=kr.default.pki.privateKeyToAsn1({n:St(t.n),e:St(t.e),d:St(t.d),p:St(t.p),q:St(t.q),dP:St(t.dp),dQ:St(t.dq),qInv:St(t.qi)});return F(kr.default.asn1.toDer(e).getBytes(),"ascii")}function Q_(t){let e=kr.default.asn1.fromDer($(t,"ascii")),r=kr.default.pki.publicKeyFromAsn1(e);return{kty:"RSA",n:Gt(r.n),e:Gt(r.e)}}function X_(t){if(t.n==null||t.e==null)throw new w("JWK was missing components","ERR_INVALID_PARAMETERS");let e=kr.default.pki.publicKeyToAsn1({n:St(t.n),e:St(t.e)});return F(kr.default.asn1.toDer(e).getBytes(),"ascii")}var bP=U(Ea(),1),Ql=U(fe(),1);function Yy(t,e){return e.map(r=>St(t[r]))}function Wy(t){return Ql.default.pki.setRsaPrivateKey(...Yy(t,["n","e","d","p","q","dp","dq","qi"]))}function Qy(t){return Ql.default.pki.setRsaPublicKey(...Yy(t,["n","e"]))}async function Xy(t){let e=await pt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:t,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),r=await jy(e);return{privateKey:r[0],publicKey:r[1]}}async function Xl(t){let r=[await pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await Z_(t)],n=await jy({privateKey:r[0],publicKey:r[1]});return{privateKey:n[0],publicKey:n[1]}}async function Zy(t,e){let r=await pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await pt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},r,Uint8Array.from(e));return new Uint8Array(n,0,n.byteLength)}async function Jy(t,e,r){let n=await pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return await pt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,r)}async function jy(t){if(t.privateKey==null||t.publicKey==null)throw new w("Private and public key are required","ERR_INVALID_PARAMETERS");return await Promise.all([pt.get().subtle.exportKey("jwk",t.privateKey),pt.get().subtle.exportKey("jwk",t.publicKey)])}async function Z_(t){return await pt.get().subtle.importKey("jwk",{kty:t.kty,n:t.n,e:t.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function eg(t,e,r,n){let i=e?Qy(t):Wy(t),o=$(Uint8Array.from(r),"ascii"),s=n(o,i);return F(s,"ascii")}function tg(t,e){return eg(t,!0,e,(r,n)=>n.encrypt(r))}function rg(t,e){return eg(t,!1,e,(r,n)=>n.decrypt(r))}async function Ui(t,e){let n=await xa().encrypt(t,e);return vn.encode(n)}var Bo=class{constructor(e){this._key=e}async verify(e,r){return await Jy(this._key,r,e)}marshal(){return zn.jwkToPkix(this._key)}get bytes(){return ir.encode({Type:Te.RSA,Data:this.marshal()}).subarray()}encrypt(e){return tg(this._key,e)}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}},Fi=class{constructor(e,r){this._key=e,this._publicKey=r}genSecret(){return Nr(16)}async sign(e){return await Zy(this._key,e)}get public(){if(this._publicKey==null)throw new w("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new Bo(this._publicKey)}decrypt(e){return rg(this._key,e)}marshal(){return zn.jwkToPkcs1(this._key)}get bytes(){return or.encode({Type:Te.RSA,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}async id(){let e=await this.public.hash();return $(e,"base58btc")}async export(e,r="pkcs-8"){if(r==="pkcs-8"){let n=new Co.default.util.ByteBuffer(this.marshal()),i=Co.default.asn1.fromDer(n),o=Co.default.pki.privateKeyFromAsn1(i),s={algorithm:"aes256",count:1e4,saltSize:128/8,prfAlgorithm:"sha512"};return Co.default.pki.encryptRsaPrivateKey(o,e,s)}else{if(r==="libp2p-key")return await Ui(this.bytes,e);throw new w(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}};async function j_(t){let e=zn.pkcs1ToJwk(t),r=await Xl(e);return new Fi(r.privateKey,r.publicKey)}function eS(t){let e=zn.pkixToJwk(t);return new Bo(e)}async function tS(t){let e=await Xl(t);return new Fi(e.privateKey,e.publicKey)}async function rS(t){let e=await Xy(t);return new Fi(e.privateKey,e.publicKey)}var af={};rt(af,{Ed25519PrivateKey:()=>Gn,Ed25519PublicKey:()=>ko,generateKeyPair:()=>_S,generateKeyPairFromSeed:()=>gg,unmarshalEd25519PrivateKey:()=>vS,unmarshalEd25519PublicKey:()=>bS});var nS=U(Bn(),1);var tt=BigInt(0),ne=BigInt(1),dn=BigInt(2),iS=BigInt(8),ng=BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),Re=Object.freeze({a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),P:BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),l:ng,n:ng,h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960")});var cg=BigInt("0x10000000000000000000000000000000000000000000000000000000000000000"),Po=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),FP=BigInt("6853475219497561581579357271197624642482790079785650197046958215289687604742"),oS=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),sS=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),aS=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),cS=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),Z=class{constructor(e,r,n,i){this.x=e,this.y=r,this.z=n,this.t=i}static fromAffine(e){if(!(e instanceof Be))throw new TypeError("ExtendedPoint#fromAffine: expected Point");return e.equals(Be.ZERO)?Z.ZERO:new Z(e.x,e.y,ne,R(e.x*e.y))}static toAffineBatch(e){let r=fS(e.map(n=>n.z));return e.map((n,i)=>n.toAffine(r[i]))}static normalizeZ(e){return this.toAffineBatch(e).map(this.fromAffine)}equals(e){og(e);let{x:r,y:n,z:i}=this,{x:o,y:s,z:a}=e,c=R(r*a),u=R(o*i),l=R(n*a),f=R(s*i);return c===u&&l===f}negate(){return new Z(R(-this.x),this.y,this.z,R(-this.t))}double(){let{x:e,y:r,z:n}=this,{a:i}=Re,o=R(e*e),s=R(r*r),a=R(dn*R(n*n)),c=R(i*o),u=e+r,l=R(R(u*u)-o-s),f=c+s,h=f-a,d=c-s,p=R(l*h),m=R(f*d),y=R(l*d),g=R(h*f);return new Z(p,m,g,y)}add(e){og(e);let{x:r,y:n,z:i,t:o}=this,{x:s,y:a,z:c,t:u}=e,l=R((n-r)*(a+s)),f=R((n+r)*(a-s)),h=R(f-l);if(h===tt)return this.double();let d=R(i*dn*u),p=R(o*dn*c),m=p+d,y=f+l,g=p-d,x=R(m*h),_=R(y*g),k=R(m*g),C=R(h*y);return new Z(x,_,C,k)}subtract(e){return this.add(e.negate())}precomputeWindow(e){let r=1+256/e,n=[],i=this,o=i;for(let s=0;s<r;s++){o=i,n.push(o);for(let a=1;a<2**(e-1);a++)o=o.add(i),n.push(o);i=o.double()}return n}wNAF(e,r){!r&&this.equals(Z.BASE)&&(r=Be.BASE);let n=r&&r._WINDOW_SIZE||1;if(256%n)throw new Error("Point#wNAF: Invalid precomputation window, must be power of 2");let i=r&&rf.get(r);i||(i=this.precomputeWindow(n),r&&n!==1&&(i=Z.normalizeZ(i),rf.set(r,i)));let o=Z.ZERO,s=Z.BASE,a=1+256/n,c=2**(n-1),u=BigInt(2**n-1),l=2**n,f=BigInt(n);for(let h=0;h<a;h++){let d=h*c,p=Number(e&u);e>>=f,p>c&&(p-=l,e+=ne);let m=d,y=d+Math.abs(p)-1,g=h%2!==0,x=p<0;p===0?s=s.add(ig(g,i[m])):o=o.add(ig(x,i[y]))}return Z.normalizeZ([o,s])[0]}multiply(e,r){return this.wNAF(Ca(e,Re.l),r)}multiplyUnsafe(e){let r=Ca(e,Re.l,!1),n=Z.BASE,i=Z.ZERO;if(r===tt)return i;if(this.equals(i)||r===ne)return this;if(this.equals(n))return this.wNAF(r);let o=i,s=this;for(;r>tt;)r&ne&&(o=o.add(s)),s=s.double(),r>>=ne;return o}isSmallOrder(){return this.multiplyUnsafe(Re.h).equals(Z.ZERO)}isTorsionFree(){let e=this.multiplyUnsafe(Re.l/dn).double();return Re.l%dn&&(e=e.add(this)),e.equals(Z.ZERO)}toAffine(e){let{x:r,y:n,z:i}=this,o=this.equals(Z.ZERO);e==null&&(e=o?iS:Ba(i));let s=R(r*e),a=R(n*e),c=R(i*e);if(o)return Be.ZERO;if(c!==ne)throw new Error("invZ was invalid");return new Be(s,a)}fromRistrettoBytes(){jl()}toRistrettoBytes(){jl()}fromRistrettoHash(){jl()}};Z.BASE=new Z(Re.Gx,Re.Gy,ne,R(Re.Gx*Re.Gy));Z.ZERO=new Z(tt,ne,ne,tt);function ig(t,e){let r=e.negate();return t?r:e}function og(t){if(!(t instanceof Z))throw new TypeError("ExtendedPoint expected")}function Jl(t){if(!(t instanceof mt))throw new TypeError("RistrettoPoint expected")}function jl(){throw new Error("Legacy method: switch to RistrettoPoint")}var mt=class{constructor(e){this.ep=e}static calcElligatorRistrettoMap(e){let{d:r}=Re,n=R(Po*e*e),i=R((n+ne)*aS),o=BigInt(-1),s=R((o-r*n)*R(n+r)),{isValid:a,value:c}=of(i,s),u=R(c*e);hn(u)||(u=R(-u)),a||(c=u),a||(o=n);let l=R(o*(n-ne)*cS-s),f=c*c,h=R((c+c)*s),d=R(l*oS),p=R(ne-f),m=R(ne+f);return new Z(R(h*m),R(p*d),R(d*m),R(h*p))}static hashToCurve(e){e=pn(e,64);let r=ef(e.slice(0,32)),n=this.calcElligatorRistrettoMap(r),i=ef(e.slice(32,64)),o=this.calcElligatorRistrettoMap(i);return new mt(n.add(o))}static fromHex(e){e=pn(e,32);let{a:r,d:n}=Re,i="RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint",o=ef(e);if(!dS(Do(o),e)||hn(o))throw new Error(i);let s=R(o*o),a=R(ne+r*s),c=R(ne-r*s),u=R(a*a),l=R(c*c),f=R(r*n*u-l),{isValid:h,value:d}=ag(R(f*l)),p=R(d*c),m=R(d*p*f),y=R((o+o)*p);hn(y)&&(y=R(-y));let g=R(a*m),x=R(y*g);if(!h||hn(x)||g===tt)throw new Error(i);return new mt(new Z(y,g,ne,x))}toRawBytes(){let{x:e,y:r,z:n,t:i}=this.ep,o=R(R(n+r)*R(n-r)),s=R(e*r),a=R(s*s),{value:c}=ag(R(o*a)),u=R(c*o),l=R(c*s),f=R(u*l*i),h;if(hn(i*f)){let p=R(r*Po),m=R(e*Po);e=p,r=m,h=R(u*sS)}else h=l;hn(e*f)&&(r=R(-r));let d=R((n-r)*h);return hn(d)&&(d=R(-d)),Do(d)}toHex(){return Lo(this.toRawBytes())}toString(){return this.toHex()}equals(e){Jl(e);let r=this.ep,n=e.ep,i=R(r.x*n.y)===R(r.y*n.x),o=R(r.y*n.y)===R(r.x*n.x);return i||o}add(e){return Jl(e),new mt(this.ep.add(e.ep))}subtract(e){return Jl(e),new mt(this.ep.subtract(e.ep))}multiply(e){return new mt(this.ep.multiply(e))}multiplyUnsafe(e){return new mt(this.ep.multiplyUnsafe(e))}};mt.BASE=new mt(Z.BASE);mt.ZERO=new mt(Z.ZERO);var rf=new WeakMap,Be=class{constructor(e,r){this.x=e,this.y=r}_setWindowSize(e){this._WINDOW_SIZE=e,rf.delete(this)}static fromHex(e,r=!0){let{d:n,P:i}=Re;e=pn(e,32);let o=e.slice();o[31]=e[31]&-129;let s=No(o);if(r&&s>=i)throw new Error("Expected 0 < hex < P");if(!r&&s>=cg)throw new Error("Expected 0 < hex < 2**256");let a=R(s*s),c=R(a-ne),u=R(n*a+ne),{isValid:l,value:f}=of(c,u);if(!l)throw new Error("Point.fromHex: invalid y coordinate");let h=(f&ne)===ne;return(e[31]&128)!==0!==h&&(f=R(-f)),new Be(f,s)}static async fromPrivateKey(e){return(await Pa(e)).point}toRawBytes(){let e=Do(this.y);return e[31]|=this.x&ne?128:0,e}toHex(){return Lo(this.toRawBytes())}toX25519(){let{y:e}=this,r=R((ne+e)*Ba(ne-e));return Do(r)}isTorsionFree(){return Z.fromAffine(this).isTorsionFree()}equals(e){return this.x===e.x&&this.y===e.y}negate(){return new Be(R(-this.x),this.y)}add(e){return Z.fromAffine(this).add(Z.fromAffine(e)).toAffine()}subtract(e){return this.add(e.negate())}multiply(e){return Z.fromAffine(this).multiply(e,this).toAffine()}};Be.BASE=new Be(Re.Gx,Re.Gy);Be.ZERO=new Be(tt,ne);var Hn=class{constructor(e,r){this.r=e,this.s=r,this.assertValidity()}static fromHex(e){let r=pn(e,64),n=Be.fromHex(r.slice(0,32),!1),i=No(r.slice(32,64));return new Hn(n,i)}assertValidity(){let{r:e,s:r}=this;if(!(e instanceof Be))throw new Error("Expected Point instance");return Ca(r,Re.l,!1),this}toRawBytes(){let e=new Uint8Array(64);return e.set(this.r.toRawBytes()),e.set(Do(this.s),32),e}toHex(){return Lo(this.toRawBytes())}};function sg(...t){if(!t.every(n=>n instanceof Uint8Array))throw new Error("Expected Uint8Array list");if(t.length===1)return t[0];let e=t.reduce((n,i)=>n+i.length,0),r=new Uint8Array(e);for(let n=0,i=0;n<t.length;n++){let o=t[n];r.set(o,i),i+=o.length}return r}var uS=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Lo(t){if(!(t instanceof Uint8Array))throw new Error("Uint8Array expected");let e="";for(let r=0;r<t.length;r++)e+=uS[t[r]];return e}function nf(t){if(typeof t!="string")throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex");let e=new Uint8Array(t.length/2);for(let r=0;r<e.length;r++){let n=r*2,i=t.slice(n,n+2),o=Number.parseInt(i,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");e[r]=o}return e}function ug(t){let r=t.toString(16).padStart(64,"0");return nf(r)}function Do(t){return ug(t).reverse()}function hn(t){return(R(t)&ne)===ne}function No(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");return BigInt("0x"+Lo(Uint8Array.from(t).reverse()))}var lS=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function ef(t){return R(No(t)&lS)}function R(t,e=Re.P){let r=t%e;return r>=tt?r:e+r}function Ba(t,e=Re.P){if(t===tt||e<=tt)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=R(t,e),n=e,i=tt,o=ne,s=ne,a=tt;for(;r!==tt;){let u=n/r,l=n%r,f=i-s*u,h=o-a*u;n=r,r=l,i=s,o=a,s=f,a=h}if(n!==ne)throw new Error("invert: does not exist");return R(i,e)}function fS(t,e=Re.P){let r=new Array(t.length),n=t.reduce((o,s,a)=>s===tt?o:(r[a]=o,R(o*s,e)),ne),i=Ba(n,e);return t.reduceRight((o,s,a)=>s===tt?o:(r[a]=R(o*r[a],e),R(o*s,e)),i),r}function dr(t,e){let{P:r}=Re,n=t;for(;e-- >tt;)n*=n,n%=r;return n}function hS(t){let{P:e}=Re,r=BigInt(5),n=BigInt(10),i=BigInt(20),o=BigInt(40),s=BigInt(80),c=t*t%e*t%e,u=dr(c,dn)*c%e,l=dr(u,ne)*t%e,f=dr(l,r)*l%e,h=dr(f,n)*f%e,d=dr(h,i)*h%e,p=dr(d,o)*d%e,m=dr(p,s)*p%e,y=dr(m,s)*p%e,g=dr(y,n)*f%e;return{pow_p_5_8:dr(g,dn)*t%e,b2:c}}function of(t,e){let r=R(e*e*e),n=R(r*r*e),i=hS(t*n).pow_p_5_8,o=R(t*r*i),s=R(e*o*o),a=o,c=R(o*Po),u=s===t,l=s===R(-t),f=s===R(-t*Po);return u&&(o=a),(l||f)&&(o=c),hn(o)&&(o=R(-o)),{isValid:u||l,value:o}}function ag(t){return of(ne,t)}function Ta(t){return R(No(t),Re.l)}function dS(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(t[r]!==e[r])return!1;return!0}function pn(t,e){let r=t instanceof Uint8Array?Uint8Array.from(t):nf(t);if(typeof e=="number"&&r.length!==e)throw new Error(`Expected ${e} bytes`);return r}function Ca(t,e,r=!0){if(!e)throw new TypeError("Specify max value");if(typeof t=="number"&&Number.isSafeInteger(t)&&(t=BigInt(t)),typeof t=="bigint"&&t<e){if(r){if(tt<t)return t}else if(tt<=t)return t}throw new TypeError("Expected valid scalar: 0 < scalar < max")}function pS(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}function mS(t){if(t=typeof t=="bigint"||typeof t=="number"?ug(Ca(t,cg)):pn(t),t.length!==32)throw new Error("Expected 32 bytes");return t}function yS(t){let e=pS(t.slice(0,32)),r=t.slice(32,64),n=Ta(e),i=Be.BASE.multiply(n),o=i.toRawBytes();return{head:e,prefix:r,scalar:n,point:i,pointBytes:o}}var tf;async function Pa(t){return yS(await mn.sha512(mS(t)))}async function sf(t){return(await Pa(t)).pointBytes}async function lg(t,e){t=pn(t);let{prefix:r,scalar:n,pointBytes:i}=await Pa(e),o=Ta(await mn.sha512(r,t)),s=Be.BASE.multiply(o),a=Ta(await mn.sha512(s.toRawBytes(),i,t)),c=R(o+a*n,Re.l);return new Hn(s,c).toRawBytes()}function gS(t,e,r){e=pn(e),r instanceof Be||(r=Be.fromHex(r,!1));let{r:n,s:i}=t instanceof Hn?t.assertValidity():Hn.fromHex(t),o=Z.BASE.multiplyUnsafe(i);return{r:n,s:i,SB:o,pub:r,msg:e}}function wS(t,e,r,n){let i=Ta(n),o=Z.fromAffine(t).multiplyUnsafe(i);return Z.fromAffine(e).add(o).subtract(r).multiplyUnsafe(Re.h).equals(Z.ZERO)}async function fg(t,e,r){let{r:n,SB:i,msg:o,pub:s}=gS(t,e,r),a=await mn.sha512(n.toRawBytes(),s.toRawBytes(),o);return wS(s,n,i,a)}Be.BASE._setWindowSize(8);var fn={node:nS,web:typeof self=="object"&&"crypto"in self?self.crypto:void 0},mn={bytesToHex:Lo,hexToBytes:nf,concatBytes:sg,getExtendedPublicKey:Pa,mod:R,invert:Ba,TORSION_SUBGROUP:["0100000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a","0000000000000000000000000000000000000000000000000000000000000080","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05","ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85","0000000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa"],hashToPrivateScalar:t=>{if(t=pn(t),t.length<40||t.length>1024)throw new Error("Expected 40-1024 bytes of private key as per FIPS 186");return R(No(t),Re.l-ne)+ne},randomBytes:(t=32)=>{if(fn.web)return fn.web.getRandomValues(new Uint8Array(t));if(fn.node){let{randomBytes:e}=fn.node;return new Uint8Array(e(t).buffer)}else throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>mn.randomBytes(32),sha512:async(...t)=>{let e=sg(...t);if(fn.web){let r=await fn.web.subtle.digest("SHA-512",e.buffer);return new Uint8Array(r)}else{if(fn.node)return Uint8Array.from(fn.node.createHash("sha512").update(e).digest());throw new Error("The environment doesn't have sha512 function")}},precompute(t=8,e=Be.BASE){let r=e.equals(Be.BASE)?e:new Be(e.x,e.y);return r._setWindowSize(t),r.multiply(dn),r},sha512Sync:void 0};Object.defineProperties(mn,{sha512Sync:{configurable:!1,get(){return tf},set(t){tf||(tf=t)}}});var Ki=32,Or=64,Da=32;async function hg(){let t=mn.randomPrivateKey(),e=await sf(t);return{privateKey:yg(t,e),publicKey:e}}async function dg(t){if(t.length!==Da)throw new TypeError('"seed" must be 32 bytes in length.');if(!(t instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=t,r=await sf(e);return{privateKey:yg(e,r),publicKey:r}}async function pg(t,e){let r=t.subarray(0,Da);return await lg(e,r)}async function mg(t,e,r){return await fg(e,r,t)}function yg(t,e){let r=new Uint8Array(Or);for(let n=0;n<Da;n++)r[n]=t[n],r[Da+n]=e[n];return r}var ko=class{constructor(e){this._key=Vi(e,Ki)}async verify(e,r){return await mg(this._key,r,e)}marshal(){return this._key}get bytes(){return ir.encode({Type:Te.Ed25519,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}},Gn=class{constructor(e,r){this._key=Vi(e,Or),this._publicKey=Vi(r,Ki)}async sign(e){return await pg(this._key,e)}get public(){return new ko(this._publicKey)}marshal(){return this._key}get bytes(){return or.encode({Type:Te.Ed25519,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}async id(){let e=qr.digest(this.public.bytes);return Oe.encode(e.bytes).substring(1)}async export(e,r="libp2p-key"){if(r==="libp2p-key")return await Ui(this.bytes,e);throw new w(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function vS(t){if(t.length>Or){t=Vi(t,Or+Ki);let n=t.subarray(0,Or),i=t.subarray(Or,t.length);return new Gn(n,i)}t=Vi(t,Or);let e=t.subarray(0,Or),r=t.subarray(Ki);return new Gn(e,r)}function bS(t){return t=Vi(t,Ki),new ko(t)}async function _S(){let{privateKey:t,publicKey:e}=await hg();return new Gn(t,e)}async function gg(t){let{privateKey:e,publicKey:r}=await dg(t);return new Gn(e,r)}function Vi(t,e){if(t=Uint8Array.from(t??[]),t.length!==e)throw new w(`Key must be a Uint8Array of length ${e}, got ${t.length}`,"ERR_INVALID_KEY_TYPE");return t}var uf={};rt(uf,{Secp256k1PrivateKey:()=>Mo,Secp256k1PublicKey:()=>Oo,generateKeyPair:()=>IS,unmarshalSecp256k1PrivateKey:()=>AS,unmarshalSecp256k1PublicKey:()=>RS});function wg(){return Wt.randomPrivateKey()}async function Eg(t,e){let{digest:r}=await nt.digest(e);try{return await Hy(r,t)}catch(n){throw new w(String(n),"ERR_INVALID_INPUT")}}async function xg(t,e,r){try{let{digest:n}=await nt.digest(r);return Gy(e,n,t)}catch(n){throw new w(String(n),"ERR_INVALID_INPUT")}}function vg(t){return ce.fromHex(t).toRawBytes(!0)}function bg(t){try{Wl(t,!0)}catch(e){throw new w(String(e),"ERR_INVALID_PRIVATE_KEY")}}function cf(t){try{ce.fromHex(t)}catch(e){throw new w(String(e),"ERR_INVALID_PUBLIC_KEY")}}function _g(t){try{return Wl(t,!0)}catch(e){throw new w(String(e),"ERR_INVALID_PRIVATE_KEY")}}var Oo=class{constructor(e){cf(e),this._key=e}async verify(e,r){return await xg(this._key,r,e)}marshal(){return vg(this._key)}get bytes(){return ir.encode({Type:Te.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}},Mo=class{constructor(e,r){this._key=e,this._publicKey=r??_g(e),bg(this._key),cf(this._publicKey)}async sign(e){return await Eg(this._key,e)}get public(){return new Oo(this._publicKey)}marshal(){return this._key}get bytes(){return or.encode({Type:Te.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}async id(){let e=await this.public.hash();return $(e,"base58btc")}async export(e,r="libp2p-key"){if(r==="libp2p-key")return await Ui(this.bytes,e);throw new w(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function AS(t){return new Mo(t)}function RS(t){return new Oo(t)}async function IS(){let t=wg();return new Mo(t)}var Mr={rsa:Zl,ed25519:af,secp256k1:uf};function lf(t){let e=Object.keys(Mr).join(" / ");return new w(`invalid or unsupported key type ${t}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function ff(t){if(t=t.toLowerCase(),t==="rsa"||t==="ed25519"||t==="secp256k1")return Mr[t];throw lf(t)}async function Na(t,e){return await ff(t).generateKeyPair(e??2048)}function Uo(t){let e=ir.decode(t),r=e.Data??new Uint8Array;switch(e.Type){case Te.RSA:return Mr.rsa.unmarshalRsaPublicKey(r);case Te.Ed25519:return Mr.ed25519.unmarshalEd25519PublicKey(r);case Te.Secp256k1:return Mr.secp256k1.unmarshalSecp256k1PublicKey(r);default:throw lf(e.Type??"RSA")}}function Sg(t,e){return e=(e??"rsa").toLowerCase(),ff(e),t.bytes}async function qi(t){let e=or.decode(t),r=e.Data??new Uint8Array;switch(e.Type){case Te.RSA:return await Mr.rsa.unmarshalRsaPrivateKey(r);case Te.Ed25519:return Mr.ed25519.unmarshalEd25519PrivateKey(r);case Te.Secp256k1:return Mr.secp256k1.unmarshalSecp256k1PrivateKey(r);default:throw lf(e.Type??"RSA")}}function Ag(t,e){return e=(e??"rsa").toLowerCase(),ff(e),t.bytes}async function Fo(t,e){try{let i=await Iy(t,e);return await qi(i)}catch{}let r=La.default.pki.decryptRsaPrivateKey(t,e);if(r===null)throw new w("Cannot read the key, most likely the password is wrong or not a RSA key","ERR_CANNOT_DECRYPT_PEM");let n=La.default.asn1.toDer(La.default.pki.privateKeyToAsn1(r));return n=F(n.getBytes(),"ascii"),await Mr.rsa.unmarshalRsaPrivateKey(n)}var cD=U(ca(),1),CS=U(fe(),1);var Ig=U(Pl(),1),Tg=U(qe(),1);var Rg={sha1:"sha1","sha2-256":"sha256","sha2-512":"sha512"};function Ko(t,e,r,n,i){if(i!=="sha1"&&i!=="sha2-256"&&i!=="sha2-512"){let a=Object.keys(Rg).join(" / ");throw new w(`Hash '${i}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let o=Rg[i],s=(0,Ig.default)(t,e,r,n,o);return Tg.default.encode64(s,null)}var ka=M("libp2p:keychain"),DS="/pkcs8/",Bg="/info/",Yn=new WeakMap,Wn={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},hf={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Ur(t){return t==null||typeof t!="string"?!1:t===(0,Cg.default)(t.trim())&&t.length>0}async function ye(){let r=Math.random()*800+200;await new Promise(n=>setTimeout(n,r))}function pr(t){return new Le(DS+t)}function yn(t){return new Le(Bg+t)}var Qn=class{constructor(e,r){if(this.components=e,this.init=jr(hf,r),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Wn.minKeyLength)throw new Error(`dek.keyLength must be least ${Wn.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Wn.minSaltLength)throw new Error(`dek.saltLength must be least ${Wn.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Wn.minIterationCount)throw new Error(`dek.iterationCount must be least ${Wn.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ko(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yn.set(this,{dek:n})}static generateOptions(){let e=Object.assign({},hf),r=Math.ceil(Wn.minSaltLength/3)*3;return e.dek.salt=$(Nr(r),"base64"),e}static get options(){return hf}async createKey(e,r,n=2048){if(!Ur(e)||e==="self")throw await ye(),new w("Invalid key name",ee.ERR_INVALID_KEY_NAME);if(typeof r!="string")throw await ye(),new w("Invalid key type",ee.ERR_INVALID_KEY_TYPE);let i=pr(e);if(await this.components.datastore.has(i))throw await ye(),new w("Key name already exists",ee.ERR_KEY_ALREADY_EXISTS);switch(r.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await ye(),new w("Invalid RSA key size",ee.ERR_INVALID_KEY_SIZE);break;default:break}let s;try{let a=await Na(r,n),c=await a.id(),u=Yn.get(this);if(u==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let l=u.dek,f=await a.export(l);s={name:e,id:c};let h=this.components.datastore.batch();h.put(i,F(f)),h.put(yn(e),F(JSON.stringify(s))),await h.commit()}catch(a){throw await ye(),a}return s}async listKeys(){let e={prefix:Bg},r=[];for await(let n of this.components.datastore.query(e))r.push(JSON.parse($(n.value)));return r}async findKeyById(e){try{let n=(await this.listKeys()).find(i=>i.id===e);if(n==null)throw new w(`Key with id '${e}' does not exist.`,ee.ERR_KEY_NOT_FOUND);return n}catch(r){throw await ye(),r}}async findKeyByName(e){if(!Ur(e))throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);let r=yn(e);try{let n=await this.components.datastore.get(r);return JSON.parse($(n))}catch(n){throw await ye(),ka.error(n),new w(`Key '${e}' does not exist.`,ee.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!Ur(e)||e==="self")throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);let r=pr(e),n=await this.findKeyByName(e),i=this.components.datastore.batch();return i.delete(r),i.delete(yn(e)),await i.commit(),n}async renameKey(e,r){if(!Ur(e)||e==="self")throw await ye(),new w(`Invalid old key name '${e}'`,ee.ERR_OLD_KEY_NAME_INVALID);if(!Ur(r)||r==="self")throw await ye(),new w(`Invalid new key name '${r}'`,ee.ERR_NEW_KEY_NAME_INVALID);let n=pr(e),i=pr(r),o=yn(e),s=yn(r);if(await this.components.datastore.has(i))throw await ye(),new w(`Key '${r}' already exists`,ee.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),u=await this.components.datastore.get(o),l=JSON.parse($(u));l.name=r;let f=this.components.datastore.batch();return f.put(i,c),f.put(s,F(JSON.stringify(l))),f.delete(n),f.delete(o),await f.commit(),l}catch(c){throw await ye(),c}}async exportKey(e,r){if(!Ur(e))throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);if(r==null)throw await ye(),new w("Password is required",ee.ERR_PASSWORD_REQUIRED);let n=pr(e);try{let i=await this.components.datastore.get(n),o=$(i),s=Yn.get(this);if(s==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let a=s.dek;return await(await Fo(o,a)).export(r)}catch(i){throw await ye(),i}}async exportPeerId(e){let r="temporary-password",n=await this.exportKey(e,r),i=await Fo(n,r);return await Wr(i.public.bytes,i.bytes)}async importKey(e,r,n){if(!Ur(e)||e==="self")throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);if(r==null)throw await ye(),new w("PEM encoded key is required",ee.ERR_PEM_REQUIRED);let i=pr(e);if(await this.components.datastore.has(i))throw await ye(),new w(`Key '${e}' already exists`,ee.ERR_KEY_ALREADY_EXISTS);let s;try{s=await Fo(r,n)}catch{throw await ye(),new w("Cannot read the key, most likely the password is wrong",ee.ERR_CANNOT_READ_KEY)}let a;try{a=await s.id();let l=Yn.get(this);if(l==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let f=l.dek;r=await s.export(f)}catch(l){throw await ye(),l}let c={name:e,id:a},u=this.components.datastore.batch();return u.put(i,F(r)),u.put(yn(e),F(JSON.stringify(c))),await u.commit(),c}async importPeer(e,r){try{if(!Ur(e))throw new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);if(r==null)throw new w("PeerId is required",ee.ERR_MISSING_PRIVATE_KEY);if(r.privateKey==null)throw new w("PeerId.privKey is required",ee.ERR_MISSING_PRIVATE_KEY);let n=await qi(r.privateKey),i=pr(e);if(await this.components.datastore.has(i))throw await ye(),new w(`Key '${e}' already exists`,ee.ERR_KEY_ALREADY_EXISTS);let s=Yn.get(this);if(s==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let a=s.dek,c=await n.export(a),u={name:e,id:r.toString()},l=this.components.datastore.batch();return l.put(i,F(c)),l.put(yn(e),F(JSON.stringify(u))),await l.commit(),u}catch(n){throw await ye(),n}}async getPrivateKey(e){if(!Ur(e))throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);try{let r=pr(e),n=await this.components.datastore.get(r);return $(n)}catch(r){throw await ye(),ka.error(r),new w(`Key '${e}' does not exist.`,ee.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,r){if(typeof e!="string")throw await ye(),new w(`Invalid old pass type '${typeof e}'`,ee.ERR_INVALID_OLD_PASS_TYPE);if(typeof r!="string")throw await ye(),new w(`Invalid new pass type '${typeof r}'`,ee.ERR_INVALID_NEW_PASS_TYPE);if(r.length<20)throw await ye(),new w(`Invalid pass length ${r.length}`,ee.ERR_INVALID_PASS_LENGTH);ka("recreating keychain");let n=Yn.get(this);if(n==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let i=n.dek;this.init.pass=r;let o=r!=null&&this.init.dek?.salt!=null?Ko(r,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yn.set(this,{dek:o});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(pr(a.name)),u=$(c),l=await Fo(u,i),f=o.toString(),h=await l.export(f),d=this.components.datastore.batch(),p={name:a.name,id:a.id};d.put(pr(a.name),F(h)),d.put(yn(a.name),F(JSON.stringify(p))),await d.commit()}ka("keychain reconstructed")}};var LD=Symbol.for("@libp2p/transport");var gn;(function(t){t[t.FATAL_ALL=0]="FATAL_ALL",t[t.NO_FATAL=1]="NO_FATAL"})(gn||(gn={}));var df=class extends Map{constructor(e){super();let{name:r,metrics:n}=e;this.metric=n.registerMetric(r),this.updateComponentMetric()}set(e,r){return super.set(e,r),this.updateComponentMetric(),this}delete(e){let r=super.delete(e);return this.updateComponentMetric(),r}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Pg(t){let{name:e,metrics:r}=t,n;return r!=null?n=new df({name:e,metrics:r}):n=new Map,n}var Xn=M("libp2p:transports"),Oa=class extends Xe{constructor(e,r={}){super(),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Pg({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=r.faultTolerance??gn.FATAL_ALL}add(e){let r=e[Symbol.toStringTag];if(r==null)throw new w("Transport must have a valid tag",S.ERR_INVALID_KEY);if(this.transports.has(r))throw new w(`There is already a transport with the tag ${r}`,S.ERR_DUPLICATE_TRANSPORT);Xn("adding transport %s",r),this.transports.set(r,e),this.listeners.has(r)||this.listeners.set(r,[])}isStarted(){return this.started}async start(){let e=this.components.addressManager.getListenAddrs();await this.listen(e),this.started=!0}async stop(){let e=[];for(let[r,n]of this.listeners)for(Xn("closing listeners for %s",r);n.length>0;){let i=n.pop();i!=null&&e.push(i.close())}await Promise.all(e),Xn("all listeners closed");for(let r of this.listeners.keys())this.listeners.set(r,[]);this.started=!1}async dial(e,r){let n=this.transportForMultiaddr(e);if(n==null)throw new w(`No transport available for address ${String(e)}`,S.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...r,upgrader:this.components.upgrader})}catch(i){throw i.code==null&&(i.code=S.ERR_TRANSPORT_DIAL_FAILED),i}}getAddrs(){let e=[];for(let r of this.listeners.values())for(let n of r)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}transportForMultiaddr(e){for(let r of this.transports.values())if(r.filter([e]).length>0)return r}async listen(e){if(e==null||e.length===0){Xn("no addresses were provided for listening, this node is dial only");return}let r=[];for(let[n,i]of this.transports.entries()){let o=i.filter(e),s=[];for(let u of o){Xn("creating listener for %s on %s",n,u);let l=i.createListener({upgrader:this.components.upgrader}),f=this.listeners.get(n);f==null&&(f=[],this.listeners.set(n,f)),f.push(l),l.addEventListener("listening",()=>{this.dispatchEvent(new G("listener:listening",{detail:l}))}),l.addEventListener("close",()=>{this.dispatchEvent(new G("listener:close",{detail:l}))}),s.push(l.listen(u))}if(s.length===0){r.push(n);continue}if((await Promise.allSettled(s)).find(u=>u.status==="fulfilled")==null&&this.faultTolerance!==gn.NO_FATAL)throw new w(`Transport (${n}) could not listen on any available address`,S.ERR_NO_VALID_ADDRESSES)}if(r.length===this.transports.size){let n=`no valid addresses were provided for transports [${r.join(", ")}]`;if(this.faultTolerance===gn.FATAL_ALL)throw new w(n,S.ERR_NO_VALID_ADDRESSES);Xn(`libp2p in dial mode only: ${n}`)}}async remove(e){Xn("removing %s",e);for(let r of this.listeners.get(e)??[])await r.close();this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let r of this.transports.keys())e.push(this.remove(r));await Promise.all(e)}};var Fr="/multistream/1.0.0";var Lg=Symbol.for("@achingbrain/uint8arraylist");function Dg(t,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let r=0;for(let n of t){let i=r+n.byteLength;if(e<i)return{buf:n,index:e-r};r=i}throw new RangeError("index is out of bounds")}function Ma(t){return!!t?.[Lg]}var ke=class{constructor(...e){Object.defineProperty(this,Lg,{value:!0}),this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let r=0;for(let n of e)if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.push(n);else if(Ma(n))r+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}prepend(...e){this.prependAll(e)}prependAll(e){let r=0;for(let n of e.reverse())if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.unshift(n);else if(Ma(n))r+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}get(e){let r=Dg(this.bufs,e);return r.buf[r.index]}set(e,r){let n=Dg(this.bufs,e);n.buf[n.index]=r}write(e,r=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(r+n,e[n]);else if(Ma(e))for(let n=0;n<e.length;n++)this.set(r+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,r){let{bufs:n,length:i}=this._subList(e,r);return Me(n,i)}subarray(e,r){let{bufs:n,length:i}=this._subList(e,r);return n.length===1?n[0]:Me(n,i)}sublist(e,r){let{bufs:n,length:i}=this._subList(e,r),o=new ke;return o.length=i,o.bufs=n,o}_subList(e,r){if(e=e??0,r=r??this.length,e<0&&(e=this.length+e),r<0&&(r=this.length+r),e<0||r>this.length)throw new RangeError("index is out of bounds");if(e===r)return{bufs:[],length:0};if(e===0&&r===this.length)return{bufs:[...this.bufs],length:this.length};let n=[],i=0;for(let o=0;o<this.bufs.length;o++){let s=this.bufs[o],a=i,c=a+s.byteLength;if(i=c,e>=c)continue;let u=e>=a&&e<c,l=r>a&&r<=c;if(u&&l){if(e===a&&r===c){n.push(s);break}let f=e-a;n.push(s.subarray(f,f+(r-e)));break}if(u){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(l){if(r===c){n.push(s);break}n.push(s.subarray(0,r-a));break}n.push(s)}return{bufs:n,length:r-e}}indexOf(e,r=0){if(!Ma(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(r=Number(r??0),isNaN(r)&&(r=0),r<0&&(r=this.length+r),r<0&&(r=0),e.length===0)return r>this.length?this.length:r;let i=n.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let o=256,s=new Int32Array(o);for(let f=0;f<o;f++)s[f]=-1;for(let f=0;f<i;f++)s[n[f]]=f;let a=s,c=this.byteLength-n.byteLength,u=n.byteLength-1,l;for(let f=r;f<=c;f+=l){l=0;for(let h=u;h>=0;h--){let d=this.get(f+h);if(n[h]!==d){l=Math.max(1,h-a[d]);break}}if(l===0)return f}return-1}getInt8(e){let r=this.subarray(e,e+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt8(0)}setInt8(e,r){let n=Mt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,r),this.write(n,e)}getInt16(e,r){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,r)}setInt16(e,r,n){let i=xr(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,r,n),this.write(i,e)}getInt32(e,r){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,r)}setInt32(e,r,n){let i=xr(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,r,n),this.write(i,e)}getBigInt64(e,r){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,r)}setBigInt64(e,r,n){let i=xr(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,r,n),this.write(i,e)}getUint8(e){let r=this.subarray(e,e+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint8(0)}setUint8(e,r){let n=Mt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,r),this.write(n,e)}getUint16(e,r){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,r)}setUint16(e,r,n){let i=xr(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,r,n),this.write(i,e)}getUint32(e,r){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,r)}setUint32(e,r,n){let i=xr(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,r,n),this.write(i,e)}getBigUint64(e,r){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,r)}setBigUint64(e,r,n){let i=xr(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,r,n),this.write(i,e)}getFloat32(e,r){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,r)}setFloat32(e,r,n){let i=xr(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,r,n),this.write(i,e)}getFloat64(e,r){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,r)}setFloat64(e,r,n){let i=xr(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,r,n),this.write(i,e)}equals(e){if(e==null||!(e instanceof ke)||e.bufs.length!==this.bufs.length)return!1;for(let r=0;r<this.bufs.length;r++)if(!xe(this.bufs[r],e.bufs[r]))return!1;return!0}static fromUint8Arrays(e,r){let n=new ke;return n.bufs=e,r==null&&(r=e.reduce((i,o)=>i+o.byteLength,0)),n.length=r,n}};function Ua(t){return t instanceof Uint8Array?{get(e){return t[e]},set(e,r){t[e]=r}}:{get(e){return t.get(e)},set(e,r){t.set(e,r)}}}var Ng=4294967296,Rt=class{constructor(e=0,r=0){this.hi=e,this.lo=r}toBigInt(e){if(e===!0)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let r=~this.lo+1>>>0,n=~this.hi>>>0;return r===0&&(n=n+1>>>0),-(BigInt(r)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toNumber(e){return Number(this.toBigInt(e))}zzDecode(){let e=-(this.lo&1),r=((this.lo>>>1|this.hi<<31)^e)>>>0,n=(this.hi>>>1^e)>>>0;return new Rt(n,r)}zzEncode(){let e=this.hi>>31,r=((this.hi<<1|this.lo>>>31)^e)>>>0,n=(this.lo<<1^e)>>>0;return new Rt(r,n)}toBytes(e,r=0){let n=Ua(e);for(;this.hi>0;)n.set(r++,this.lo&127|128),this.lo=(this.lo>>>7|this.hi<<25)>>>0,this.hi>>>=7;for(;this.lo>127;)n.set(r++,this.lo&127|128),this.lo=this.lo>>>7;n.set(r++,this.lo)}static fromBigInt(e){if(e===0n)return new Rt;let r=e<0;r&&(e=-e);let n=Number(e>>32n)|0,i=Number(e-(BigInt(n)<<32n))|0;return r&&(n=~n>>>0,i=~i>>>0,++i>Ng&&(i=0,++n>Ng&&(n=0))),new Rt(n,i)}static fromNumber(e){if(e===0)return new Rt;let r=e<0;r&&(e=-e);let n=e>>>0,i=(e-n)/4294967296>>>0;return r&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new Rt(i,n)}static fromBytes(e,r=0){let n=Ua(e),i=new Rt,o=0;if(e.length-r>4){for(;o<4;++o)if(i.lo=(i.lo|(n.get(r)&127)<<o*7)>>>0,n.get(r++)<128)return i;if(i.lo=(i.lo|(n.get(r)&127)<<28)>>>0,i.hi=(i.hi|(n.get(r)&127)>>4)>>>0,n.get(r++)<128)return i;o=0}else for(;o<4;++o){if(r>=e.length)throw RangeError(`index out of range: ${r} > ${e.length}`);if(i.lo=(i.lo|(n.get(r)&127)<<o*7)>>>0,n.get(r++)<128)return i}if(e.length-r>4){for(;o<5;++o)if(i.hi=(i.hi|(n.get(r)&127)<<o*7+3)>>>0,n.get(r++)<128)return i}else if(r<e.byteLength)for(;o<5;++o){if(r>=e.length)throw RangeError(`index out of range: ${r} > ${e.length}`);if(i.hi=(i.hi|(n.get(r)&127)<<o*7+3)>>>0,n.get(r++)<128)return i}throw RangeError("invalid varint encoding")}};var LS=Math.pow(2,7),NS=Math.pow(2,14),kS=Math.pow(2,21),OS=Math.pow(2,28),MS=Math.pow(2,35),US=Math.pow(2,42),FS=Math.pow(2,49),KS=Math.pow(2,56),VS=Math.pow(2,63),Qt={encodingLength(t){return t<LS?1:t<NS?2:t<kS?3:t<OS?4:t<MS?5:t<US?6:t<FS?7:t<KS?8:t<VS?9:10},encode(t,e,r=0){if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return e==null&&(e=Mt(Qt.encodingLength(t))),Rt.fromNumber(t).toBytes(e,r),e},decode(t,e=0){return Rt.fromBytes(t,e).toNumber(!0)}};function Fa(t){return t[Symbol.asyncIterator]!=null}var Ka=t=>{let e=Qt.encodingLength(t),r=Mt(e);return Qt.encode(t,r),Ka.bytes=e,r};Ka.bytes=0;function It(t,e){e=e??{};let r=e.lengthEncoder??Ka;function*n(i){let o=r(i.byteLength);o instanceof Uint8Array?yield o:yield*o,i instanceof Uint8Array?yield i:yield*i}return Fa(t)?async function*(){for await(let i of t)yield*n(i)}():function*(){for(let i of t)yield*n(i)}()}It.single=(t,e)=>{e=e??{};let r=e.lengthEncoder??Ka;return new ke(r(t.byteLength),t)};var $i=U(hu(),1);var qS=8,$S=1024*1024*4,Zn;(function(t){t[t.LENGTH=0]="LENGTH",t[t.DATA=1]="DATA"})(Zn||(Zn={}));var pf=t=>{let e=Qt.decode(t);return pf.bytes=Qt.encodingLength(e),e};pf.bytes=0;function yt(t,e){let r=new ke,n=Zn.LENGTH,i=-1,o=e?.lengthDecoder??pf,s=e?.maxLengthLength??qS,a=e?.maxDataLength??$S;function*c(){for(;r.byteLength>0;){if(n===Zn.LENGTH)try{if(i=o(r),i<0)throw(0,$i.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(i>a)throw(0,$i.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let u=o.bytes;r.consume(u),e?.onLength!=null&&e.onLength(i),n=Zn.DATA}catch(u){if(u instanceof RangeError){if(r.byteLength>s)throw(0,$i.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw u}if(n===Zn.DATA){if(r.byteLength<i)break;let u=r.sublist(0,i);r.consume(i),e?.onData!=null&&e.onData(u),yield u,n=Zn.LENGTH}}}return Fa(t)?async function*(){for await(let u of t)r.append(u),yield*c();if(r.byteLength>0)throw(0,$i.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let u of t)r.append(u),yield*c();if(r.byteLength>0)throw(0,$i.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}yt.fromReader=(t,e)=>{let r=1,n=async function*(){for(;;)try{let{done:o,value:s}=await t.next(r);if(o===!0)return;s!=null&&(yield s)}catch(o){if(o.code==="ERR_UNDER_READ")return{done:!0,value:null};throw o}finally{r=1}}();return yt(n,{...e??{},onLength:o=>{r=o}})};var Vo=class extends Error{constructor(e,r){super(e??"The operation was aborted"),this.type="aborted",this.code=r??"ABORT_ERR"}};function kg(t){if(t!=null){if(typeof t[Symbol.iterator]=="function")return t[Symbol.iterator]();if(typeof t[Symbol.asyncIterator]=="function")return t[Symbol.asyncIterator]();if(typeof t.next=="function")return t}throw new Error("argument is not an iterator or iterable")}function qa(t,e,r){let n=r??{},i=kg(t);async function*o(){let s,a=()=>{s?.()};for(e.addEventListener("abort",a);;){let c;try{if(e.aborted){let{abortMessage:l,abortCode:f}=n;throw new Vo(l,f)}let u=new Promise((l,f)=>{s=()=>{let{abortMessage:h,abortCode:d}=n;f(new Vo(h,d))}});c=await Promise.race([u,i.next()]),s=null}catch(u){e.removeEventListener("abort",a);let l=u.type==="aborted"&&e.aborted;if(l&&n.onAbort!=null&&await n.onAbort(t),typeof i.return=="function")try{let f=i.return();f instanceof Promise&&f.catch(h=>{n.onReturnError!=null&&n.onReturnError(h)})}catch(f){n.onReturnError!=null&&n.onReturnError(f)}if(l&&n.returnOnAbort===!0)return;throw u}if(c.done===!0)break;yield c.value}e.removeEventListener("abort",a)}return o()}function zS(t,e,r){return n=>t(qa(n,e,r))}function gt(t,e,r){return{sink:zS(t.sink,e,{...r,onAbort:void 0}),source:qa(t.source,e,r)}}var GS=M("libp2p:mss"),Og=F(`
|
|
49
|
-
`);function qo(t){let e=new ke(t,Og);return It.single(e)}function Jn(t,e,r={}){let n=qo(e);r.writeBytes===!0?t.push(n.subarray()):t.push(n)}function Mg(t,e,r={}){let n=new ke;for(let i of e)n.append(qo(i));r.writeBytes===!0?t.push(n.subarray()):t.push(n)}async function YS(t,e){let r=1,n={[Symbol.asyncIterator]:()=>n,next:async()=>await t.next(r)},i=n;e?.signal!=null&&(i=qa(n,e.signal));let o=a=>{r=a},s=await Ue(i,a=>yt(a,{onLength:o,maxDataLength:1024}),async a=>await at(a));if(s==null||s.length===0)throw new w("no buffer returned","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");if(s.get(s.byteLength-1)!==Og[0])throw GS.error("Invalid mss message - missing newline - %s",s.subarray()),new w("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return s.sublist(0,-1)}async function zi(t,e){let r=await YS(t,e);return $(r.subarray())}function mf(t){let e=async function*(){let r=yield,n=new ke;for await(let i of t){if(r==null){n.append(i),r=yield n,n=new ke;continue}for(n.append(i);n.length>=r;){let o=n.sublist(0,r);if(n.consume(r),r=yield o,r==null){n.length>0&&(r=yield n,n=new ke);break}}}if(r!=null)throw Object.assign(new Error(`stream ended before ${r} bytes became available`),{code:"ERR_UNDER_READ",buffer:n})}();return e.next(),e}function $a(t){let e=Rn(),r=mf(t.source),n=tr(),i,o=t.sink(async function*(){yield*e,yield*await n.promise}());return o.catch(a=>{i=a}),{reader:r,writer:e,stream:{sink:async a=>i!=null?await Promise.reject(i):(n.resolve(a),await o),source:r},rest:()=>e.end(),write:e.push,read:async()=>{let a=await r.next();if(a.value!=null)return a.value}}}var $o=M("libp2p:mss:select");async function zo(t,e,r={}){e=Array.isArray(e)?[...e]:[e];let{reader:n,writer:i,rest:o,stream:s}=$a(t),a=e.shift();if(a==null)throw new Error("At least one protocol must be specified");$o('select: write ["%s", "%s"]',Fr,a);let c=F(Fr),u=F(a);Mg(i,[c,u],r);let l=await zi(n,r);if($o('select: read "%s"',l),l===Fr&&(l=await zi(n,r),$o('select: read "%s"',l)),l===a)return o(),{stream:s,protocol:a};for(let f of e){$o('select: write "%s"',f),Jn(i,F(f),r);let h=await zi(n,r);if($o('select: read "%s" for "%s"',h,f),h===f)return o(),{stream:s,protocol:f}}throw o(),new w("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}var Ho=M("libp2p:mss:handle");async function Go(t,e,r){e=Array.isArray(e)?e:[e];let{writer:n,reader:i,rest:o,stream:s}=$a(t);for(;;){let a=await zi(i,r);if(Ho('read "%s"',a),a===Fr){Ho('respond with "%s" for "%s"',Fr,a),Jn(n,F(Fr),r);continue}if(e.includes(a))return Jn(n,F(a),r),Ho('respond with "%s" for "%s"',a,a),o(),{stream:s,protocol:a};if(a==="ls"){Jn(n,new ke(...e.map(c=>qo(F(c)))),r),Ho('respond with "%s" for %s',e,a);continue}Jn(n,F("na"),r),Ho('respond with "na" for "%s"',a)}}var Fg="OPEN",yf="CLOSING",za="CLOSED";var Kg=Symbol.for("@libp2p/connection");var QS=M("libp2p:connection"),gf=class{constructor(e){let{remoteAddr:r,remotePeer:n,newStream:i,close:o,getStreams:s,stat:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=r,this.remotePeer=n,this.stat={...a,status:Fg},this._newStream=i,this._close=o,this._getStreams=s,this.tags=[],this._closing=!1}get[Symbol.toStringTag](){return"Connection"}get[Kg](){return!0}get streams(){return this._getStreams()}async newStream(e,r){if(this.stat.status===yf)throw new w("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.stat.status===za)throw new w("the connection is closed","ERR_CONNECTION_CLOSED");Array.isArray(e)||(e=[e]);let n=await this._newStream(e,r);return n.stat.direction="outbound",n}addStream(e){e.stat.direction="inbound"}removeStream(e){}async close(){if(!(this.stat.status===za||this._closing)){this.stat.status=yf;try{this.streams.forEach(e=>{e.close()})}catch(e){QS.error(e)}this._closing=!0,await this._close(),this._closing=!1,this.stat.timeline.close=Date.now(),this.stat.status=za}}};function Vg(t){return new gf(t)}var XS=Symbol.for("@libp2p/topology");function qg(t){return t!=null&&!!t[XS]}var wf=M("libp2p:registrar"),Ef=32,xf=64,Ha=class{constructor(e){this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onProtocolChange=this._onProtocolChange.bind(this),this._onConnect=this._onConnect.bind(this),this.components.connectionManager.addEventListener("peer:disconnect",this._onDisconnect),this.components.connectionManager.addEventListener("peer:connect",this._onConnect),this.components.peerStore.addEventListener("change:protocols",this._onProtocolChange)}getProtocols(){return Array.from(new Set([...this.topologies.keys(),...this.handlers.keys()])).sort()}getHandler(e){let r=this.handlers.get(e);if(r==null)throw new w(`No handler registered for protocol ${e}`,S.ERR_NO_HANDLER_FOR_PROTOCOL);return r}getTopologies(e){let r=this.topologies.get(e);return r==null?[]:[...r.values()]}async handle(e,r,n){if(this.handlers.has(e))throw new w(`Handler already registered for protocol ${e}`,S.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let i=jr.bind({ignoreUndefined:!0})({maxInboundStreams:Ef,maxOutboundStreams:xf},n);this.handlers.set(e,{handler:r,options:i}),await this.components.peerStore.protoBook.add(this.components.peerId,[e])}async unhandle(e){let r=Array.isArray(e)?e:[e];r.forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.protoBook.remove(this.components.peerId,r)}async register(e,r){if(!qg(r))throw wf.error("topology must be an instance of interfaces/topology"),new w("topology must be an instance of interfaces/topology",S.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,i=this.topologies.get(e);return i==null&&(i=new Map,this.topologies.set(e,i)),i.set(n,r),await r.setRegistrar(this),n}unregister(e){for(let[r,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(r))}_onDisconnect(e){let r=e.detail;this.components.peerStore.protoBook.get(r.remotePeer).then(n=>{for(let i of n){let o=this.topologies.get(i);if(o!=null)for(let s of o.values())s.onDisconnect(r.remotePeer)}}).catch(n=>{wf.error(n)})}_onConnect(e){let r=e.detail;this.components.peerStore.protoBook.get(r.remotePeer).then(n=>{for(let i of n){let o=this.topologies.get(i);if(o!=null)for(let s of o.values())s.onConnect(r.remotePeer,r)}}).catch(n=>{wf.error(n)})}_onProtocolChange(e){let{peerId:r,protocols:n,oldProtocols:i}=e.detail,o=i.filter(a=>!n.includes(a)),s=n.filter(a=>!i.includes(a));for(let a of o){let c=this.topologies.get(a);if(c!=null)for(let u of c.values())u.onDisconnect(r)}for(let a of s){let c=this.topologies.get(a);if(c!=null)for(let u of c.values()){let l=this.components.connectionManager.getConnections(r)[0];l!=null&&u.onConnect(r,l)}}}};var vf=U(Hr(),1);var bf=U(Ar(),1);var be=M("libp2p:upgrader");function JS(t,e){try{let{options:r}=e.getHandler(t);return r.maxInboundStreams}catch(r){if(r.code!==S.ERR_NO_HANDLER_FOR_PROTOCOL)throw r}return Ef}function jS(t,e){try{let{options:r}=e.getHandler(t);return r.maxOutboundStreams}catch(r){if(r.code!==S.ERR_NO_HANDLER_FOR_PROTOCOL)throw r}return xf}function $g(t,e,r){let n=0;return r.streams.forEach(i=>{i.stat.direction===e&&i.stat.protocol===t&&n++}),n}var Ga=class extends Xe{constructor(e,r){super(),this.components=e,this.connectionEncryption=new Map,r.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,r.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=r.inboundUpgradeTimeout??3e4}async upgradeInbound(e,r){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new w("connection denied",S.ERR_CONNECTION_DENIED);let i,o,s,a,c,u=new vf.TimeoutController(this.inboundUpgradeTimeout);try{(0,bf.setMaxListeners)?.(1/0,u.signal)}catch{}try{let l=gt(e,u.signal);if(e.source=l.source,e.sink=l.sink,await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new w("The multiaddr connection is blocked by gater.acceptConnection",S.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),be("starting the inbound connection upgrade");let f=e;if(r?.skipProtection!==!0){let h=this.components.connectionProtector;h!=null&&(be("protecting the inbound connection"),f=await h.protect(e))}try{if(i=f,r?.skipEncryption!==!0){if({conn:i,remotePeer:o,protocol:c}=await this._encryptInbound(f),await this.components.connectionGater.denyInboundEncryptedConnection?.(o,{...f,...i})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED)}else{let h=e.remoteAddr.getPeerId();if(h==null)throw new w("inbound connection that skipped encryption must have a peer id",S.ERR_INVALID_MULTIADDR);let d=ae(h);c="native",o=d}if(s=i,r?.muxerFactory!=null)a=r.muxerFactory;else if(this.muxers.size>0){let h=await this._multiplexInbound({...f,...i},this.muxers);a=h.muxerFactory,s=h.stream}}catch(h){throw be.error("Failed to upgrade inbound connection",h),h}if(await this.components.connectionGater.denyInboundUpgradedConnection?.(o,{...f,...i})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED);return be("Successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:o})}finally{this.components.connectionManager.afterUpgradeInbound(),u.clear()}}async upgradeOutbound(e,r){let n=e.remoteAddr.getPeerId(),i;if(n!=null&&(i=ae(n),await this.components.connectionGater.denyOutboundConnection?.(i,e)===!0))throw new w("The multiaddr connection is blocked by connectionGater.denyOutboundConnection",S.ERR_CONNECTION_INTERCEPTED);let o,s,a,c,u;this.components.metrics?.trackMultiaddrConnection(e),be("Starting the outbound connection upgrade");let l=e;if(r?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(l=await f.protect(e))}try{if(o=l,r?.skipEncryption!==!0){if({conn:o,remotePeer:s,protocol:c}=await this._encryptOutbound(l,i),await this.components.connectionGater.denyOutboundEncryptedConnection?.(s,{...l,...o})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED)}else{if(i==null)throw new w("Encryption was skipped but no peer id was passed",S.ERR_INVALID_PEER);c="native",s=i}if(a=o,r?.muxerFactory!=null)u=r.muxerFactory;else if(this.muxers.size>0){let f=await this._multiplexOutbound({...l,...o},this.muxers);u=f.muxerFactory,a=f.stream}}catch(f){throw be.error("Failed to upgrade outbound connection",f),await e.close(f),f}if(await this.components.connectionGater.denyOutboundUpgradedConnection?.(s,{...l,...o})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED);return be("Successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:u,remotePeer:s})}_createConnection(e){let{cryptoProtocol:r,direction:n,maConn:i,upgradedConn:o,remotePeer:s,muxerFactory:a}=e,c,u,l;a!=null&&(c=a.createStreamMuxer({direction:n,onIncomingStream:d=>{l!=null&&Promise.resolve().then(async()=>{let p=this.components.registrar.getProtocols(),{stream:m,protocol:y}=await Go(d,p);if(be("%s: incoming stream opened on %s",n,y),l==null)return;let g=JS(y,this.components.registrar);if($g(y,"inbound",l)===g){d.abort(new w(`Too many inbound protocol streams for protocol "${y}" - limit ${g}`,S.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS));return}d.source=m.source,d.sink=m.sink,d.stat.protocol=y,this.components.peerStore.protoBook.add(s,[y]).catch(_=>{be.error(_)}),l.addStream(d),this.components.metrics?.trackProtocolStream(d,l),this._onStream({connection:l,stream:d,protocol:y})}).catch(p=>{be.error(p),d.stat.timeline.close==null&&d.close()})},onStreamEnd:d=>{l?.removeStream(d.id)}}),u=async(d,p={})=>{if(c==null)throw new w("Stream is not multiplexed",S.ERR_MUXER_UNAVAILABLE);be("%s: starting new stream on %s",n,d);let m=await c.newStream(),y;try{if(p.signal==null){be("No abort signal was passed while trying to negotiate protocols %s falling back to default timeout",d),y=new vf.TimeoutController(3e4),p.signal=y.signal;try{(0,bf.setMaxListeners)?.(1/0,y.signal)}catch{}}let{stream:g,protocol:x}=await zo(m,d,p),_=jS(x,this.components.registrar);if($g(x,"outbound",l)===_){let C=new w(`Too many outbound protocol streams for protocol "${x}" - limit ${_}`,S.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw m.abort(C),C}return this.components.peerStore.protoBook.add(s,[x]).catch(C=>{be.error(C)}),m.source=g.source,m.sink=g.sink,m.stat.protocol=x,this.components.metrics?.trackProtocolStream(m,l),m}catch(g){throw be.error("could not create new stream",g),m.stat.timeline.close==null&&m.close(),g.code!=null?g:new w(String(g),S.ERR_UNSUPPORTED_PROTOCOL)}finally{y?.clear()}},Promise.all([c.sink(o.source),o.sink(c.source)]).catch(d=>{be.error(d)}));let f=i.timeline;i.timeline=new Proxy(f,{set:(...d)=>(l!=null&&d[1]==="close"&&d[2]!=null&&f.close==null&&(async()=>{try{l.stat.status==="OPEN"&&await l.close()}catch(p){be.error(p)}finally{this.dispatchEvent(new G("connectionEnd",{detail:l}))}})().catch(p=>{be.error(p)}),Reflect.set(...d))}),i.timeline.upgraded=Date.now();let h=()=>{throw new w("connection is not multiplexed",S.ERR_CONNECTION_NOT_MULTIPLEXED)};return l=Vg({remoteAddr:i.remoteAddr,remotePeer:s,stat:{status:"OPEN",direction:n,timeline:i.timeline,multiplexer:c?.protocol,encryption:r},newStream:u??h,getStreams:()=>c!=null?c.streams:h(),close:async()=>{await i.close(),c?.close()}}),this.dispatchEvent(new G("connection",{detail:l})),l}_onStream(e){let{connection:r,stream:n,protocol:i}=e,{handler:o}=this.components.registrar.getHandler(i);o({connection:r,stream:n})}async _encryptInbound(e){let r=Array.from(this.connectionEncryption.keys());be("handling inbound crypto protocol selection",r);try{let{stream:n,protocol:i}=await Go(e,r,{writeBytes:!0}),o=this.connectionEncryption.get(i);if(o==null)throw new Error(`no crypto module found for ${i}`);return be("encrypting inbound connection..."),{...await o.secureInbound(this.components.peerId,n),protocol:i}}catch(n){throw new w(String(n),S.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,r){let n=Array.from(this.connectionEncryption.keys());be("selecting outbound crypto protocol",n);try{let{stream:i,protocol:o}=await zo(e,n,{writeBytes:!0}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return be("encrypting outbound connection to %p",r),{...await s.secureOutbound(this.components.peerId,i,r),protocol:o}}catch(i){throw new w(String(i),S.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,r){let n=Array.from(r.keys());be("outbound selecting muxer %s",n);try{let{stream:i,protocol:o}=await zo(e,n,{writeBytes:!0});be("%s selected as muxer protocol",o);let s=r.get(o);return{stream:i,muxerFactory:s}}catch(i){throw be.error("error multiplexing outbound stream",i),new w(String(i),S.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,r){let n=Array.from(r.keys());be("inbound handling muxers %s",n);try{let{stream:i,protocol:o}=await Go(e,n,{writeBytes:!0}),s=r.get(o);return{stream:i,muxerFactory:s}}catch(i){throw be.error("error multiplexing inbound stream",i),new w(String(i),S.ERR_MUXER_UNAVAILABLE)}}};var jn;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.protocolVersion!=null&&(n.uint32(42),n.string(r.protocolVersion)),r.agentVersion!=null&&(n.uint32(50),n.string(r.agentVersion)),r.publicKey!=null&&(n.uint32(10),n.bytes(r.publicKey)),r.listenAddrs!=null)for(let o of r.listenAddrs)n.uint32(18),n.bytes(o);if(r.observedAddr!=null&&(n.uint32(34),n.bytes(r.observedAddr)),r.protocols!=null)for(let o of r.protocols)n.uint32(26),n.string(o);r.signedPeerRecord!=null&&(n.uint32(66),n.bytes(r.signedPeerRecord)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={listenAddrs:[],protocols:[]},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 5:i.protocolVersion=r.string();break;case 6:i.agentVersion=r.string();break;case 1:i.publicKey=r.bytes();break;case 2:i.listenAddrs.push(r.bytes());break;case 4:i.observedAddr=r.bytes();break;case 3:i.protocols.push(r.string());break;case 8:i.signedPeerRecord=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(jn||(jn={}));var zg={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var Yo;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.publicKey!=null&&r.publicKey.byteLength>0&&(n.uint32(10),n.bytes(r.publicKey)),r.payloadType!=null&&r.payloadType.byteLength>0&&(n.uint32(18),n.bytes(r.payloadType)),r.payload!=null&&r.payload.byteLength>0&&(n.uint32(26),n.bytes(r.payload)),r.signature!=null&&r.signature.byteLength>0&&(n.uint32(42),n.bytes(r.signature)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.publicKey=r.bytes();break;case 2:i.payloadType=r.bytes();break;case 3:i.payload=r.bytes();break;case 5:i.signature=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Yo||(Yo={}));var eA,Qe=class{constructor(e){let{peerId:r,payloadType:n,payload:i,signature:o}=e;this.peerId=r,this.payloadType=n,this.payload=i,this.signature=o}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=Yo.encode({publicKey:this.peerId.publicKey,payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return xe(this.marshal(),e.marshal())}async validate(e){let r=Hg(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return await Uo(this.peerId.publicKey).verify(r.subarray(),this.signature)}};eA=Qe;Qe.createFromProtobuf=async t=>{let e=Yo.decode(t),r=await Wr(e.publicKey);return new Qe({peerId:r,payloadType:e.payloadType,payload:e.payload,signature:e.signature})};Qe.seal=async(t,e)=>{if(e.privateKey==null)throw new Error("Missing private key");let r=t.domain,n=t.codec,i=t.marshal(),o=Hg(r,n,i),a=await(await qi(e.privateKey)).sign(o.subarray());return new Qe({peerId:e,payloadType:n,payload:i,signature:a})};Qe.openAndCertify=async(t,e)=>{let r=await Qe.createFromProtobuf(t);if(!await r.validate(e))throw new w("envelope signature is not valid for the given domain",zg.ERR_SIGNATURE_NOT_VALID);return r};var Hg=(t,e,r)=>{let n=F(t),i=Qt.encode(n.byteLength),o=Qt.encode(e.length),s=Qt.encode(r.length);return new ke(i,n,o,e,s,r)};function Gg(t,e){let r=(n,i)=>n.toString().localeCompare(i.toString());return t.length!==e.length?!1:(e.sort(r),t.sort(r).every((n,i)=>e[i].equals(n)))}var Wo;(function(t){let e;(function(n){let i;n.codec=()=>(i==null&&(i=me((o,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),o.multiaddr!=null&&o.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(o.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let a={multiaddr:new Uint8Array(0)},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let u=o.uint32();switch(u>>>3){case 1:a.multiaddr=o.bytes();break;default:o.skipType(u&7);break}}return a})),i),n.encode=o=>pe(o,n.codec()),n.decode=o=>de(o,n.codec())})(e=t.AddressInfo||(t.AddressInfo={}));let r;t.codec=()=>(r==null&&(r=me((n,i,o={})=>{if(o.lengthDelimited!==!1&&i.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(i.uint32(10),i.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(i.uint32(16),i.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)i.uint32(26),t.AddressInfo.codec().encode(s,i);o.lengthDelimited!==!1&&i.ldelim()},(n,i)=>{let o={peerId:new Uint8Array(0),seq:0n,addresses:[]},s=i==null?n.len:n.pos+i;for(;n.pos<s;){let a=n.uint32();switch(a>>>3){case 1:o.peerId=n.bytes();break;case 2:o.seq=n.uint64();break;case 3:o.addresses.push(t.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return o})),r),t.encode=n=>pe(n,t.codec()),t.decode=n=>de(n,t.codec())})(Wo||(Wo={}));var Yg="libp2p-peer-record",Wg=Uint8Array.from([3,1]);var He=class{constructor(e){this.domain=He.DOMAIN,this.codec=He.CODEC;let{peerId:r,multiaddrs:n,seqNumber:i}=e;this.peerId=r,this.multiaddrs=n??[],this.seqNumber=i??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Wo.encode({peerId:this.peerId.toBytes(),seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof He)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!Gg(this.multiaddrs,e.multiaddrs))}};He.createFromProtobuf=t=>{let e=Wo.decode(t),r=Yr(e.peerId),n=(e.addresses??[]).map(o=>Ie(o.multiaddr)),i=e.seq;return new He({peerId:r,multiaddrs:n,seqNumber:i})};He.DOMAIN=Yg;He.CODEC=Wg;var Ya="0.0.0",Qg="libp2p";var _f=`js-libp2p/${Ya}`;var Xg="0.1.0",Zg="id",Jg="id/push",jg="1.0.0",ew="1.0.0";var Qo=U(Hr(),1);var Xo=U(Ar(),1),ge=M("libp2p:identify"),tw=1024*8,Hi=class{constructor(e,r){this.components=e,this.started=!1,this.init=r,this.identifyProtocolStr=`/${r.protocolPrefix}/${Zg}/${jg}`,this.identifyPushProtocolStr=`/${r.protocolPrefix}/${Jg}/${ew}`,this.host={protocolVersion:`${r.protocolPrefix}/${Xg}`,...r.host},this.components.connectionManager.addEventListener("peer:connect",n=>{let i=n.detail;this.identify(i).catch(ge.error)}),this.components.peerStore.addEventListener("change:multiaddrs",n=>{let{peerId:i}=n.detail;this.components.peerId.equals(i)&&this.pushToPeerStore().catch(o=>{ge.error(o)})}),this.components.peerStore.addEventListener("change:protocols",n=>{let{peerId:i}=n.detail;this.components.peerId.equals(i)&&this.pushToPeerStore().catch(o=>{ge.error(o)})})}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.metadataBook.setValue(this.components.peerId,"AgentVersion",F(this.host.agentVersion)),await this.components.peerStore.metadataBook.setValue(this.components.peerId,"ProtocolVersion",F(this.host.protocolVersion)),await this.components.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(r=>{ge.error(r)})},{maxInboundStreams:this.init.maxInboundStreams,maxOutboundStreams:this.init.maxOutboundStreams}),await this.components.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(r=>{ge.error(r)})},{maxInboundStreams:this.init.maxPushIncomingStreams,maxOutboundStreams:this.init.maxPushOutgoingStreams}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.identifyProtocolStr),await this.components.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async push(e){let r=await this.components.peerStore.addressBook.getRawEnvelope(this.components.peerId),n=this.components.addressManager.getAddresses().map(s=>s.bytes),i=await this.components.peerStore.protoBook.get(this.components.peerId),o=e.map(async s=>{let a,c=new Qo.TimeoutController(this.init.timeout);try{(0,Xo.setMaxListeners)?.(1/0,c.signal)}catch{}try{a=await s.newStream([this.identifyPushProtocolStr],{signal:c.signal}),await gt(a,c.signal).sink(Ue([jn.encode({listenAddrs:n,signedPeerRecord:r,protocols:i})],l=>It(l)))}catch(u){ge.error("could not push identify update to peer",u)}finally{a?.close(),c.clear()}});await Promise.all(o)}async pushToPeerStore(){if(!this.isStarted())return;let e=[];for(let r of this.components.connectionManager.getConnections()){let n=r.remotePeer;(await this.components.peerStore.get(n)).protocols.includes(this.identifyPushProtocolStr)&&e.push(r)}await this.push(e)}async _identify(e,r={}){let n,i=r.signal,o;if(i==null){n=new Qo.TimeoutController(this.init.timeout),i=n.signal;try{(0,Xo.setMaxListeners)?.(1/0,n.signal)}catch{}}try{o=await e.newStream([this.identifyProtocolStr],{signal:i});let s=gt(o,i),a=await Ue([],s,c=>yt(c,{maxDataLength:this.init.maxIdentifyMessageSize??tw}),async c=>await at(c));if(a==null)throw new w("No data could be retrieved",S.ERR_CONNECTION_ENDED);try{return jn.decode(a)}catch(c){throw new w(String(c),S.ERR_INVALID_MESSAGE)}}finally{n?.clear(),o?.close()}}async identify(e,r={}){let n=await this._identify(e,r),{publicKey:i,listenAddrs:o,protocols:s,observedAddr:a,signedPeerRecord:c,agentVersion:u,protocolVersion:l}=n;if(i==null)throw new w("public key was missing from identify message",S.ERR_MISSING_PUBLIC_KEY);let f=await Wr(i);if(!e.remotePeer.equals(f))throw new w("identified peer does not match the expected peer",S.ERR_INVALID_PEER);if(this.components.peerId.equals(f))throw new w("identified peer is our own peer id?",S.ERR_INVALID_PEER);let h=Hi.getCleanMultiaddr(a);if(c!=null){ge("received signed peer record from %p",f);try{let d=await Qe.openAndCertify(c,He.DOMAIN);if(!d.peerId.equals(f))throw new w("identified peer does not match the expected peer",S.ERR_INVALID_PEER);if(await this.components.peerStore.addressBook.consumePeerRecord(d)){await this.components.peerStore.protoBook.set(f,s),u!=null&&await this.components.peerStore.metadataBook.setValue(f,"AgentVersion",F(u)),l!=null&&await this.components.peerStore.metadataBook.setValue(f,"ProtocolVersion",F(l)),ge("identify completed for peer %p with protocols %o",f,s);return}}catch(d){ge("received invalid envelope, discard it and fallback to listenAddrs is available",d)}}else ge("no signed peer record received from %p",f);ge("falling back to legacy addresses from %p",f);try{await this.components.peerStore.addressBook.set(f,o.map(d=>Ie(d)))}catch(d){ge.error("received invalid addrs",d)}await this.components.peerStore.protoBook.set(f,s),u!=null&&await this.components.peerStore.metadataBook.setValue(f,"AgentVersion",F(u)),l!=null&&await this.components.peerStore.metadataBook.setValue(f,"ProtocolVersion",F(l)),ge("identify completed for peer %p and protocols %o",f,s),ge("our observed address is %s",h),h!=null&&this.components.addressManager.getObservedAddrs().length<(this.init.maxObservedAddresses??1/0)&&(ge("storing our observed address %s",h?.toString()),this.components.addressManager.addObservedAddr(h))}async _handleIdentify(e){let{connection:r,stream:n}=e,i=new Qo.TimeoutController(this.init.timeout);try{(0,Xo.setMaxListeners)?.(1/0,i.signal)}catch{}try{let o=this.components.peerId.publicKey??new Uint8Array(0),s=await this.components.peerStore.get(this.components.peerId),a=this.components.addressManager.getAddresses().map(h=>h.decapsulateCode(j("p2p").code)),c=s.peerRecordEnvelope;if(a.length>0&&c==null){let h=new He({peerId:this.components.peerId,multiaddrs:a}),d=await Qe.seal(h,this.components.peerId);await this.components.peerStore.addressBook.consumePeerRecord(d),c=d.marshal().subarray()}let u=jn.encode({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:o,listenAddrs:a.map(h=>h.bytes),signedPeerRecord:c,observedAddr:r.remoteAddr.bytes,protocols:s.protocols}),l=gt(n,i.signal),f=Ue([u],h=>It(h));await l.sink(f)}catch(o){ge.error("could not respond to identify request",o)}finally{n.close(),i.clear()}}async _handlePush(e){let{connection:r,stream:n}=e,i=new Qo.TimeoutController(this.init.timeout);try{(0,Xo.setMaxListeners)?.(1/0,i.signal)}catch{}let o;try{let a=gt(n,i.signal),c=await Ue([],a,u=>yt(u,{maxDataLength:this.init.maxIdentifyMessageSize??tw}),async u=>await at(u));c!=null&&(o=jn.decode(c))}catch(a){ge.error("received invalid message",a);return}finally{n.close(),i.clear()}if(o==null){ge.error("received invalid message");return}let s=r.remotePeer;if(this.components.peerId.equals(s)){ge("received push from ourselves?");return}if(ge("received push from %p",s),o.signedPeerRecord!=null){ge("received signedPeerRecord in push");try{let a=await Qe.openAndCertify(o.signedPeerRecord,He.DOMAIN);if(await this.components.peerStore.addressBook.consumePeerRecord(a)){ge("consumed signedPeerRecord sent in push"),await this.components.peerStore.protoBook.set(s,o.protocols);return}else ge("failed to consume signedPeerRecord sent in push")}catch(a){ge("received invalid envelope, discard it and fallback to listenAddrs is available",a)}}else ge("did not receive signedPeerRecord in push");try{await this.components.peerStore.addressBook.set(s,o.listenAddrs.map(a=>Ie(a)))}catch(a){ge.error("received invalid addrs",a)}try{await this.components.peerStore.protoBook.set(s,o.protocols)}catch(a){ge.error("received invalid protocols",a)}ge("handled push from %p",s)}static getCleanMultiaddr(e){if(e!=null&&e.length>0)try{return Ie(e)}catch{}}};var Zo;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.identifier!=null&&r.identifier!==""&&(n.uint32(10),n.string(r.identifier)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={identifier:""},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.identifier=r.string();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Zo||(Zo={}));var Xt;(function(t){let e;(function(i){i.OK="OK",i.NOT_FOUND="NOT_FOUND",i.ERROR="ERROR"})(e=t.StatusCode||(t.StatusCode={}));let r;(function(i){i[i.OK=0]="OK",i[i.NOT_FOUND=1]="NOT_FOUND",i[i.ERROR=2]="ERROR"})(r||(r={})),function(i){i.codec=()=>rn(r)}(e=t.StatusCode||(t.StatusCode={}));let n;t.codec=()=>(n==null&&(n=me((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.status!=null&&r[i.status]!==0&&(o.uint32(8),t.StatusCode.codec().encode(i.status,o)),i.data!=null&&i.data.byteLength>0&&(o.uint32(18),o.bytes(i.data)),s.lengthDelimited!==!1&&o.ldelim()},(i,o)=>{let s={status:e.OK,data:new Uint8Array(0)},a=o==null?i.len:i.pos+o;for(;i.pos<a;){let c=i.uint32();switch(c>>>3){case 1:s.status=t.StatusCode.codec().decode(i);break;case 2:s.data=i.bytes();break;default:i.skipType(c&7);break}}return s})),n),t.encode=i=>pe(i,t.codec()),t.decode=i=>de(i,t.codec())})(Xt||(Xt={}));var rw="0.0.1",nw="fetch";var iw=U(Hr(),1),ow=U(Ar(),1);var Nt=M("libp2p:fetch"),Wa=class{constructor(e,r){this.started=!1,this.components=e,this.protocol=`/${r.protocolPrefix??"libp2p"}/${nw}/${rw}`,this.lookupFunctions=new Map,this.handleMessage=this.handleMessage.bind(this),this.init=r}async start(){await this.components.registrar.handle(this.protocol,e=>{this.handleMessage(e).catch(r=>{Nt.error(r)}).finally(()=>{e.stream.close()})},{maxInboundStreams:this.init.maxInboundStreams,maxOutboundStreams:this.init.maxOutboundStreams}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}async fetch(e,r,n={}){Nt("dialing %s to %p",this.protocol,e);let i=await this.components.connectionManager.openConnection(e,n),o,s=n.signal,a;if(s==null){Nt("using default timeout of %d ms",this.init.timeout),o=new iw.TimeoutController(this.init.timeout),s=o.signal;try{(0,ow.setMaxListeners)?.(1/0,o.signal)}catch{}}try{a=await i.newStream(this.protocol,{signal:s});let c=gt(a,s);return Nt("fetch %s",r),await Ue([Zo.encode({identifier:r})],l=>It(l),c,l=>yt(l),async function(l){let f=await at(l);if(f==null)throw new w("No data received",S.ERR_INVALID_MESSAGE);let h=Xt.decode(f);switch(h.status){case Xt.StatusCode.OK:return Nt("received status for %s ok",r),h.data;case Xt.StatusCode.NOT_FOUND:return Nt("received status for %s not found",r),null;case Xt.StatusCode.ERROR:{Nt("received status for %s error",r);let d=$(h.data);throw new w("Error in fetch protocol response: "+d,S.ERR_INVALID_PARAMETERS)}default:throw Nt("received status for %s unknown",r),new w("Unknown response status",S.ERR_INVALID_MESSAGE)}})??null}finally{o?.clear(),a?.close()}}async handleMessage(e){let{stream:r}=e,n=this;await Ue(r,i=>yt(i),async function*(i){let o=await at(i);if(o==null)throw new w("No data received",S.ERR_INVALID_MESSAGE);let s=Zo.decode(o),a,c=n._getLookupFunction(s.identifier);if(c!=null){Nt("look up data with identifier %s",s.identifier);let u=await c(s.identifier);u!=null?(Nt("sending status for %s ok",s.identifier),a={status:Xt.StatusCode.OK,data:u}):(Nt("sending status for %s not found",s.identifier),a={status:Xt.StatusCode.NOT_FOUND,data:new Uint8Array(0)})}else{Nt("sending status for %s error",s.identifier);let u=F(`No lookup function registered for key: ${s.identifier}`);a={status:Xt.StatusCode.ERROR,data:u}}yield Xt.encode(a)},i=>It(i),r)}_getLookupFunction(e){for(let r of this.lookupFunctions.keys())if(e.startsWith(r))return this.lookupFunctions.get(r)}registerLookupFunction(e,r){if(this.lookupFunctions.has(e))throw new w(`Fetch protocol handler for key prefix '${e}' already registered`,S.ERR_KEY_ALREADY_EXISTS);this.lookupFunctions.set(e,r)}unregisterLookupFunction(e,r){r!=null&&this.lookupFunctions.get(e)!==r||this.lookupFunctions.delete(e)}};var sw="1.0.0",aw="ping";var uw=U(Hr(),1),lw=U(Ar(),1),cw=M("libp2p:ping"),Qa=class{constructor(e,r){this.components=e,this.started=!1,this.protocol=`/${r.protocolPrefix}/${aw}/${sw}`,this.init=r}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.init.maxInboundStreams,maxOutboundStreams:this.init.maxOutboundStreams}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){let{stream:r}=e;Ue(r,r).catch(n=>{cw.error(n)})}async ping(e,r={}){cw("dialing %s to %p",this.protocol,e);let n=Date.now(),i=Nr(32),o=await this.components.connectionManager.openConnection(e,r),s,a=r.signal,c;if(a==null){s=new uw.TimeoutController(this.init.timeout),a=s.signal;try{(0,lw.setMaxListeners)?.(1/0,s.signal)}catch{}}try{c=await o.newStream([this.protocol],{signal:a});let u=gt(c,a),l=await Ue([i],u,async h=>await at(h)),f=Date.now();if(l==null||!xe(i,l.subarray()))throw new w("Received wrong ping ack",S.ERR_WRONG_PING_ACK);return f-n}finally{s?.clear(),c?.close()}}};async function fw(){throw new Error("Not supported in browsers")}var pw=U(dw(),1),Sf=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,Xa=(0,pw.default)(),Jo=Sf&&!Xa,mw=Xa&&!Sf,yw=Xa&&Sf,gw=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!Xa,ww=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,KN=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+(()=>"_")()+"ENV"]==="test",Ew=typeof navigator<"u"&&navigator.product==="ReactNative";function xw(t){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(t)||/^::1$/.test(t)}function vw(t){let{address:e}=t.nodeAddress();return xw(e)}var Af=M("libp2p:nat"),Rf=7200;function iA(t=1024,e=65535){return Math.floor(Math.random()*(e-t+1)+t)}var Za=class{constructor(e,r){if(this.components=e,this.started=!1,this.enabled=r.enabled,this.externalAddress=r.externalAddress,this.localAddress=r.localAddress,this.description=r.description??`${Qg}@${Ya} ${this.components.peerId.toString()}`,this.ttl=r.ttl??Rf,this.keepAlive=r.keepAlive??!0,this.gateway=r.gateway,this.ttl<Rf)throw new w(`NatManager ttl should be at least ${Rf} seconds`,S.ERR_INVALID_PARAMETERS)}isStarted(){return this.started}start(){}afterStart(){Jo||!this.enabled||this.started||(this.started=!0,this._start().catch(e=>{Af.error(e)}))}async _start(){let e=this.components.transportManager.getAddrs();for(let r of e){let{family:n,host:i,port:o,transport:s}=r.toOptions();if(!r.isThinWaistAddress()||s!=="tcp"||vw(r)||n!==4)continue;let a=await this._getClient(),c=this.externalAddress??await a.externalIp(),u=Dn(c);if(u===!0)throw new Error(`${c} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`);if(u==null)throw new Error(`${c} is not an IP address`);let l=iA();Af(`opening uPnP connection from ${c}:${l} to ${i}:${o}`),await a.map({publicPort:l,localPort:o,localAddress:this.localAddress,protocol:s.toUpperCase()==="TCP"?"TCP":"UDP"}),this.components.addressManager.addObservedAddr(zh({family:4,address:c,port:l},s))}}async _getClient(){return this.client!=null?this.client:(this.client=await fw({description:this.description,ttl:this.ttl,keepAlive:this.keepAlive,gateway:this.gateway}),this.client)}async stop(){if(!(Jo||this.client==null))try{await this.client.close(),this.client=void 0}catch(e){Af.error(e)}}};var oA=M("libp2p:peer-record-updater"),Ja=class{constructor(e){this.components=e,this.started=!1,this.update=this.update.bind(this)}isStarted(){return this.started}async start(){this.started=!0,this.components.transportManager.addEventListener("listener:listening",this.update),this.components.transportManager.addEventListener("listener:close",this.update),this.components.addressManager.addEventListener("change:addresses",this.update)}async stop(){this.started=!1,this.components.transportManager.removeEventListener("listener:listening",this.update),this.components.transportManager.removeEventListener("listener:close",this.update),this.components.addressManager.removeEventListener("change:addresses",this.update)}update(){Promise.resolve().then(async()=>{let e=new He({peerId:this.components.peerId,multiaddrs:this.components.addressManager.getAddresses().map(n=>n.decapsulateCode(j("p2p").code))}),r=await Qe.seal(e,this.components.peerId);await this.components.peerStore.addressBook.consumePeerRecord(r)}).catch(e=>{oA.error("Could not update self peer record: %o",e)})}};var ja=class{constructor(e){this.dht=e}async findPeer(e,r={}){for await(let n of this.dht.findPeer(e,r))if(n.name==="FINAL_PEER")return n.peer;throw new w(W.NOT_FOUND,S.ERR_NOT_FOUND)}async*getClosestPeers(e,r={}){for await(let n of this.dht.getClosestPeers(e,r))n.name==="FINAL_PEER"&&(yield n.peer)}};var Y={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS",ERR_NOT_FOUND:"ERR_NOT_FOUND"};var we=M("libp2p:peer-store:address-book"),ec="change:multiaddrs";async function sA(){return!0}var tc=class{constructor(e,r,n){this.dispatchEvent=e,this.store=r,this.addressFilter=n??sA}async consumePeerRecord(e){we.trace("consumePeerRecord await write lock");let r=await this.store.lock.writeLock();we.trace("consumePeerRecord got write lock");let n,i,o;try{let s;try{s=He.createFromProtobuf(e.payload)}catch{return we.error("invalid peer record received"),!1}n=s.peerId;let a=s.multiaddrs;if(!n.equals(e.peerId))return we("signing key does not match PeerId in the PeerRecord"),!1;if(a==null||a.length===0)return!1;if(await this.store.has(n)&&(i=await this.store.load(n),i.peerRecordEnvelope!=null)){let u=await Qe.createFromProtobuf(i.peerRecordEnvelope),l=He.createFromProtobuf(u.payload);if(l.seqNumber>=s.seqNumber)return we("sequence number was lower or equal to existing sequence number - stored: %d received: %d",l.seqNumber,s.seqNumber),!1}let c=await If(n,a,this.addressFilter,!0);o=await this.store.patchOrCreate(n,{addresses:c,peerRecordEnvelope:e.marshal().subarray()}),we("stored provided peer record for %p",s.peerId)}finally{we.trace("consumePeerRecord release write lock"),r()}return this.dispatchEvent(new G(ec,{detail:{peerId:n,multiaddrs:o.addresses.map(({multiaddr:s})=>s),oldMultiaddrs:i==null?[]:i.addresses.map(({multiaddr:s})=>s)}})),!0}async getRawEnvelope(e){we.trace("getRawEnvelope await read lock");let r=await this.store.lock.readLock();we.trace("getRawEnvelope got read lock");try{return(await this.store.load(e)).peerRecordEnvelope}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{we.trace("getRawEnvelope release read lock"),r()}}async getPeerRecord(e){let r=await this.getRawEnvelope(e);if(r!=null)return await Qe.createFromProtobuf(r)}async get(e){e=Fe(e),we.trace("get wait for read lock");let r=await this.store.lock.readLock();we.trace("get got read lock");try{return(await this.store.load(e)).addresses}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{we.trace("get release read lock"),r()}return[]}async set(e,r){if(e=Fe(e),!Array.isArray(r))throw we.error("multiaddrs must be an array of Multiaddrs"),new w("multiaddrs must be an array of Multiaddrs",Y.ERR_INVALID_PARAMETERS);we.trace("set await write lock");let n=await this.store.lock.writeLock();we.trace("set got write lock");let i=!1,o,s;try{let a=await If(e,r,this.addressFilter);if(a.length===0)return;try{if(o=await this.store.load(e),i=!0,new Set([...a.map(({multiaddr:c})=>c.toString()),...o.addresses.map(({multiaddr:c})=>c.toString())]).size===o.addresses.length&&a.length===o.addresses.length)return}catch(c){if(c.code!==Y.ERR_NOT_FOUND)throw c}s=await this.store.patchOrCreate(e,{addresses:a}),we("set multiaddrs for %p",e)}finally{we.trace("set multiaddrs for %p",e),we("set release write lock"),n()}this.dispatchEvent(new G(ec,{detail:{peerId:e,multiaddrs:s.addresses.map(a=>a.multiaddr),oldMultiaddrs:o==null?[]:o.addresses.map(({multiaddr:a})=>a)}})),i||this.dispatchEvent(new G("peer",{detail:{id:e,multiaddrs:s.addresses.map(a=>a.multiaddr),protocols:s.protocols}}))}async add(e,r){if(e=Fe(e),!Array.isArray(r))throw we.error("multiaddrs must be an array of Multiaddrs"),new w("multiaddrs must be an array of Multiaddrs",Y.ERR_INVALID_PARAMETERS);we.trace("add await write lock");let n=await this.store.lock.writeLock();we.trace("add got write lock");let i=!1,o,s;try{let a=await If(e,r,this.addressFilter);if(a.length===0)return;try{if(o=await this.store.load(e),i=!0,new Set([...a.map(({multiaddr:c})=>c.toString()),...o.addresses.map(({multiaddr:c})=>c.toString())]).size===o.addresses.length)return}catch(c){if(c.code!==Y.ERR_NOT_FOUND)throw c}s=await this.store.mergeOrCreate(e,{addresses:a}),we("added multiaddrs for %p",e)}finally{we.trace("set release write lock"),n()}this.dispatchEvent(new G(ec,{detail:{peerId:e,multiaddrs:s.addresses.map(a=>a.multiaddr),oldMultiaddrs:o==null?[]:o.addresses.map(({multiaddr:a})=>a)}})),i||this.dispatchEvent(new G("peer",{detail:{id:e,multiaddrs:s.addresses.map(a=>a.multiaddr),protocols:s.protocols}}))}async delete(e){e=Fe(e),we.trace("delete await write lock");let r=await this.store.lock.writeLock();we.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}await this.store.patchOrCreate(e,{addresses:[]})}finally{we.trace("delete release write lock"),r()}n!=null&&this.dispatchEvent(new G(ec,{detail:{peerId:e,multiaddrs:[],oldMultiaddrs:n==null?[]:n.addresses.map(({multiaddr:i})=>i)}}))}};async function If(t,e,r,n=!1){let i=[];return await Promise.all(e.map(async o=>{if(!_r(o))throw we.error("multiaddr must be an instance of Multiaddr"),new w("multiaddr must be an instance of Multiaddr",Y.ERR_INVALID_PARAMETERS);await r(t,o)&&i.push({multiaddr:o,isCertified:n})})),i}var mr=M("libp2p:peer-store:key-book"),bw="change:pubkey",rc=class{constructor(e,r){this.dispatchEvent=e,this.store=r}async set(e,r){if(e=Fe(e),!(r instanceof Uint8Array))throw mr.error("publicKey must be an instance of Uint8Array to store data"),new w("publicKey must be an instance of PublicKey",Y.ERR_INVALID_PARAMETERS);mr.trace("set await write lock");let n=await this.store.lock.writeLock();mr.trace("set got write lock");let i=!1,o;try{try{if(o=await this.store.load(e),o.pubKey!=null&&xe(o.pubKey,r))return}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}await this.store.patchOrCreate(e,{pubKey:r}),i=!0}finally{mr.trace("set release write lock"),n()}i&&this.dispatchEvent(new G(bw,{detail:{peerId:e,publicKey:r,oldPublicKey:o?.pubKey}}))}async get(e){e=Fe(e),mr.trace("get await write lock");let r=await this.store.lock.readLock();mr.trace("get got write lock");try{return(await this.store.load(e)).pubKey}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{mr("get release write lock"),r()}}async delete(e){e=Fe(e),mr.trace("delete await write lock");let r=await this.store.lock.writeLock();mr.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}await this.store.patchOrCreate(e,{pubKey:void 0})}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}finally{mr.trace("delete release write lock"),r()}this.dispatchEvent(new G(bw,{detail:{peerId:e,publicKey:void 0,oldPublicKey:n?.pubKey}}))}};var Ge=M("libp2p:peer-store:metadata-book"),nc="change:metadata",ic=class{constructor(e,r){this.dispatchEvent=e,this.store=r}async get(e){e=Fe(e),Ge.trace("get await read lock");let r=await this.store.lock.readLock();Ge.trace("get got read lock");try{return(await this.store.load(e)).metadata}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{Ge.trace("get release read lock"),r()}return new Map}async getValue(e,r){e=Fe(e),Ge.trace("getValue await read lock");let n=await this.store.lock.readLock();Ge.trace("getValue got read lock");try{return(await this.store.load(e)).metadata.get(r)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}finally{Ge.trace("getValue release write lock"),n()}}async set(e,r){if(e=Fe(e),!(r instanceof Map))throw Ge.error("valid metadata must be provided to store data"),new w("valid metadata must be provided",Y.ERR_INVALID_PARAMETERS);Ge.trace("set await write lock");let n=await this.store.lock.writeLock();Ge.trace("set got write lock");let i;try{try{i=await this.store.load(e)}catch(o){if(o.code!==Y.ERR_NOT_FOUND)throw o}await this.store.mergeOrCreate(e,{metadata:r})}finally{Ge.trace("set release write lock"),n()}this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:r,oldMetadata:i==null?new Map:i.metadata}}))}async setValue(e,r,n){if(e=Fe(e),typeof r!="string"||!(n instanceof Uint8Array))throw Ge.error("valid key and value must be provided to store data"),new w("valid key and value must be provided",Y.ERR_INVALID_PARAMETERS);Ge.trace("setValue await write lock");let i=await this.store.lock.writeLock();Ge.trace("setValue got write lock");let o,s;try{try{o=await this.store.load(e);let a=o.metadata.get(r);if(a!=null&&xe(n,a))return}catch(a){if(a.code!==Y.ERR_NOT_FOUND)throw a}s=await this.store.mergeOrCreate(e,{metadata:new Map([[r,n]])})}finally{Ge.trace("setValue release write lock"),i()}this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:s.metadata,oldMetadata:o==null?new Map:o.metadata}}))}async delete(e){e=Fe(e),Ge.trace("delete await write lock");let r=await this.store.lock.writeLock();Ge.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}n!=null&&await this.store.patch(e,{metadata:new Map})}finally{Ge.trace("delete release write lock"),r()}n!=null&&this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:new Map,oldMetadata:n.metadata}}))}async deleteValue(e,r){e=Fe(e),Ge.trace("deleteValue await write lock");let n=await this.store.lock.writeLock();Ge.trace("deleteValue got write lock");let i,o;try{o=await this.store.load(e),i=o.metadata,i.delete(r),await this.store.patch(e,{metadata:i})}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}finally{Ge.trace("deleteValue release write lock"),n()}i!=null&&this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:i,oldMetadata:o==null?new Map:o.metadata}}))}};var Ye=M("libp2p:peer-store:proto-book"),oc="change:protocols",sc=class{constructor(e,r){this.dispatchEvent=e,this.store=r}async get(e){Ye.trace("get wait for read lock");let r=await this.store.lock.readLock();Ye.trace("get got read lock");try{return(await this.store.load(e)).protocols}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{Ye.trace("get release read lock"),r()}return[]}async set(e,r){if(e=Fe(e),!Array.isArray(r))throw Ye.error("protocols must be provided to store data"),new w("protocols must be provided",Y.ERR_INVALID_PARAMETERS);Ye.trace("set await write lock");let n=await this.store.lock.writeLock();Ye.trace("set got write lock");let i,o;try{try{if(i=await this.store.load(e),new Set([...r]).size===i.protocols.length)return}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}o=await this.store.patchOrCreate(e,{protocols:r}),Ye("stored provided protocols for %p",e)}finally{Ye.trace("set release write lock"),n()}this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:o.protocols,oldProtocols:i==null?[]:i.protocols}}))}async add(e,r){if(e=Fe(e),!Array.isArray(r))throw Ye.error("protocols must be provided to store data"),new w("protocols must be provided",Y.ERR_INVALID_PARAMETERS);Ye.trace("add await write lock");let n=await this.store.lock.writeLock();Ye.trace("add got write lock");let i,o;try{try{if(i=await this.store.load(e),new Set([...i.protocols,...r]).size===i.protocols.length)return}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}o=await this.store.mergeOrCreate(e,{protocols:r}),Ye("added provided protocols for %p",e)}finally{Ye.trace("add release write lock"),n()}this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:o.protocols,oldProtocols:i==null?[]:i.protocols}}))}async remove(e,r){if(e=Fe(e),!Array.isArray(r))throw Ye.error("protocols must be provided to store data"),new w("protocols must be provided",Y.ERR_INVALID_PARAMETERS);Ye.trace("remove await write lock");let n=await this.store.lock.writeLock();Ye.trace("remove got write lock");let i,o;try{try{i=await this.store.load(e);let s=new Set(i.protocols);for(let a of r)s.delete(a);if(i.protocols.length===s.size)return;r=Array.from(s)}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}o=await this.store.patchOrCreate(e,{protocols:r})}finally{Ye.trace("remove release write lock"),n()}this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:o.protocols,oldProtocols:i==null?[]:i.protocols}}))}async delete(e){e=Fe(e),Ye.trace("delete await write lock");let r=await this.store.lock.writeLock();Ye.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}await this.store.patchOrCreate(e,{protocols:[]})}finally{Ye.trace("delete release write lock"),r()}n!=null&&this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:[],oldProtocols:n.protocols}}))}};var jo;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.addresses!=null)for(let o of r.addresses)n.uint32(10),ac.codec().encode(o,n);if(r.protocols!=null)for(let o of r.protocols)n.uint32(18),n.string(o);if(r.metadata!=null)for(let o of r.metadata)n.uint32(26),cc.codec().encode(o,n);r.pubKey!=null&&(n.uint32(34),n.bytes(r.pubKey)),r.peerRecordEnvelope!=null&&(n.uint32(42),n.bytes(r.peerRecordEnvelope)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={addresses:[],protocols:[],metadata:[]},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.addresses.push(ac.codec().decode(r,r.uint32()));break;case 2:i.protocols.push(r.string());break;case 3:i.metadata.push(cc.codec().decode(r,r.uint32()));break;case 4:i.pubKey=r.bytes();break;case 5:i.peerRecordEnvelope=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(jo||(jo={}));var ac;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.multiaddr!=null&&r.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(r.multiaddr)),r.isCertified!=null&&(n.uint32(16),n.bool(r.isCertified)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={multiaddr:new Uint8Array(0)},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.multiaddr=r.bytes();break;case 2:i.isCertified=r.bool();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(ac||(ac={}));var cc;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.key!=null&&r.key!==""&&(n.uint32(10),n.string(r.key)),r.value!=null&&r.value.byteLength>0&&(n.uint32(18),n.bytes(r.value)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={key:"",value:new Uint8Array(0)},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.key=r.string();break;case 2:i.value=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(cc||(cc={}));var Tf=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Cf=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},_w=t=>globalThis.DOMException===void 0?new Cf(t):new DOMException(t),Sw=t=>{let e=t.reason===void 0?_w("This operation was aborted."):t.reason;return e instanceof Error?e:_w(e)};function Bf(t,e){let{milliseconds:r,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=e,s,a=new Promise((c,u)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(r===Number.POSITIVE_INFINITY){c(t);return}if(e.signal){let{signal:f}=e;f.aborted&&u(Sw(f)),f.addEventListener("abort",()=>{u(Sw(f))})}let l=new Tf;s=o.setTimeout.call(void 0,()=>{if(n){try{c(n())}catch(f){u(f)}return}typeof t.cancel=="function"&&t.cancel(),i===!1?c():i instanceof Error?u(i):(l.message=i??`Promise timed out after ${r} milliseconds`,u(l))},r),(async()=>{try{c(await t)}catch(f){u(f)}finally{o.clearTimeout.call(void 0,s)}})()});return a.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},a}var Pf="lock:worker:request-read",Df="lock:worker:release-read",Lf="lock:master:grant-read",Nf="lock:worker:request-write",kf="lock:worker:release-write",Of="lock:master:grant-write";var wn={},Gi=t=>{t.addEventListener("message",e=>{Gi.dispatchEvent("message",t,e)}),t.port!=null&&t.port.addEventListener("message",e=>{Gi.dispatchEvent("message",t,e)})};Gi.addEventListener=(t,e)=>{wn[t]==null&&(wn[t]=[]),wn[t].push(e)};Gi.removeEventListener=(t,e)=>{wn[t]!=null&&(wn[t]=wn[t].filter(r=>r===e))};Gi.dispatchEvent=function(t,e,r){wn[t]!=null&&wn[t].forEach(n=>n(e,r))};var Mf=Gi;var Aw=(t,e,r,n,i)=>(o,s)=>{if(s.data.type!==r)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};t.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>(o.postMessage({type:i,name:a.name,identifier:a.identifier}),await new Promise(c=>{let u=l=>{if(l==null||l.data==null)return;let f={type:l.data.type,name:l.data.name,identifier:l.data.identifier};f.type===n&&f.identifier===a.identifier&&(o.removeEventListener("message",u),c())};o.addEventListener("message",u)}))}}))},Rw=(t,e,r,n)=>async()=>{let i=ps();return globalThis.postMessage({type:e,identifier:i,name:t}),await new Promise(o=>{let s=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===r&&c.identifier===i&&(globalThis.removeEventListener("message",s),o(()=>{globalThis.postMessage({type:n,identifier:i,name:t})}))};globalThis.addEventListener("message",s)})},aA={singleProcess:!1},Iw=t=>{if(t=Object.assign({},aA,t),!!globalThis.document||t.singleProcess){let r=new EventTarget;return Mf.addEventListener("message",Aw(r,"requestReadLock",Pf,Df,Lf)),Mf.addEventListener("message",Aw(r,"requestWriteLock",Nf,kf,Of)),r}return{isWorker:!0,readLock:r=>Rw(r,Pf,Lf,Df),writeLock:r=>Rw(r,Nf,Of,kf)}};var ei={},En;async function Uf(t,e){let r,n=new Promise(i=>{r=i});return t.add(async()=>await Bf((async()=>await new Promise(i=>{r(()=>{i()})}))(),{milliseconds:e.timeout})),await n}var cA=(t,e)=>{if(En.isWorker===!0)return{readLock:En.readLock(t,e),writeLock:En.writeLock(t,e)};let r=new Kt({concurrency:1}),n;return{async readLock(){if(n!=null)return await Uf(n,e);n=new Kt({concurrency:e.concurrency,autoStart:!1});let i=n,o=Uf(n,e);return r.add(async()=>(i.start(),await i.onIdle().then(()=>{n===i&&(n=null)}))),await o},async writeLock(){return n=null,await Uf(r,e)}}},uA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ff(t){let e=Object.assign({},uA,t);return En==null&&(En=Iw(e),En.isWorker!==!0&&(En.addEventListener("requestReadLock",r=>{ei[r.data.name]!=null&&ei[r.data.name].readLock().then(async n=>await r.data.handler().finally(()=>n()))}),En.addEventListener("requestWriteLock",async r=>{ei[r.data.name]!=null&&ei[r.data.name].writeLock().then(async n=>await r.data.handler().finally(()=>n()))}))),ei[e.name]==null&&(ei[e.name]=cA(e.name,e)),ei[e.name]}var Tw=M("libp2p:peer-store:store"),Cw="/peers/",uc=class{constructor(e){this.components=e,this.lock=Ff({name:"peer-store",singleProcess:!0})}_peerIdToDatastoreKey(e){if(e.type==null)throw Tw.error("peerId must be an instance of peer-id to store data"),new w("peerId must be an instance of peer-id",Y.ERR_INVALID_PARAMETERS);let r=e.toCID().toString();return new Le(`${Cw}${r}`)}async has(e){return await this.components.datastore.has(this._peerIdToDatastoreKey(e))}async delete(e){await this.components.datastore.delete(this._peerIdToDatastoreKey(e))}async load(e){let r=await this.components.datastore.get(this._peerIdToDatastoreKey(e)),n=jo.decode(r),i=new Map;for(let o of n.metadata)i.set(o.key,o.value);return{...n,id:e,addresses:n.addresses.map(({multiaddr:o,isCertified:s})=>({multiaddr:Ie(o),isCertified:s??!1})),metadata:i,pubKey:n.pubKey??void 0,peerRecordEnvelope:n.peerRecordEnvelope??void 0}}async save(e){if(e.pubKey!=null&&e.id.publicKey!=null&&!xe(e.pubKey,e.id.publicKey))throw Tw.error("peer publicKey bytes do not match peer id publicKey bytes"),new w("publicKey bytes do not match peer id publicKey bytes",Y.ERR_INVALID_PARAMETERS);let r=new Set,n=e.addresses.filter(s=>r.has(s.multiaddr.toString())?!1:(r.add(s.multiaddr.toString()),!0)).sort((s,a)=>s.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({multiaddr:s,isCertified:a})=>({multiaddr:s.bytes,isCertified:a})),i=[];[...e.metadata.keys()].sort().forEach(s=>{let a=e.metadata.get(s);a!=null&&i.push({key:s,value:a})});let o=jo.encode({addresses:n,protocols:e.protocols.sort(),pubKey:e.pubKey,metadata:i,peerRecordEnvelope:e.peerRecordEnvelope});return await this.components.datastore.put(this._peerIdToDatastoreKey(e.id),o.subarray()),await this.load(e.id)}async patch(e,r){let n=await this.load(e);return await this._patch(e,r,n)}async patchOrCreate(e,r){let n;try{n=await this.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i;n={id:e,addresses:[],protocols:[],metadata:new Map}}return await this._patch(e,r,n)}async _patch(e,r,n){return await this.save({...n,...r,id:e})}async merge(e,r){let n=await this.load(e);return await this._merge(e,r,n)}async mergeOrCreate(e,r){let n;try{n=await this.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i;n={id:e,addresses:[],protocols:[],metadata:new Map}}return await this._merge(e,r,n)}async _merge(e,r,n){let i=new Map;return n.addresses.forEach(o=>{i.set(o.multiaddr.toString(),o.isCertified)}),(r.addresses??[]).forEach(o=>{let s=o.multiaddr.toString(),c=!!i.get(s)||o.isCertified;i.set(s,c)}),await this.save({id:e,addresses:Array.from(i.entries()).map(([o,s])=>({multiaddr:Ie(o),isCertified:s})),protocols:Array.from(new Set([...n.protocols??[],...r.protocols??[]])),metadata:new Map([...n.metadata?.entries()??[],...r.metadata?.entries()??[]]),pubKey:r.pubKey??n?.pubKey,peerRecordEnvelope:r.peerRecordEnvelope??n?.peerRecordEnvelope})}async*all(){for await(let e of this.components.datastore.queryKeys({prefix:Cw})){let r=e.toString().split("/")[2],n=xt.decode(r);yield this.load(Yr(n))}}};var Kr;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.tags!=null)for(let o of r.tags)n.uint32(10),lc.codec().encode(o,n);i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={tags:[]},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.tags.push(lc.codec().decode(r,r.uint32()));break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Kr||(Kr={}));var lc;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.name!=null&&r.name!==""&&(n.uint32(10),n.string(r.name)),r.value!=null&&(n.uint32(16),n.uint32(r.value)),r.expiry!=null&&(n.uint32(24),n.uint64(r.expiry)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={name:""},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.name=r.string();break;case 2:i.value=r.uint32();break;case 3:i.expiry=r.uint64();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(lc||(lc={}));var kt=M("libp2p:peer-store"),fc=class extends Xe{constructor(e,r={}){super(),this.components=e,this.store=new uc(e),this.addressBook=new tc(this.dispatchEvent.bind(this),this.store,r.addressFilter),this.keyBook=new rc(this.dispatchEvent.bind(this),this.store),this.metadataBook=new ic(this.dispatchEvent.bind(this),this.store),this.protoBook=new sc(this.dispatchEvent.bind(this),this.store)}async forEach(e){kt.trace("getPeers await read lock");let r=await this.store.lock.readLock();kt.trace("getPeers got read lock");try{for await(let n of this.store.all())n.id.equals(this.components.peerId)||e(n)}finally{kt.trace("getPeers release read lock"),r()}}async all(){let e=[];return await this.forEach(r=>{e.push(r)}),e}async delete(e){kt.trace("delete await write lock");let r=await this.store.lock.writeLock();kt.trace("delete got write lock");try{await this.store.delete(e)}finally{kt.trace("delete release write lock"),r()}}async get(e){kt.trace("get await read lock");let r=await this.store.lock.readLock();kt.trace("get got read lock");try{return await this.store.load(e)}finally{kt.trace("get release read lock"),r()}}async has(e){kt.trace("has await read lock");let r=await this.store.lock.readLock();kt.trace("has got read lock");try{return await this.store.has(e)}finally{kt.trace("has release read lock"),r()}}async tagPeer(e,r,n={}){let i=n.value??0,o=Math.round(i),s=n.ttl??void 0;if(o!==i||o<0||o>100)throw new w("Tag value must be between 0-100","ERR_TAG_VALUE_OUT_OF_BOUNDS");let a=await this.metadataBook.getValue(e,"tags"),c=[];a!=null&&(c=Kr.decode(a).tags),c=c.filter(u=>u.name!==r),c.push({name:r,value:o,expiry:s==null?void 0:BigInt(Date.now()+s)}),await this.metadataBook.setValue(e,"tags",Kr.encode({tags:c}).subarray())}async unTagPeer(e,r){let n=await this.metadataBook.getValue(e,"tags"),i=[];n!=null&&(i=Kr.decode(n).tags),i=i.filter(o=>o.name!==r),await this.metadataBook.setValue(e,"tags",Kr.encode({tags:i}).subarray())}async getTags(e){let r=await this.metadataBook.getValue(e,"tags"),n=[];r!=null&&(n=Kr.decode(r).tags);let i=BigInt(Date.now()),o=n.filter(s=>s.expiry==null||s.expiry>i);return o.length!==n.length&&await this.metadataBook.setValue(e,"tags",Kr.encode({tags:o}).subarray()),o.map(s=>({name:s.name,value:s.value??0}))}};var hc=class{constructor(e){this.dht=e}async provide(e){await er(this.dht.provide(e))}async*findProviders(e,r={}){for await(let n of this.dht.findProviders(e,r))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,r,n){await er(this.dht.put(e,r,n))}async get(e,r){for await(let n of this.dht.get(e,r))if(n.name==="VALUE")return n.value;throw new w("Not found","ERR_NOT_FOUND")}};var Kf;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.id!=null&&(n.uint32(10),n.bytes(r.id)),r.pubKey!=null&&(n.uint32(18),n.bytes(r.pubKey)),r.privKey!=null&&(n.uint32(26),n.bytes(r.privKey)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.id=r.bytes();break;case 2:i.pubKey=r.bytes();break;case 3:i.privKey=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Kf||(Kf={}));var dc=async()=>{let t=await Na("Ed25519"),e=await lA(t);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function lA(t){return await Wr(Sg(t.public),Ag(t))}var $f=U(Ar(),1);var pc=globalThis.CustomEvent??Event;async function*Vf(t,e={}){let r=e.concurrency??1/0;r<1&&(r=1/0);let n=e.ordered==null?!1:e.ordered,i=new EventTarget,o=[],s=tr(),a=tr(),c=!1,u,l=!1;i.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of t){if(o.length===r&&(s=tr(),await s.promise),l)break;let m={done:!1};o.push(m),p().then(y=>{m.done=!0,m.ok=!0,m.value=y,i.dispatchEvent(new pc("task-complete"))},y=>{m.done=!0,m.err=y,i.dispatchEvent(new pc("task-complete"))})}c=!0,i.dispatchEvent(new pc("task-complete"))}catch(p){u=p,i.dispatchEvent(new pc("task-complete"))}});function f(){return n?o[0]?.done:!!o.find(p=>p.done)}function*h(){for(;o.length>0&&o[0].done;){let p=o[0];if(o.shift(),p.ok)yield p.value;else throw l=!0,s.resolve(),p.err;s.resolve()}}function*d(){for(;f();)for(let p=0;p<o.length;p++)if(o[p].done){let m=o[p];if(o.splice(p,1),p--,m.ok)yield m.value;else throw l=!0,s.resolve(),m.err;s.resolve()}}for(;;){if(f()||(a=tr(),await a.promise),u!=null)throw u;if(n?yield*h():yield*d(),c&&o.length===0)break}}var zf=U(Hr(),1);var mc="/libp2p/autonat/1.0.0";var H;(function(t){let e;(function(u){u.DIAL="DIAL",u.DIAL_RESPONSE="DIAL_RESPONSE"})(e=t.MessageType||(t.MessageType={}));let r;(function(u){u[u.DIAL=0]="DIAL",u[u.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(r||(r={})),function(u){u.codec=()=>rn(r)}(e=t.MessageType||(t.MessageType={}));let n;(function(u){u.OK="OK",u.E_DIAL_ERROR="E_DIAL_ERROR",u.E_DIAL_REFUSED="E_DIAL_REFUSED",u.E_BAD_REQUEST="E_BAD_REQUEST",u.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=t.ResponseStatus||(t.ResponseStatus={}));let i;(function(u){u[u.OK=0]="OK",u[u.E_DIAL_ERROR=100]="E_DIAL_ERROR",u[u.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",u[u.E_BAD_REQUEST=200]="E_BAD_REQUEST",u[u.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(i||(i={})),function(u){u.codec=()=>rn(i)}(n=t.ResponseStatus||(t.ResponseStatus={}));let o;(function(u){let l;u.codec=()=>(l==null&&(l=me((f,h,d={})=>{if(d.lengthDelimited!==!1&&h.fork(),f.id!=null&&(h.uint32(10),h.bytes(f.id)),f.addrs!=null)for(let p of f.addrs)h.uint32(18),h.bytes(p);d.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let d={addrs:[]},p=h==null?f.len:f.pos+h;for(;f.pos<p;){let m=f.uint32();switch(m>>>3){case 1:d.id=f.bytes();break;case 2:d.addrs.push(f.bytes());break;default:f.skipType(m&7);break}}return d})),l),u.encode=f=>pe(f,u.codec()),u.decode=f=>de(f,u.codec())})(o=t.PeerInfo||(t.PeerInfo={}));let s;(function(u){let l;u.codec=()=>(l==null&&(l=me((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),t.PeerInfo.codec().encode(f.peer,h)),d.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let d={},p=h==null?f.len:f.pos+h;for(;f.pos<p;){let m=f.uint32();switch(m>>>3){case 1:d.peer=t.PeerInfo.codec().decode(f,f.uint32());break;default:f.skipType(m&7);break}}return d})),l),u.encode=f=>pe(f,u.codec()),u.decode=f=>de(f,u.codec())})(s=t.Dial||(t.Dial={}));let a;(function(u){let l;u.codec=()=>(l==null&&(l=me((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),t.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)),d.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let d={},p=h==null?f.len:f.pos+h;for(;f.pos<p;){let m=f.uint32();switch(m>>>3){case 1:d.status=t.ResponseStatus.codec().decode(f);break;case 2:d.statusText=f.string();break;case 3:d.addr=f.bytes();break;default:f.skipType(m&7);break}}return d})),l),u.encode=f=>pe(f,u.codec()),u.decode=f=>de(f,u.codec())})(a=t.DialResponse||(t.DialResponse={}));let c;t.codec=()=>(c==null&&(c=me((u,l,f={})=>{f.lengthDelimited!==!1&&l.fork(),u.type!=null&&(l.uint32(8),t.MessageType.codec().encode(u.type,l)),u.dial!=null&&(l.uint32(18),t.Dial.codec().encode(u.dial,l)),u.dialResponse!=null&&(l.uint32(26),t.DialResponse.codec().encode(u.dialResponse,l)),f.lengthDelimited!==!1&&l.ldelim()},(u,l)=>{let f={},h=l==null?u.len:u.pos+l;for(;u.pos<h;){let d=u.uint32();switch(d>>>3){case 1:f.type=t.MessageType.codec().decode(u);break;case 2:f.dial=t.Dial.codec().decode(u,u.uint32());break;case 3:f.dialResponse=t.DialResponse.codec().decode(u,u.uint32());break;default:u.skipType(d&7);break}}return f})),c),t.encode=u=>pe(u,t.codec()),t.decode=u=>de(u,t.codec())})(H||(H={}));var ue=M("libp2p:autonat"),qf=4,fA=5e3,hA=6e4,yc=class{constructor(e,r){this.components=e,this.started=!1,this._init=r,this.startupDelay=r.startupDelay??fA,this.refreshInterval=r.refreshInterval??hA,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(mc,e=>{this.handleIncomingAutonatStream(e).catch(r=>{ue.error(r)})},{maxInboundStreams:this._init.maxInboundStreams,maxOutboundStreams:this._init.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(mc),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let r=new zf.TimeoutController(this._init.timeout);try{(0,$f.setMaxListeners)?.(1/0,r.signal)}catch{}let n=this.components.addressManager.getAddresses().map(i=>i.toOptions().host);try{let i=gt(e.stream,r.signal),o=this;await Ue(i,s=>yt(s),async function*(s){let a=await at(s);if(a==null){ue("No message received"),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=H.decode(a)}catch(m){ue.error("Could not decode message",m),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let u=c.dial;if(u==null){ue.error("Dial was missing from message"),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let l,f=u.peer;if(f==null||f.id==null){ue.error("PeerId missing from message"),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{l=Yr(f.id)}catch(m){ue.error("Invalid PeerId",m),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(ue("Incoming request from %p",l),!e.connection.remotePeer.equals(l)){ue("Target peer %p did not equal sending peer %p",l,e.connection.remotePeer),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let h=f.addrs.map(m=>Ie(m)).filter(m=>{let y=m.toOptions().host===e.connection.remoteAddr.toOptions().host;return ue.trace("Request to dial %s was sent from %s is same host %s",m,e.connection.remoteAddr,y),y}).filter(m=>{let y=m.toOptions().host,g=!(Dn(y)??!1);return ue.trace("Host %s was public %s",y,g),g}).filter(m=>{let y=m.toOptions().host,g=!n.includes(y);return ue.trace("Host %s was not our host %s",y,g),g}).filter(m=>{let y=!!o.components.transportManager.transportForMultiaddr(m);return ue.trace("Transport for %s is supported %s",m,y),y}).map(m=>(m.getPeerId()==null&&(m=m.encapsulate(`/p2p/${l.toString()}`)),m));if(h.length===0){ue("No valid multiaddrs for %p in message",l),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}ue("Dial multiaddrs %s for peer %p",h.map(m=>m.toString()).join(", "),l);let d="",p=h[0];for await(let m of h){let y;p=m;try{if(y=await o.components.connectionManager.openConnection(m,{signal:r.signal}),!y.remoteAddr.equals(m))throw ue.error("Tried to dial %s but dialed %s",m,y.remoteAddr),new Error("Unexpected remote address");ue("Success %p",l),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.OK,addr:y.remoteAddr.decapsulateCode(j("p2p").code).bytes}});return}catch(g){ue("Could not dial %p",l,g),d=g.message}finally{y!=null&&await y.close()}}yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_DIAL_ERROR,statusText:d,addr:p.bytes}})},s=>It(s),e.stream)}finally{r.clear()}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{ue.error(e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,r=e.getObservedAddrs().filter(o=>{let s=o.toOptions();return!(Dn(s.host)??!1)});if(r.length===0){ue("No public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=new zf.TimeoutController(this._init.timeout);try{(0,$f.setMaxListeners)?.(1/0,n.signal)}catch{}let i=this;try{ue("verify multiaddrs %s",r.map(f=>f.toString()).join(", "));let o=H.encode({type:H.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:r.map(f=>f.bytes)}}}),a=(await dc()).toBytes(),c={},u=[];async function l(f){try{ue("Asking %p to verify multiaddr",f.id);let h=await i.components.connectionManager.openConnection(f.id,{signal:n.signal}),d=await h.newStream(mc,{signal:n.signal}),p=gt(d,n.signal),m=await Ue([o],g=>It(g),p,g=>yt(g),async g=>await at(g));if(m==null){ue("No response received from %s",h.remotePeer);return}let y=H.decode(m);if(y.type!==H.MessageType.DIAL_RESPONSE||y.dialResponse==null){ue("Invalid autonat response from %s",h.remotePeer);return}if(y.dialResponse.status===H.ResponseStatus.OK){let g=h.remoteAddr.toOptions(),x;if(g.family===4)x=g.host.split(".")[0];else if(g.family===6)x=g.host.split(":")[0];else{ue('Remote address "%s" was not IP4 or IP6?',g.host);return}if(u.includes(x)){ue("Already have response from network segment %d - %s",x,g.host);return}u.push(x)}return y.dialResponse}catch(h){ue.error(h)}}for await(let f of Vf(gs(this.components.peerRouting.getClosestPeers(a,{signal:n.signal}),h=>async()=>await l(h)),{concurrency:qf}))try{if(f==null)continue;let h=f.addr==null?r[0]:Ie(f.addr);if(ue("Autonat response for %s is %s",h,f.status),f.status===H.ResponseStatus.E_BAD_REQUEST||f.status===H.ResponseStatus.E_DIAL_REFUSED||f.addr==null&&r.length>1)continue;if(!r.some(p=>p.equals(h))){ue("Peer reported %s as %s but it was not in our observed address list",h,f.status);continue}let d=h.toString();if(c[d]==null&&(c[d]={success:0,failure:0}),f.status===H.ResponseStatus.OK?c[d].success++:f.status===H.ResponseStatus.E_DIAL_ERROR&&c[d].failure++,c[d].success===qf){ue("%s is externally dialable",h),e.confirmObservedAddr(h);return}if(c[d].failure===qf){ue("%s is not externally dialable",h),e.removeObservedAddr(h);return}}catch(h){ue.error("Could not verify external address",h)}}finally{n.clear(),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};var gc=class{constructor(e={}){this._started=!1,this._peerId=e.peerId,this._addressManager=e.addressManager,this._peerStore=e.peerStore,this._upgrader=e.upgrader,this._metrics=e.metrics,this._registrar=e.registrar,this._connectionManager=e.connectionManager,this._transportManager=e.transportManager,this._connectionGater=e.connectionGater,this._contentRouting=e.contentRouting,this._peerRouting=e.peerRouting,this._datastore=e.datastore,this._connectionProtector=e.connectionProtector,this._dht=e.dht,this._pubsub=e.pubsub}isStarted(){return this._started}async beforeStart(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.beforeStart!=null&&await e.beforeStart()}))}async start(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{await e.start()})),this._started=!0}async afterStart(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.afterStart!=null&&await e.afterStart()}))}async beforeStop(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.beforeStop!=null&&await e.beforeStop()}))}async stop(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{await e.stop()})),this._started=!1}async afterStop(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.afterStop!=null&&await e.afterStop()}))}get peerId(){if(this._peerId==null)throw new w("peerId not set","ERR_SERVICE_MISSING");return this._peerId}set peerId(e){this._peerId=e}get addressManager(){if(this._addressManager==null)throw new w("addressManager not set","ERR_SERVICE_MISSING");return this._addressManager}set addressManager(e){this._addressManager=e}get peerStore(){if(this._peerStore==null)throw new w("peerStore not set","ERR_SERVICE_MISSING");return this._peerStore}set peerStore(e){this._peerStore=e}get upgrader(){if(this._upgrader==null)throw new w("upgrader not set","ERR_SERVICE_MISSING");return this._upgrader}set upgrader(e){this._upgrader=e}get registrar(){if(this._registrar==null)throw new w("registrar not set","ERR_SERVICE_MISSING");return this._registrar}set registrar(e){this._registrar=e}get connectionManager(){if(this._connectionManager==null)throw new w("connectionManager not set","ERR_SERVICE_MISSING");return this._connectionManager}set connectionManager(e){this._connectionManager=e}get transportManager(){if(this._transportManager==null)throw new w("transportManager not set","ERR_SERVICE_MISSING");return this._transportManager}set transportManager(e){this._transportManager=e}get connectionGater(){if(this._connectionGater==null)throw new w("connectionGater not set","ERR_SERVICE_MISSING");return this._connectionGater}set connectionGater(e){this._connectionGater=e}get contentRouting(){if(this._contentRouting==null)throw new w("contentRouting not set","ERR_SERVICE_MISSING");return this._contentRouting}set contentRouting(e){this._contentRouting=e}get peerRouting(){if(this._peerRouting==null)throw new w("peerRouting not set","ERR_SERVICE_MISSING");return this._peerRouting}set peerRouting(e){this._peerRouting=e}get datastore(){if(this._datastore==null)throw new w("datastore not set","ERR_SERVICE_MISSING");return this._datastore}set datastore(e){this._datastore=e}get connectionProtector(){return this._connectionProtector}set connectionProtector(e){this._connectionProtector=e}get metrics(){return this._metrics}set metrics(e){this._metrics=e}get dht(){return this._dht}set dht(e){this._dht=e}get pubsub(){return this._pubsub}set pubsub(e){this._pubsub=e}};var dA={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:t=>t},connectionManager:{resolvers:{dnsaddr:bi},addressSorter:vi},transportManager:{faultTolerance:gn.FATAL_ALL},peerRouting:{refreshManager:{enabled:!0,interval:6e5,bootDelay:1e4}},nat:{enabled:!0,ttl:7200,keepAlive:!0},identify:{protocolPrefix:"ipfs",host:{agentVersion:_f},timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10},ping:{protocolPrefix:"ipfs",maxInboundStreams:2,maxOutboundStreams:1,timeout:1e4},fetch:{protocolPrefix:"libp2p",maxInboundStreams:1,maxOutboundStreams:1,timeout:1e4},autonat:{protocolPrefix:"libp2p",maxInboundStreams:1,maxOutboundStreams:1,timeout:3e4,startupDelay:5e3,refreshInterval:6e4}};function Bw(t){let e=jr(dA,t);if(e.transports==null||e.transports.length<1)throw new w(W.ERR_TRANSPORTS_REQUIRED,S.ERR_TRANSPORTS_REQUIRED);if(e.connectionEncryption==null||e.connectionEncryption.length===0)throw new w(W.CONN_ENCRYPTION_REQUIRED,S.CONN_ENCRYPTION_REQUIRED);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new w(W.ERR_PROTECTOR_REQUIRED,S.ERR_PROTECTOR_REQUIRED);return e.identify.host.agentVersion===_f&&(gw||mw?e.identify.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(Jo||ww||yw||Ew)&&(e.identify.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`)),e}var Pw=Symbol.for("@libp2p/peer-discovery");var wc=class extends Xe{get[Pw](){return!0}get[Symbol.toStringTag](){return"@libp2p/dummy-dht"}get wan(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}get lan(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}get(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}findProviders(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}findPeer(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}getClosestPeers(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}provide(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}put(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}async getMode(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}async setMode(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}async refreshRoutingTable(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}};var Ec=class extends Xe{constructor(){super(...arguments),this.topicValidators=new Map}isStarted(){return!1}start(){}stop(){}get globalSignaturePolicy(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}get multicodecs(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}getPeers(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}getTopics(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}subscribe(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}unsubscribe(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}getSubscribers(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}async publish(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}};var yr=M("libp2p"),Hf=class extends Xe{constructor(e){super(),this.started=!1,this.peerId=e.peerId;let r=this.components=new gc({peerId:e.peerId,datastore:e.datastore??new ys,connectionGater:{denyDialPeer:async()=>await Promise.resolve(!1),denyDialMultiaddr:async()=>await Promise.resolve(!1),denyInboundConnection:async()=>await Promise.resolve(!1),denyOutboundConnection:async()=>await Promise.resolve(!1),denyInboundEncryptedConnection:async()=>await Promise.resolve(!1),denyOutboundEncryptedConnection:async()=>await Promise.resolve(!1),denyInboundUpgradedConnection:async()=>await Promise.resolve(!1),denyOutboundUpgradedConnection:async()=>await Promise.resolve(!1),filterMultiaddrForPeer:async()=>await Promise.resolve(!0),...e.connectionGater}});r.peerStore=new fc(r,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore}),this.services=[r],e.metrics!=null&&(this.metrics=this.components.metrics=this.configureComponent(e.metrics(this.components))),this.peerStore=this.components.peerStore,this.peerStore.addEventListener("peer",s=>{let{detail:a}=s;this.dispatchEvent(new G("peer:discovery",{detail:a}))}),e.connectionProtector!=null&&(this.components.connectionProtector=e.connectionProtector(r)),this.components.upgrader=new Ga(this.components,{connectionEncryption:(e.connectionEncryption??[]).map(s=>this.configureComponent(s(this.components))),muxers:(e.streamMuxers??[]).map(s=>this.configureComponent(s(this.components))),inboundUpgradeTimeout:e.connectionManager.inboundUpgradeTimeout}),this.components.transportManager=new Oa(this.components,e.transportManager),this.connectionManager=this.components.connectionManager=new Ys(this.components,e.connectionManager),this.components.connectionManager.addEventListener("peer:disconnect",s=>{this.dispatchEvent(new G("peer:disconnect",{detail:s.detail}))}),this.components.connectionManager.addEventListener("peer:connect",s=>{this.dispatchEvent(new G("peer:connect",{detail:s.detail}))}),this.registrar=this.components.registrar=new Ha(this.components),this.components.addressManager=new Is(this.components,e.addresses),this.configureComponent(new Ja(this.components));let n=Qn.generateOptions();this.keychain=this.configureComponent(new Qn(this.components,{...n,...e.keychain})),this.services.push(new Za(this.components,e.nat)),this.identifyService=new Hi(this.components,{...e.identify}),this.configureComponent(this.identifyService),e.dht!=null?this.dht=this.components.dht=e.dht(this.components):this.dht=new wc,e.pubsub!=null?this.pubsub=this.components.pubsub=e.pubsub(this.components):this.pubsub=new Ec;let i=(e.peerRouters??[]).map(s=>this.configureComponent(s(this.components)));e.dht!=null&&(i.push(this.configureComponent(new ja(this.dht))),this.dht.addEventListener("peer",s=>{this.onDiscoveryPeer(s)})),this.peerRouting=this.components.peerRouting=this.configureComponent(new Ss(this.components,{...e.peerRouting,routers:i}));let o=(e.contentRouters??[]).map(s=>this.configureComponent(s(this.components)));e.dht!=null&&o.push(this.configureComponent(new hc(this.dht))),this.contentRouting=this.components.contentRouting=this.configureComponent(new Rs(this.components,{routers:o})),this.fetchService=this.configureComponent(new Wa(this.components,{...e.fetch})),this.pingService=this.configureComponent(new Qa(this.components,{...e.ping})),this.autonatService=this.configureComponent(new yc(this.components,{...e.autonat})),e.relay!=null&&(this.circuitService=this.configureComponent(e.relay(this.components)));for(let s of e.peerDiscovery??[])this.configureComponent(s(this.components)).addEventListener("peer",c=>{this.onDiscoveryPeer(c)});e.transports.forEach(s=>{this.components.transportManager.add(this.configureComponent(s(this.components)))})}configureComponent(e){return Er(e)&&this.services.push(e),e}async start(){if(this.started)return;this.started=!0,yr("libp2p is starting"),(await this.keychain.listKeys()).find(r=>r.name==="self")==null&&(yr("importing self key into keychain"),await this.keychain.importPeer("self",this.components.peerId));try{await Promise.all(this.services.map(async r=>{r.beforeStart!=null&&await r.beforeStart()})),await Promise.all(this.services.map(async r=>{await r.start()})),await Promise.all(this.services.map(async r=>{r.afterStart!=null&&await r.afterStart()})),yr("libp2p has started")}catch(r){throw yr.error("An error occurred starting libp2p",r),await this.stop(),r}}async stop(){this.started&&(yr("libp2p is stopping"),this.started=!1,await Promise.all(this.services.map(async e=>{e.beforeStop!=null&&await e.beforeStop()})),await Promise.all(this.services.map(async e=>{await e.stop()})),await Promise.all(this.services.map(async e=>{e.afterStop!=null&&await e.afterStop()})),yr("libp2p has stopped"))}isStarted(){return this.started}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Tr;for(let r of this.components.connectionManager.getConnections())e.add(r.remotePeer);return Array.from(e)}async dial(e,r={}){return await this.components.connectionManager.openConnection(e,r)}async dialProtocol(e,r,n={}){if(r==null)throw new w("no protocols were provided to open a stream",S.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(r=Array.isArray(r)?r:[r],r.length===0)throw new w("no protocols were provided to open a stream",S.ERR_INVALID_PROTOCOLS_FOR_STREAM);return await(await this.dial(e,n)).newStream(r,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e){_r(e)&&(e=ae(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e)}async getPublicKey(e,r={}){if(yr("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;let n=await this.peerStore.get(e);if(n.pubKey!=null)return n.pubKey;if(this.dht==null)throw new w("Public key was not in the peer store and the DHT is not enabled",S.ERR_NO_ROUTERS_AVAILABLE);let i=Me([F("/pk/"),e.multihash.digest]);for await(let o of this.dht.get(i,r))if(o.name==="VALUE"){let s=Uo(o.value);return await this.peerStore.keyBook.set(e,o.value),s.bytes}throw new w(`Node not responding with its public key: ${e.toString()}`,S.ERR_INVALID_RECORD)}async fetch(e,r,n={}){if(_r(e)){let i=ae(e.getPeerId()??"");await this.components.peerStore.addressBook.add(i,[e]),e=i}return await this.fetchService.fetch(e,r,n)}async ping(e,r={}){if(_r(e)){let n=ae(e.getPeerId()??"");await this.components.peerStore.addressBook.add(n,[e]),e=n}return await this.pingService.ping(e,r)}async handle(e,r,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async i=>{await this.components.registrar.handle(i,r,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async r=>{await this.components.registrar.unhandle(r)}))}async register(e,r){return await this.registrar.register(e,r)}unregister(e){this.registrar.unregister(e)}onDiscoveryPeer(e){let{detail:r}=e;if(r.id.toString()===this.peerId.toString()){yr.error(new Error(S.ERR_DISCOVERED_SELF));return}r.multiaddrs.length>0&&this.components.peerStore.addressBook.add(r.id,r.multiaddrs).catch(n=>{yr.error(n)}),r.protocols.length>0&&this.components.peerStore.protoBook.set(r.id,r.protocols).catch(n=>{yr.error(n)}),this.dispatchEvent(new G("peer:discovery",{detail:r}))}};async function Dw(t){if(t.peerId==null){let e=t.datastore;if(e!=null)try{let r=new Qn({datastore:e},jr(Qn.generateOptions(),t.keychain));t.peerId=await r.exportPeerId("self")}catch(r){if(r.code!=="ERR_NOT_FOUND")throw r}}return t.peerId==null&&(t.peerId=await dc()),new Hf(Bw(t))}async function pA(t){let e=await Dw(t);return t.start!==!1&&await e.start(),e}return Uw(mA);})();
|
|
48
|
+
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),hv=new RegExp(`(?:^${Vt}$)|(?:^${Vs}$)`),dv=new RegExp(`^${Vt}$`),pv=new RegExp(`^${Vs}$`),qu=t=>t&&t.exact?hv:new RegExp(`(?:${Zr(t)}${Vt}${Zr(t)})|(?:${Zr(t)}${Vs}${Zr(t)})`,"g");qu.v4=t=>t&&t.exact?dv:new RegExp(`${Zr(t)}${Vt}${Zr(t)}`,"g");qu.v6=t=>t&&t.exact?pv:new RegExp(`${Zr(t)}${Vs}${Zr(t)}`,"g");var Pd=qu;var Od=U(Ld(),1),{isValid:mv,parse:yv}=Od.default,gv=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],wv=gv.map(t=>new kd.Netmask(t));function Ev(t){for(let e of wv)if(e.contains(t))return!0;return!1}function Nd(t){return/^::$/.test(t)||/^::1$/.test(t)||/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(t)||/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(t)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(t)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(t)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(t)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(t)||/^ff([0-9a-fA-F]{2,2}):/i.test(t)}var Md=t=>{if(mv(t)){let e=yv(t);if(e.kind()==="ipv4")return Ev(e.toNormalizedString());if(e.kind()==="ipv6")return Nd(t)}else if(ai(t)&&Pd.v6().test(t))return Nd(t)};var Dn=Md;function $u(t){try{let{address:e}=t.nodeAddress();return!!Dn(e)}catch{return!0}}function vi(t,e){let r=$u(t.multiaddr),n=$u(e.multiaddr);return r&&!n?1:!r&&n||t.isCertified&&!e.isCertified?-1:!t.isCertified&&e.isCertified?1:0}var Hu=U(Ac(),1),Gu=U(Kd(),1);var Vd=globalThis.fetch,qd=globalThis.Headers,k4=globalThis.Request,O4=globalThis.Response;function $s(t,e,r){return`${t}?name=${e}&type=${r}`}async function $d(t,e){return await(await Vd(t,{headers:new qd({accept:"application/dns-json"}),signal:e})).json()}function Ln(t,e){return`${e}_${t}`}var zu=Object.assign((0,Hu.default)("dns-over-http-resolver"),{error:(0,Hu.default)("dns-over-http-resolver:error")}),Yu=class{constructor(e={}){this._cache=new Gu.default({max:e?.maxCache??100}),this._TXTcache=new Gu.default({max:e?.maxCache??100}),this._servers=["https://cloudflare-dns.com/dns-query","https://dns.google/resolve"],this._request=e.request??$d,this._abortControllers=[]}cancel(){this._abortControllers.forEach(e=>e.abort())}getServers(){return this._servers}_getShuffledServers(){let e=[...this._servers];for(let r=e.length-1;r>0;r--){let n=Math.floor(Math.random()*r),i=e[r];e[r]=e[n],e[n]=i}return e}setServers(e){this._servers=e}async resolve(e,r="A"){switch(r){case"A":return await this.resolve4(e);case"AAAA":return await this.resolve6(e);case"TXT":return await this.resolveTxt(e);default:throw new Error(`${r} is not supported`)}}async resolve4(e){let r="A",n=this._cache.get(Ln(e,r));if(n!=null)return n;let i=!1;for(let o of this._getShuffledServers()){let s=new AbortController;this._abortControllers.push(s);try{let a=await this._request($s(o,e,r),s.signal),c=a.Answer.map(l=>l.data),u=Math.min(...a.Answer.map(l=>l.TTL));return this._cache.set(Ln(e,r),c,{ttl:u}),c}catch{s.signal.aborted&&(i=!0),zu.error(`${o} could not resolve ${e} record ${r}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==s)}}throw i?Object.assign(new Error("queryA ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${r}`)}async resolve6(e){let r="AAAA",n=this._cache.get(Ln(e,r));if(n!=null)return n;let i=!1;for(let o of this._getShuffledServers()){let s=new AbortController;this._abortControllers.push(s);try{let a=await this._request($s(o,e,r),s.signal),c=a.Answer.map(l=>l.data),u=Math.min(...a.Answer.map(l=>l.TTL));return this._cache.set(Ln(e,r),c,{ttl:u}),c}catch{s.signal.aborted&&(i=!0),zu.error(`${o} could not resolve ${e} record ${r}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==s)}}throw i?Object.assign(new Error("queryAaaa ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${r}`)}async resolveTxt(e){let r="TXT",n=this._TXTcache.get(Ln(e,r));if(n!=null)return n;let i=!1;for(let o of this._getShuffledServers()){let s=new AbortController;this._abortControllers.push(s);try{let a=await this._request($s(o,e,r),s.signal),c=a.Answer.map(l=>[l.data.replace(/['"]+/g,"")]),u=Math.min(...a.Answer.map(l=>l.TTL));return this._TXTcache.set(Ln(e,r),c,{ttl:u}),c}catch{s.signal.aborted&&(i=!0),zu.error(`${o} could not resolve ${e} record ${r}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==s)}}throw i?Object.assign(new Error("queryTxt ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${r}`)}clearCache(){this._cache.clear(),this._TXTcache.clear()}},zd=Yu;var Hd=zd;var{code:Sv}=j("dnsaddr");async function bi(t,e={}){let r=new Hd;e.signal!=null&&e.signal.addEventListener("abort",()=>{r.cancel()});let n=t.getPeerId(),[,i]=t.stringTuples().find(([a])=>a===Sv)??[];if(i==null)throw new Error("No hostname found in multiaddr");let s=(await r.resolveTxt(`_dnsaddr.${i}`)).flat().map(a=>a.split("=")[1]).filter(Boolean);return n!=null&&(s=s.filter(a=>a.includes(n))),s}function Gd(t){let e=new globalThis.AbortController;function r(){e.abort();for(let o of t)o?.removeEventListener!=null&&o.removeEventListener("abort",r)}for(let o of t){if(o?.aborted===!0){r();break}o?.addEventListener!=null&&o.addEventListener("abort",r)}function n(){for(let o of t)o?.removeEventListener!=null&&o.removeEventListener("abort",r)}let i=e.signal;return i.clear=n,i}var Wu=U(Ar(),1),Yd=M("libp2p:connection-manager:utils");async function Qu(t,e){if(!t.protoNames().includes("dnsaddr"))return[t];let n=await Av(t,e),s=(await Promise.all(n.map(async a=>await Qu(a,e)))).flat().reduce((a,c)=>(a.find(u=>u.equals(c))==null&&a.push(c),a),[]);return Yd("resolved %s to",t,s.map(a=>a.toString())),s}async function Av(t,e){try{return t=Ie(t.toString()),await t.resolve(e)}catch(r){return Yd.error(`multiaddr ${t.toString()} could not be resolved`,r),[]}}function Xu(...t){let e=[];for(let n of t)if(n!=null){try{(0,Wu.setMaxListeners)?.(1/0,n)}catch{}e.push(n)}let r=Gd(e);try{(0,Wu.setMaxListeners)?.(1/0,r)}catch{}return r}function tr(){let t={};return t.promise=new Promise((e,r)=>{t.resolve=e,t.reject=r}),t}var ot=M("libp2p:connection-manager:dial-queue"),mo={addressSorter:vi,maxParallelDials:100,maxPeerAddrsToDial:25,maxParallelDialsPerPeer:10,dialTimeout:3e4,resolvers:{dnsaddr:bi}},zs=class{constructor(e,r={}){this.addressSorter=r.addressSorter??mo.addressSorter,this.maxPeerAddrsToDial=r.maxPeerAddrsToDial??mo.maxPeerAddrsToDial,this.maxParallelDialsPerPeer=r.maxParallelDialsPerPeer??mo.maxParallelDialsPerPeer,this.dialTimeout=r.dialTimeout??mo.dialTimeout,this.peerId=e.peerId,this.peerStore=e.peerStore,this.connectionGater=e.connectionGater,this.transportManager=e.transportManager,this.shutDownController=new AbortController,this.pendingDialCount=e.metrics?.registerMetric("libp2p_dialler_pending_dials"),this.inProgressDialCount=e.metrics?.registerMetric("libp2p_dialler_in_progress_dials"),this.pendingDials=[];for(let[n,i]of Object.entries(r.resolvers??{}))cu.set(n,i);this.queue=new Kt({concurrency:r.maxParallelDials??mo.maxParallelDials}),this.queue.on("add",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("active",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("completed",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("error",n=>{ot.error("error in dial queue",n),this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("empty",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)}),this.queue.on("idle",()=>{this.pendingDialCount?.update(this.queue.size),this.inProgressDialCount?.update(this.queue.pending)})}stop(){this.shutDownController.abort()}async dial(e,r={}){let{peerId:n,multiaddrs:i}=Cs(e),o=i.map(f=>({multiaddr:f,isCertified:!1})),{timeoutController:s,signal:a}=this.createDialAbortControllers(r.signal),c;try{c=await this.calculateMultiaddrs(n,o,{...r,signal:a})}catch(f){throw a.clear(),s.clear(),f}let u=this.pendingDials.find(f=>!!(f.peerId!=null&&n!=null&&f.peerId.equals(n)||c.map(({multiaddr:h})=>h.toString()).join()===f.multiaddrs.map(h=>h.toString()).join()));if(u!=null)return ot("joining existing dial target for %p",n),a.clear(),s.clear(),await u.promise;ot("creating dial target for",c.map(({multiaddr:f})=>f.toString()));let l={id:Iv(),status:"queued",peerId:n,multiaddrs:c.map(({multiaddr:f})=>f)};return l.promise=this.performDial(l,{...r,signal:a}).finally(()=>{this.pendingDials=this.pendingDials.filter(f=>f.id!==l.id),a.clear(),s.clear()}).catch(f=>{throw ot.error("dial failed to %s",c.map(({multiaddr:h})=>h.toString()).join(", "),f),s.signal.aborted?new w(f.message,S.ERR_TIMEOUT):f}),this.pendingDials.push(l),await l.promise}createDialAbortControllers(e){let r=new Wd.TimeoutController(this.dialTimeout),n=Xu(r.signal,this.shutDownController.signal,e);return{timeoutController:r,signal:n}}async calculateMultiaddrs(e,r=[],n={}){if(e!=null){if(this.peerId.equals(e))throw new w("Tried to dial self",S.ERR_DIALED_SELF);if(await this.connectionGater.denyDialPeer?.(e)===!0)throw new w("The dial request is blocked by gater.allowDialPeer",S.ERR_PEER_DIAL_INTERCEPTED);r.length===0&&(ot("loading multiaddrs for %p",e),r.push(...await this.peerStore.addressBook.get(e)),ot("loaded multiaddrs for %p",e,r.map(({multiaddr:u})=>u.toString())))}let i=(await Promise.all(r.map(async u=>{let l=await Qu(u.multiaddr,n);return l.length===1&&l[0].equals(u.multiaddr)?u:l.map(f=>({multiaddr:f,isCertified:!1}))}))).flat(),o=i.filter(u=>!!this.transportManager.transportForMultiaddr(u.multiaddr)),s=new Map;for(let u of o){let l=u.multiaddr.toString(),f=s.get(l);if(f!=null){f.isCertified=f.isCertified||u.isCertified||!1;continue}s.set(l,u)}let a=[...s.values()];if((a.length===0||a.length>this.maxPeerAddrsToDial)&&(ot("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:u})=>u.toString())),ot("addresses for %p after filtering",e??"unknown peer",a.map(({multiaddr:u})=>u.toString()))),a.length===0)throw new w("The dial request has no valid addresses",S.ERR_NO_VALID_ADDRESSES);if(a.length>this.maxPeerAddrsToDial)throw new w("dial with more addresses than allowed",S.ERR_TOO_MANY_ADDRESSES);if(e!=null){let u=`/p2p/${e.toString()}`;a=a.map(l=>{let f=l.multiaddr.getPeerId();return l.multiaddr.protos().pop()?.path===!0?l:f!==e.toString()?{multiaddr:l.multiaddr.encapsulate(u),isCertified:l.isCertified}:l})}let c=[];for(let u of a)this.connectionGater.denyDialMultiaddr!=null&&await this.connectionGater.denyDialMultiaddr(u.multiaddr)||c.push(u);return c.sort(this.addressSorter)}async performDial(e,r={}){let n=e.multiaddrs.map(()=>new AbortController);try{let i=new Kt({concurrency:this.maxParallelDialsPerPeer});i.on("error",s=>{ot.error("error dialling",s)});let o=await Promise.any(e.multiaddrs.map(async(s,a)=>{let c=n[a];if(c==null)throw new w("dialAction did not come with an AbortController",S.ERR_INVALID_PARAMETERS);let u=Xu(c.signal,r.signal);u.addEventListener("abort",()=>{ot("dial to %s aborted",s)});let l=tr();return await i.add(async()=>{if(u.aborted){ot("dial to %s was aborted before reaching the head of the peer dial queue",s),l.reject(new vr);return}await this.queue.add(async()=>{try{if(u.aborted){ot("dial to %s was aborted before reaching the head of the dial queue",s),l.reject(new vr);return}e.status="active";let f=await this.transportManager.dial(s,{...r,signal:u});if(c.signal.aborted){ot("multiple dials succeeded, closing superfluous connection"),f.close().catch(h=>{ot.error("error closing superfluous connection",h)}),l.reject(new vr);return}n[a]=void 0,n.forEach(h=>{h!==void 0&&h.abort()}),ot("dial to %s succeeded",s),l.resolve(f)}catch(f){ot.error("error during dial of %s",s,f),l.reject(f)}},{...r,signal:u}).catch(f=>{l.reject(f)})},{signal:u}).catch(f=>{l.reject(f)}).finally(()=>{u.clear()}),await l.promise}));if(o==null)throw new w("successful dial led to empty object returned from peer dial queue",S.ERR_TRANSPORT_DIAL_FAILED);return e.status="success",o}catch(i){throw e.status="error",e.multiaddrs.length===1&&i.name==="AggregateError"?i.errors[0]:i}}};function Iv(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Hs=M("libp2p:connection-manager:connection-pruner"),Qd={maxConnections:300,allow:[]},Gs=class{constructor(e,r={}){this.maxConnections=r.maxConnections??Qd.maxConnections,this.allow=r.allow??Qd.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore}async maybePruneConnections(){let e=this.connectionManager.getConnections(),r=e.length,n=Math.max(r-this.maxConnections,0);if(Hs.trace("checking max connections limit %d/%d",r,this.maxConnections),r<=this.maxConnections)return;Hs("max connections limit exceeded %d/%d, pruning %d connection(s)",r,this.maxConnections,n);let i=new Ir;for(let a of e){let c=a.remotePeer;if(i.has(c))continue;let u=await this.peerStore.getTags(c);i.set(c,u.reduce((l,f)=>l+f.value,0))}let o=e.sort((a,c)=>{let u=i.get(a.remotePeer)??0,l=i.get(c.remotePeer)??0;if(u>l)return 1;if(u<l)return-1;let f=a.stat.timeline.open,h=c.stat.timeline.open;return f<h?1:f>h?-1:0}),s=[];for(let a of o)if(Hs("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(u=>a.remoteAddr.toString().startsWith(u.toString()))||s.push(a),s.length===n)break;await Promise.all(s.map(async a=>{try{await a.close()}catch(c){Hs.error(c)}})),this.connectionManager.dispatchEvent(new G("peer:prune",{detail:s.map(a=>a.remotePeer)}))}};var ut=M("libp2p:connection-manager"),Bv=50,_i={minConnections:50,maxConnections:300,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0},Ys=class extends Xe{constructor(e,r={}){super(),this.maxConnections=r.maxConnections??_i.maxConnections;let n=r.minConnections??_i.minConnections;if(this.maxConnections<n)throw new w("Connection Manager maxConnections must be greater than minConnections",S.ERR_INVALID_PARAMETERS);this.connections=new Ir,this.started=!1;try{(0,Xd.setMaxListeners)?.(1/0,this)}catch{}this.peerStore=e.peerStore,this.metrics=e.metrics,this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(r.allow??[]).map(i=>Ie(i)),this.deny=(r.deny??[]).map(i=>Ie(i)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=r.maxIncomingPendingConnections??_i.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Zd.RateLimiterMemory({points:r.inboundConnectionThreshold??_i.inboundConnectionThreshold,duration:1}),this.autoDial=new Ks({connectionManager:this,peerStore:e.peerStore},{minConnections:n,autoDialConcurrency:r.autoDialConcurrency??_i.autoDialConcurrency,autoDialPriority:r.autoDialPriority??_i.autoDialPriority}),this.addEventListener("peer:disconnect",()=>{this.autoDial.autoDial().catch(i=>{ut.error(i)})}),this.connectionPruner=new Gs({connectionManager:this,peerStore:e.peerStore},{maxConnections:this.maxConnections,allow:this.allow}),this.addEventListener("peer:connect",()=>{this.connectionPruner.maybePruneConnections().catch(i=>{ut.error(i)})}),this.dialQueue=new zs({peerId:e.peerId,metrics:e.metrics,peerStore:e.peerStore,transportManager:e.transportManager,connectionGater:e.connectionGater},{addressSorter:r.addressSorter??vi,maxParallelDials:r.maxParallelDials??100,maxPeerAddrsToDial:r.maxPeerAddrsToDial??25,dialTimeout:r.dialTimeout??3e4,resolvers:r.resolvers??{dnsaddr:bi}}),e.upgrader.addEventListener("connection",this.onConnect),e.upgrader.addEventListener("connectionEnd",this.onDisconnect)}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let r of this.connections.values())for(let n of r)n.stat.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let r of this.connections.values())for(let n of r)for(let i of n.streams){let o=`${i.stat.direction} ${i.stat.protocol??"unnegotiated"}`;e[o]=(e[o]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let i of n){let o={};for(let s of i.streams){let a=`${s.stat.direction} ${s.stat.protocol??"unnegotiated"}`;o[a]=(o[a]??0)+1}for(let[s,a]of Object.entries(o))e[s]=e[s]??[],e[s].push(a)}let r={};for(let[n,i]of Object.entries(e)){i=i.sort((s,a)=>s-a);let o=Math.floor(i.length*.9);r[n]=i[o]}return r}}),this.autoDial.start(),this.started=!0,ut("started")}async afterStart(){Promise.resolve().then(async()=>{let e=[];for(let r of await this.peerStore.all())(await this.peerStore.getTags(r.id)).filter(o=>o.name===b0).length>0&&e.push(r.id);await Promise.all(e.map(async r=>{await this.openConnection(r).catch(n=>{ut.error(n)})}))}).catch(e=>{ut.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let r of this.connections.values())for(let n of r)e.push((async()=>{try{await n.close()}catch(i){ut.error(i)}})());ut("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),ut("stopped")}onConnect(e){this._onConnect(e).catch(r=>{ut.error(r)})}async _onConnect(e){let{detail:r}=e;if(!this.started){await r.close();return}let n=r.remotePeer,i=this.connections.get(n);i!=null?i.push(r):this.connections.set(n,[r]),n.publicKey!=null&&await this.peerStore.keyBook.set(n,n.publicKey),this.dispatchEvent(new G("peer:connect",{detail:r}))}onDisconnect(e){let{detail:r}=e;if(!this.started)return;let n=r.remotePeer,i=this.connections.get(n);i!=null&&i.length>1?(i=i.filter(o=>o.id!==r.id),this.connections.set(n,i)):i!=null&&(this.connections.delete(n),this.dispatchEvent(new G("peer:disconnect",{detail:r})))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let r=[];for(let n of this.connections.values())r=r.concat(n);return r}getConnectionsMap(){return this.connections}async openConnection(e,r={}){let{peerId:n}=Cs(e);if(n!=null){ut("dial %p",n);let a=this.getConnections(n);if(a.length>0)return ut("had an existing connection to %p",n),a[0]}let i=await this.dialQueue.dial(e,{...r,priority:r.priority??Bv}),o=this.connections.get(i.remotePeer);o==null&&(o=[],this.connections.set(i.remotePeer,o));let s=!1;for(let a of o)a.id===i.id&&(s=!0);return s||o.push(i),i}async closeConnections(e){let r=this.connections.get(e)??[];await Promise.all(r.map(async n=>{await n.close()}))}async acceptIncomingConnection(e){if(this.deny.some(i=>e.remoteAddr.toString().startsWith(i.toString())))return ut("connection from %s refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(i=>e.remoteAddr.toString().startsWith(i.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return ut("connection from %s refused - incomingPendingConnections exceeded by peer %s",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let i=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(i,1)}catch{return ut("connection from %s refused - inboundConnectionThreshold exceeded by host %s",i,e.remoteAddr),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(ut("connection from %s refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){return this.dialQueue.pendingDials}};var Cg=U(sp(),1);var mp=U(pp(),1),jr=mp.default;var ee;(function(t){t.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",t.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",t.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",t.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",t.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",t.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",t.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",t.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",t.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",t.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",t.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",t.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",t.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",t.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",t.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(ee||(ee={}));var pl=U(sl(),1),rm=U(Wp(),1),nm=U(kn(),1),ml=U(dl(),1),im=U(tm(),1);function r2(){nm.default._configure(),pl.default._configure(rm.default),ml.default._configure(im.default)}r2();var om=["uint64","int64","sint64","fixed64","sfixed64"];function n2(t){for(let e of om){if(t[e]==null)continue;let r=t[e];t[e]=function(){return BigInt(r.call(this).toString())}}return t}function yl(t){return n2(new pl.default(t))}function i2(t){for(let e of om){if(t[e]==null)continue;let r=t[e];t[e]=function(n){return r.call(this,n.toString())}}return t}function gl(){return i2(ml.default.create())}function de(t,e){let r=yl(t instanceof Uint8Array?t:t.subarray());return e.decode(r)}function pe(t,e){let r=gl();return e.encode(t,r,{lengthDelimited:!1}),r.finish()}var Ii;(function(t){t[t.VARINT=0]="VARINT",t[t.BIT64=1]="BIT64",t[t.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",t[t.START_GROUP=3]="START_GROUP",t[t.END_GROUP=4]="END_GROUP",t[t.BIT32=5]="BIT32"})(Ii||(Ii={}));function ea(t,e,r,n){return{name:t,type:e,encode:r,decode:n}}function rn(t){function e(i){if(t[i.toString()]==null)throw new Error("Invalid enum value");return t[i]}let r=function(o,s){let a=e(o);s.int32(a)},n=function(o){let s=o.int32();return e(s)};return ea("enum",Ii.VARINT,r,n)}function me(t,e){return ea("message",Ii.LENGTH_DELIMITED,t,e)}var Te;(function(t){t.RSA="RSA",t.Ed25519="Ed25519",t.Secp256k1="Secp256k1"})(Te||(Te={}));var wl;(function(t){t[t.RSA=0]="RSA",t[t.Ed25519=1]="Ed25519",t[t.Secp256k1=2]="Secp256k1"})(wl||(wl={}));(function(t){t.codec=()=>rn(wl)})(Te||(Te={}));var ir;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),Te.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.Type=Te.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(ir||(ir={}));var or;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),Te.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.Type=Te.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(or||(or={}));var tD=U(vo(),1),rD=U(xy(),1),La=U(fe(),1);var pt={get(t=globalThis){let e=t.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p-crypto/blob/master/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var zB=U(qe(),1),HB=U(ya(),1),by=U(fe(),1);function Gt(t,e){let r=Uint8Array.from(t.abs().toByteArray());if(r=r[0]===0?r.subarray(1):r,e!=null){if(r.length>e)throw new Error("byte array longer than desired length");r=Me([new Uint8Array(e-r.length),r])}return $(r,"base64url")}function St(t){let e=_y(t);return new by.default.jsbn.BigInteger($(e,"base16"),16)}function _y(t,e){let r=F(t,"base64urlpad");if(e!=null){if(r.length>e)throw new Error("byte array longer than desired length");r=Me([new Uint8Array(e-r.length),r])}return r}var C_={"P-256":256,"P-384":384,"P-521":521},B_=Object.keys(C_),rP=B_.join(" / ");function Sy(){return typeof navigator<"u"&&navigator.userAgent.includes("Safari")&&navigator.userAgent.includes("Linux")&&!navigator.userAgent.includes("Chrome")}var Ay={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function xa(t){let e=t?.algorithm??"AES-GCM",r=t?.keyLength??16,n=t?.nonceLength??12,i=t?.digest??"SHA-256",o=t?.saltLength??16,s=t?.iterations??32767,a=pt.get();r*=8;async function c(f,h){let d=a.getRandomValues(new Uint8Array(o)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof h=="string"&&(h=F(h));let y;if(h.length===0&&Sy())y=await a.subtle.importKey("jwk",Ay,{name:"AES-GCM"},!0,["encrypt"]);else{let x={name:"PBKDF2",salt:d,iterations:s,hash:{name:i}},_=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(x,_,{name:e,length:r},!0,["encrypt"])}let g=await a.subtle.encrypt(m,y,f);return Me([d,m.iv,new Uint8Array(g)])}async function u(f,h){let d=f.subarray(0,o),p=f.subarray(o,o+n),m=f.subarray(o+n),y={name:e,iv:p};typeof h=="string"&&(h=F(h));let g;if(h.length===0&&Sy())g=await a.subtle.importKey("jwk",Ay,{name:"AES-GCM"},!0,["decrypt"]);else{let _={name:"PBKDF2",salt:d,iterations:s,hash:{name:i}},k=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(_,k,{name:e,length:r},!0,["decrypt"])}let x=await a.subtle.decrypt(y,g,m);return new Uint8Array(x)}return{encrypt:c,decrypt:u}}async function Iy(t,e){let r=vn.decode(t);return await xa().decrypt(r,e)}var Zl={};rt(Zl,{RsaPrivateKey:()=>Fi,RsaPublicKey:()=>Bo,fromJwk:()=>tS,generateKeyPair:()=>rS,unmarshalRsaPrivateKey:()=>j_,unmarshalRsaPublicKey:()=>eS});var MP=U(Dy(),1),Co=U(fe(),1);var D_=U(Bn(),1);var re=BigInt(0),Ae=BigInt(1),un=BigInt(2),Ro=BigInt(3),Ly=BigInt(8),Ne=Object.freeze({a:re,b:BigInt(7),P:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:Ae,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee")}),Ny=(t,e)=>(t+e/un)/e,va={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar(t){let{n:e}=Ne,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Ae*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),o=r,s=BigInt("0x100000000000000000000000000000000"),a=Ny(o*t,e),c=Ny(-n*t,e),u=L(t-a*r-c*i,e),l=L(-a*n-c*o,e),f=u>s,h=l>s;if(f&&(u=e-u),h&&(l=e-l),u>s||l>s)throw new Error("splitScalarEndo: Endomorphism failed, k="+t);return{k1neg:f,k1:u,k2neg:h,k2:l}}},Yt=32,Ni=32,L_=32,ky=Yt+1,Oy=2*Yt+1;function My(t){let{a:e,b:r}=Ne,n=L(t*t),i=L(n*t);return L(i+e*t+r)}var ba=Ne.a===re,Aa=class extends Error{constructor(e){super(e)}};function Uy(t){if(!(t instanceof se))throw new TypeError("JacobianPoint expected")}var se=class{constructor(e,r,n){this.x=e,this.y=r,this.z=n}static fromAffine(e){if(!(e instanceof ce))throw new TypeError("JacobianPoint#fromAffine: expected Point");return e.equals(ce.ZERO)?se.ZERO:new se(e.x,e.y,Ae)}static toAffineBatch(e){let r=U_(e.map(n=>n.z));return e.map((n,i)=>n.toAffine(r[i]))}static normalizeZ(e){return se.toAffineBatch(e).map(se.fromAffine)}equals(e){Uy(e);let{x:r,y:n,z:i}=this,{x:o,y:s,z:a}=e,c=L(i*i),u=L(a*a),l=L(r*u),f=L(o*c),h=L(L(n*a)*u),d=L(L(s*i)*c);return l===f&&h===d}negate(){return new se(this.x,L(-this.y),this.z)}double(){let{x:e,y:r,z:n}=this,i=L(e*e),o=L(r*r),s=L(o*o),a=e+o,c=L(un*(L(a*a)-i-s)),u=L(Ro*i),l=L(u*u),f=L(l-un*c),h=L(u*(c-f)-Ly*s),d=L(un*r*n);return new se(f,h,d)}add(e){Uy(e);let{x:r,y:n,z:i}=this,{x:o,y:s,z:a}=e;if(o===re||s===re)return this;if(r===re||n===re)return e;let c=L(i*i),u=L(a*a),l=L(r*u),f=L(o*c),h=L(L(n*a)*u),d=L(L(s*i)*c),p=L(f-l),m=L(d-h);if(p===re)return m===re?this.double():se.ZERO;let y=L(p*p),g=L(p*y),x=L(l*y),_=L(m*m-g-un*x),k=L(m*(x-_)-h*g),C=L(i*a*p);return new se(_,k,C)}subtract(e){return this.add(e.negate())}multiplyUnsafe(e){let r=se.ZERO;if(typeof e=="bigint"&&e===re)return r;let n=Vy(e);if(n===Ae)return this;if(!ba){let f=r,h=this;for(;n>re;)n&Ae&&(f=f.add(h)),h=h.double(),n>>=Ae;return f}let{k1neg:i,k1:o,k2neg:s,k2:a}=va.splitScalar(n),c=r,u=r,l=this;for(;o>re||a>re;)o&Ae&&(c=c.add(l)),a&Ae&&(u=u.add(l)),l=l.double(),o>>=Ae,a>>=Ae;return i&&(c=c.negate()),s&&(u=u.negate()),u=new se(L(u.x*va.beta),u.y,u.z),c.add(u)}precomputeWindow(e){let r=ba?128/e+1:256/e+1,n=[],i=this,o=i;for(let s=0;s<r;s++){o=i,n.push(o);for(let a=1;a<2**(e-1);a++)o=o.add(i),n.push(o);i=o.double()}return n}wNAF(e,r){!r&&this.equals(se.BASE)&&(r=ce.BASE);let n=r&&r._WINDOW_SIZE||1;if(256%n)throw new Error("Point#wNAF: Invalid precomputation window, must be power of 2");let i=r&&zl.get(r);i||(i=this.precomputeWindow(n),r&&n!==1&&(i=se.normalizeZ(i),zl.set(r,i)));let o=se.ZERO,s=se.BASE,a=1+(ba?128/n:256/n),c=2**(n-1),u=BigInt(2**n-1),l=2**n,f=BigInt(n);for(let h=0;h<a;h++){let d=h*c,p=Number(e&u);e>>=f,p>c&&(p-=l,e+=Ae);let m=d,y=d+Math.abs(p)-1,g=h%2!==0,x=p<0;p===0?s=s.add(_a(g,i[m])):o=o.add(_a(x,i[y]))}return{p:o,f:s}}multiply(e,r){let n=Vy(e),i,o;if(ba){let{k1neg:s,k1:a,k2neg:c,k2:u}=va.splitScalar(n),{p:l,f}=this.wNAF(a,r),{p:h,f:d}=this.wNAF(u,r);l=_a(s,l),h=_a(c,h),h=new se(L(h.x*va.beta),h.y,h.z),i=l.add(h),o=f.add(d)}else{let{p:s,f:a}=this.wNAF(n,r);i=s,o=a}return se.normalizeZ([i,o])[0]}toAffine(e){let{x:r,y:n,z:i}=this,o=this.equals(se.ZERO);e==null&&(e=o?Ly:Mi(i));let s=e,a=L(s*s),c=L(a*s),u=L(r*a),l=L(n*c),f=L(i*s);if(o)return ce.ZERO;if(f!==Ae)throw new Error("invZ was invalid");return new ce(u,l)}};se.BASE=new se(Ne.Gx,Ne.Gy,Ae);se.ZERO=new se(re,Ae,re);function _a(t,e){let r=e.negate();return t?r:e}var zl=new WeakMap,ce=class{constructor(e,r){this.x=e,this.y=r}_setWindowSize(e){this._WINDOW_SIZE=e,zl.delete(this)}hasEvenY(){return this.y%un===re}static fromCompressedHex(e){let r=e.length===32,n=ln(r?e:e.subarray(1));if(!$l(n))throw new Error("Point is not on curve");let i=My(n),o=M_(i),s=(o&Ae)===Ae;r?s&&(o=L(-o)):(e[0]&1)===1!==s&&(o=L(-o));let a=new ce(n,o);return a.assertValidity(),a}static fromUncompressedHex(e){let r=ln(e.subarray(1,Yt+1)),n=ln(e.subarray(Yt+1,Yt*2+1)),i=new ce(r,n);return i.assertValidity(),i}static fromHex(e){let r=Oi(e),n=r.length,i=r[0];if(n===Yt)return this.fromCompressedHex(r);if(n===ky&&(i===2||i===3))return this.fromCompressedHex(r);if(n===Oy&&i===4)return this.fromUncompressedHex(r);throw new Error(`Point.fromHex: received invalid point. Expected 32-${ky} compressed bytes or ${Oy} uncompressed bytes, not ${n}`)}static fromPrivateKey(e){return ce.BASE.multiply(Ia(e))}static fromSignature(e,r,n){let{r:i,s:o}=qy(r);if(![0,1,2,3].includes(n))throw new Error("Cannot recover: invalid recovery bit");let s=Yl(Oi(e)),{n:a}=Ne,c=n===2||n===3?i+a:i,u=Mi(c,a),l=L(-s*u,a),f=L(o*u,a),h=n&1?"03":"02",d=ce.fromHex(h+Di(c)),p=ce.BASE.multiplyAndAddUnsafe(d,l,f);if(!p)throw new Error("Cannot recover signature: point at infinify");return p.assertValidity(),p}toRawBytes(e=!1){return $n(this.toHex(e))}toHex(e=!1){let r=Di(this.x);return e?`${this.hasEvenY()?"02":"03"}${r}`:`04${r}${Di(this.y)}`}toHexX(){return this.toHex(!0).slice(2)}toRawX(){return this.toRawBytes(!0).slice(1)}assertValidity(){let e="Point is not on elliptic curve",{x:r,y:n}=this;if(!$l(r)||!$l(n))throw new Error(e);let i=L(n*n),o=My(r);if(L(i-o)!==re)throw new Error(e)}equals(e){return this.x===e.x&&this.y===e.y}negate(){return new ce(this.x,L(-this.y))}double(){return se.fromAffine(this).double().toAffine()}add(e){return se.fromAffine(this).add(se.fromAffine(e)).toAffine()}subtract(e){return this.add(e.negate())}multiply(e){return se.fromAffine(this).multiply(e,this).toAffine()}multiplyAndAddUnsafe(e,r,n){let i=se.fromAffine(this),o=r===re||r===Ae||this!==ce.BASE?i.multiplyUnsafe(r):i.multiply(r),s=se.fromAffine(e).multiplyUnsafe(n),a=o.add(s);return a.equals(se.ZERO)?void 0:a.toAffine()}};ce.BASE=new ce(Ne.Gx,Ne.Gy);ce.ZERO=new ce(re,re);function Fy(t){return Number.parseInt(t[0],16)>=8?"00"+t:t}function Ky(t){if(t.length<2||t[0]!==2)throw new Error(`Invalid signature integer tag: ${ki(t)}`);let e=t[1],r=t.subarray(2,e+2);if(!e||r.length!==e)throw new Error("Invalid signature integer: wrong length");if(r[0]===0&&r[1]<=127)throw new Error("Invalid signature integer: trailing length");return{data:ln(r),left:t.subarray(e+2)}}function N_(t){if(t.length<2||t[0]!=48)throw new Error(`Invalid signature tag: ${ki(t)}`);if(t[1]!==t.length-2)throw new Error("Invalid signature: incorrect length");let{data:e,left:r}=Ky(t.subarray(2)),{data:n,left:i}=Ky(r);if(i.length)throw new Error(`Invalid signature: left bytes after parsing: ${ki(i)}`);return{r:e,s:n}}var hr=class{constructor(e,r){this.r=e,this.s=r,this.assertValidity()}static fromCompact(e){let r=e instanceof Uint8Array,n="Signature.fromCompact";if(typeof e!="string"&&!r)throw new TypeError(`${n}: Expected string or Uint8Array`);let i=r?ki(e):e;if(i.length!==128)throw new Error(`${n}: Expected 64-byte hex`);return new hr(Ra(i.slice(0,64)),Ra(i.slice(64,128)))}static fromDER(e){let r=e instanceof Uint8Array;if(typeof e!="string"&&!r)throw new TypeError("Signature.fromDER: Expected string or Uint8Array");let{r:n,s:i}=N_(r?e:$n(e));return new hr(n,i)}static fromHex(e){return this.fromDER(e)}assertValidity(){let{r:e,s:r}=this;if(!To(e))throw new Error("Invalid Signature: r must be 0 < r < n");if(!To(r))throw new Error("Invalid Signature: s must be 0 < s < n")}hasHighS(){let e=Ne.n>>Ae;return this.s>e}normalizeS(){return this.hasHighS()?new hr(this.r,L(-this.s,Ne.n)):this}toDERRawBytes(){return $n(this.toDERHex())}toDERHex(){let e=Fy(Ao(this.s)),r=Fy(Ao(this.r)),n=e.length/2,i=r.length/2,o=Ao(n),s=Ao(i);return`30${Ao(i+n+4)}02${s}${r}02${o}${e}`}toRawBytes(){return this.toDERRawBytes()}toHex(){return this.toDERHex()}toCompactRawBytes(){return $n(this.toCompactHex())}toCompactHex(){return Di(this.r)+Di(this.s)}};function cn(...t){if(!t.every(n=>n instanceof Uint8Array))throw new Error("Uint8Array list expected");if(t.length===1)return t[0];let e=t.reduce((n,i)=>n+i.length,0),r=new Uint8Array(e);for(let n=0,i=0;n<t.length;n++){let o=t[n];r.set(o,i),i+=o.length}return r}var k_=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function ki(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");let e="";for(let r=0;r<t.length;r++)e+=k_[t[r]];return e}var O_=BigInt("0x10000000000000000000000000000000000000000000000000000000000000000");function Di(t){if(typeof t!="bigint")throw new Error("Expected bigint");if(!(re<=t&&t<O_))throw new Error("Expected number 0 <= n < 2^256");return t.toString(16).padStart(64,"0")}function Hl(t){let e=$n(Di(t));if(e.length!==32)throw new Error("Error: expected 32 bytes");return e}function Ao(t){let e=t.toString(16);return e.length&1?`0${e}`:e}function Ra(t){if(typeof t!="string")throw new TypeError("hexToNumber: expected string, got "+typeof t);return BigInt(`0x${t}`)}function $n(t){if(typeof t!="string")throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex"+t.length);let e=new Uint8Array(t.length/2);for(let r=0;r<e.length;r++){let n=r*2,i=t.slice(n,n+2),o=Number.parseInt(i,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");e[r]=o}return e}function ln(t){return Ra(ki(t))}function Oi(t){return t instanceof Uint8Array?Uint8Array.from(t):$n(t)}function Vy(t){if(typeof t=="number"&&Number.isSafeInteger(t)&&t>0)return BigInt(t);if(typeof t=="bigint"&&To(t))return t;throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n")}function L(t,e=Ne.P){let r=t%e;return r>=re?r:e+r}function Lt(t,e){let{P:r}=Ne,n=t;for(;e-- >re;)n*=n,n%=r;return n}function M_(t){let{P:e}=Ne,r=BigInt(6),n=BigInt(11),i=BigInt(22),o=BigInt(23),s=BigInt(44),a=BigInt(88),c=t*t*t%e,u=c*c*t%e,l=Lt(u,Ro)*u%e,f=Lt(l,Ro)*u%e,h=Lt(f,un)*c%e,d=Lt(h,n)*h%e,p=Lt(d,i)*d%e,m=Lt(p,s)*p%e,y=Lt(m,a)*m%e,g=Lt(y,s)*p%e,x=Lt(g,Ro)*u%e,_=Lt(x,o)*d%e,k=Lt(_,r)*c%e,C=Lt(k,un);if(C*C%e!==t)throw new Error("Cannot find square root");return C}function Mi(t,e=Ne.P){if(t===re||e<=re)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=L(t,e),n=e,i=re,o=Ae,s=Ae,a=re;for(;r!==re;){let u=n/r,l=n%r,f=i-s*u,h=o-a*u;n=r,r=l,i=s,o=a,s=f,a=h}if(n!==Ae)throw new Error("invert: does not exist");return L(i,e)}function U_(t,e=Ne.P){let r=new Array(t.length),n=t.reduce((o,s,a)=>s===re?o:(r[a]=o,L(o*s,e)),Ae),i=Mi(n,e);return t.reduceRight((o,s,a)=>s===re?o:(r[a]=L(o*r[a],e),L(o*s,e)),i),r}function F_(t){let e=t.length*8-Ni*8,r=ln(t);return e>0?r>>BigInt(e):r}function Yl(t,e=!1){let r=F_(t);if(e)return r;let{n}=Ne;return r>=n?r-n:r}var Li,Io,Gl=class{constructor(e,r){if(this.hashLen=e,this.qByteLen=r,typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof r!="number"||r<2)throw new Error("qByteLen must be a number");this.v=new Uint8Array(e).fill(1),this.k=new Uint8Array(e).fill(0),this.counter=0}hmac(...e){return Wt.hmacSha256(this.k,...e)}hmacSync(...e){return Io(this.k,...e)}checkSync(){if(typeof Io!="function")throw new Aa("hmacSha256Sync needs to be set")}incr(){if(this.counter>=1e3)throw new Error("Tried 1,000 k values for sign(), all were invalid");this.counter+=1}async reseed(e=new Uint8Array){this.k=await this.hmac(this.v,Uint8Array.from([0]),e),this.v=await this.hmac(this.v),e.length!==0&&(this.k=await this.hmac(this.v,Uint8Array.from([1]),e),this.v=await this.hmac(this.v))}reseedSync(e=new Uint8Array){this.checkSync(),this.k=this.hmacSync(this.v,Uint8Array.from([0]),e),this.v=this.hmacSync(this.v),e.length!==0&&(this.k=this.hmacSync(this.v,Uint8Array.from([1]),e),this.v=this.hmacSync(this.v))}async generate(){this.incr();let e=0,r=[];for(;e<this.qByteLen;){this.v=await this.hmac(this.v);let n=this.v.slice();r.push(n),e+=this.v.length}return cn(...r)}generateSync(){this.checkSync(),this.incr();let e=0,r=[];for(;e<this.qByteLen;){this.v=this.hmacSync(this.v);let n=this.v.slice();r.push(n),e+=this.v.length}return cn(...r)}};function To(t){return re<t&&t<Ne.n}function $l(t){return re<t&&t<Ne.P}function K_(t,e,r,n=!0){let{n:i}=Ne,o=Yl(t,!0);if(!To(o))return;let s=Mi(o,i),a=ce.BASE.multiply(o),c=L(a.x,i);if(c===re)return;let u=L(s*L(e+r*c,i),i);if(u===re)return;let l=new hr(c,u),f=(a.x===l.r?0:2)|Number(a.y&Ae);return n&&l.hasHighS()&&(l=l.normalizeS(),f^=1),{sig:l,recovery:f}}function Ia(t){let e;if(typeof t=="bigint")e=t;else if(typeof t=="number"&&Number.isSafeInteger(t)&&t>0)e=BigInt(t);else if(typeof t=="string"){if(t.length!==2*Ni)throw new Error("Expected 32 bytes of private key");e=Ra(t)}else if(t instanceof Uint8Array){if(t.length!==Ni)throw new Error("Expected 32 bytes of private key");e=ln(t)}else throw new TypeError("Expected valid private key");if(!To(e))throw new Error("Expected private key: 0 < key < n");return e}function V_(t){return t instanceof ce?(t.assertValidity(),t):ce.fromHex(t)}function qy(t){if(t instanceof hr)return t.assertValidity(),t;try{return hr.fromDER(t)}catch{return hr.fromCompact(t)}}function Wl(t,e=!1){return ce.fromPrivateKey(t).toRawBytes(e)}function $y(t){let e=t.length>Yt?t.slice(0,Yt):t;return ln(e)}function q_(t){let e=$y(t),r=L(e,Ne.n);return zy(r<re?e:r)}function zy(t){return Hl(t)}function $_(t,e,r){if(t==null)throw new Error(`sign: expected valid message hash, not "${t}"`);let n=Oi(t),i=Ia(e),o=[zy(i),q_(n)];if(r!=null){r===!0&&(r=Wt.randomBytes(Yt));let c=Oi(r);if(c.length!==Yt)throw new Error(`sign: Expected ${Yt} bytes of extra data`);o.push(c)}let s=cn(...o),a=$y(n);return{seed:s,m:a,d:i}}function z_(t,e){let{sig:r,recovery:n}=t,{der:i,recovered:o}=Object.assign({canonical:!0,der:!0},e),s=i?r.toDERRawBytes():r.toCompactRawBytes();return o?[s,n]:s}async function Hy(t,e,r={}){let{seed:n,m:i,d:o}=$_(t,e,r.extraEntropy),s=new Gl(L_,Ni);await s.reseed(n);let a;for(;!(a=K_(await s.generate(),i,o,r.canonical));)await s.reseed();return z_(a,r)}var H_={strict:!0};function Gy(t,e,r,n=H_){let i;try{i=qy(t),e=Oi(e)}catch{return!1}let{r:o,s}=i;if(n.strict&&i.hasHighS())return!1;let a=Yl(e),c;try{c=V_(r)}catch{return!1}let{n:u}=Ne,l=Mi(s,u),f=L(a*l,u),h=L(o*l,u),d=ce.BASE.multiplyAndAddUnsafe(c,f,h);return d?L(d.x,u)===o:!1}ce.BASE._setWindowSize(8);var At={node:D_,web:typeof self=="object"&&"crypto"in self?self.crypto:void 0};var Sa={},Wt={bytesToHex:ki,hexToBytes:$n,concatBytes:cn,mod:L,invert:Mi,isValidPrivateKey(t){try{return Ia(t),!0}catch{return!1}},_bigintTo32Bytes:Hl,_normalizePrivateKey:Ia,hashToPrivateKey:t=>{t=Oi(t);let e=Ni+8;if(t.length<e||t.length>1024)throw new Error("Expected valid bytes of private key as per FIPS 186");let r=L(ln(t),Ne.n-Ae)+Ae;return Hl(r)},randomBytes:(t=32)=>{if(At.web)return At.web.getRandomValues(new Uint8Array(t));if(At.node){let{randomBytes:e}=At.node;return Uint8Array.from(e(t))}else throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>Wt.hashToPrivateKey(Wt.randomBytes(Ni+8)),precompute(t=8,e=ce.BASE){let r=e===ce.BASE?e:new ce(e.x,e.y);return r._setWindowSize(t),r.multiply(Ro),r},sha256:async(...t)=>{if(At.web){let e=await At.web.subtle.digest("SHA-256",cn(...t));return new Uint8Array(e)}else if(At.node){let{createHash:e}=At.node,r=e("sha256");return t.forEach(n=>r.update(n)),Uint8Array.from(r.digest())}else throw new Error("The environment doesn't have sha256 function")},hmacSha256:async(t,...e)=>{if(At.web){let r=await At.web.subtle.importKey("raw",t,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),n=cn(...e),i=await At.web.subtle.sign("HMAC",r,n);return new Uint8Array(i)}else if(At.node){let{createHmac:r}=At.node,n=r("sha256",t);return e.forEach(i=>n.update(i)),Uint8Array.from(n.digest())}else throw new Error("The environment doesn't have hmac-sha256 function")},sha256Sync:void 0,hmacSha256Sync:void 0,taggedHash:async(t,...e)=>{let r=Sa[t];if(r===void 0){let n=await Wt.sha256(Uint8Array.from(t,i=>i.charCodeAt(0)));r=cn(n,n),Sa[t]=r}return Wt.sha256(r,...e)},taggedHashSync:(t,...e)=>{if(typeof Li!="function")throw new Aa("sha256Sync is undefined, you need to set it");let r=Sa[t];if(r===void 0){let n=Li(Uint8Array.from(t,i=>i.charCodeAt(0)));r=cn(n,n),Sa[t]=r}return Li(r,...e)},_JacobianPoint:se};Object.defineProperties(Wt,{sha256Sync:{configurable:!1,get(){return Li},set(t){Li||(Li=t)}},hmacSha256Sync:{configurable:!1,get(){return Io},set(t){Io||(Io=t)}}});function Nr(t){if(isNaN(t)||t<=0)throw new w("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return Wt.randomBytes(t)}var zn={};rt(zn,{jwkToPkcs1:()=>W_,jwkToPkix:()=>X_,pkcs1ToJwk:()=>Y_,pkixToJwk:()=>Q_});var yP=U(vo(),1),gP=U(Ea(),1),kr=U(fe(),1);function Y_(t){let e=kr.default.asn1.fromDer($(t,"ascii")),r=kr.default.pki.privateKeyFromAsn1(e);return{kty:"RSA",n:Gt(r.n),e:Gt(r.e),d:Gt(r.d),p:Gt(r.p),q:Gt(r.q),dp:Gt(r.dP),dq:Gt(r.dQ),qi:Gt(r.qInv),alg:"RS256"}}function W_(t){if(t.n==null||t.e==null||t.d==null||t.p==null||t.q==null||t.dp==null||t.dq==null||t.qi==null)throw new w("JWK was missing components","ERR_INVALID_PARAMETERS");let e=kr.default.pki.privateKeyToAsn1({n:St(t.n),e:St(t.e),d:St(t.d),p:St(t.p),q:St(t.q),dP:St(t.dp),dQ:St(t.dq),qInv:St(t.qi)});return F(kr.default.asn1.toDer(e).getBytes(),"ascii")}function Q_(t){let e=kr.default.asn1.fromDer($(t,"ascii")),r=kr.default.pki.publicKeyFromAsn1(e);return{kty:"RSA",n:Gt(r.n),e:Gt(r.e)}}function X_(t){if(t.n==null||t.e==null)throw new w("JWK was missing components","ERR_INVALID_PARAMETERS");let e=kr.default.pki.publicKeyToAsn1({n:St(t.n),e:St(t.e)});return F(kr.default.asn1.toDer(e).getBytes(),"ascii")}var bP=U(Ea(),1),Ql=U(fe(),1);function Yy(t,e){return e.map(r=>St(t[r]))}function Wy(t){return Ql.default.pki.setRsaPrivateKey(...Yy(t,["n","e","d","p","q","dp","dq","qi"]))}function Qy(t){return Ql.default.pki.setRsaPublicKey(...Yy(t,["n","e"]))}async function Xy(t){let e=await pt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:t,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),r=await jy(e);return{privateKey:r[0],publicKey:r[1]}}async function Xl(t){let r=[await pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await Z_(t)],n=await jy({privateKey:r[0],publicKey:r[1]});return{privateKey:n[0],publicKey:n[1]}}async function Zy(t,e){let r=await pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await pt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},r,Uint8Array.from(e));return new Uint8Array(n,0,n.byteLength)}async function Jy(t,e,r){let n=await pt.get().subtle.importKey("jwk",t,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return await pt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,r)}async function jy(t){if(t.privateKey==null||t.publicKey==null)throw new w("Private and public key are required","ERR_INVALID_PARAMETERS");return await Promise.all([pt.get().subtle.exportKey("jwk",t.privateKey),pt.get().subtle.exportKey("jwk",t.publicKey)])}async function Z_(t){return await pt.get().subtle.importKey("jwk",{kty:t.kty,n:t.n,e:t.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function eg(t,e,r,n){let i=e?Qy(t):Wy(t),o=$(Uint8Array.from(r),"ascii"),s=n(o,i);return F(s,"ascii")}function tg(t,e){return eg(t,!0,e,(r,n)=>n.encrypt(r))}function rg(t,e){return eg(t,!1,e,(r,n)=>n.decrypt(r))}async function Ui(t,e){let n=await xa().encrypt(t,e);return vn.encode(n)}var Bo=class{constructor(e){this._key=e}async verify(e,r){return await Jy(this._key,r,e)}marshal(){return zn.jwkToPkix(this._key)}get bytes(){return ir.encode({Type:Te.RSA,Data:this.marshal()}).subarray()}encrypt(e){return tg(this._key,e)}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}},Fi=class{constructor(e,r){this._key=e,this._publicKey=r}genSecret(){return Nr(16)}async sign(e){return await Zy(this._key,e)}get public(){if(this._publicKey==null)throw new w("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new Bo(this._publicKey)}decrypt(e){return rg(this._key,e)}marshal(){return zn.jwkToPkcs1(this._key)}get bytes(){return or.encode({Type:Te.RSA,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}async id(){let e=await this.public.hash();return $(e,"base58btc")}async export(e,r="pkcs-8"){if(r==="pkcs-8"){let n=new Co.default.util.ByteBuffer(this.marshal()),i=Co.default.asn1.fromDer(n),o=Co.default.pki.privateKeyFromAsn1(i),s={algorithm:"aes256",count:1e4,saltSize:128/8,prfAlgorithm:"sha512"};return Co.default.pki.encryptRsaPrivateKey(o,e,s)}else{if(r==="libp2p-key")return await Ui(this.bytes,e);throw new w(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}};async function j_(t){let e=zn.pkcs1ToJwk(t),r=await Xl(e);return new Fi(r.privateKey,r.publicKey)}function eS(t){let e=zn.pkixToJwk(t);return new Bo(e)}async function tS(t){let e=await Xl(t);return new Fi(e.privateKey,e.publicKey)}async function rS(t){let e=await Xy(t);return new Fi(e.privateKey,e.publicKey)}var af={};rt(af,{Ed25519PrivateKey:()=>Gn,Ed25519PublicKey:()=>ko,generateKeyPair:()=>_S,generateKeyPairFromSeed:()=>gg,unmarshalEd25519PrivateKey:()=>vS,unmarshalEd25519PublicKey:()=>bS});var nS=U(Bn(),1);var tt=BigInt(0),ne=BigInt(1),dn=BigInt(2),iS=BigInt(8),ng=BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),Re=Object.freeze({a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),P:BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),l:ng,n:ng,h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960")});var cg=BigInt("0x10000000000000000000000000000000000000000000000000000000000000000"),Po=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),FP=BigInt("6853475219497561581579357271197624642482790079785650197046958215289687604742"),oS=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),sS=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),aS=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),cS=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),Z=class{constructor(e,r,n,i){this.x=e,this.y=r,this.z=n,this.t=i}static fromAffine(e){if(!(e instanceof Be))throw new TypeError("ExtendedPoint#fromAffine: expected Point");return e.equals(Be.ZERO)?Z.ZERO:new Z(e.x,e.y,ne,R(e.x*e.y))}static toAffineBatch(e){let r=fS(e.map(n=>n.z));return e.map((n,i)=>n.toAffine(r[i]))}static normalizeZ(e){return this.toAffineBatch(e).map(this.fromAffine)}equals(e){og(e);let{x:r,y:n,z:i}=this,{x:o,y:s,z:a}=e,c=R(r*a),u=R(o*i),l=R(n*a),f=R(s*i);return c===u&&l===f}negate(){return new Z(R(-this.x),this.y,this.z,R(-this.t))}double(){let{x:e,y:r,z:n}=this,{a:i}=Re,o=R(e*e),s=R(r*r),a=R(dn*R(n*n)),c=R(i*o),u=e+r,l=R(R(u*u)-o-s),f=c+s,h=f-a,d=c-s,p=R(l*h),m=R(f*d),y=R(l*d),g=R(h*f);return new Z(p,m,g,y)}add(e){og(e);let{x:r,y:n,z:i,t:o}=this,{x:s,y:a,z:c,t:u}=e,l=R((n-r)*(a+s)),f=R((n+r)*(a-s)),h=R(f-l);if(h===tt)return this.double();let d=R(i*dn*u),p=R(o*dn*c),m=p+d,y=f+l,g=p-d,x=R(m*h),_=R(y*g),k=R(m*g),C=R(h*y);return new Z(x,_,C,k)}subtract(e){return this.add(e.negate())}precomputeWindow(e){let r=1+256/e,n=[],i=this,o=i;for(let s=0;s<r;s++){o=i,n.push(o);for(let a=1;a<2**(e-1);a++)o=o.add(i),n.push(o);i=o.double()}return n}wNAF(e,r){!r&&this.equals(Z.BASE)&&(r=Be.BASE);let n=r&&r._WINDOW_SIZE||1;if(256%n)throw new Error("Point#wNAF: Invalid precomputation window, must be power of 2");let i=r&&rf.get(r);i||(i=this.precomputeWindow(n),r&&n!==1&&(i=Z.normalizeZ(i),rf.set(r,i)));let o=Z.ZERO,s=Z.BASE,a=1+256/n,c=2**(n-1),u=BigInt(2**n-1),l=2**n,f=BigInt(n);for(let h=0;h<a;h++){let d=h*c,p=Number(e&u);e>>=f,p>c&&(p-=l,e+=ne);let m=d,y=d+Math.abs(p)-1,g=h%2!==0,x=p<0;p===0?s=s.add(ig(g,i[m])):o=o.add(ig(x,i[y]))}return Z.normalizeZ([o,s])[0]}multiply(e,r){return this.wNAF(Ca(e,Re.l),r)}multiplyUnsafe(e){let r=Ca(e,Re.l,!1),n=Z.BASE,i=Z.ZERO;if(r===tt)return i;if(this.equals(i)||r===ne)return this;if(this.equals(n))return this.wNAF(r);let o=i,s=this;for(;r>tt;)r&ne&&(o=o.add(s)),s=s.double(),r>>=ne;return o}isSmallOrder(){return this.multiplyUnsafe(Re.h).equals(Z.ZERO)}isTorsionFree(){let e=this.multiplyUnsafe(Re.l/dn).double();return Re.l%dn&&(e=e.add(this)),e.equals(Z.ZERO)}toAffine(e){let{x:r,y:n,z:i}=this,o=this.equals(Z.ZERO);e==null&&(e=o?iS:Ba(i));let s=R(r*e),a=R(n*e),c=R(i*e);if(o)return Be.ZERO;if(c!==ne)throw new Error("invZ was invalid");return new Be(s,a)}fromRistrettoBytes(){jl()}toRistrettoBytes(){jl()}fromRistrettoHash(){jl()}};Z.BASE=new Z(Re.Gx,Re.Gy,ne,R(Re.Gx*Re.Gy));Z.ZERO=new Z(tt,ne,ne,tt);function ig(t,e){let r=e.negate();return t?r:e}function og(t){if(!(t instanceof Z))throw new TypeError("ExtendedPoint expected")}function Jl(t){if(!(t instanceof mt))throw new TypeError("RistrettoPoint expected")}function jl(){throw new Error("Legacy method: switch to RistrettoPoint")}var mt=class{constructor(e){this.ep=e}static calcElligatorRistrettoMap(e){let{d:r}=Re,n=R(Po*e*e),i=R((n+ne)*aS),o=BigInt(-1),s=R((o-r*n)*R(n+r)),{isValid:a,value:c}=of(i,s),u=R(c*e);hn(u)||(u=R(-u)),a||(c=u),a||(o=n);let l=R(o*(n-ne)*cS-s),f=c*c,h=R((c+c)*s),d=R(l*oS),p=R(ne-f),m=R(ne+f);return new Z(R(h*m),R(p*d),R(d*m),R(h*p))}static hashToCurve(e){e=pn(e,64);let r=ef(e.slice(0,32)),n=this.calcElligatorRistrettoMap(r),i=ef(e.slice(32,64)),o=this.calcElligatorRistrettoMap(i);return new mt(n.add(o))}static fromHex(e){e=pn(e,32);let{a:r,d:n}=Re,i="RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint",o=ef(e);if(!dS(Do(o),e)||hn(o))throw new Error(i);let s=R(o*o),a=R(ne+r*s),c=R(ne-r*s),u=R(a*a),l=R(c*c),f=R(r*n*u-l),{isValid:h,value:d}=ag(R(f*l)),p=R(d*c),m=R(d*p*f),y=R((o+o)*p);hn(y)&&(y=R(-y));let g=R(a*m),x=R(y*g);if(!h||hn(x)||g===tt)throw new Error(i);return new mt(new Z(y,g,ne,x))}toRawBytes(){let{x:e,y:r,z:n,t:i}=this.ep,o=R(R(n+r)*R(n-r)),s=R(e*r),a=R(s*s),{value:c}=ag(R(o*a)),u=R(c*o),l=R(c*s),f=R(u*l*i),h;if(hn(i*f)){let p=R(r*Po),m=R(e*Po);e=p,r=m,h=R(u*sS)}else h=l;hn(e*f)&&(r=R(-r));let d=R((n-r)*h);return hn(d)&&(d=R(-d)),Do(d)}toHex(){return Lo(this.toRawBytes())}toString(){return this.toHex()}equals(e){Jl(e);let r=this.ep,n=e.ep,i=R(r.x*n.y)===R(r.y*n.x),o=R(r.y*n.y)===R(r.x*n.x);return i||o}add(e){return Jl(e),new mt(this.ep.add(e.ep))}subtract(e){return Jl(e),new mt(this.ep.subtract(e.ep))}multiply(e){return new mt(this.ep.multiply(e))}multiplyUnsafe(e){return new mt(this.ep.multiplyUnsafe(e))}};mt.BASE=new mt(Z.BASE);mt.ZERO=new mt(Z.ZERO);var rf=new WeakMap,Be=class{constructor(e,r){this.x=e,this.y=r}_setWindowSize(e){this._WINDOW_SIZE=e,rf.delete(this)}static fromHex(e,r=!0){let{d:n,P:i}=Re;e=pn(e,32);let o=e.slice();o[31]=e[31]&-129;let s=No(o);if(r&&s>=i)throw new Error("Expected 0 < hex < P");if(!r&&s>=cg)throw new Error("Expected 0 < hex < 2**256");let a=R(s*s),c=R(a-ne),u=R(n*a+ne),{isValid:l,value:f}=of(c,u);if(!l)throw new Error("Point.fromHex: invalid y coordinate");let h=(f&ne)===ne;return(e[31]&128)!==0!==h&&(f=R(-f)),new Be(f,s)}static async fromPrivateKey(e){return(await Pa(e)).point}toRawBytes(){let e=Do(this.y);return e[31]|=this.x&ne?128:0,e}toHex(){return Lo(this.toRawBytes())}toX25519(){let{y:e}=this,r=R((ne+e)*Ba(ne-e));return Do(r)}isTorsionFree(){return Z.fromAffine(this).isTorsionFree()}equals(e){return this.x===e.x&&this.y===e.y}negate(){return new Be(R(-this.x),this.y)}add(e){return Z.fromAffine(this).add(Z.fromAffine(e)).toAffine()}subtract(e){return this.add(e.negate())}multiply(e){return Z.fromAffine(this).multiply(e,this).toAffine()}};Be.BASE=new Be(Re.Gx,Re.Gy);Be.ZERO=new Be(tt,ne);var Hn=class{constructor(e,r){this.r=e,this.s=r,this.assertValidity()}static fromHex(e){let r=pn(e,64),n=Be.fromHex(r.slice(0,32),!1),i=No(r.slice(32,64));return new Hn(n,i)}assertValidity(){let{r:e,s:r}=this;if(!(e instanceof Be))throw new Error("Expected Point instance");return Ca(r,Re.l,!1),this}toRawBytes(){let e=new Uint8Array(64);return e.set(this.r.toRawBytes()),e.set(Do(this.s),32),e}toHex(){return Lo(this.toRawBytes())}};function sg(...t){if(!t.every(n=>n instanceof Uint8Array))throw new Error("Expected Uint8Array list");if(t.length===1)return t[0];let e=t.reduce((n,i)=>n+i.length,0),r=new Uint8Array(e);for(let n=0,i=0;n<t.length;n++){let o=t[n];r.set(o,i),i+=o.length}return r}var uS=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Lo(t){if(!(t instanceof Uint8Array))throw new Error("Uint8Array expected");let e="";for(let r=0;r<t.length;r++)e+=uS[t[r]];return e}function nf(t){if(typeof t!="string")throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex");let e=new Uint8Array(t.length/2);for(let r=0;r<e.length;r++){let n=r*2,i=t.slice(n,n+2),o=Number.parseInt(i,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");e[r]=o}return e}function ug(t){let r=t.toString(16).padStart(64,"0");return nf(r)}function Do(t){return ug(t).reverse()}function hn(t){return(R(t)&ne)===ne}function No(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");return BigInt("0x"+Lo(Uint8Array.from(t).reverse()))}var lS=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");function ef(t){return R(No(t)&lS)}function R(t,e=Re.P){let r=t%e;return r>=tt?r:e+r}function Ba(t,e=Re.P){if(t===tt||e<=tt)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=R(t,e),n=e,i=tt,o=ne,s=ne,a=tt;for(;r!==tt;){let u=n/r,l=n%r,f=i-s*u,h=o-a*u;n=r,r=l,i=s,o=a,s=f,a=h}if(n!==ne)throw new Error("invert: does not exist");return R(i,e)}function fS(t,e=Re.P){let r=new Array(t.length),n=t.reduce((o,s,a)=>s===tt?o:(r[a]=o,R(o*s,e)),ne),i=Ba(n,e);return t.reduceRight((o,s,a)=>s===tt?o:(r[a]=R(o*r[a],e),R(o*s,e)),i),r}function dr(t,e){let{P:r}=Re,n=t;for(;e-- >tt;)n*=n,n%=r;return n}function hS(t){let{P:e}=Re,r=BigInt(5),n=BigInt(10),i=BigInt(20),o=BigInt(40),s=BigInt(80),c=t*t%e*t%e,u=dr(c,dn)*c%e,l=dr(u,ne)*t%e,f=dr(l,r)*l%e,h=dr(f,n)*f%e,d=dr(h,i)*h%e,p=dr(d,o)*d%e,m=dr(p,s)*p%e,y=dr(m,s)*p%e,g=dr(y,n)*f%e;return{pow_p_5_8:dr(g,dn)*t%e,b2:c}}function of(t,e){let r=R(e*e*e),n=R(r*r*e),i=hS(t*n).pow_p_5_8,o=R(t*r*i),s=R(e*o*o),a=o,c=R(o*Po),u=s===t,l=s===R(-t),f=s===R(-t*Po);return u&&(o=a),(l||f)&&(o=c),hn(o)&&(o=R(-o)),{isValid:u||l,value:o}}function ag(t){return of(ne,t)}function Ta(t){return R(No(t),Re.l)}function dS(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(t[r]!==e[r])return!1;return!0}function pn(t,e){let r=t instanceof Uint8Array?Uint8Array.from(t):nf(t);if(typeof e=="number"&&r.length!==e)throw new Error(`Expected ${e} bytes`);return r}function Ca(t,e,r=!0){if(!e)throw new TypeError("Specify max value");if(typeof t=="number"&&Number.isSafeInteger(t)&&(t=BigInt(t)),typeof t=="bigint"&&t<e){if(r){if(tt<t)return t}else if(tt<=t)return t}throw new TypeError("Expected valid scalar: 0 < scalar < max")}function pS(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}function mS(t){if(t=typeof t=="bigint"||typeof t=="number"?ug(Ca(t,cg)):pn(t),t.length!==32)throw new Error("Expected 32 bytes");return t}function yS(t){let e=pS(t.slice(0,32)),r=t.slice(32,64),n=Ta(e),i=Be.BASE.multiply(n),o=i.toRawBytes();return{head:e,prefix:r,scalar:n,point:i,pointBytes:o}}var tf;async function Pa(t){return yS(await mn.sha512(mS(t)))}async function sf(t){return(await Pa(t)).pointBytes}async function lg(t,e){t=pn(t);let{prefix:r,scalar:n,pointBytes:i}=await Pa(e),o=Ta(await mn.sha512(r,t)),s=Be.BASE.multiply(o),a=Ta(await mn.sha512(s.toRawBytes(),i,t)),c=R(o+a*n,Re.l);return new Hn(s,c).toRawBytes()}function gS(t,e,r){e=pn(e),r instanceof Be||(r=Be.fromHex(r,!1));let{r:n,s:i}=t instanceof Hn?t.assertValidity():Hn.fromHex(t),o=Z.BASE.multiplyUnsafe(i);return{r:n,s:i,SB:o,pub:r,msg:e}}function wS(t,e,r,n){let i=Ta(n),o=Z.fromAffine(t).multiplyUnsafe(i);return Z.fromAffine(e).add(o).subtract(r).multiplyUnsafe(Re.h).equals(Z.ZERO)}async function fg(t,e,r){let{r:n,SB:i,msg:o,pub:s}=gS(t,e,r),a=await mn.sha512(n.toRawBytes(),s.toRawBytes(),o);return wS(s,n,i,a)}Be.BASE._setWindowSize(8);var fn={node:nS,web:typeof self=="object"&&"crypto"in self?self.crypto:void 0},mn={bytesToHex:Lo,hexToBytes:nf,concatBytes:sg,getExtendedPublicKey:Pa,mod:R,invert:Ba,TORSION_SUBGROUP:["0100000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a","0000000000000000000000000000000000000000000000000000000000000080","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05","ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f","26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85","0000000000000000000000000000000000000000000000000000000000000000","c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa"],hashToPrivateScalar:t=>{if(t=pn(t),t.length<40||t.length>1024)throw new Error("Expected 40-1024 bytes of private key as per FIPS 186");return R(No(t),Re.l-ne)+ne},randomBytes:(t=32)=>{if(fn.web)return fn.web.getRandomValues(new Uint8Array(t));if(fn.node){let{randomBytes:e}=fn.node;return new Uint8Array(e(t).buffer)}else throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>mn.randomBytes(32),sha512:async(...t)=>{let e=sg(...t);if(fn.web){let r=await fn.web.subtle.digest("SHA-512",e.buffer);return new Uint8Array(r)}else{if(fn.node)return Uint8Array.from(fn.node.createHash("sha512").update(e).digest());throw new Error("The environment doesn't have sha512 function")}},precompute(t=8,e=Be.BASE){let r=e.equals(Be.BASE)?e:new Be(e.x,e.y);return r._setWindowSize(t),r.multiply(dn),r},sha512Sync:void 0};Object.defineProperties(mn,{sha512Sync:{configurable:!1,get(){return tf},set(t){tf||(tf=t)}}});var Ki=32,Or=64,Da=32;async function hg(){let t=mn.randomPrivateKey(),e=await sf(t);return{privateKey:yg(t,e),publicKey:e}}async function dg(t){if(t.length!==Da)throw new TypeError('"seed" must be 32 bytes in length.');if(!(t instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=t,r=await sf(e);return{privateKey:yg(e,r),publicKey:r}}async function pg(t,e){let r=t.subarray(0,Da);return await lg(e,r)}async function mg(t,e,r){return await fg(e,r,t)}function yg(t,e){let r=new Uint8Array(Or);for(let n=0;n<Da;n++)r[n]=t[n],r[Da+n]=e[n];return r}var ko=class{constructor(e){this._key=Vi(e,Ki)}async verify(e,r){return await mg(this._key,r,e)}marshal(){return this._key}get bytes(){return ir.encode({Type:Te.Ed25519,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}},Gn=class{constructor(e,r){this._key=Vi(e,Or),this._publicKey=Vi(r,Ki)}async sign(e){return await pg(this._key,e)}get public(){return new ko(this._publicKey)}marshal(){return this._key}get bytes(){return or.encode({Type:Te.Ed25519,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}async id(){let e=qr.digest(this.public.bytes);return Oe.encode(e.bytes).substring(1)}async export(e,r="libp2p-key"){if(r==="libp2p-key")return await Ui(this.bytes,e);throw new w(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function vS(t){if(t.length>Or){t=Vi(t,Or+Ki);let n=t.subarray(0,Or),i=t.subarray(Or,t.length);return new Gn(n,i)}t=Vi(t,Or);let e=t.subarray(0,Or),r=t.subarray(Ki);return new Gn(e,r)}function bS(t){return t=Vi(t,Ki),new ko(t)}async function _S(){let{privateKey:t,publicKey:e}=await hg();return new Gn(t,e)}async function gg(t){let{privateKey:e,publicKey:r}=await dg(t);return new Gn(e,r)}function Vi(t,e){if(t=Uint8Array.from(t??[]),t.length!==e)throw new w(`Key must be a Uint8Array of length ${e}, got ${t.length}`,"ERR_INVALID_KEY_TYPE");return t}var uf={};rt(uf,{Secp256k1PrivateKey:()=>Mo,Secp256k1PublicKey:()=>Oo,generateKeyPair:()=>IS,unmarshalSecp256k1PrivateKey:()=>AS,unmarshalSecp256k1PublicKey:()=>RS});function wg(){return Wt.randomPrivateKey()}async function Eg(t,e){let{digest:r}=await nt.digest(e);try{return await Hy(r,t)}catch(n){throw new w(String(n),"ERR_INVALID_INPUT")}}async function xg(t,e,r){try{let{digest:n}=await nt.digest(r);return Gy(e,n,t)}catch(n){throw new w(String(n),"ERR_INVALID_INPUT")}}function vg(t){return ce.fromHex(t).toRawBytes(!0)}function bg(t){try{Wl(t,!0)}catch(e){throw new w(String(e),"ERR_INVALID_PRIVATE_KEY")}}function cf(t){try{ce.fromHex(t)}catch(e){throw new w(String(e),"ERR_INVALID_PUBLIC_KEY")}}function _g(t){try{return Wl(t,!0)}catch(e){throw new w(String(e),"ERR_INVALID_PRIVATE_KEY")}}var Oo=class{constructor(e){cf(e),this._key=e}async verify(e,r){return await xg(this._key,r,e)}marshal(){return vg(this._key)}get bytes(){return ir.encode({Type:Te.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}},Mo=class{constructor(e,r){this._key=e,this._publicKey=r??_g(e),bg(this._key),cf(this._publicKey)}async sign(e){return await Eg(this._key,e)}get public(){return new Oo(this._publicKey)}marshal(){return this._key}get bytes(){return or.encode({Type:Te.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return xe(this.bytes,e.bytes)}async hash(){let{bytes:e}=await nt.digest(this.bytes);return e}async id(){let e=await this.public.hash();return $(e,"base58btc")}async export(e,r="libp2p-key"){if(r==="libp2p-key")return await Ui(this.bytes,e);throw new w(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function AS(t){return new Mo(t)}function RS(t){return new Oo(t)}async function IS(){let t=wg();return new Mo(t)}var Mr={rsa:Zl,ed25519:af,secp256k1:uf};function lf(t){let e=Object.keys(Mr).join(" / ");return new w(`invalid or unsupported key type ${t}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function ff(t){if(t=t.toLowerCase(),t==="rsa"||t==="ed25519"||t==="secp256k1")return Mr[t];throw lf(t)}async function Na(t,e){return await ff(t).generateKeyPair(e??2048)}function Uo(t){let e=ir.decode(t),r=e.Data??new Uint8Array;switch(e.Type){case Te.RSA:return Mr.rsa.unmarshalRsaPublicKey(r);case Te.Ed25519:return Mr.ed25519.unmarshalEd25519PublicKey(r);case Te.Secp256k1:return Mr.secp256k1.unmarshalSecp256k1PublicKey(r);default:throw lf(e.Type??"RSA")}}function Sg(t,e){return e=(e??"rsa").toLowerCase(),ff(e),t.bytes}async function qi(t){let e=or.decode(t),r=e.Data??new Uint8Array;switch(e.Type){case Te.RSA:return await Mr.rsa.unmarshalRsaPrivateKey(r);case Te.Ed25519:return Mr.ed25519.unmarshalEd25519PrivateKey(r);case Te.Secp256k1:return Mr.secp256k1.unmarshalSecp256k1PrivateKey(r);default:throw lf(e.Type??"RSA")}}function Ag(t,e){return e=(e??"rsa").toLowerCase(),ff(e),t.bytes}async function Fo(t,e){try{let i=await Iy(t,e);return await qi(i)}catch{}let r=La.default.pki.decryptRsaPrivateKey(t,e);if(r===null)throw new w("Cannot read the key, most likely the password is wrong or not a RSA key","ERR_CANNOT_DECRYPT_PEM");let n=La.default.asn1.toDer(La.default.pki.privateKeyToAsn1(r));return n=F(n.getBytes(),"ascii"),await Mr.rsa.unmarshalRsaPrivateKey(n)}var cD=U(ca(),1),CS=U(fe(),1);var Ig=U(Pl(),1),Tg=U(qe(),1);var Rg={sha1:"sha1","sha2-256":"sha256","sha2-512":"sha512"};function Ko(t,e,r,n,i){if(i!=="sha1"&&i!=="sha2-256"&&i!=="sha2-512"){let a=Object.keys(Rg).join(" / ");throw new w(`Hash '${i}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let o=Rg[i],s=(0,Ig.default)(t,e,r,n,o);return Tg.default.encode64(s,null)}var ka=M("libp2p:keychain"),DS="/pkcs8/",Bg="/info/",Yn=new WeakMap,Wn={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},hf={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Ur(t){return t==null||typeof t!="string"?!1:t===(0,Cg.default)(t.trim())&&t.length>0}async function ye(){let r=Math.random()*800+200;await new Promise(n=>setTimeout(n,r))}function pr(t){return new Le(DS+t)}function yn(t){return new Le(Bg+t)}var Qn=class{constructor(e,r){if(this.components=e,this.init=jr(hf,r),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Wn.minKeyLength)throw new Error(`dek.keyLength must be least ${Wn.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Wn.minSaltLength)throw new Error(`dek.saltLength must be least ${Wn.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Wn.minIterationCount)throw new Error(`dek.iterationCount must be least ${Wn.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ko(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yn.set(this,{dek:n})}static generateOptions(){let e=Object.assign({},hf),r=Math.ceil(Wn.minSaltLength/3)*3;return e.dek.salt=$(Nr(r),"base64"),e}static get options(){return hf}async createKey(e,r,n=2048){if(!Ur(e)||e==="self")throw await ye(),new w("Invalid key name",ee.ERR_INVALID_KEY_NAME);if(typeof r!="string")throw await ye(),new w("Invalid key type",ee.ERR_INVALID_KEY_TYPE);let i=pr(e);if(await this.components.datastore.has(i))throw await ye(),new w("Key name already exists",ee.ERR_KEY_ALREADY_EXISTS);switch(r.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await ye(),new w("Invalid RSA key size",ee.ERR_INVALID_KEY_SIZE);break;default:break}let s;try{let a=await Na(r,n),c=await a.id(),u=Yn.get(this);if(u==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let l=u.dek,f=await a.export(l);s={name:e,id:c};let h=this.components.datastore.batch();h.put(i,F(f)),h.put(yn(e),F(JSON.stringify(s))),await h.commit()}catch(a){throw await ye(),a}return s}async listKeys(){let e={prefix:Bg},r=[];for await(let n of this.components.datastore.query(e))r.push(JSON.parse($(n.value)));return r}async findKeyById(e){try{let n=(await this.listKeys()).find(i=>i.id===e);if(n==null)throw new w(`Key with id '${e}' does not exist.`,ee.ERR_KEY_NOT_FOUND);return n}catch(r){throw await ye(),r}}async findKeyByName(e){if(!Ur(e))throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);let r=yn(e);try{let n=await this.components.datastore.get(r);return JSON.parse($(n))}catch(n){throw await ye(),ka.error(n),new w(`Key '${e}' does not exist.`,ee.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!Ur(e)||e==="self")throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);let r=pr(e),n=await this.findKeyByName(e),i=this.components.datastore.batch();return i.delete(r),i.delete(yn(e)),await i.commit(),n}async renameKey(e,r){if(!Ur(e)||e==="self")throw await ye(),new w(`Invalid old key name '${e}'`,ee.ERR_OLD_KEY_NAME_INVALID);if(!Ur(r)||r==="self")throw await ye(),new w(`Invalid new key name '${r}'`,ee.ERR_NEW_KEY_NAME_INVALID);let n=pr(e),i=pr(r),o=yn(e),s=yn(r);if(await this.components.datastore.has(i))throw await ye(),new w(`Key '${r}' already exists`,ee.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),u=await this.components.datastore.get(o),l=JSON.parse($(u));l.name=r;let f=this.components.datastore.batch();return f.put(i,c),f.put(s,F(JSON.stringify(l))),f.delete(n),f.delete(o),await f.commit(),l}catch(c){throw await ye(),c}}async exportKey(e,r){if(!Ur(e))throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);if(r==null)throw await ye(),new w("Password is required",ee.ERR_PASSWORD_REQUIRED);let n=pr(e);try{let i=await this.components.datastore.get(n),o=$(i),s=Yn.get(this);if(s==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let a=s.dek;return await(await Fo(o,a)).export(r)}catch(i){throw await ye(),i}}async exportPeerId(e){let r="temporary-password",n=await this.exportKey(e,r),i=await Fo(n,r);return await Wr(i.public.bytes,i.bytes)}async importKey(e,r,n){if(!Ur(e)||e==="self")throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);if(r==null)throw await ye(),new w("PEM encoded key is required",ee.ERR_PEM_REQUIRED);let i=pr(e);if(await this.components.datastore.has(i))throw await ye(),new w(`Key '${e}' already exists`,ee.ERR_KEY_ALREADY_EXISTS);let s;try{s=await Fo(r,n)}catch{throw await ye(),new w("Cannot read the key, most likely the password is wrong",ee.ERR_CANNOT_READ_KEY)}let a;try{a=await s.id();let l=Yn.get(this);if(l==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let f=l.dek;r=await s.export(f)}catch(l){throw await ye(),l}let c={name:e,id:a},u=this.components.datastore.batch();return u.put(i,F(r)),u.put(yn(e),F(JSON.stringify(c))),await u.commit(),c}async importPeer(e,r){try{if(!Ur(e))throw new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);if(r==null)throw new w("PeerId is required",ee.ERR_MISSING_PRIVATE_KEY);if(r.privateKey==null)throw new w("PeerId.privKey is required",ee.ERR_MISSING_PRIVATE_KEY);let n=await qi(r.privateKey),i=pr(e);if(await this.components.datastore.has(i))throw await ye(),new w(`Key '${e}' already exists`,ee.ERR_KEY_ALREADY_EXISTS);let s=Yn.get(this);if(s==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let a=s.dek,c=await n.export(a),u={name:e,id:r.toString()},l=this.components.datastore.batch();return l.put(i,F(c)),l.put(yn(e),F(JSON.stringify(u))),await l.commit(),u}catch(n){throw await ye(),n}}async getPrivateKey(e){if(!Ur(e))throw await ye(),new w(`Invalid key name '${e}'`,ee.ERR_INVALID_KEY_NAME);try{let r=pr(e),n=await this.components.datastore.get(r);return $(n)}catch(r){throw await ye(),ka.error(r),new w(`Key '${e}' does not exist.`,ee.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,r){if(typeof e!="string")throw await ye(),new w(`Invalid old pass type '${typeof e}'`,ee.ERR_INVALID_OLD_PASS_TYPE);if(typeof r!="string")throw await ye(),new w(`Invalid new pass type '${typeof r}'`,ee.ERR_INVALID_NEW_PASS_TYPE);if(r.length<20)throw await ye(),new w(`Invalid pass length ${r.length}`,ee.ERR_INVALID_PASS_LENGTH);ka("recreating keychain");let n=Yn.get(this);if(n==null)throw new w("dek missing",ee.ERR_INVALID_PARAMETERS);let i=n.dek;this.init.pass=r;let o=r!=null&&this.init.dek?.salt!=null?Ko(r,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yn.set(this,{dek:o});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(pr(a.name)),u=$(c),l=await Fo(u,i),f=o.toString(),h=await l.export(f),d=this.components.datastore.batch(),p={name:a.name,id:a.id};d.put(pr(a.name),F(h)),d.put(yn(a.name),F(JSON.stringify(p))),await d.commit()}ka("keychain reconstructed")}};var LD=Symbol.for("@libp2p/transport");var gn;(function(t){t[t.FATAL_ALL=0]="FATAL_ALL",t[t.NO_FATAL=1]="NO_FATAL"})(gn||(gn={}));var df=class extends Map{constructor(e){super();let{name:r,metrics:n}=e;this.metric=n.registerMetric(r),this.updateComponentMetric()}set(e,r){return super.set(e,r),this.updateComponentMetric(),this}delete(e){let r=super.delete(e);return this.updateComponentMetric(),r}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Pg(t){let{name:e,metrics:r}=t,n;return r!=null?n=new df({name:e,metrics:r}):n=new Map,n}var Xn=M("libp2p:transports"),Oa=class extends Xe{constructor(e,r={}){super(),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Pg({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=r.faultTolerance??gn.FATAL_ALL}add(e){let r=e[Symbol.toStringTag];if(r==null)throw new w("Transport must have a valid tag",S.ERR_INVALID_KEY);if(this.transports.has(r))throw new w(`There is already a transport with the tag ${r}`,S.ERR_DUPLICATE_TRANSPORT);Xn("adding transport %s",r),this.transports.set(r,e),this.listeners.has(r)||this.listeners.set(r,[])}isStarted(){return this.started}async start(){let e=this.components.addressManager.getListenAddrs();await this.listen(e),this.started=!0}async stop(){let e=[];for(let[r,n]of this.listeners)for(Xn("closing listeners for %s",r);n.length>0;){let i=n.pop();i!=null&&e.push(i.close())}await Promise.all(e),Xn("all listeners closed");for(let r of this.listeners.keys())this.listeners.set(r,[]);this.started=!1}async dial(e,r){let n=this.transportForMultiaddr(e);if(n==null)throw new w(`No transport available for address ${String(e)}`,S.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...r,upgrader:this.components.upgrader})}catch(i){throw i.code==null&&(i.code=S.ERR_TRANSPORT_DIAL_FAILED),i}}getAddrs(){let e=[];for(let r of this.listeners.values())for(let n of r)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}transportForMultiaddr(e){for(let r of this.transports.values())if(r.filter([e]).length>0)return r}async listen(e){if(e==null||e.length===0){Xn("no addresses were provided for listening, this node is dial only");return}let r=[];for(let[n,i]of this.transports.entries()){let o=i.filter(e),s=[];for(let u of o){Xn("creating listener for %s on %s",n,u);let l=i.createListener({upgrader:this.components.upgrader}),f=this.listeners.get(n);f==null&&(f=[],this.listeners.set(n,f)),f.push(l),l.addEventListener("listening",()=>{this.dispatchEvent(new G("listener:listening",{detail:l}))}),l.addEventListener("close",()=>{this.dispatchEvent(new G("listener:close",{detail:l}))}),s.push(l.listen(u))}if(s.length===0){r.push(n);continue}if((await Promise.allSettled(s)).find(u=>u.status==="fulfilled")==null&&this.faultTolerance!==gn.NO_FATAL)throw new w(`Transport (${n}) could not listen on any available address`,S.ERR_NO_VALID_ADDRESSES)}if(r.length===this.transports.size){let n=`no valid addresses were provided for transports [${r.join(", ")}]`;if(this.faultTolerance===gn.FATAL_ALL)throw new w(n,S.ERR_NO_VALID_ADDRESSES);Xn(`libp2p in dial mode only: ${n}`)}}async remove(e){Xn("removing %s",e);for(let r of this.listeners.get(e)??[])await r.close();this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let r of this.transports.keys())e.push(this.remove(r));await Promise.all(e)}};var Fr="/multistream/1.0.0";var Lg=Symbol.for("@achingbrain/uint8arraylist");function Dg(t,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let r=0;for(let n of t){let i=r+n.byteLength;if(e<i)return{buf:n,index:e-r};r=i}throw new RangeError("index is out of bounds")}function Ma(t){return!!t?.[Lg]}var ke=class{constructor(...e){Object.defineProperty(this,Lg,{value:!0}),this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let r=0;for(let n of e)if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.push(n);else if(Ma(n))r+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}prepend(...e){this.prependAll(e)}prependAll(e){let r=0;for(let n of e.reverse())if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.unshift(n);else if(Ma(n))r+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}get(e){let r=Dg(this.bufs,e);return r.buf[r.index]}set(e,r){let n=Dg(this.bufs,e);n.buf[n.index]=r}write(e,r=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(r+n,e[n]);else if(Ma(e))for(let n=0;n<e.length;n++)this.set(r+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,r){let{bufs:n,length:i}=this._subList(e,r);return Me(n,i)}subarray(e,r){let{bufs:n,length:i}=this._subList(e,r);return n.length===1?n[0]:Me(n,i)}sublist(e,r){let{bufs:n,length:i}=this._subList(e,r),o=new ke;return o.length=i,o.bufs=n,o}_subList(e,r){if(e=e??0,r=r??this.length,e<0&&(e=this.length+e),r<0&&(r=this.length+r),e<0||r>this.length)throw new RangeError("index is out of bounds");if(e===r)return{bufs:[],length:0};if(e===0&&r===this.length)return{bufs:[...this.bufs],length:this.length};let n=[],i=0;for(let o=0;o<this.bufs.length;o++){let s=this.bufs[o],a=i,c=a+s.byteLength;if(i=c,e>=c)continue;let u=e>=a&&e<c,l=r>a&&r<=c;if(u&&l){if(e===a&&r===c){n.push(s);break}let f=e-a;n.push(s.subarray(f,f+(r-e)));break}if(u){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(l){if(r===c){n.push(s);break}n.push(s.subarray(0,r-a));break}n.push(s)}return{bufs:n,length:r-e}}indexOf(e,r=0){if(!Ma(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(r=Number(r??0),isNaN(r)&&(r=0),r<0&&(r=this.length+r),r<0&&(r=0),e.length===0)return r>this.length?this.length:r;let i=n.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let o=256,s=new Int32Array(o);for(let f=0;f<o;f++)s[f]=-1;for(let f=0;f<i;f++)s[n[f]]=f;let a=s,c=this.byteLength-n.byteLength,u=n.byteLength-1,l;for(let f=r;f<=c;f+=l){l=0;for(let h=u;h>=0;h--){let d=this.get(f+h);if(n[h]!==d){l=Math.max(1,h-a[d]);break}}if(l===0)return f}return-1}getInt8(e){let r=this.subarray(e,e+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt8(0)}setInt8(e,r){let n=Mt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,r),this.write(n,e)}getInt16(e,r){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,r)}setInt16(e,r,n){let i=xr(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,r,n),this.write(i,e)}getInt32(e,r){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,r)}setInt32(e,r,n){let i=xr(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,r,n),this.write(i,e)}getBigInt64(e,r){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,r)}setBigInt64(e,r,n){let i=xr(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,r,n),this.write(i,e)}getUint8(e){let r=this.subarray(e,e+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint8(0)}setUint8(e,r){let n=Mt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,r),this.write(n,e)}getUint16(e,r){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,r)}setUint16(e,r,n){let i=xr(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,r,n),this.write(i,e)}getUint32(e,r){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,r)}setUint32(e,r,n){let i=xr(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,r,n),this.write(i,e)}getBigUint64(e,r){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,r)}setBigUint64(e,r,n){let i=xr(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,r,n),this.write(i,e)}getFloat32(e,r){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,r)}setFloat32(e,r,n){let i=xr(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,r,n),this.write(i,e)}getFloat64(e,r){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,r)}setFloat64(e,r,n){let i=xr(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,r,n),this.write(i,e)}equals(e){if(e==null||!(e instanceof ke)||e.bufs.length!==this.bufs.length)return!1;for(let r=0;r<this.bufs.length;r++)if(!xe(this.bufs[r],e.bufs[r]))return!1;return!0}static fromUint8Arrays(e,r){let n=new ke;return n.bufs=e,r==null&&(r=e.reduce((i,o)=>i+o.byteLength,0)),n.length=r,n}};function Ua(t){return t instanceof Uint8Array?{get(e){return t[e]},set(e,r){t[e]=r}}:{get(e){return t.get(e)},set(e,r){t.set(e,r)}}}var Ng=4294967296,Rt=class{constructor(e=0,r=0){this.hi=e,this.lo=r}toBigInt(e){if(e===!0)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let r=~this.lo+1>>>0,n=~this.hi>>>0;return r===0&&(n=n+1>>>0),-(BigInt(r)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toNumber(e){return Number(this.toBigInt(e))}zzDecode(){let e=-(this.lo&1),r=((this.lo>>>1|this.hi<<31)^e)>>>0,n=(this.hi>>>1^e)>>>0;return new Rt(n,r)}zzEncode(){let e=this.hi>>31,r=((this.hi<<1|this.lo>>>31)^e)>>>0,n=(this.lo<<1^e)>>>0;return new Rt(r,n)}toBytes(e,r=0){let n=Ua(e);for(;this.hi>0;)n.set(r++,this.lo&127|128),this.lo=(this.lo>>>7|this.hi<<25)>>>0,this.hi>>>=7;for(;this.lo>127;)n.set(r++,this.lo&127|128),this.lo=this.lo>>>7;n.set(r++,this.lo)}static fromBigInt(e){if(e===0n)return new Rt;let r=e<0;r&&(e=-e);let n=Number(e>>32n)|0,i=Number(e-(BigInt(n)<<32n))|0;return r&&(n=~n>>>0,i=~i>>>0,++i>Ng&&(i=0,++n>Ng&&(n=0))),new Rt(n,i)}static fromNumber(e){if(e===0)return new Rt;let r=e<0;r&&(e=-e);let n=e>>>0,i=(e-n)/4294967296>>>0;return r&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new Rt(i,n)}static fromBytes(e,r=0){let n=Ua(e),i=new Rt,o=0;if(e.length-r>4){for(;o<4;++o)if(i.lo=(i.lo|(n.get(r)&127)<<o*7)>>>0,n.get(r++)<128)return i;if(i.lo=(i.lo|(n.get(r)&127)<<28)>>>0,i.hi=(i.hi|(n.get(r)&127)>>4)>>>0,n.get(r++)<128)return i;o=0}else for(;o<4;++o){if(r>=e.length)throw RangeError(`index out of range: ${r} > ${e.length}`);if(i.lo=(i.lo|(n.get(r)&127)<<o*7)>>>0,n.get(r++)<128)return i}if(e.length-r>4){for(;o<5;++o)if(i.hi=(i.hi|(n.get(r)&127)<<o*7+3)>>>0,n.get(r++)<128)return i}else if(r<e.byteLength)for(;o<5;++o){if(r>=e.length)throw RangeError(`index out of range: ${r} > ${e.length}`);if(i.hi=(i.hi|(n.get(r)&127)<<o*7+3)>>>0,n.get(r++)<128)return i}throw RangeError("invalid varint encoding")}};var LS=Math.pow(2,7),NS=Math.pow(2,14),kS=Math.pow(2,21),OS=Math.pow(2,28),MS=Math.pow(2,35),US=Math.pow(2,42),FS=Math.pow(2,49),KS=Math.pow(2,56),VS=Math.pow(2,63),Qt={encodingLength(t){return t<LS?1:t<NS?2:t<kS?3:t<OS?4:t<MS?5:t<US?6:t<FS?7:t<KS?8:t<VS?9:10},encode(t,e,r=0){if(Number.MAX_SAFE_INTEGER!=null&&t>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return e==null&&(e=Mt(Qt.encodingLength(t))),Rt.fromNumber(t).toBytes(e,r),e},decode(t,e=0){return Rt.fromBytes(t,e).toNumber(!0)}};function Fa(t){return t[Symbol.asyncIterator]!=null}var Ka=t=>{let e=Qt.encodingLength(t),r=Mt(e);return Qt.encode(t,r),Ka.bytes=e,r};Ka.bytes=0;function It(t,e){e=e??{};let r=e.lengthEncoder??Ka;function*n(i){let o=r(i.byteLength);o instanceof Uint8Array?yield o:yield*o,i instanceof Uint8Array?yield i:yield*i}return Fa(t)?async function*(){for await(let i of t)yield*n(i)}():function*(){for(let i of t)yield*n(i)}()}It.single=(t,e)=>{e=e??{};let r=e.lengthEncoder??Ka;return new ke(r(t.byteLength),t)};var $i=U(hu(),1);var qS=8,$S=1024*1024*4,Zn;(function(t){t[t.LENGTH=0]="LENGTH",t[t.DATA=1]="DATA"})(Zn||(Zn={}));var pf=t=>{let e=Qt.decode(t);return pf.bytes=Qt.encodingLength(e),e};pf.bytes=0;function yt(t,e){let r=new ke,n=Zn.LENGTH,i=-1,o=e?.lengthDecoder??pf,s=e?.maxLengthLength??qS,a=e?.maxDataLength??$S;function*c(){for(;r.byteLength>0;){if(n===Zn.LENGTH)try{if(i=o(r),i<0)throw(0,$i.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(i>a)throw(0,$i.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let u=o.bytes;r.consume(u),e?.onLength!=null&&e.onLength(i),n=Zn.DATA}catch(u){if(u instanceof RangeError){if(r.byteLength>s)throw(0,$i.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw u}if(n===Zn.DATA){if(r.byteLength<i)break;let u=r.sublist(0,i);r.consume(i),e?.onData!=null&&e.onData(u),yield u,n=Zn.LENGTH}}}return Fa(t)?async function*(){for await(let u of t)r.append(u),yield*c();if(r.byteLength>0)throw(0,$i.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let u of t)r.append(u),yield*c();if(r.byteLength>0)throw(0,$i.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}yt.fromReader=(t,e)=>{let r=1,n=async function*(){for(;;)try{let{done:o,value:s}=await t.next(r);if(o===!0)return;s!=null&&(yield s)}catch(o){if(o.code==="ERR_UNDER_READ")return{done:!0,value:null};throw o}finally{r=1}}();return yt(n,{...e??{},onLength:o=>{r=o}})};var Vo=class extends Error{constructor(e,r){super(e??"The operation was aborted"),this.type="aborted",this.code=r??"ABORT_ERR"}};function kg(t){if(t!=null){if(typeof t[Symbol.iterator]=="function")return t[Symbol.iterator]();if(typeof t[Symbol.asyncIterator]=="function")return t[Symbol.asyncIterator]();if(typeof t.next=="function")return t}throw new Error("argument is not an iterator or iterable")}function qa(t,e,r){let n=r??{},i=kg(t);async function*o(){let s,a=()=>{s?.()};for(e.addEventListener("abort",a);;){let c;try{if(e.aborted){let{abortMessage:l,abortCode:f}=n;throw new Vo(l,f)}let u=new Promise((l,f)=>{s=()=>{let{abortMessage:h,abortCode:d}=n;f(new Vo(h,d))}});c=await Promise.race([u,i.next()]),s=null}catch(u){e.removeEventListener("abort",a);let l=u.type==="aborted"&&e.aborted;if(l&&n.onAbort!=null&&n.onAbort(t),typeof i.return=="function")try{let f=i.return();f instanceof Promise&&f.catch(h=>{n.onReturnError!=null&&n.onReturnError(h)})}catch(f){n.onReturnError!=null&&n.onReturnError(f)}if(l&&n.returnOnAbort===!0)return;throw u}if(c.done===!0)break;yield c.value}e.removeEventListener("abort",a)}return o()}function zS(t,e,r){return n=>t(qa(n,e,r))}function gt(t,e,r){return{sink:zS(t.sink,e,{...r,onAbort:void 0}),source:qa(t.source,e,r)}}var GS=M("libp2p:mss"),Og=F(`
|
|
49
|
+
`);function qo(t){let e=new ke(t,Og);return It.single(e)}function Jn(t,e,r={}){let n=qo(e);r.writeBytes===!0?t.push(n.subarray()):t.push(n)}function Mg(t,e,r={}){let n=new ke;for(let i of e)n.append(qo(i));r.writeBytes===!0?t.push(n.subarray()):t.push(n)}async function YS(t,e){let r=1,n={[Symbol.asyncIterator]:()=>n,next:async()=>await t.next(r)},i=n;e?.signal!=null&&(i=qa(n,e.signal));let o=a=>{r=a},s=await Ue(i,a=>yt(a,{onLength:o,maxDataLength:1024}),async a=>await at(a));if(s==null||s.length===0)throw new w("no buffer returned","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");if(s.get(s.byteLength-1)!==Og[0])throw GS.error("Invalid mss message - missing newline - %s",s.subarray()),new w("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return s.sublist(0,-1)}async function zi(t,e){let r=await YS(t,e);return $(r.subarray())}function mf(t){let e=async function*(){let r=yield,n=new ke;for await(let i of t){if(r==null){n.append(i),r=yield n,n=new ke;continue}for(n.append(i);n.length>=r;){let o=n.sublist(0,r);if(n.consume(r),r=yield o,r==null){n.length>0&&(r=yield n,n=new ke);break}}}if(r!=null)throw Object.assign(new Error(`stream ended before ${r} bytes became available`),{code:"ERR_UNDER_READ",buffer:n})}();return e.next(),e}function $a(t){let e=Rn(),r=mf(t.source),n=tr(),i,o=t.sink(async function*(){yield*e,yield*await n.promise}());return o.catch(a=>{i=a}),{reader:r,writer:e,stream:{sink:async a=>{if(i!=null){await Promise.reject(i);return}n.resolve(a),await o},source:r},rest:()=>e.end(),write:e.push,read:async()=>{let a=await r.next();if(a.value!=null)return a.value}}}var $o=M("libp2p:mss:select");async function zo(t,e,r={}){e=Array.isArray(e)?[...e]:[e];let{reader:n,writer:i,rest:o,stream:s}=$a(t),a=e.shift();if(a==null)throw new Error("At least one protocol must be specified");$o.trace('select: write ["%s", "%s"]',Fr,a);let c=F(Fr),u=F(a);Mg(i,[c,u],r);let l=await zi(n,r);if($o.trace('select: read "%s"',l),l===Fr&&(l=await zi(n,r),$o.trace('select: read "%s"',l)),l===a)return o(),{stream:s,protocol:a};for(let f of e){$o.trace('select: write "%s"',f),Jn(i,F(f),r);let h=await zi(n,r);if($o.trace('select: read "%s" for "%s"',h,f),h===f)return o(),{stream:s,protocol:f}}throw o(),new w("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}var Ho=M("libp2p:mss:handle");async function Go(t,e,r){e=Array.isArray(e)?e:[e];let{writer:n,reader:i,rest:o,stream:s}=$a(t);for(;;){let a=await zi(i,r);if(Ho.trace('read "%s"',a),a===Fr){Ho.trace('respond with "%s" for "%s"',Fr,a),Jn(n,F(Fr),r);continue}if(e.includes(a))return Jn(n,F(a),r),Ho.trace('respond with "%s" for "%s"',a,a),o(),{stream:s,protocol:a};if(a==="ls"){Jn(n,new ke(...e.map(c=>qo(F(c)))),r),Ho.trace('respond with "%s" for %s',e,a);continue}Jn(n,F("na"),r),Ho('respond with "na" for "%s"',a)}}var Fg="OPEN",yf="CLOSING",za="CLOSED";var Kg=Symbol.for("@libp2p/connection");var QS=M("libp2p:connection"),gf=class{constructor(e){let{remoteAddr:r,remotePeer:n,newStream:i,close:o,getStreams:s,stat:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=r,this.remotePeer=n,this.stat={...a,status:Fg},this._newStream=i,this._close=o,this._getStreams=s,this.tags=[],this._closing=!1}get[Symbol.toStringTag](){return"Connection"}get[Kg](){return!0}get streams(){return this._getStreams()}async newStream(e,r){if(this.stat.status===yf)throw new w("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.stat.status===za)throw new w("the connection is closed","ERR_CONNECTION_CLOSED");Array.isArray(e)||(e=[e]);let n=await this._newStream(e,r);return n.stat.direction="outbound",n}addStream(e){e.stat.direction="inbound"}removeStream(e){}async close(){if(!(this.stat.status===za||this._closing)){this.stat.status=yf;try{this.streams.forEach(e=>{e.close()})}catch(e){QS.error(e)}this._closing=!0,await this._close(),this._closing=!1,this.stat.timeline.close=Date.now(),this.stat.status=za}}};function Vg(t){return new gf(t)}var XS=Symbol.for("@libp2p/topology");function qg(t){return t!=null&&!!t[XS]}var wf=M("libp2p:registrar"),Ef=32,xf=64,Ha=class{constructor(e){this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onProtocolChange=this._onProtocolChange.bind(this),this._onConnect=this._onConnect.bind(this),this.components.connectionManager.addEventListener("peer:disconnect",this._onDisconnect),this.components.connectionManager.addEventListener("peer:connect",this._onConnect),this.components.peerStore.addEventListener("change:protocols",this._onProtocolChange)}getProtocols(){return Array.from(new Set([...this.topologies.keys(),...this.handlers.keys()])).sort()}getHandler(e){let r=this.handlers.get(e);if(r==null)throw new w(`No handler registered for protocol ${e}`,S.ERR_NO_HANDLER_FOR_PROTOCOL);return r}getTopologies(e){let r=this.topologies.get(e);return r==null?[]:[...r.values()]}async handle(e,r,n){if(this.handlers.has(e))throw new w(`Handler already registered for protocol ${e}`,S.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let i=jr.bind({ignoreUndefined:!0})({maxInboundStreams:Ef,maxOutboundStreams:xf},n);this.handlers.set(e,{handler:r,options:i}),await this.components.peerStore.protoBook.add(this.components.peerId,[e])}async unhandle(e){let r=Array.isArray(e)?e:[e];r.forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.protoBook.remove(this.components.peerId,r)}async register(e,r){if(!qg(r))throw wf.error("topology must be an instance of interfaces/topology"),new w("topology must be an instance of interfaces/topology",S.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,i=this.topologies.get(e);return i==null&&(i=new Map,this.topologies.set(e,i)),i.set(n,r),await r.setRegistrar(this),n}unregister(e){for(let[r,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(r))}_onDisconnect(e){let r=e.detail;this.components.peerStore.protoBook.get(r.remotePeer).then(n=>{for(let i of n){let o=this.topologies.get(i);if(o!=null)for(let s of o.values())s.onDisconnect(r.remotePeer)}}).catch(n=>{wf.error(n)})}_onConnect(e){let r=e.detail;this.components.peerStore.protoBook.get(r.remotePeer).then(n=>{for(let i of n){let o=this.topologies.get(i);if(o!=null)for(let s of o.values())s.onConnect(r.remotePeer,r)}}).catch(n=>{wf.error(n)})}_onProtocolChange(e){let{peerId:r,protocols:n,oldProtocols:i}=e.detail,o=i.filter(a=>!n.includes(a)),s=n.filter(a=>!i.includes(a));for(let a of o){let c=this.topologies.get(a);if(c!=null)for(let u of c.values())u.onDisconnect(r)}for(let a of s){let c=this.topologies.get(a);if(c!=null)for(let u of c.values()){let l=this.components.connectionManager.getConnections(r)[0];l!=null&&u.onConnect(r,l)}}}};var vf=U(Hr(),1);var bf=U(Ar(),1);var be=M("libp2p:upgrader");function JS(t,e){try{let{options:r}=e.getHandler(t);return r.maxInboundStreams}catch(r){if(r.code!==S.ERR_NO_HANDLER_FOR_PROTOCOL)throw r}return Ef}function jS(t,e){try{let{options:r}=e.getHandler(t);return r.maxOutboundStreams}catch(r){if(r.code!==S.ERR_NO_HANDLER_FOR_PROTOCOL)throw r}return xf}function $g(t,e,r){let n=0;return r.streams.forEach(i=>{i.stat.direction===e&&i.stat.protocol===t&&n++}),n}var Ga=class extends Xe{constructor(e,r){super(),this.components=e,this.connectionEncryption=new Map,r.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,r.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=r.inboundUpgradeTimeout??3e4}async upgradeInbound(e,r){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new w("connection denied",S.ERR_CONNECTION_DENIED);let i,o,s,a,c,u=new vf.TimeoutController(this.inboundUpgradeTimeout);try{(0,bf.setMaxListeners)?.(1/0,u.signal)}catch{}try{let l=gt(e,u.signal);if(e.source=l.source,e.sink=l.sink,await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new w("The multiaddr connection is blocked by gater.acceptConnection",S.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),be("starting the inbound connection upgrade");let f=e;if(r?.skipProtection!==!0){let h=this.components.connectionProtector;h!=null&&(be("protecting the inbound connection"),f=await h.protect(e))}try{if(i=f,r?.skipEncryption!==!0){if({conn:i,remotePeer:o,protocol:c}=await this._encryptInbound(f),await this.components.connectionGater.denyInboundEncryptedConnection?.(o,{...f,...i})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED)}else{let h=e.remoteAddr.getPeerId();if(h==null)throw new w("inbound connection that skipped encryption must have a peer id",S.ERR_INVALID_MULTIADDR);let d=ae(h);c="native",o=d}if(s=i,r?.muxerFactory!=null)a=r.muxerFactory;else if(this.muxers.size>0){let h=await this._multiplexInbound({...f,...i},this.muxers);a=h.muxerFactory,s=h.stream}}catch(h){throw be.error("Failed to upgrade inbound connection",h),h}if(await this.components.connectionGater.denyInboundUpgradedConnection?.(o,{...f,...i})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED);return be("Successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:o})}finally{this.components.connectionManager.afterUpgradeInbound(),u.clear()}}async upgradeOutbound(e,r){let n=e.remoteAddr.getPeerId(),i;if(n!=null&&(i=ae(n),await this.components.connectionGater.denyOutboundConnection?.(i,e)===!0))throw new w("The multiaddr connection is blocked by connectionGater.denyOutboundConnection",S.ERR_CONNECTION_INTERCEPTED);let o,s,a,c,u;this.components.metrics?.trackMultiaddrConnection(e),be("Starting the outbound connection upgrade");let l=e;if(r?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(l=await f.protect(e))}try{if(o=l,r?.skipEncryption!==!0){if({conn:o,remotePeer:s,protocol:c}=await this._encryptOutbound(l,i),await this.components.connectionGater.denyOutboundEncryptedConnection?.(s,{...l,...o})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED)}else{if(i==null)throw new w("Encryption was skipped but no peer id was passed",S.ERR_INVALID_PEER);c="native",s=i}if(a=o,r?.muxerFactory!=null)u=r.muxerFactory;else if(this.muxers.size>0){let f=await this._multiplexOutbound({...l,...o},this.muxers);u=f.muxerFactory,a=f.stream}}catch(f){throw be.error("Failed to upgrade outbound connection",f),await e.close(f),f}if(await this.components.connectionGater.denyOutboundUpgradedConnection?.(s,{...l,...o})===!0)throw new w("The multiaddr connection is blocked by gater.acceptEncryptedConnection",S.ERR_CONNECTION_INTERCEPTED);return be("Successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:u,remotePeer:s})}_createConnection(e){let{cryptoProtocol:r,direction:n,maConn:i,upgradedConn:o,remotePeer:s,muxerFactory:a}=e,c,u,l;a!=null&&(c=a.createStreamMuxer({direction:n,onIncomingStream:d=>{l!=null&&Promise.resolve().then(async()=>{let p=this.components.registrar.getProtocols(),{stream:m,protocol:y}=await Go(d,p);if(be("%s: incoming stream opened on %s",n,y),l==null)return;let g=JS(y,this.components.registrar);if($g(y,"inbound",l)===g){d.abort(new w(`Too many inbound protocol streams for protocol "${y}" - limit ${g}`,S.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS));return}d.source=m.source,d.sink=m.sink,d.stat.protocol=y,this.components.peerStore.protoBook.add(s,[y]).catch(_=>{be.error(_)}),l.addStream(d),this.components.metrics?.trackProtocolStream(d,l),this._onStream({connection:l,stream:d,protocol:y})}).catch(p=>{be.error(p),d.stat.timeline.close==null&&d.close()})},onStreamEnd:d=>{l?.removeStream(d.id)}}),u=async(d,p={})=>{if(c==null)throw new w("Stream is not multiplexed",S.ERR_MUXER_UNAVAILABLE);be("%s: starting new stream on %s",n,d);let m=await c.newStream(),y;try{if(p.signal==null){be("No abort signal was passed while trying to negotiate protocols %s falling back to default timeout",d),y=new vf.TimeoutController(3e4),p.signal=y.signal;try{(0,bf.setMaxListeners)?.(1/0,y.signal)}catch{}}let{stream:g,protocol:x}=await zo(m,d,p),_=jS(x,this.components.registrar);if($g(x,"outbound",l)===_){let C=new w(`Too many outbound protocol streams for protocol "${x}" - limit ${_}`,S.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw m.abort(C),C}return this.components.peerStore.protoBook.add(s,[x]).catch(C=>{be.error(C)}),m.source=g.source,m.sink=g.sink,m.stat.protocol=x,this.components.metrics?.trackProtocolStream(m,l),m}catch(g){throw be.error("could not create new stream",g),m.stat.timeline.close==null&&m.close(),g.code!=null?g:new w(String(g),S.ERR_UNSUPPORTED_PROTOCOL)}finally{y?.clear()}},Promise.all([c.sink(o.source),o.sink(c.source)]).catch(d=>{be.error(d)}));let f=i.timeline;i.timeline=new Proxy(f,{set:(...d)=>(l!=null&&d[1]==="close"&&d[2]!=null&&f.close==null&&(async()=>{try{l.stat.status==="OPEN"&&await l.close()}catch(p){be.error(p)}finally{this.dispatchEvent(new G("connectionEnd",{detail:l}))}})().catch(p=>{be.error(p)}),Reflect.set(...d))}),i.timeline.upgraded=Date.now();let h=()=>{throw new w("connection is not multiplexed",S.ERR_CONNECTION_NOT_MULTIPLEXED)};return l=Vg({remoteAddr:i.remoteAddr,remotePeer:s,stat:{status:"OPEN",direction:n,timeline:i.timeline,multiplexer:c?.protocol,encryption:r},newStream:u??h,getStreams:()=>c!=null?c.streams:h(),close:async()=>{await i.close(),c?.close()}}),this.dispatchEvent(new G("connection",{detail:l})),l}_onStream(e){let{connection:r,stream:n,protocol:i}=e,{handler:o}=this.components.registrar.getHandler(i);o({connection:r,stream:n})}async _encryptInbound(e){let r=Array.from(this.connectionEncryption.keys());be("handling inbound crypto protocol selection",r);try{let{stream:n,protocol:i}=await Go(e,r,{writeBytes:!0}),o=this.connectionEncryption.get(i);if(o==null)throw new Error(`no crypto module found for ${i}`);return be("encrypting inbound connection..."),{...await o.secureInbound(this.components.peerId,n),protocol:i}}catch(n){throw new w(String(n),S.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,r){let n=Array.from(this.connectionEncryption.keys());be("selecting outbound crypto protocol",n);try{let{stream:i,protocol:o}=await zo(e,n,{writeBytes:!0}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return be("encrypting outbound connection to %p",r),{...await s.secureOutbound(this.components.peerId,i,r),protocol:o}}catch(i){throw new w(String(i),S.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,r){let n=Array.from(r.keys());be("outbound selecting muxer %s",n);try{let{stream:i,protocol:o}=await zo(e,n,{writeBytes:!0});be("%s selected as muxer protocol",o);let s=r.get(o);return{stream:i,muxerFactory:s}}catch(i){throw be.error("error multiplexing outbound stream",i),new w(String(i),S.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,r){let n=Array.from(r.keys());be("inbound handling muxers %s",n);try{let{stream:i,protocol:o}=await Go(e,n,{writeBytes:!0}),s=r.get(o);return{stream:i,muxerFactory:s}}catch(i){throw be.error("error multiplexing inbound stream",i),new w(String(i),S.ERR_MUXER_UNAVAILABLE)}}};var jn;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.protocolVersion!=null&&(n.uint32(42),n.string(r.protocolVersion)),r.agentVersion!=null&&(n.uint32(50),n.string(r.agentVersion)),r.publicKey!=null&&(n.uint32(10),n.bytes(r.publicKey)),r.listenAddrs!=null)for(let o of r.listenAddrs)n.uint32(18),n.bytes(o);if(r.observedAddr!=null&&(n.uint32(34),n.bytes(r.observedAddr)),r.protocols!=null)for(let o of r.protocols)n.uint32(26),n.string(o);r.signedPeerRecord!=null&&(n.uint32(66),n.bytes(r.signedPeerRecord)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={listenAddrs:[],protocols:[]},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 5:i.protocolVersion=r.string();break;case 6:i.agentVersion=r.string();break;case 1:i.publicKey=r.bytes();break;case 2:i.listenAddrs.push(r.bytes());break;case 4:i.observedAddr=r.bytes();break;case 3:i.protocols.push(r.string());break;case 8:i.signedPeerRecord=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(jn||(jn={}));var zg={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var Yo;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.publicKey!=null&&r.publicKey.byteLength>0&&(n.uint32(10),n.bytes(r.publicKey)),r.payloadType!=null&&r.payloadType.byteLength>0&&(n.uint32(18),n.bytes(r.payloadType)),r.payload!=null&&r.payload.byteLength>0&&(n.uint32(26),n.bytes(r.payload)),r.signature!=null&&r.signature.byteLength>0&&(n.uint32(42),n.bytes(r.signature)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.publicKey=r.bytes();break;case 2:i.payloadType=r.bytes();break;case 3:i.payload=r.bytes();break;case 5:i.signature=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Yo||(Yo={}));var eA,Qe=class{constructor(e){let{peerId:r,payloadType:n,payload:i,signature:o}=e;this.peerId=r,this.payloadType=n,this.payload=i,this.signature=o}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=Yo.encode({publicKey:this.peerId.publicKey,payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return xe(this.marshal(),e.marshal())}async validate(e){let r=Hg(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return await Uo(this.peerId.publicKey).verify(r.subarray(),this.signature)}};eA=Qe;Qe.createFromProtobuf=async t=>{let e=Yo.decode(t),r=await Wr(e.publicKey);return new Qe({peerId:r,payloadType:e.payloadType,payload:e.payload,signature:e.signature})};Qe.seal=async(t,e)=>{if(e.privateKey==null)throw new Error("Missing private key");let r=t.domain,n=t.codec,i=t.marshal(),o=Hg(r,n,i),a=await(await qi(e.privateKey)).sign(o.subarray());return new Qe({peerId:e,payloadType:n,payload:i,signature:a})};Qe.openAndCertify=async(t,e)=>{let r=await Qe.createFromProtobuf(t);if(!await r.validate(e))throw new w("envelope signature is not valid for the given domain",zg.ERR_SIGNATURE_NOT_VALID);return r};var Hg=(t,e,r)=>{let n=F(t),i=Qt.encode(n.byteLength),o=Qt.encode(e.length),s=Qt.encode(r.length);return new ke(i,n,o,e,s,r)};function Gg(t,e){let r=(n,i)=>n.toString().localeCompare(i.toString());return t.length!==e.length?!1:(e.sort(r),t.sort(r).every((n,i)=>e[i].equals(n)))}var Wo;(function(t){let e;(function(n){let i;n.codec=()=>(i==null&&(i=me((o,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),o.multiaddr!=null&&o.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(o.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let a={multiaddr:new Uint8Array(0)},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let u=o.uint32();switch(u>>>3){case 1:a.multiaddr=o.bytes();break;default:o.skipType(u&7);break}}return a})),i),n.encode=o=>pe(o,n.codec()),n.decode=o=>de(o,n.codec())})(e=t.AddressInfo||(t.AddressInfo={}));let r;t.codec=()=>(r==null&&(r=me((n,i,o={})=>{if(o.lengthDelimited!==!1&&i.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(i.uint32(10),i.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(i.uint32(16),i.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)i.uint32(26),t.AddressInfo.codec().encode(s,i);o.lengthDelimited!==!1&&i.ldelim()},(n,i)=>{let o={peerId:new Uint8Array(0),seq:0n,addresses:[]},s=i==null?n.len:n.pos+i;for(;n.pos<s;){let a=n.uint32();switch(a>>>3){case 1:o.peerId=n.bytes();break;case 2:o.seq=n.uint64();break;case 3:o.addresses.push(t.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return o})),r),t.encode=n=>pe(n,t.codec()),t.decode=n=>de(n,t.codec())})(Wo||(Wo={}));var Yg="libp2p-peer-record",Wg=Uint8Array.from([3,1]);var He=class{constructor(e){this.domain=He.DOMAIN,this.codec=He.CODEC;let{peerId:r,multiaddrs:n,seqNumber:i}=e;this.peerId=r,this.multiaddrs=n??[],this.seqNumber=i??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Wo.encode({peerId:this.peerId.toBytes(),seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof He)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!Gg(this.multiaddrs,e.multiaddrs))}};He.createFromProtobuf=t=>{let e=Wo.decode(t),r=Yr(e.peerId),n=(e.addresses??[]).map(o=>Ie(o.multiaddr)),i=e.seq;return new He({peerId:r,multiaddrs:n,seqNumber:i})};He.DOMAIN=Yg;He.CODEC=Wg;var Ya="0.0.0",Qg="libp2p";var _f=`js-libp2p/${Ya}`;var Xg="0.1.0",Zg="id",Jg="id/push",jg="1.0.0",ew="1.0.0";var Qo=U(Hr(),1);var Xo=U(Ar(),1),ge=M("libp2p:identify"),tw=1024*8,Hi=class{constructor(e,r){this.components=e,this.started=!1,this.init=r,this.identifyProtocolStr=`/${r.protocolPrefix}/${Zg}/${jg}`,this.identifyPushProtocolStr=`/${r.protocolPrefix}/${Jg}/${ew}`,this.host={protocolVersion:`${r.protocolPrefix}/${Xg}`,...r.host},this.components.connectionManager.addEventListener("peer:connect",n=>{let i=n.detail;this.identify(i).catch(ge.error)}),this.components.peerStore.addEventListener("change:multiaddrs",n=>{let{peerId:i}=n.detail;this.components.peerId.equals(i)&&this.pushToPeerStore().catch(o=>{ge.error(o)})}),this.components.peerStore.addEventListener("change:protocols",n=>{let{peerId:i}=n.detail;this.components.peerId.equals(i)&&this.pushToPeerStore().catch(o=>{ge.error(o)})})}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.metadataBook.setValue(this.components.peerId,"AgentVersion",F(this.host.agentVersion)),await this.components.peerStore.metadataBook.setValue(this.components.peerId,"ProtocolVersion",F(this.host.protocolVersion)),await this.components.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(r=>{ge.error(r)})},{maxInboundStreams:this.init.maxInboundStreams,maxOutboundStreams:this.init.maxOutboundStreams}),await this.components.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(r=>{ge.error(r)})},{maxInboundStreams:this.init.maxPushIncomingStreams,maxOutboundStreams:this.init.maxPushOutgoingStreams}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.identifyProtocolStr),await this.components.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async push(e){let r=await this.components.peerStore.addressBook.getRawEnvelope(this.components.peerId),n=this.components.addressManager.getAddresses().map(s=>s.bytes),i=await this.components.peerStore.protoBook.get(this.components.peerId),o=e.map(async s=>{let a,c=new Qo.TimeoutController(this.init.timeout);try{(0,Xo.setMaxListeners)?.(1/0,c.signal)}catch{}try{a=await s.newStream([this.identifyPushProtocolStr],{signal:c.signal}),await gt(a,c.signal).sink(Ue([jn.encode({listenAddrs:n,signedPeerRecord:r,protocols:i})],l=>It(l)))}catch(u){ge.error("could not push identify update to peer",u)}finally{a?.close(),c.clear()}});await Promise.all(o)}async pushToPeerStore(){if(!this.isStarted())return;let e=[];for(let r of this.components.connectionManager.getConnections()){let n=r.remotePeer;(await this.components.peerStore.get(n)).protocols.includes(this.identifyPushProtocolStr)&&e.push(r)}await this.push(e)}async _identify(e,r={}){let n,i=r.signal,o;if(i==null){n=new Qo.TimeoutController(this.init.timeout),i=n.signal;try{(0,Xo.setMaxListeners)?.(1/0,n.signal)}catch{}}try{o=await e.newStream([this.identifyProtocolStr],{signal:i});let s=gt(o,i),a=await Ue([],s,c=>yt(c,{maxDataLength:this.init.maxIdentifyMessageSize??tw}),async c=>await at(c));if(a==null)throw new w("No data could be retrieved",S.ERR_CONNECTION_ENDED);try{return jn.decode(a)}catch(c){throw new w(String(c),S.ERR_INVALID_MESSAGE)}}finally{n?.clear(),o?.close()}}async identify(e,r={}){let n=await this._identify(e,r),{publicKey:i,listenAddrs:o,protocols:s,observedAddr:a,signedPeerRecord:c,agentVersion:u,protocolVersion:l}=n;if(i==null)throw new w("public key was missing from identify message",S.ERR_MISSING_PUBLIC_KEY);let f=await Wr(i);if(!e.remotePeer.equals(f))throw new w("identified peer does not match the expected peer",S.ERR_INVALID_PEER);if(this.components.peerId.equals(f))throw new w("identified peer is our own peer id?",S.ERR_INVALID_PEER);let h=Hi.getCleanMultiaddr(a);if(c!=null){ge("received signed peer record from %p",f);try{let d=await Qe.openAndCertify(c,He.DOMAIN);if(!d.peerId.equals(f))throw new w("identified peer does not match the expected peer",S.ERR_INVALID_PEER);if(await this.components.peerStore.addressBook.consumePeerRecord(d)){await this.components.peerStore.protoBook.set(f,s),u!=null&&await this.components.peerStore.metadataBook.setValue(f,"AgentVersion",F(u)),l!=null&&await this.components.peerStore.metadataBook.setValue(f,"ProtocolVersion",F(l)),ge("identify completed for peer %p with protocols %o",f,s);return}}catch(d){ge("received invalid envelope, discard it and fallback to listenAddrs is available",d)}}else ge("no signed peer record received from %p",f);ge("falling back to legacy addresses from %p",f);try{await this.components.peerStore.addressBook.set(f,o.map(d=>Ie(d)))}catch(d){ge.error("received invalid addrs",d)}await this.components.peerStore.protoBook.set(f,s),u!=null&&await this.components.peerStore.metadataBook.setValue(f,"AgentVersion",F(u)),l!=null&&await this.components.peerStore.metadataBook.setValue(f,"ProtocolVersion",F(l)),ge("identify completed for peer %p and protocols %o",f,s),ge("our observed address is %s",h),h!=null&&this.components.addressManager.getObservedAddrs().length<(this.init.maxObservedAddresses??1/0)&&(ge("storing our observed address %s",h?.toString()),this.components.addressManager.addObservedAddr(h))}async _handleIdentify(e){let{connection:r,stream:n}=e,i=new Qo.TimeoutController(this.init.timeout);try{(0,Xo.setMaxListeners)?.(1/0,i.signal)}catch{}try{let o=this.components.peerId.publicKey??new Uint8Array(0),s=await this.components.peerStore.get(this.components.peerId),a=this.components.addressManager.getAddresses().map(h=>h.decapsulateCode(j("p2p").code)),c=s.peerRecordEnvelope;if(a.length>0&&c==null){let h=new He({peerId:this.components.peerId,multiaddrs:a}),d=await Qe.seal(h,this.components.peerId);await this.components.peerStore.addressBook.consumePeerRecord(d),c=d.marshal().subarray()}let u=jn.encode({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:o,listenAddrs:a.map(h=>h.bytes),signedPeerRecord:c,observedAddr:r.remoteAddr.bytes,protocols:s.protocols}),l=gt(n,i.signal),f=Ue([u],h=>It(h));await l.sink(f)}catch(o){ge.error("could not respond to identify request",o)}finally{n.close(),i.clear()}}async _handlePush(e){let{connection:r,stream:n}=e,i=new Qo.TimeoutController(this.init.timeout);try{(0,Xo.setMaxListeners)?.(1/0,i.signal)}catch{}let o;try{let a=gt(n,i.signal),c=await Ue([],a,u=>yt(u,{maxDataLength:this.init.maxIdentifyMessageSize??tw}),async u=>await at(u));c!=null&&(o=jn.decode(c))}catch(a){ge.error("received invalid message",a);return}finally{n.close(),i.clear()}if(o==null){ge.error("received invalid message");return}let s=r.remotePeer;if(this.components.peerId.equals(s)){ge("received push from ourselves?");return}if(ge("received push from %p",s),o.signedPeerRecord!=null){ge("received signedPeerRecord in push");try{let a=await Qe.openAndCertify(o.signedPeerRecord,He.DOMAIN);if(await this.components.peerStore.addressBook.consumePeerRecord(a)){ge("consumed signedPeerRecord sent in push"),await this.components.peerStore.protoBook.set(s,o.protocols);return}else ge("failed to consume signedPeerRecord sent in push")}catch(a){ge("received invalid envelope, discard it and fallback to listenAddrs is available",a)}}else ge("did not receive signedPeerRecord in push");try{await this.components.peerStore.addressBook.set(s,o.listenAddrs.map(a=>Ie(a)))}catch(a){ge.error("received invalid addrs",a)}try{await this.components.peerStore.protoBook.set(s,o.protocols)}catch(a){ge.error("received invalid protocols",a)}ge("handled push from %p",s)}static getCleanMultiaddr(e){if(e!=null&&e.length>0)try{return Ie(e)}catch{}}};var Zo;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.identifier!=null&&r.identifier!==""&&(n.uint32(10),n.string(r.identifier)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={identifier:""},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.identifier=r.string();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Zo||(Zo={}));var Xt;(function(t){let e;(function(i){i.OK="OK",i.NOT_FOUND="NOT_FOUND",i.ERROR="ERROR"})(e=t.StatusCode||(t.StatusCode={}));let r;(function(i){i[i.OK=0]="OK",i[i.NOT_FOUND=1]="NOT_FOUND",i[i.ERROR=2]="ERROR"})(r||(r={})),function(i){i.codec=()=>rn(r)}(e=t.StatusCode||(t.StatusCode={}));let n;t.codec=()=>(n==null&&(n=me((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.status!=null&&r[i.status]!==0&&(o.uint32(8),t.StatusCode.codec().encode(i.status,o)),i.data!=null&&i.data.byteLength>0&&(o.uint32(18),o.bytes(i.data)),s.lengthDelimited!==!1&&o.ldelim()},(i,o)=>{let s={status:e.OK,data:new Uint8Array(0)},a=o==null?i.len:i.pos+o;for(;i.pos<a;){let c=i.uint32();switch(c>>>3){case 1:s.status=t.StatusCode.codec().decode(i);break;case 2:s.data=i.bytes();break;default:i.skipType(c&7);break}}return s})),n),t.encode=i=>pe(i,t.codec()),t.decode=i=>de(i,t.codec())})(Xt||(Xt={}));var rw="0.0.1",nw="fetch";var iw=U(Hr(),1),ow=U(Ar(),1);var Nt=M("libp2p:fetch"),Wa=class{constructor(e,r){this.started=!1,this.components=e,this.protocol=`/${r.protocolPrefix??"libp2p"}/${nw}/${rw}`,this.lookupFunctions=new Map,this.handleMessage=this.handleMessage.bind(this),this.init=r}async start(){await this.components.registrar.handle(this.protocol,e=>{this.handleMessage(e).catch(r=>{Nt.error(r)}).finally(()=>{e.stream.close()})},{maxInboundStreams:this.init.maxInboundStreams,maxOutboundStreams:this.init.maxOutboundStreams}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}async fetch(e,r,n={}){Nt("dialing %s to %p",this.protocol,e);let i=await this.components.connectionManager.openConnection(e,n),o,s=n.signal,a;if(s==null){Nt("using default timeout of %d ms",this.init.timeout),o=new iw.TimeoutController(this.init.timeout),s=o.signal;try{(0,ow.setMaxListeners)?.(1/0,o.signal)}catch{}}try{a=await i.newStream(this.protocol,{signal:s});let c=gt(a,s);return Nt("fetch %s",r),await Ue([Zo.encode({identifier:r})],l=>It(l),c,l=>yt(l),async function(l){let f=await at(l);if(f==null)throw new w("No data received",S.ERR_INVALID_MESSAGE);let h=Xt.decode(f);switch(h.status){case Xt.StatusCode.OK:return Nt("received status for %s ok",r),h.data;case Xt.StatusCode.NOT_FOUND:return Nt("received status for %s not found",r),null;case Xt.StatusCode.ERROR:{Nt("received status for %s error",r);let d=$(h.data);throw new w("Error in fetch protocol response: "+d,S.ERR_INVALID_PARAMETERS)}default:throw Nt("received status for %s unknown",r),new w("Unknown response status",S.ERR_INVALID_MESSAGE)}})??null}finally{o?.clear(),a?.close()}}async handleMessage(e){let{stream:r}=e,n=this;await Ue(r,i=>yt(i),async function*(i){let o=await at(i);if(o==null)throw new w("No data received",S.ERR_INVALID_MESSAGE);let s=Zo.decode(o),a,c=n._getLookupFunction(s.identifier);if(c!=null){Nt("look up data with identifier %s",s.identifier);let u=await c(s.identifier);u!=null?(Nt("sending status for %s ok",s.identifier),a={status:Xt.StatusCode.OK,data:u}):(Nt("sending status for %s not found",s.identifier),a={status:Xt.StatusCode.NOT_FOUND,data:new Uint8Array(0)})}else{Nt("sending status for %s error",s.identifier);let u=F(`No lookup function registered for key: ${s.identifier}`);a={status:Xt.StatusCode.ERROR,data:u}}yield Xt.encode(a)},i=>It(i),r)}_getLookupFunction(e){for(let r of this.lookupFunctions.keys())if(e.startsWith(r))return this.lookupFunctions.get(r)}registerLookupFunction(e,r){if(this.lookupFunctions.has(e))throw new w(`Fetch protocol handler for key prefix '${e}' already registered`,S.ERR_KEY_ALREADY_EXISTS);this.lookupFunctions.set(e,r)}unregisterLookupFunction(e,r){r!=null&&this.lookupFunctions.get(e)!==r||this.lookupFunctions.delete(e)}};var sw="1.0.0",aw="ping";var uw=U(Hr(),1),lw=U(Ar(),1),cw=M("libp2p:ping"),Qa=class{constructor(e,r){this.components=e,this.started=!1,this.protocol=`/${r.protocolPrefix}/${aw}/${sw}`,this.init=r}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.init.maxInboundStreams,maxOutboundStreams:this.init.maxOutboundStreams}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){let{stream:r}=e;Ue(r,r).catch(n=>{cw.error(n)})}async ping(e,r={}){cw("dialing %s to %p",this.protocol,e);let n=Date.now(),i=Nr(32),o=await this.components.connectionManager.openConnection(e,r),s,a=r.signal,c;if(a==null){s=new uw.TimeoutController(this.init.timeout),a=s.signal;try{(0,lw.setMaxListeners)?.(1/0,s.signal)}catch{}}try{c=await o.newStream([this.protocol],{signal:a});let u=gt(c,a),l=await Ue([i],u,async h=>await at(h)),f=Date.now();if(l==null||!xe(i,l.subarray()))throw new w("Received wrong ping ack",S.ERR_WRONG_PING_ACK);return f-n}finally{s?.clear(),c?.close()}}};async function fw(){throw new Error("Not supported in browsers")}var pw=U(dw(),1),Sf=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,Xa=(0,pw.default)(),Jo=Sf&&!Xa,mw=Xa&&!Sf,yw=Xa&&Sf,gw=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!Xa,ww=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,KN=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+(()=>"_")()+"ENV"]==="test",Ew=typeof navigator<"u"&&navigator.product==="ReactNative";function xw(t){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(t)||/^::1$/.test(t)}function vw(t){let{address:e}=t.nodeAddress();return xw(e)}var Af=M("libp2p:nat"),Rf=7200;function iA(t=1024,e=65535){return Math.floor(Math.random()*(e-t+1)+t)}var Za=class{constructor(e,r){if(this.components=e,this.started=!1,this.enabled=r.enabled,this.externalAddress=r.externalAddress,this.localAddress=r.localAddress,this.description=r.description??`${Qg}@${Ya} ${this.components.peerId.toString()}`,this.ttl=r.ttl??Rf,this.keepAlive=r.keepAlive??!0,this.gateway=r.gateway,this.ttl<Rf)throw new w(`NatManager ttl should be at least ${Rf} seconds`,S.ERR_INVALID_PARAMETERS)}isStarted(){return this.started}start(){}afterStart(){Jo||!this.enabled||this.started||(this.started=!0,this._start().catch(e=>{Af.error(e)}))}async _start(){let e=this.components.transportManager.getAddrs();for(let r of e){let{family:n,host:i,port:o,transport:s}=r.toOptions();if(!r.isThinWaistAddress()||s!=="tcp"||vw(r)||n!==4)continue;let a=await this._getClient(),c=this.externalAddress??await a.externalIp(),u=Dn(c);if(u===!0)throw new Error(`${c} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`);if(u==null)throw new Error(`${c} is not an IP address`);let l=iA();Af(`opening uPnP connection from ${c}:${l} to ${i}:${o}`),await a.map({publicPort:l,localPort:o,localAddress:this.localAddress,protocol:s.toUpperCase()==="TCP"?"TCP":"UDP"}),this.components.addressManager.addObservedAddr(zh({family:4,address:c,port:l},s))}}async _getClient(){return this.client!=null?this.client:(this.client=await fw({description:this.description,ttl:this.ttl,keepAlive:this.keepAlive,gateway:this.gateway}),this.client)}async stop(){if(!(Jo||this.client==null))try{await this.client.close(),this.client=void 0}catch(e){Af.error(e)}}};var oA=M("libp2p:peer-record-updater"),Ja=class{constructor(e){this.components=e,this.started=!1,this.update=this.update.bind(this)}isStarted(){return this.started}async start(){this.started=!0,this.components.transportManager.addEventListener("listener:listening",this.update),this.components.transportManager.addEventListener("listener:close",this.update),this.components.addressManager.addEventListener("change:addresses",this.update)}async stop(){this.started=!1,this.components.transportManager.removeEventListener("listener:listening",this.update),this.components.transportManager.removeEventListener("listener:close",this.update),this.components.addressManager.removeEventListener("change:addresses",this.update)}update(){Promise.resolve().then(async()=>{let e=new He({peerId:this.components.peerId,multiaddrs:this.components.addressManager.getAddresses().map(n=>n.decapsulateCode(j("p2p").code))}),r=await Qe.seal(e,this.components.peerId);await this.components.peerStore.addressBook.consumePeerRecord(r)}).catch(e=>{oA.error("Could not update self peer record: %o",e)})}};var ja=class{constructor(e){this.dht=e}async findPeer(e,r={}){for await(let n of this.dht.findPeer(e,r))if(n.name==="FINAL_PEER")return n.peer;throw new w(W.NOT_FOUND,S.ERR_NOT_FOUND)}async*getClosestPeers(e,r={}){for await(let n of this.dht.getClosestPeers(e,r))n.name==="FINAL_PEER"&&(yield n.peer)}};var Y={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS",ERR_NOT_FOUND:"ERR_NOT_FOUND"};var we=M("libp2p:peer-store:address-book"),ec="change:multiaddrs";async function sA(){return!0}var tc=class{constructor(e,r,n){this.dispatchEvent=e,this.store=r,this.addressFilter=n??sA}async consumePeerRecord(e){we.trace("consumePeerRecord await write lock");let r=await this.store.lock.writeLock();we.trace("consumePeerRecord got write lock");let n,i,o;try{let s;try{s=He.createFromProtobuf(e.payload)}catch{return we.error("invalid peer record received"),!1}n=s.peerId;let a=s.multiaddrs;if(!n.equals(e.peerId))return we("signing key does not match PeerId in the PeerRecord"),!1;if(a==null||a.length===0)return!1;if(await this.store.has(n)&&(i=await this.store.load(n),i.peerRecordEnvelope!=null)){let u=await Qe.createFromProtobuf(i.peerRecordEnvelope),l=He.createFromProtobuf(u.payload);if(l.seqNumber>=s.seqNumber)return we("sequence number was lower or equal to existing sequence number - stored: %d received: %d",l.seqNumber,s.seqNumber),!1}let c=await If(n,a,this.addressFilter,!0);o=await this.store.patchOrCreate(n,{addresses:c,peerRecordEnvelope:e.marshal().subarray()}),we("stored provided peer record for %p",s.peerId)}finally{we.trace("consumePeerRecord release write lock"),r()}return this.dispatchEvent(new G(ec,{detail:{peerId:n,multiaddrs:o.addresses.map(({multiaddr:s})=>s),oldMultiaddrs:i==null?[]:i.addresses.map(({multiaddr:s})=>s)}})),!0}async getRawEnvelope(e){we.trace("getRawEnvelope await read lock");let r=await this.store.lock.readLock();we.trace("getRawEnvelope got read lock");try{return(await this.store.load(e)).peerRecordEnvelope}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{we.trace("getRawEnvelope release read lock"),r()}}async getPeerRecord(e){let r=await this.getRawEnvelope(e);if(r!=null)return await Qe.createFromProtobuf(r)}async get(e){e=Fe(e),we.trace("get wait for read lock");let r=await this.store.lock.readLock();we.trace("get got read lock");try{return(await this.store.load(e)).addresses}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{we.trace("get release read lock"),r()}return[]}async set(e,r){if(e=Fe(e),!Array.isArray(r))throw we.error("multiaddrs must be an array of Multiaddrs"),new w("multiaddrs must be an array of Multiaddrs",Y.ERR_INVALID_PARAMETERS);we.trace("set await write lock");let n=await this.store.lock.writeLock();we.trace("set got write lock");let i=!1,o,s;try{let a=await If(e,r,this.addressFilter);if(a.length===0)return;try{if(o=await this.store.load(e),i=!0,new Set([...a.map(({multiaddr:c})=>c.toString()),...o.addresses.map(({multiaddr:c})=>c.toString())]).size===o.addresses.length&&a.length===o.addresses.length)return}catch(c){if(c.code!==Y.ERR_NOT_FOUND)throw c}s=await this.store.patchOrCreate(e,{addresses:a}),we("set multiaddrs for %p",e)}finally{we.trace("set multiaddrs for %p",e),we("set release write lock"),n()}this.dispatchEvent(new G(ec,{detail:{peerId:e,multiaddrs:s.addresses.map(a=>a.multiaddr),oldMultiaddrs:o==null?[]:o.addresses.map(({multiaddr:a})=>a)}})),i||this.dispatchEvent(new G("peer",{detail:{id:e,multiaddrs:s.addresses.map(a=>a.multiaddr),protocols:s.protocols}}))}async add(e,r){if(e=Fe(e),!Array.isArray(r))throw we.error("multiaddrs must be an array of Multiaddrs"),new w("multiaddrs must be an array of Multiaddrs",Y.ERR_INVALID_PARAMETERS);we.trace("add await write lock");let n=await this.store.lock.writeLock();we.trace("add got write lock");let i=!1,o,s;try{let a=await If(e,r,this.addressFilter);if(a.length===0)return;try{if(o=await this.store.load(e),i=!0,new Set([...a.map(({multiaddr:c})=>c.toString()),...o.addresses.map(({multiaddr:c})=>c.toString())]).size===o.addresses.length)return}catch(c){if(c.code!==Y.ERR_NOT_FOUND)throw c}s=await this.store.mergeOrCreate(e,{addresses:a}),we("added multiaddrs for %p",e)}finally{we.trace("set release write lock"),n()}this.dispatchEvent(new G(ec,{detail:{peerId:e,multiaddrs:s.addresses.map(a=>a.multiaddr),oldMultiaddrs:o==null?[]:o.addresses.map(({multiaddr:a})=>a)}})),i||this.dispatchEvent(new G("peer",{detail:{id:e,multiaddrs:s.addresses.map(a=>a.multiaddr),protocols:s.protocols}}))}async delete(e){e=Fe(e),we.trace("delete await write lock");let r=await this.store.lock.writeLock();we.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}await this.store.patchOrCreate(e,{addresses:[]})}finally{we.trace("delete release write lock"),r()}n!=null&&this.dispatchEvent(new G(ec,{detail:{peerId:e,multiaddrs:[],oldMultiaddrs:n==null?[]:n.addresses.map(({multiaddr:i})=>i)}}))}};async function If(t,e,r,n=!1){let i=[];return await Promise.all(e.map(async o=>{if(!_r(o))throw we.error("multiaddr must be an instance of Multiaddr"),new w("multiaddr must be an instance of Multiaddr",Y.ERR_INVALID_PARAMETERS);await r(t,o)&&i.push({multiaddr:o,isCertified:n})})),i}var mr=M("libp2p:peer-store:key-book"),bw="change:pubkey",rc=class{constructor(e,r){this.dispatchEvent=e,this.store=r}async set(e,r){if(e=Fe(e),!(r instanceof Uint8Array))throw mr.error("publicKey must be an instance of Uint8Array to store data"),new w("publicKey must be an instance of PublicKey",Y.ERR_INVALID_PARAMETERS);mr.trace("set await write lock");let n=await this.store.lock.writeLock();mr.trace("set got write lock");let i=!1,o;try{try{if(o=await this.store.load(e),o.pubKey!=null&&xe(o.pubKey,r))return}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}await this.store.patchOrCreate(e,{pubKey:r}),i=!0}finally{mr.trace("set release write lock"),n()}i&&this.dispatchEvent(new G(bw,{detail:{peerId:e,publicKey:r,oldPublicKey:o?.pubKey}}))}async get(e){e=Fe(e),mr.trace("get await write lock");let r=await this.store.lock.readLock();mr.trace("get got write lock");try{return(await this.store.load(e)).pubKey}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{mr("get release write lock"),r()}}async delete(e){e=Fe(e),mr.trace("delete await write lock");let r=await this.store.lock.writeLock();mr.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}await this.store.patchOrCreate(e,{pubKey:void 0})}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}finally{mr.trace("delete release write lock"),r()}this.dispatchEvent(new G(bw,{detail:{peerId:e,publicKey:void 0,oldPublicKey:n?.pubKey}}))}};var Ge=M("libp2p:peer-store:metadata-book"),nc="change:metadata",ic=class{constructor(e,r){this.dispatchEvent=e,this.store=r}async get(e){e=Fe(e),Ge.trace("get await read lock");let r=await this.store.lock.readLock();Ge.trace("get got read lock");try{return(await this.store.load(e)).metadata}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{Ge.trace("get release read lock"),r()}return new Map}async getValue(e,r){e=Fe(e),Ge.trace("getValue await read lock");let n=await this.store.lock.readLock();Ge.trace("getValue got read lock");try{return(await this.store.load(e)).metadata.get(r)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}finally{Ge.trace("getValue release write lock"),n()}}async set(e,r){if(e=Fe(e),!(r instanceof Map))throw Ge.error("valid metadata must be provided to store data"),new w("valid metadata must be provided",Y.ERR_INVALID_PARAMETERS);Ge.trace("set await write lock");let n=await this.store.lock.writeLock();Ge.trace("set got write lock");let i;try{try{i=await this.store.load(e)}catch(o){if(o.code!==Y.ERR_NOT_FOUND)throw o}await this.store.mergeOrCreate(e,{metadata:r})}finally{Ge.trace("set release write lock"),n()}this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:r,oldMetadata:i==null?new Map:i.metadata}}))}async setValue(e,r,n){if(e=Fe(e),typeof r!="string"||!(n instanceof Uint8Array))throw Ge.error("valid key and value must be provided to store data"),new w("valid key and value must be provided",Y.ERR_INVALID_PARAMETERS);Ge.trace("setValue await write lock");let i=await this.store.lock.writeLock();Ge.trace("setValue got write lock");let o,s;try{try{o=await this.store.load(e);let a=o.metadata.get(r);if(a!=null&&xe(n,a))return}catch(a){if(a.code!==Y.ERR_NOT_FOUND)throw a}s=await this.store.mergeOrCreate(e,{metadata:new Map([[r,n]])})}finally{Ge.trace("setValue release write lock"),i()}this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:s.metadata,oldMetadata:o==null?new Map:o.metadata}}))}async delete(e){e=Fe(e),Ge.trace("delete await write lock");let r=await this.store.lock.writeLock();Ge.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}n!=null&&await this.store.patch(e,{metadata:new Map})}finally{Ge.trace("delete release write lock"),r()}n!=null&&this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:new Map,oldMetadata:n.metadata}}))}async deleteValue(e,r){e=Fe(e),Ge.trace("deleteValue await write lock");let n=await this.store.lock.writeLock();Ge.trace("deleteValue got write lock");let i,o;try{o=await this.store.load(e),i=o.metadata,i.delete(r),await this.store.patch(e,{metadata:i})}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}finally{Ge.trace("deleteValue release write lock"),n()}i!=null&&this.dispatchEvent(new G(nc,{detail:{peerId:e,metadata:i,oldMetadata:o==null?new Map:o.metadata}}))}};var Ye=M("libp2p:peer-store:proto-book"),oc="change:protocols",sc=class{constructor(e,r){this.dispatchEvent=e,this.store=r}async get(e){Ye.trace("get wait for read lock");let r=await this.store.lock.readLock();Ye.trace("get got read lock");try{return(await this.store.load(e)).protocols}catch(n){if(n.code!==Y.ERR_NOT_FOUND)throw n}finally{Ye.trace("get release read lock"),r()}return[]}async set(e,r){if(e=Fe(e),!Array.isArray(r))throw Ye.error("protocols must be provided to store data"),new w("protocols must be provided",Y.ERR_INVALID_PARAMETERS);Ye.trace("set await write lock");let n=await this.store.lock.writeLock();Ye.trace("set got write lock");let i,o;try{try{if(i=await this.store.load(e),new Set([...r]).size===i.protocols.length)return}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}o=await this.store.patchOrCreate(e,{protocols:r}),Ye("stored provided protocols for %p",e)}finally{Ye.trace("set release write lock"),n()}this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:o.protocols,oldProtocols:i==null?[]:i.protocols}}))}async add(e,r){if(e=Fe(e),!Array.isArray(r))throw Ye.error("protocols must be provided to store data"),new w("protocols must be provided",Y.ERR_INVALID_PARAMETERS);Ye.trace("add await write lock");let n=await this.store.lock.writeLock();Ye.trace("add got write lock");let i,o;try{try{if(i=await this.store.load(e),new Set([...i.protocols,...r]).size===i.protocols.length)return}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}o=await this.store.mergeOrCreate(e,{protocols:r}),Ye("added provided protocols for %p",e)}finally{Ye.trace("add release write lock"),n()}this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:o.protocols,oldProtocols:i==null?[]:i.protocols}}))}async remove(e,r){if(e=Fe(e),!Array.isArray(r))throw Ye.error("protocols must be provided to store data"),new w("protocols must be provided",Y.ERR_INVALID_PARAMETERS);Ye.trace("remove await write lock");let n=await this.store.lock.writeLock();Ye.trace("remove got write lock");let i,o;try{try{i=await this.store.load(e);let s=new Set(i.protocols);for(let a of r)s.delete(a);if(i.protocols.length===s.size)return;r=Array.from(s)}catch(s){if(s.code!==Y.ERR_NOT_FOUND)throw s}o=await this.store.patchOrCreate(e,{protocols:r})}finally{Ye.trace("remove release write lock"),n()}this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:o.protocols,oldProtocols:i==null?[]:i.protocols}}))}async delete(e){e=Fe(e),Ye.trace("delete await write lock");let r=await this.store.lock.writeLock();Ye.trace("delete got write lock");let n;try{try{n=await this.store.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i}await this.store.patchOrCreate(e,{protocols:[]})}finally{Ye.trace("delete release write lock"),r()}n!=null&&this.dispatchEvent(new G(oc,{detail:{peerId:e,protocols:[],oldProtocols:n.protocols}}))}};var jo;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.addresses!=null)for(let o of r.addresses)n.uint32(10),ac.codec().encode(o,n);if(r.protocols!=null)for(let o of r.protocols)n.uint32(18),n.string(o);if(r.metadata!=null)for(let o of r.metadata)n.uint32(26),cc.codec().encode(o,n);r.pubKey!=null&&(n.uint32(34),n.bytes(r.pubKey)),r.peerRecordEnvelope!=null&&(n.uint32(42),n.bytes(r.peerRecordEnvelope)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={addresses:[],protocols:[],metadata:[]},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.addresses.push(ac.codec().decode(r,r.uint32()));break;case 2:i.protocols.push(r.string());break;case 3:i.metadata.push(cc.codec().decode(r,r.uint32()));break;case 4:i.pubKey=r.bytes();break;case 5:i.peerRecordEnvelope=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(jo||(jo={}));var ac;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.multiaddr!=null&&r.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(r.multiaddr)),r.isCertified!=null&&(n.uint32(16),n.bool(r.isCertified)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={multiaddr:new Uint8Array(0)},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.multiaddr=r.bytes();break;case 2:i.isCertified=r.bool();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(ac||(ac={}));var cc;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.key!=null&&r.key!==""&&(n.uint32(10),n.string(r.key)),r.value!=null&&r.value.byteLength>0&&(n.uint32(18),n.bytes(r.value)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={key:"",value:new Uint8Array(0)},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.key=r.string();break;case 2:i.value=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(cc||(cc={}));var Tf=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Cf=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},_w=t=>globalThis.DOMException===void 0?new Cf(t):new DOMException(t),Sw=t=>{let e=t.reason===void 0?_w("This operation was aborted."):t.reason;return e instanceof Error?e:_w(e)};function Bf(t,e){let{milliseconds:r,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=e,s,a=new Promise((c,u)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(r===Number.POSITIVE_INFINITY){c(t);return}if(e.signal){let{signal:f}=e;f.aborted&&u(Sw(f)),f.addEventListener("abort",()=>{u(Sw(f))})}let l=new Tf;s=o.setTimeout.call(void 0,()=>{if(n){try{c(n())}catch(f){u(f)}return}typeof t.cancel=="function"&&t.cancel(),i===!1?c():i instanceof Error?u(i):(l.message=i??`Promise timed out after ${r} milliseconds`,u(l))},r),(async()=>{try{c(await t)}catch(f){u(f)}finally{o.clearTimeout.call(void 0,s)}})()});return a.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},a}var Pf="lock:worker:request-read",Df="lock:worker:release-read",Lf="lock:master:grant-read",Nf="lock:worker:request-write",kf="lock:worker:release-write",Of="lock:master:grant-write";var wn={},Gi=t=>{t.addEventListener("message",e=>{Gi.dispatchEvent("message",t,e)}),t.port!=null&&t.port.addEventListener("message",e=>{Gi.dispatchEvent("message",t,e)})};Gi.addEventListener=(t,e)=>{wn[t]==null&&(wn[t]=[]),wn[t].push(e)};Gi.removeEventListener=(t,e)=>{wn[t]!=null&&(wn[t]=wn[t].filter(r=>r===e))};Gi.dispatchEvent=function(t,e,r){wn[t]!=null&&wn[t].forEach(n=>n(e,r))};var Mf=Gi;var Aw=(t,e,r,n,i)=>(o,s)=>{if(s.data.type!==r)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};t.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>(o.postMessage({type:i,name:a.name,identifier:a.identifier}),await new Promise(c=>{let u=l=>{if(l==null||l.data==null)return;let f={type:l.data.type,name:l.data.name,identifier:l.data.identifier};f.type===n&&f.identifier===a.identifier&&(o.removeEventListener("message",u),c())};o.addEventListener("message",u)}))}}))},Rw=(t,e,r,n)=>async()=>{let i=ps();return globalThis.postMessage({type:e,identifier:i,name:t}),await new Promise(o=>{let s=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===r&&c.identifier===i&&(globalThis.removeEventListener("message",s),o(()=>{globalThis.postMessage({type:n,identifier:i,name:t})}))};globalThis.addEventListener("message",s)})},aA={singleProcess:!1},Iw=t=>{if(t=Object.assign({},aA,t),!!globalThis.document||t.singleProcess){let r=new EventTarget;return Mf.addEventListener("message",Aw(r,"requestReadLock",Pf,Df,Lf)),Mf.addEventListener("message",Aw(r,"requestWriteLock",Nf,kf,Of)),r}return{isWorker:!0,readLock:r=>Rw(r,Pf,Lf,Df),writeLock:r=>Rw(r,Nf,Of,kf)}};var ei={},En;async function Uf(t,e){let r,n=new Promise(i=>{r=i});return t.add(async()=>await Bf((async()=>await new Promise(i=>{r(()=>{i()})}))(),{milliseconds:e.timeout})),await n}var cA=(t,e)=>{if(En.isWorker===!0)return{readLock:En.readLock(t,e),writeLock:En.writeLock(t,e)};let r=new Kt({concurrency:1}),n;return{async readLock(){if(n!=null)return await Uf(n,e);n=new Kt({concurrency:e.concurrency,autoStart:!1});let i=n,o=Uf(n,e);return r.add(async()=>(i.start(),await i.onIdle().then(()=>{n===i&&(n=null)}))),await o},async writeLock(){return n=null,await Uf(r,e)}}},uA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ff(t){let e=Object.assign({},uA,t);return En==null&&(En=Iw(e),En.isWorker!==!0&&(En.addEventListener("requestReadLock",r=>{ei[r.data.name]!=null&&ei[r.data.name].readLock().then(async n=>await r.data.handler().finally(()=>n()))}),En.addEventListener("requestWriteLock",async r=>{ei[r.data.name]!=null&&ei[r.data.name].writeLock().then(async n=>await r.data.handler().finally(()=>n()))}))),ei[e.name]==null&&(ei[e.name]=cA(e.name,e)),ei[e.name]}var Tw=M("libp2p:peer-store:store"),Cw="/peers/",uc=class{constructor(e){this.components=e,this.lock=Ff({name:"peer-store",singleProcess:!0})}_peerIdToDatastoreKey(e){if(e.type==null)throw Tw.error("peerId must be an instance of peer-id to store data"),new w("peerId must be an instance of peer-id",Y.ERR_INVALID_PARAMETERS);let r=e.toCID().toString();return new Le(`${Cw}${r}`)}async has(e){return await this.components.datastore.has(this._peerIdToDatastoreKey(e))}async delete(e){await this.components.datastore.delete(this._peerIdToDatastoreKey(e))}async load(e){let r=await this.components.datastore.get(this._peerIdToDatastoreKey(e)),n=jo.decode(r),i=new Map;for(let o of n.metadata)i.set(o.key,o.value);return{...n,id:e,addresses:n.addresses.map(({multiaddr:o,isCertified:s})=>({multiaddr:Ie(o),isCertified:s??!1})),metadata:i,pubKey:n.pubKey??void 0,peerRecordEnvelope:n.peerRecordEnvelope??void 0}}async save(e){if(e.pubKey!=null&&e.id.publicKey!=null&&!xe(e.pubKey,e.id.publicKey))throw Tw.error("peer publicKey bytes do not match peer id publicKey bytes"),new w("publicKey bytes do not match peer id publicKey bytes",Y.ERR_INVALID_PARAMETERS);let r=new Set,n=e.addresses.filter(s=>r.has(s.multiaddr.toString())?!1:(r.add(s.multiaddr.toString()),!0)).sort((s,a)=>s.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({multiaddr:s,isCertified:a})=>({multiaddr:s.bytes,isCertified:a})),i=[];[...e.metadata.keys()].sort().forEach(s=>{let a=e.metadata.get(s);a!=null&&i.push({key:s,value:a})});let o=jo.encode({addresses:n,protocols:e.protocols.sort(),pubKey:e.pubKey,metadata:i,peerRecordEnvelope:e.peerRecordEnvelope});return await this.components.datastore.put(this._peerIdToDatastoreKey(e.id),o.subarray()),await this.load(e.id)}async patch(e,r){let n=await this.load(e);return await this._patch(e,r,n)}async patchOrCreate(e,r){let n;try{n=await this.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i;n={id:e,addresses:[],protocols:[],metadata:new Map}}return await this._patch(e,r,n)}async _patch(e,r,n){return await this.save({...n,...r,id:e})}async merge(e,r){let n=await this.load(e);return await this._merge(e,r,n)}async mergeOrCreate(e,r){let n;try{n=await this.load(e)}catch(i){if(i.code!==Y.ERR_NOT_FOUND)throw i;n={id:e,addresses:[],protocols:[],metadata:new Map}}return await this._merge(e,r,n)}async _merge(e,r,n){let i=new Map;return n.addresses.forEach(o=>{i.set(o.multiaddr.toString(),o.isCertified)}),(r.addresses??[]).forEach(o=>{let s=o.multiaddr.toString(),c=!!i.get(s)||o.isCertified;i.set(s,c)}),await this.save({id:e,addresses:Array.from(i.entries()).map(([o,s])=>({multiaddr:Ie(o),isCertified:s})),protocols:Array.from(new Set([...n.protocols??[],...r.protocols??[]])),metadata:new Map([...n.metadata?.entries()??[],...r.metadata?.entries()??[]]),pubKey:r.pubKey??n?.pubKey,peerRecordEnvelope:r.peerRecordEnvelope??n?.peerRecordEnvelope})}async*all(){for await(let e of this.components.datastore.queryKeys({prefix:Cw})){let r=e.toString().split("/")[2],n=xt.decode(r);yield this.load(Yr(n))}}};var Kr;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.tags!=null)for(let o of r.tags)n.uint32(10),lc.codec().encode(o,n);i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={tags:[]},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.tags.push(lc.codec().decode(r,r.uint32()));break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Kr||(Kr={}));var lc;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.name!=null&&r.name!==""&&(n.uint32(10),n.string(r.name)),r.value!=null&&(n.uint32(16),n.uint32(r.value)),r.expiry!=null&&(n.uint32(24),n.uint64(r.expiry)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={name:""},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.name=r.string();break;case 2:i.value=r.uint32();break;case 3:i.expiry=r.uint64();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(lc||(lc={}));var kt=M("libp2p:peer-store"),fc=class extends Xe{constructor(e,r={}){super(),this.components=e,this.store=new uc(e),this.addressBook=new tc(this.dispatchEvent.bind(this),this.store,r.addressFilter),this.keyBook=new rc(this.dispatchEvent.bind(this),this.store),this.metadataBook=new ic(this.dispatchEvent.bind(this),this.store),this.protoBook=new sc(this.dispatchEvent.bind(this),this.store)}async forEach(e){kt.trace("getPeers await read lock");let r=await this.store.lock.readLock();kt.trace("getPeers got read lock");try{for await(let n of this.store.all())n.id.equals(this.components.peerId)||e(n)}finally{kt.trace("getPeers release read lock"),r()}}async all(){let e=[];return await this.forEach(r=>{e.push(r)}),e}async delete(e){kt.trace("delete await write lock");let r=await this.store.lock.writeLock();kt.trace("delete got write lock");try{await this.store.delete(e)}finally{kt.trace("delete release write lock"),r()}}async get(e){kt.trace("get await read lock");let r=await this.store.lock.readLock();kt.trace("get got read lock");try{return await this.store.load(e)}finally{kt.trace("get release read lock"),r()}}async has(e){kt.trace("has await read lock");let r=await this.store.lock.readLock();kt.trace("has got read lock");try{return await this.store.has(e)}finally{kt.trace("has release read lock"),r()}}async tagPeer(e,r,n={}){let i=n.value??0,o=Math.round(i),s=n.ttl??void 0;if(o!==i||o<0||o>100)throw new w("Tag value must be between 0-100","ERR_TAG_VALUE_OUT_OF_BOUNDS");let a=await this.metadataBook.getValue(e,"tags"),c=[];a!=null&&(c=Kr.decode(a).tags),c=c.filter(u=>u.name!==r),c.push({name:r,value:o,expiry:s==null?void 0:BigInt(Date.now()+s)}),await this.metadataBook.setValue(e,"tags",Kr.encode({tags:c}).subarray())}async unTagPeer(e,r){let n=await this.metadataBook.getValue(e,"tags"),i=[];n!=null&&(i=Kr.decode(n).tags),i=i.filter(o=>o.name!==r),await this.metadataBook.setValue(e,"tags",Kr.encode({tags:i}).subarray())}async getTags(e){let r=await this.metadataBook.getValue(e,"tags"),n=[];r!=null&&(n=Kr.decode(r).tags);let i=BigInt(Date.now()),o=n.filter(s=>s.expiry==null||s.expiry>i);return o.length!==n.length&&await this.metadataBook.setValue(e,"tags",Kr.encode({tags:o}).subarray()),o.map(s=>({name:s.name,value:s.value??0}))}};var hc=class{constructor(e){this.dht=e}async provide(e){await er(this.dht.provide(e))}async*findProviders(e,r={}){for await(let n of this.dht.findProviders(e,r))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,r,n){await er(this.dht.put(e,r,n))}async get(e,r){for await(let n of this.dht.get(e,r))if(n.name==="VALUE")return n.value;throw new w("Not found","ERR_NOT_FOUND")}};var Kf;(function(t){let e;t.codec=()=>(e==null&&(e=me((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.id!=null&&(n.uint32(10),n.bytes(r.id)),r.pubKey!=null&&(n.uint32(18),n.bytes(r.pubKey)),r.privKey!=null&&(n.uint32(26),n.bytes(r.privKey)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},o=n==null?r.len:r.pos+n;for(;r.pos<o;){let s=r.uint32();switch(s>>>3){case 1:i.id=r.bytes();break;case 2:i.pubKey=r.bytes();break;case 3:i.privKey=r.bytes();break;default:r.skipType(s&7);break}}return i})),e),t.encode=r=>pe(r,t.codec()),t.decode=r=>de(r,t.codec())})(Kf||(Kf={}));var dc=async()=>{let t=await Na("Ed25519"),e=await lA(t);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function lA(t){return await Wr(Sg(t.public),Ag(t))}var $f=U(Ar(),1);var pc=globalThis.CustomEvent??Event;async function*Vf(t,e={}){let r=e.concurrency??1/0;r<1&&(r=1/0);let n=e.ordered==null?!1:e.ordered,i=new EventTarget,o=[],s=tr(),a=tr(),c=!1,u,l=!1;i.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of t){if(o.length===r&&(s=tr(),await s.promise),l)break;let m={done:!1};o.push(m),p().then(y=>{m.done=!0,m.ok=!0,m.value=y,i.dispatchEvent(new pc("task-complete"))},y=>{m.done=!0,m.err=y,i.dispatchEvent(new pc("task-complete"))})}c=!0,i.dispatchEvent(new pc("task-complete"))}catch(p){u=p,i.dispatchEvent(new pc("task-complete"))}});function f(){return n?o[0]?.done:!!o.find(p=>p.done)}function*h(){for(;o.length>0&&o[0].done;){let p=o[0];if(o.shift(),p.ok)yield p.value;else throw l=!0,s.resolve(),p.err;s.resolve()}}function*d(){for(;f();)for(let p=0;p<o.length;p++)if(o[p].done){let m=o[p];if(o.splice(p,1),p--,m.ok)yield m.value;else throw l=!0,s.resolve(),m.err;s.resolve()}}for(;;){if(f()||(a=tr(),await a.promise),u!=null)throw u;if(n?yield*h():yield*d(),c&&o.length===0)break}}var zf=U(Hr(),1);var mc="/libp2p/autonat/1.0.0";var H;(function(t){let e;(function(u){u.DIAL="DIAL",u.DIAL_RESPONSE="DIAL_RESPONSE"})(e=t.MessageType||(t.MessageType={}));let r;(function(u){u[u.DIAL=0]="DIAL",u[u.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(r||(r={})),function(u){u.codec=()=>rn(r)}(e=t.MessageType||(t.MessageType={}));let n;(function(u){u.OK="OK",u.E_DIAL_ERROR="E_DIAL_ERROR",u.E_DIAL_REFUSED="E_DIAL_REFUSED",u.E_BAD_REQUEST="E_BAD_REQUEST",u.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=t.ResponseStatus||(t.ResponseStatus={}));let i;(function(u){u[u.OK=0]="OK",u[u.E_DIAL_ERROR=100]="E_DIAL_ERROR",u[u.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",u[u.E_BAD_REQUEST=200]="E_BAD_REQUEST",u[u.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(i||(i={})),function(u){u.codec=()=>rn(i)}(n=t.ResponseStatus||(t.ResponseStatus={}));let o;(function(u){let l;u.codec=()=>(l==null&&(l=me((f,h,d={})=>{if(d.lengthDelimited!==!1&&h.fork(),f.id!=null&&(h.uint32(10),h.bytes(f.id)),f.addrs!=null)for(let p of f.addrs)h.uint32(18),h.bytes(p);d.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let d={addrs:[]},p=h==null?f.len:f.pos+h;for(;f.pos<p;){let m=f.uint32();switch(m>>>3){case 1:d.id=f.bytes();break;case 2:d.addrs.push(f.bytes());break;default:f.skipType(m&7);break}}return d})),l),u.encode=f=>pe(f,u.codec()),u.decode=f=>de(f,u.codec())})(o=t.PeerInfo||(t.PeerInfo={}));let s;(function(u){let l;u.codec=()=>(l==null&&(l=me((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),t.PeerInfo.codec().encode(f.peer,h)),d.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let d={},p=h==null?f.len:f.pos+h;for(;f.pos<p;){let m=f.uint32();switch(m>>>3){case 1:d.peer=t.PeerInfo.codec().decode(f,f.uint32());break;default:f.skipType(m&7);break}}return d})),l),u.encode=f=>pe(f,u.codec()),u.decode=f=>de(f,u.codec())})(s=t.Dial||(t.Dial={}));let a;(function(u){let l;u.codec=()=>(l==null&&(l=me((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),t.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)),d.lengthDelimited!==!1&&h.ldelim()},(f,h)=>{let d={},p=h==null?f.len:f.pos+h;for(;f.pos<p;){let m=f.uint32();switch(m>>>3){case 1:d.status=t.ResponseStatus.codec().decode(f);break;case 2:d.statusText=f.string();break;case 3:d.addr=f.bytes();break;default:f.skipType(m&7);break}}return d})),l),u.encode=f=>pe(f,u.codec()),u.decode=f=>de(f,u.codec())})(a=t.DialResponse||(t.DialResponse={}));let c;t.codec=()=>(c==null&&(c=me((u,l,f={})=>{f.lengthDelimited!==!1&&l.fork(),u.type!=null&&(l.uint32(8),t.MessageType.codec().encode(u.type,l)),u.dial!=null&&(l.uint32(18),t.Dial.codec().encode(u.dial,l)),u.dialResponse!=null&&(l.uint32(26),t.DialResponse.codec().encode(u.dialResponse,l)),f.lengthDelimited!==!1&&l.ldelim()},(u,l)=>{let f={},h=l==null?u.len:u.pos+l;for(;u.pos<h;){let d=u.uint32();switch(d>>>3){case 1:f.type=t.MessageType.codec().decode(u);break;case 2:f.dial=t.Dial.codec().decode(u,u.uint32());break;case 3:f.dialResponse=t.DialResponse.codec().decode(u,u.uint32());break;default:u.skipType(d&7);break}}return f})),c),t.encode=u=>pe(u,t.codec()),t.decode=u=>de(u,t.codec())})(H||(H={}));var ue=M("libp2p:autonat"),qf=4,fA=5e3,hA=6e4,yc=class{constructor(e,r){this.components=e,this.started=!1,this._init=r,this.startupDelay=r.startupDelay??fA,this.refreshInterval=r.refreshInterval??hA,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(mc,e=>{this.handleIncomingAutonatStream(e).catch(r=>{ue.error(r)})},{maxInboundStreams:this._init.maxInboundStreams,maxOutboundStreams:this._init.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(mc),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let r=new zf.TimeoutController(this._init.timeout);try{(0,$f.setMaxListeners)?.(1/0,r.signal)}catch{}let n=this.components.addressManager.getAddresses().map(i=>i.toOptions().host);try{let i=gt(e.stream,r.signal),o=this;await Ue(i,s=>yt(s),async function*(s){let a=await at(s);if(a==null){ue("No message received"),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=H.decode(a)}catch(m){ue.error("Could not decode message",m),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let u=c.dial;if(u==null){ue.error("Dial was missing from message"),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let l,f=u.peer;if(f==null||f.id==null){ue.error("PeerId missing from message"),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{l=Yr(f.id)}catch(m){ue.error("Invalid PeerId",m),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(ue("Incoming request from %p",l),!e.connection.remotePeer.equals(l)){ue("Target peer %p did not equal sending peer %p",l,e.connection.remotePeer),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let h=f.addrs.map(m=>Ie(m)).filter(m=>{let y=m.toOptions().host===e.connection.remoteAddr.toOptions().host;return ue.trace("Request to dial %s was sent from %s is same host %s",m,e.connection.remoteAddr,y),y}).filter(m=>{let y=m.toOptions().host,g=!(Dn(y)??!1);return ue.trace("Host %s was public %s",y,g),g}).filter(m=>{let y=m.toOptions().host,g=!n.includes(y);return ue.trace("Host %s was not our host %s",y,g),g}).filter(m=>{let y=!!o.components.transportManager.transportForMultiaddr(m);return ue.trace("Transport for %s is supported %s",m,y),y}).map(m=>(m.getPeerId()==null&&(m=m.encapsulate(`/p2p/${l.toString()}`)),m));if(h.length===0){ue("No valid multiaddrs for %p in message",l),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}ue("Dial multiaddrs %s for peer %p",h.map(m=>m.toString()).join(", "),l);let d="",p=h[0];for await(let m of h){let y;p=m;try{if(y=await o.components.connectionManager.openConnection(m,{signal:r.signal}),!y.remoteAddr.equals(m))throw ue.error("Tried to dial %s but dialed %s",m,y.remoteAddr),new Error("Unexpected remote address");ue("Success %p",l),yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.OK,addr:y.remoteAddr.decapsulateCode(j("p2p").code).bytes}});return}catch(g){ue("Could not dial %p",l,g),d=g.message}finally{y!=null&&await y.close()}}yield H.encode({type:H.MessageType.DIAL_RESPONSE,dialResponse:{status:H.ResponseStatus.E_DIAL_ERROR,statusText:d,addr:p.bytes}})},s=>It(s),e.stream)}finally{r.clear()}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{ue.error(e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,r=e.getObservedAddrs().filter(o=>{let s=o.toOptions();return!(Dn(s.host)??!1)});if(r.length===0){ue("No public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=new zf.TimeoutController(this._init.timeout);try{(0,$f.setMaxListeners)?.(1/0,n.signal)}catch{}let i=this;try{ue("verify multiaddrs %s",r.map(f=>f.toString()).join(", "));let o=H.encode({type:H.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:r.map(f=>f.bytes)}}}),a=(await dc()).toBytes(),c={},u=[];async function l(f){try{ue("Asking %p to verify multiaddr",f.id);let h=await i.components.connectionManager.openConnection(f.id,{signal:n.signal}),d=await h.newStream(mc,{signal:n.signal}),p=gt(d,n.signal),m=await Ue([o],g=>It(g),p,g=>yt(g),async g=>await at(g));if(m==null){ue("No response received from %s",h.remotePeer);return}let y=H.decode(m);if(y.type!==H.MessageType.DIAL_RESPONSE||y.dialResponse==null){ue("Invalid autonat response from %s",h.remotePeer);return}if(y.dialResponse.status===H.ResponseStatus.OK){let g=h.remoteAddr.toOptions(),x;if(g.family===4)x=g.host.split(".")[0];else if(g.family===6)x=g.host.split(":")[0];else{ue('Remote address "%s" was not IP4 or IP6?',g.host);return}if(u.includes(x)){ue("Already have response from network segment %d - %s",x,g.host);return}u.push(x)}return y.dialResponse}catch(h){ue.error(h)}}for await(let f of Vf(gs(this.components.peerRouting.getClosestPeers(a,{signal:n.signal}),h=>async()=>await l(h)),{concurrency:qf}))try{if(f==null)continue;let h=f.addr==null?r[0]:Ie(f.addr);if(ue("Autonat response for %s is %s",h,f.status),f.status===H.ResponseStatus.E_BAD_REQUEST||f.status===H.ResponseStatus.E_DIAL_REFUSED||f.addr==null&&r.length>1)continue;if(!r.some(p=>p.equals(h))){ue("Peer reported %s as %s but it was not in our observed address list",h,f.status);continue}let d=h.toString();if(c[d]==null&&(c[d]={success:0,failure:0}),f.status===H.ResponseStatus.OK?c[d].success++:f.status===H.ResponseStatus.E_DIAL_ERROR&&c[d].failure++,c[d].success===qf){ue("%s is externally dialable",h),e.confirmObservedAddr(h);return}if(c[d].failure===qf){ue("%s is not externally dialable",h),e.removeObservedAddr(h);return}}catch(h){ue.error("Could not verify external address",h)}}finally{n.clear(),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};var gc=class{constructor(e={}){this._started=!1,this._peerId=e.peerId,this._addressManager=e.addressManager,this._peerStore=e.peerStore,this._upgrader=e.upgrader,this._metrics=e.metrics,this._registrar=e.registrar,this._connectionManager=e.connectionManager,this._transportManager=e.transportManager,this._connectionGater=e.connectionGater,this._contentRouting=e.contentRouting,this._peerRouting=e.peerRouting,this._datastore=e.datastore,this._connectionProtector=e.connectionProtector,this._dht=e.dht,this._pubsub=e.pubsub}isStarted(){return this._started}async beforeStart(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.beforeStart!=null&&await e.beforeStart()}))}async start(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{await e.start()})),this._started=!0}async afterStart(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.afterStart!=null&&await e.afterStart()}))}async beforeStop(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.beforeStop!=null&&await e.beforeStop()}))}async stop(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{await e.stop()})),this._started=!1}async afterStop(){await Promise.all(Object.values(this).filter(e=>Er(e)).map(async e=>{e.afterStop!=null&&await e.afterStop()}))}get peerId(){if(this._peerId==null)throw new w("peerId not set","ERR_SERVICE_MISSING");return this._peerId}set peerId(e){this._peerId=e}get addressManager(){if(this._addressManager==null)throw new w("addressManager not set","ERR_SERVICE_MISSING");return this._addressManager}set addressManager(e){this._addressManager=e}get peerStore(){if(this._peerStore==null)throw new w("peerStore not set","ERR_SERVICE_MISSING");return this._peerStore}set peerStore(e){this._peerStore=e}get upgrader(){if(this._upgrader==null)throw new w("upgrader not set","ERR_SERVICE_MISSING");return this._upgrader}set upgrader(e){this._upgrader=e}get registrar(){if(this._registrar==null)throw new w("registrar not set","ERR_SERVICE_MISSING");return this._registrar}set registrar(e){this._registrar=e}get connectionManager(){if(this._connectionManager==null)throw new w("connectionManager not set","ERR_SERVICE_MISSING");return this._connectionManager}set connectionManager(e){this._connectionManager=e}get transportManager(){if(this._transportManager==null)throw new w("transportManager not set","ERR_SERVICE_MISSING");return this._transportManager}set transportManager(e){this._transportManager=e}get connectionGater(){if(this._connectionGater==null)throw new w("connectionGater not set","ERR_SERVICE_MISSING");return this._connectionGater}set connectionGater(e){this._connectionGater=e}get contentRouting(){if(this._contentRouting==null)throw new w("contentRouting not set","ERR_SERVICE_MISSING");return this._contentRouting}set contentRouting(e){this._contentRouting=e}get peerRouting(){if(this._peerRouting==null)throw new w("peerRouting not set","ERR_SERVICE_MISSING");return this._peerRouting}set peerRouting(e){this._peerRouting=e}get datastore(){if(this._datastore==null)throw new w("datastore not set","ERR_SERVICE_MISSING");return this._datastore}set datastore(e){this._datastore=e}get connectionProtector(){return this._connectionProtector}set connectionProtector(e){this._connectionProtector=e}get metrics(){return this._metrics}set metrics(e){this._metrics=e}get dht(){return this._dht}set dht(e){this._dht=e}get pubsub(){return this._pubsub}set pubsub(e){this._pubsub=e}};var dA={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:t=>t},connectionManager:{resolvers:{dnsaddr:bi},addressSorter:vi},transportManager:{faultTolerance:gn.FATAL_ALL},peerRouting:{refreshManager:{enabled:!0,interval:6e5,bootDelay:1e4}},nat:{enabled:!0,ttl:7200,keepAlive:!0},identify:{protocolPrefix:"ipfs",host:{agentVersion:_f},timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10},ping:{protocolPrefix:"ipfs",maxInboundStreams:2,maxOutboundStreams:1,timeout:1e4},fetch:{protocolPrefix:"libp2p",maxInboundStreams:1,maxOutboundStreams:1,timeout:1e4},autonat:{protocolPrefix:"libp2p",maxInboundStreams:1,maxOutboundStreams:1,timeout:3e4,startupDelay:5e3,refreshInterval:6e4}};function Bw(t){let e=jr(dA,t);if(e.transports==null||e.transports.length<1)throw new w(W.ERR_TRANSPORTS_REQUIRED,S.ERR_TRANSPORTS_REQUIRED);if(e.connectionEncryption==null||e.connectionEncryption.length===0)throw new w(W.CONN_ENCRYPTION_REQUIRED,S.CONN_ENCRYPTION_REQUIRED);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new w(W.ERR_PROTECTOR_REQUIRED,S.ERR_PROTECTOR_REQUIRED);return e.identify.host.agentVersion===_f&&(gw||mw?e.identify.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(Jo||ww||yw||Ew)&&(e.identify.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`)),e}var Pw=Symbol.for("@libp2p/peer-discovery");var wc=class extends Xe{get[Pw](){return!0}get[Symbol.toStringTag](){return"@libp2p/dummy-dht"}get wan(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}get lan(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}get(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}findProviders(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}findPeer(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}getClosestPeers(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}provide(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}put(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}async getMode(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}async setMode(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}async refreshRoutingTable(){throw new w(W.DHT_DISABLED,S.DHT_DISABLED)}};var Ec=class extends Xe{constructor(){super(...arguments),this.topicValidators=new Map}isStarted(){return!1}start(){}stop(){}get globalSignaturePolicy(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}get multicodecs(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}getPeers(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}getTopics(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}subscribe(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}unsubscribe(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}getSubscribers(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}async publish(){throw new w(W.PUBSUB_DISABLED,S.ERR_PUBSUB_DISABLED)}};var yr=M("libp2p"),Hf=class extends Xe{constructor(e){super(),this.started=!1,this.peerId=e.peerId;let r=this.components=new gc({peerId:e.peerId,datastore:e.datastore??new ys,connectionGater:{denyDialPeer:async()=>await Promise.resolve(!1),denyDialMultiaddr:async()=>await Promise.resolve(!1),denyInboundConnection:async()=>await Promise.resolve(!1),denyOutboundConnection:async()=>await Promise.resolve(!1),denyInboundEncryptedConnection:async()=>await Promise.resolve(!1),denyOutboundEncryptedConnection:async()=>await Promise.resolve(!1),denyInboundUpgradedConnection:async()=>await Promise.resolve(!1),denyOutboundUpgradedConnection:async()=>await Promise.resolve(!1),filterMultiaddrForPeer:async()=>await Promise.resolve(!0),...e.connectionGater}});r.peerStore=new fc(r,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore}),this.services=[r],e.metrics!=null&&(this.metrics=this.components.metrics=this.configureComponent(e.metrics(this.components))),this.peerStore=this.components.peerStore,this.peerStore.addEventListener("peer",s=>{let{detail:a}=s;this.dispatchEvent(new G("peer:discovery",{detail:a}))}),e.connectionProtector!=null&&(this.components.connectionProtector=e.connectionProtector(r)),this.components.upgrader=new Ga(this.components,{connectionEncryption:(e.connectionEncryption??[]).map(s=>this.configureComponent(s(this.components))),muxers:(e.streamMuxers??[]).map(s=>this.configureComponent(s(this.components))),inboundUpgradeTimeout:e.connectionManager.inboundUpgradeTimeout}),this.components.transportManager=new Oa(this.components,e.transportManager),this.connectionManager=this.components.connectionManager=new Ys(this.components,e.connectionManager),this.components.connectionManager.addEventListener("peer:disconnect",s=>{this.dispatchEvent(new G("peer:disconnect",{detail:s.detail}))}),this.components.connectionManager.addEventListener("peer:connect",s=>{this.dispatchEvent(new G("peer:connect",{detail:s.detail}))}),this.registrar=this.components.registrar=new Ha(this.components),this.components.addressManager=new Is(this.components,e.addresses),this.configureComponent(new Ja(this.components));let n=Qn.generateOptions();this.keychain=this.configureComponent(new Qn(this.components,{...n,...e.keychain})),this.services.push(new Za(this.components,e.nat)),this.identifyService=new Hi(this.components,{...e.identify}),this.configureComponent(this.identifyService),e.dht!=null?this.dht=this.components.dht=e.dht(this.components):this.dht=new wc,e.pubsub!=null?this.pubsub=this.components.pubsub=e.pubsub(this.components):this.pubsub=new Ec;let i=(e.peerRouters??[]).map(s=>this.configureComponent(s(this.components)));e.dht!=null&&(i.push(this.configureComponent(new ja(this.dht))),this.dht.addEventListener("peer",s=>{this.onDiscoveryPeer(s)})),this.peerRouting=this.components.peerRouting=this.configureComponent(new Ss(this.components,{...e.peerRouting,routers:i}));let o=(e.contentRouters??[]).map(s=>this.configureComponent(s(this.components)));e.dht!=null&&o.push(this.configureComponent(new hc(this.dht))),this.contentRouting=this.components.contentRouting=this.configureComponent(new Rs(this.components,{routers:o})),this.fetchService=this.configureComponent(new Wa(this.components,{...e.fetch})),this.pingService=this.configureComponent(new Qa(this.components,{...e.ping})),this.autonatService=this.configureComponent(new yc(this.components,{...e.autonat})),e.relay!=null&&(this.circuitService=this.configureComponent(e.relay(this.components)));for(let s of e.peerDiscovery??[])this.configureComponent(s(this.components)).addEventListener("peer",c=>{this.onDiscoveryPeer(c)});e.transports.forEach(s=>{this.components.transportManager.add(this.configureComponent(s(this.components)))})}configureComponent(e){return Er(e)&&this.services.push(e),e}async start(){if(this.started)return;this.started=!0,yr("libp2p is starting"),(await this.keychain.listKeys()).find(r=>r.name==="self")==null&&(yr("importing self key into keychain"),await this.keychain.importPeer("self",this.components.peerId));try{await Promise.all(this.services.map(async r=>{r.beforeStart!=null&&await r.beforeStart()})),await Promise.all(this.services.map(async r=>{await r.start()})),await Promise.all(this.services.map(async r=>{r.afterStart!=null&&await r.afterStart()})),yr("libp2p has started")}catch(r){throw yr.error("An error occurred starting libp2p",r),await this.stop(),r}}async stop(){this.started&&(yr("libp2p is stopping"),this.started=!1,await Promise.all(this.services.map(async e=>{e.beforeStop!=null&&await e.beforeStop()})),await Promise.all(this.services.map(async e=>{await e.stop()})),await Promise.all(this.services.map(async e=>{e.afterStop!=null&&await e.afterStop()})),yr("libp2p has stopped"))}isStarted(){return this.started}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Tr;for(let r of this.components.connectionManager.getConnections())e.add(r.remotePeer);return Array.from(e)}async dial(e,r={}){return await this.components.connectionManager.openConnection(e,r)}async dialProtocol(e,r,n={}){if(r==null)throw new w("no protocols were provided to open a stream",S.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(r=Array.isArray(r)?r:[r],r.length===0)throw new w("no protocols were provided to open a stream",S.ERR_INVALID_PROTOCOLS_FOR_STREAM);return await(await this.dial(e,n)).newStream(r,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e){_r(e)&&(e=ae(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e)}async getPublicKey(e,r={}){if(yr("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;let n=await this.peerStore.get(e);if(n.pubKey!=null)return n.pubKey;if(this.dht==null)throw new w("Public key was not in the peer store and the DHT is not enabled",S.ERR_NO_ROUTERS_AVAILABLE);let i=Me([F("/pk/"),e.multihash.digest]);for await(let o of this.dht.get(i,r))if(o.name==="VALUE"){let s=Uo(o.value);return await this.peerStore.keyBook.set(e,o.value),s.bytes}throw new w(`Node not responding with its public key: ${e.toString()}`,S.ERR_INVALID_RECORD)}async fetch(e,r,n={}){if(_r(e)){let i=ae(e.getPeerId()??"");await this.components.peerStore.addressBook.add(i,[e]),e=i}return await this.fetchService.fetch(e,r,n)}async ping(e,r={}){if(_r(e)){let n=ae(e.getPeerId()??"");await this.components.peerStore.addressBook.add(n,[e]),e=n}return await this.pingService.ping(e,r)}async handle(e,r,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async i=>{await this.components.registrar.handle(i,r,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async r=>{await this.components.registrar.unhandle(r)}))}async register(e,r){return await this.registrar.register(e,r)}unregister(e){this.registrar.unregister(e)}onDiscoveryPeer(e){let{detail:r}=e;if(r.id.toString()===this.peerId.toString()){yr.error(new Error(S.ERR_DISCOVERED_SELF));return}r.multiaddrs.length>0&&this.components.peerStore.addressBook.add(r.id,r.multiaddrs).catch(n=>{yr.error(n)}),r.protocols.length>0&&this.components.peerStore.protoBook.set(r.id,r.protocols).catch(n=>{yr.error(n)}),this.dispatchEvent(new G("peer:discovery",{detail:r}))}};async function Dw(t){if(t.peerId==null){let e=t.datastore;if(e!=null)try{let r=new Qn({datastore:e},jr(Qn.generateOptions(),t.keychain));t.peerId=await r.exportPeerId("self")}catch(r){if(r.code!=="ERR_NOT_FOUND")throw r}}return t.peerId==null&&(t.peerId=await dc()),new Hf(Bw(t))}async function pA(t){let e=await Dw(t);return t.start!==!1&&await e.start(),e}return Uw(mA);})();
|
|
50
50
|
/*! Bundled license information:
|
|
51
51
|
|
|
52
52
|
@noble/secp256k1/lib/esm/index.js:
|