helia 2.0.3-0749cbf → 2.0.3-7ef5e79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/src/utils/libp2p-defaults.d.ts.map +1 -1
- package/dist/src/utils/libp2p-defaults.js +1 -0
- package/dist/src/utils/libp2p-defaults.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +2 -2
- package/src/utils/libp2p-defaults.ts +1 -0
- package/src/version.ts +1 -1
package/dist/index.min.js
CHANGED
|
@@ -82,7 +82,7 @@ a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
|
|
|
82
82
|
a=ice-ufrag:`+e+`
|
|
83
83
|
`).replace(/\na=ice-pwd:[^\n]*\n/,`
|
|
84
84
|
a=ice-pwd:`+e+`
|
|
85
|
-
`),r}var YR=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),QR=r=>[...Array(r)].map(()=>YR.at(Math.floor(Math.random()*YR.length))).join("");var Kd=C("libp2p:webrtc:transport"),wz=1e4,s5e=me("webrtc-direct").code,GR=me("certhash").code,Vd=class{metrics;components;init;constructor(e,t={}){this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}async dial(e,t){let n=await this._connect(e,t);return Kd("dialing address: %a",e),n}createListener(e){throw oS("WebRTCTransport.createListener")}filter(e){return e.filter(rE.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[ms]=!0;async _connect(e,t){let n=new AbortController,s=n.signal,i=e.getPeerId();if(i===null)throw bd("we need to have the remote's PeerId");let o=ae(i),a=ng(Fd(e)),c=await wc.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:sg(a.name)}),l=new wc({certificates:[c]});try{let u=new Promise((_,D)=>{let O=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let U=`Data channel was never opened: state: ${O.readyState}`;Kd.error(U),this.metrics?.dialerEvents.increment({open_error:!0}),D(y4("data",U))},wz);O.onopen=U=>{clearTimeout(N),_(O)},O.onerror=U=>{clearTimeout(N);let te=`Error opening a data channel for handshaking: ${U.target?.toString()??"not specified"}`;Kd.error(te),this.metrics?.dialerEvents.increment({unknown_error:!0}),D(y4("data",te))}}),f="libp2p+webrtc+v1/"+QR(32),h=await l.createOffer(),d=WR(h,f);await l.setLocalDescription(d);let p=HR(e,f);await l.setRemoteDescription(p);let m=await u,g=this.components.peerId,y=this.generateNoisePrologue(l,a.code,e),w=ac({prologueBytes:y})(),E=bc({channel:m,direction:"inbound",...this.init.dataChannel??{}}),R={...E,sink:E.sink.bind(E),source:async function*(){for await(let _ of E.source)for(let D of _)yield D}()},x=new zo({peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),v=mu?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(v,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(_=>{Kd.error("error closing connection",_)}).finally(()=>{n.abort()});break;default:break}},{signal:s}),this.metrics?.dialerEvents.increment({peer_connection:!0});let I=new $o({peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await w.secureInbound(g,R,o),await t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:I})}catch(u){throw l.close(),u}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw pu("no local certificate");let s=$R(e);if(s==null)throw pu("no local fingerprint found");let i=s.trim().toLowerCase().replaceAll(":",""),o=Q(i,"hex"),a=XR.encode(o,t),c=rg.decode(Fd(n)),l=Q("libp2p-webrtc-noise:");return Se([l,a,c])}};function jR(r){return e=>new Vd(e,r)}function ZR(r){return e=>new Ad(e,r)}function JR(r){let e;try{e=me("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function eI(r){return r.some(([e,t])=>e===me("tls").code)}function sn(r,e,t){let n=tI[me(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${me(r).name}`);let s=n(e,t);return r===me("ip6").code?`[${s}]`:s}var tI={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${sn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${sn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=eI(e),n=JR(e);if(t&&n!==null)return`https://${n}`;let s=t?"https://":"http://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=sn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return sn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return sn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=sn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=eI(e),n=JR(e);if(t&&n!==null)return`wss://${n}`;let s=t?"wss://":"ws://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=sn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=sn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function rI(r,e){let n=oe(r).stringTuples(),s=n.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=me(s[0]),o=tI[i.name];if(o==null)throw new Error(`No interpreter found for ${i.name}`);let a=o(s[1]??"",n);return e?.assumeHttp!==!1&&s[0]===me("tcp").code&&(a=a.replace("tcp://","http://"),(s[1]==="443"||s[1]==="80")&&(s[1]==="443"&&(a=a.replace("http://","https://")),a=a.substring(0,a.lastIndexOf(":")))),a}var nI=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",s),r.removeEventListener("error",i)}function s(){n(),e()}function i(o){n(),t(o.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",s),r.addEventListener("error",i)})};var sI=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let s of n){try{await nI(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(s)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((s,i)=>{r.addEventListener("close",o=>{if(o.wasClean||o.code===1006)s();else{let a=Object.assign(new Error("ws error"),{event:o});i(a)}}),setTimeout(()=>{r.close()})})});var cI=re(oI(),1);function aI(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var lI=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,o)=>{if(n){i();return}if(s!=null){o(s);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{o(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new cI.EventIterator(({push:o,stop:a,fail:c})=>{let l=f=>{let h=null;typeof f.data=="string"&&(h=Q(f.data)),aI(f.data)&&(h=new Uint8Array(f.data)),f.data instanceof Uint8Array&&(h=f.data),h!=null&&o(h)},u=f=>{c(f.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let o of i)yield aI(o)?new Uint8Array(o):o}(),n=r.readyState===1,s;return r.addEventListener("open",()=>{n=!0,s=null}),r.addEventListener("close",()=>{n=!1,s=null}),r.addEventListener("error",i=>{n||(s=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var uI=(r,e)=>{e=e??{};let t=lI(r),n=e.remoteAddress,s=e.remotePort;if(r.url!=null)try{let o=new URL(r.url);n=o.hostname,s=parseInt(o.port,10)}catch{}if(n==null||s==null)throw new Error("Remote connection did not have address and/or port");return{sink:sI(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(o=>{r.addEventListener("close",()=>{o()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:s,socket:r}};var fI=WebSocket;var wI=re(bI(),1),Cz={http:"ws",https:"wss"},Pz="ws",EI=(r,e)=>(0,wI.relative)(r,e,Cz,Pz);function xI(r,e){let t=typeof window>"u"?"":window.location;e=e??{};let n=EI(r,t.toString()),s=new fI(n,e.websocket);return uI(s,e)}var SI=re(_I(),1),lg=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,$d=(0,SI.default)(),Hd=lg&&!$d,RI=$d&&!lg,II=$d&&lg,AI=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!$d,Wd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,P5e=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+(()=>"_")()+"ENV"]==="test",TI=typeof navigator<"u"&&navigator.product==="ReactNative";function PI(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return fc.matches(t)||Fo.matches(t)})}function kI(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Fo.matches(t)})}function NI(){throw new Error("WebSocket Servers can not be created in the browser!")}var Gd=C("libp2p:websockets:socket");function OI(r,e,t){t=t??{};let n={async sink(s){t?.signal!=null&&(s=Qt(s,t.signal));try{await r.sink(s)}catch(i){i.type!=="aborted"&&Gd.error(i)}},source:t.signal!=null?Qt(r.source,t.signal):r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();s.signal=s.signal??AbortSignal.timeout(500);let o=()=>{let{host:a,port:c}=n.remoteAddr.toOptions();Gd("timeout closing stream to %s:%s after %dms, destroying it manually",a,c,Date.now()-i),this.abort(new b("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal.addEventListener("abort",o);try{await r.close()}catch(a){Gd.error("error closing WebSocket gracefully",a),this.abort(a)}finally{s.signal.removeEventListener("abort",o),n.timeline.close=Date.now()}},abort(s){let{host:i,port:o}=n.remoteAddr.toOptions();Gd("timeout closing stream to %s:%s due to error",i,o,s),r.destroy(),n.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{n.timeline.close==null&&(n.timeline.close=Date.now())},{once:!0}),n}var $i=C("libp2p:websockets"),ug=class{init;constructor(e){this.init=e}[Symbol.toStringTag]="@libp2p/websockets";[ms]=!0;async dial(e,t){$i("dialing %s",e),t=t??{};let n=await this._connect(e,t),s=OI(n,e);$i("new outbound connection %s",s.remoteAddr);let i=await t.upgrader.upgradeOutbound(s);return $i("outbound connection %s upgraded",s.remoteAddr),i}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Cn;let n=e.toOptions();$i("dialing %s:%s",n.host,n.port);let s=Ee(),i=xI(rI(e),this.init);if(i.socket.addEventListener("error",()=>{let c=new b(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");$i.error("connection error:",c),s.reject(c)}),t.signal==null)return await Promise.race([i.connected(),s.promise]),$i("connected %s",e),i;let o,a=new Promise((c,l)=>{if(o=()=>{l(new Cn),i.close().catch(u=>{$i.error("error closing raw socket",u)})},t?.signal?.aborted===!0){o();return}t?.signal?.addEventListener("abort",o)});try{await Promise.race([a,s.promise,i.connected()])}finally{o!=null&&t?.signal?.removeEventListener("abort",o)}return $i("connected %s",e),i}createListener(e){return NI({...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Hd||Wd?kI(e):PI(e)}};function LI(r={}){return()=>new ug(r)}var Ru=C("libp2p:webtransport:stream");async function fg(r,e,t,n,s){let i=r.writable.getWriter(),o=r.readable.getReader();await i.ready;function a(){let h=n.findIndex(d=>d===f);h!==-1&&(n.splice(h,1),f.timeline.close=Date.now(),s?.(f))}let c=!1,l=!1;(async function(){let h=await i.closed.catch(d=>d);if(h!=null){let d=h.message;d.includes("aborted by the remote server")||d.includes("STOP_SENDING")||Ru.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}c=!0,c&&l&&a()})().catch(()=>{Ru.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await o.closed.catch(d=>d);h!=null&&Ru.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),l=!0,c&&l&&a()}().catch(()=>{Ru.error("WebTransport failed to cleanup closed stream")});let u=!1,f={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(h){c||(i.abort(h).catch(d=>{Ru.error("could not abort stream",d)}),c=!0),l=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),a()},async close(h){this.status="closing",await Promise.all([f.closeRead(h),f.closeWrite(h)]),a(),this.status="closed",this.timeline.close=Date.now()},async closeRead(h){if(!l){this.readStatus="closing";try{await o.cancel()}catch(d){d.toString().includes("RESET_STREAM")===!0&&(c=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",l=!0}c&&a()},async closeWrite(h){if(!c){c=!0,this.writeStatus="closing";try{await i.close()}catch(d){d.toString().includes("RESET_STREAM")===!0&&(l=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}l&&a()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let h=await o.read();if(h.done){l=!0,c&&a();return}yield new xe(h.value)}}(),sink:async function(h){if(u)throw new Error("sink already called on stream");u=!0;try{this.writeStatus="writing";for await(let d of h)if(d instanceof Uint8Array)await i.write(d);else for(let p of d)await i.write(p);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await f.closeWrite()}}};return f}function hg(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function BI(r,e){return e.filter(n=>!!r.find(s=>de(n,s))).length===e.length}var Lz=Object.values(cn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Bz(r){return Tn.decode(Lz.decode(r))}function MI(r){if(!Qf.matches(r))throw new b("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([o,a])=>o===me("certhash").code).map(([o,a])=>Bz(a??"")),n=e.filter(([o,a])=>o===me("p2p").code).map(([o,a])=>ae(a??""))[0],s=r.toOptions(),i=s.host;return s.family===6&&i?.includes(":")&&(i=`[${i}]`),{url:`https://${i}:${s.port}`,certhashes:t,remotePeer:n}}var on=C("libp2p:webtransport"),dg=class{components;config;metrics;constructor(e,t={}){this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[ms]=!0;async dial(e,t){t?.signal?.throwIfAborted(),on("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:s,certhashes:i,remotePeer:o}=MI(e);if(o==null)throw new Error("Need a target peerid");if(i.length===0)throw new Error("Expected multiaddr to contain certhashes");let a,c,l=()=>{},u=!1,f=!1,h=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let d=new WebTransport(`${s}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:i.map(p=>({algorithm:"sha-256",value:p.digest}))});if(l=p=>{if(!u)try{this.metrics?.dialerEvents.increment({[p]:!0}),d.close()}catch(m){on.error("error closing wt session",m)}finally{c!=null&&(c.timeline.close=Date.now()),u=!0}},a=()=>{l(f?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),await Promise.race([d.closed,d.ready]),f=!0,this.metrics?.dialerEvents.increment({ready:!0}),d.closed.catch(p=>{on.error("error on remote wt session close",p)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(d,n,o,i))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{on("Closing webtransport"),l("close")},abort:p=>{on("aborting webtransport due to passed err",p),l("abort")},remoteAddr:e,timeline:{open:Date.now()},...hg()},h=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(d),skipProtection:!0})}catch(d){throw on.error("caught wt session err",d),l(h?"upgrade_error":f?"noise_error":"ready_error"),d}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,s){let i=await e.createBidirectionalStream(),o=i.writable.getWriter(),a=i.readable.getReader();await o.ready;let c={source:async function*(){for(;;){let f=await a.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async function(f){for await(let h of f)await o.write(h)}},l=ac()(),{remoteExtensions:u}=await l.secureOutbound(t,c,n);if(o.close().catch(f=>{on.error(`Failed to close authentication stream writer: ${f.message}`)}),a.cancel().catch(f=>{on.error(`Failed to close authentication stream reader: ${f.message}`)}),!BI(u?.webtransportCerthashes??[],s.map(f=>f.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];return async function(){let a=e.incomingBidirectionalStreams.getReader();for(;;){let{done:c,value:l}=await a.read();if(c)break;if(i.length>=n.maxInboundStreams)l.writable.close().catch(u=>{on.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),l.readable.cancel().catch(u=>{on.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await fg(l,String(t++),"inbound",i,s?.onStreamEnd);i.push(u),s?.onIncomingStream?.(u)}}}().catch(()=>{on.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async a=>{let c=await e.createBidirectionalStream(),l=await fg(c,String(t++),s?.direction??"outbound",i,s?.onStreamEnd);return i.push(l),l},close:async a=>{on("Closing webtransport muxer"),await Promise.all(i.map(async c=>c.close(a)))},abort:a=>{on("Aborting webtransport muxer with err:",a);for(let c of i)c.abort(a)},...hg()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(Qf.exactMatch)}};function UI(r={}){return e=>new dg(e,r)}var Ur=re(Jo(),1);var GI=re(FI(),1);var KI="ERR_IPNS_EXPIRED_RECORD",Yd="ERR_UNRECOGNIZED_VALIDITY";var Zs="ERR_SIGNATURE_VERIFICATION",VI="ERR_UNRECOGNIZED_FORMAT";var mg="ERR_UNDEFINED_PARAMETER",qI="ERR_INVALID_RECORD_DATA",zI="ERR_INVALID_VALUE",$I="ERR_INVALID_EMBEDDED_KEY";var HI="ERR_RECORD_TOO_LARGE";var Js;(function(r){let e;(function(s){s.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(s){s[s.EOL=0]="EOL"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.value!=null&&(i.uint32(10),i.bytes(s.value)),s.signatureV1!=null&&(i.uint32(18),i.bytes(s.signatureV1)),s.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(s.validityType,i)),s.validity!=null&&(i.uint32(34),i.bytes(s.validity)),s.sequence!=null&&(i.uint32(40),i.uint64(s.sequence)),s.ttl!=null&&(i.uint32(48),i.uint64(s.ttl)),s.pubKey!=null&&(i.uint32(58),i.bytes(s.pubKey)),s.signatureV2!=null&&(i.uint32(66),i.bytes(s.signatureV2)),s.data!=null&&(i.uint32(74),i.bytes(s.data)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.value=s.bytes();break;case 2:o.signatureV1=s.bytes();break;case 3:o.validityType=r.ValidityType.codec().decode(s);break;case 4:o.validity=s.bytes();break;case 5:o.sequence=s.uint64();break;case 6:o.ttl=s.uint64();break;case 7:o.pubKey=s.bytes();break;case 8:o.signatureV2=s.bytes();break;case 9:o.data=s.bytes();break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(Js||(Js={}));var gg=C("ipns:utils"),Mz=Q("/ipns/"),Uz=114;function Fz(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),s=parseInt(t[2],10)-1,i=parseInt(t[3],10),o=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].padEnd(6,"0").slice(0,3),10);return new Date(Date.UTC(n,s,i,o,a,c,l))}var YI=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw gg.error(n),(0,Ur.default)(n,mg)}let t;if(e.pubKey!=null){try{t=Nr(e.pubKey)}catch(s){throw gg.error(s),s}if(!(await ur(e.pubKey)).equals(r))throw(0,Ur.default)(new Error("Embedded public key did not match PeerID"),$I)}else r.publicKey!=null&&(t=Nr(r.publicKey));if(t!=null)return t;throw(0,Ur.default)(new Error("no public key is available"),mg)};var QI=r=>{let e=Q("ipns-signature:");return Se([e,r])};function Iu(r){let e=Js.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw(0,Ur.default)(new Error("missing data or signatureV2"),Zs);let t=jI(e.data),n=Kz(t.Value),s;try{s=GI.default.fromDate(Fz(W(t.Validity)))}catch{throw gg.error("unrecognized validity format (not an rfc3339 format)"),(0,Ur.default)(new Error("unrecognized validity format (not an rfc3339 format)"),VI)}if(e.value!=null&&e.signatureV1!=null)return Vz(e),{value:n,validityType:Js.ValidityType.EOL,validity:s,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:Js.ValidityType.EOL,validity:s,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}var XI=r=>dt(r.slice(Mz.length));var jI=r=>{let e=dn(r);if(e.ValidityType===0)e.ValidityType=Js.ValidityType.EOL;else throw(0,Ur.default)(new Error("Unknown validity type"),Yd);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},Kz=r=>{if(r!=null){if(La(r))return`/ipns/${r.toCID().toString(ri)}`;if(r instanceof Uint8Array){let n=W(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=ge.asCID(r);if(t!=null)return t.code===Uz?`/ipns/${t.toString(ri)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${ge.decode(r).toV1().toString()}`:`/ipfs/${ge.parse(e).toV1().toString()}`}catch{}}throw(0,Ur.default)(new Error("Value must be a valid content path starting with /"),zI)},Vz=r=>{if(r.data==null)throw(0,Ur.default)(new Error("Record data is missing"),qI);let e=jI(r.data);if(!de(e.Value,r.value??new Uint8Array(0)))throw(0,Ur.default)(new Error('Field "value" did not match between protobuf and CBOR'),Zs);if(!de(e.Validity,r.validity??new Uint8Array(0)))throw(0,Ur.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Zs);if(e.ValidityType!==r.validityType)throw(0,Ur.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Zs);if(e.Sequence!==r.sequence)throw(0,Ur.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Zs);if(e.TTL!==r.ttl)throw(0,Ur.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Zs)};function ZI(r,e){let t=e.map((n,s)=>({record:Iu(n),index:s}));return t.sort((n,s)=>{let i=n.record.sequence,o=s.record.sequence;if(i>o)return-1;if(i<o)return 1;let a=n.record.validity.toDate(),c=s.record.validity.toDate();return a.getTime()>c.getTime()?-1:a.getTime()<c.getTime()?1:0}),t[0].index}var Au=re(Jo(),1);var Qd=C("ipns:validator"),qz=1024*10,zz=async(r,e)=>{let t=Iu(e),n;try{let s=QI(t.data);n=await r.verify(s,t.signatureV2)}catch{n=!1}if(!n)throw Qd.error("record signature verification failed"),(0,Au.default)(new Error("record signature verification failed"),Zs);if(t.validityType===Js.ValidityType.EOL){if(t.validity.toDate().getTime()<Date.now())throw Qd.error("record has expired"),(0,Au.default)(new Error("record has expired"),KI)}else if(t.validityType!=null)throw Qd.error("unrecognized validity type"),(0,Au.default)(new Error("unrecognized validity type"),Yd);Qd("ipns record for %b is valid",t.value)};async function JI(r,e){if(e.byteLength>qz)throw(0,Au.default)(new Error("record too large"),HI);let t=XI(r),n=Iu(e),s=await YI(t,n);await zz(s,e)}var bg=re(Cr(),1);var eA="libp2p",tA="autonat",rA="1.0.0";var Te;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>ut(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(s||(s={})),function(l){l.codec=()=>ut(s)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=ue((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})),u),l.encode=f=>le(f,l.codec()),l.decode=f=>ce(f,l.codec())})(i=r.PeerInfo||(r.PeerInfo={}));let o;(function(l){let u;l.codec=()=>(u==null&&(u=ue((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),r.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=r.PeerInfo.codec().decode(f,f.uint32());break;default:f.skipType(m&7);break}}return d})),u),l.encode=f=>le(f,l.codec()),l.decode=f=>ce(f,l.codec())})(o=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=ue((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(f.status,h)),f.statusText!=null&&(h.uint32(18),h.string(f.statusText)),f.addr!=null&&(h.uint32(26),h.bytes(f.addr)),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=r.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})),u),l.encode=f=>le(f,l.codec()),l.decode=f=>ce(f,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ue((l,u,f={})=>{f.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),f.lengthDelimited!==!1&&u.ldelim()},(l,u)=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let d=l.uint32();switch(d>>>3){case 1:f.type=r.MessageType.codec().decode(l);break;case 2:f.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:f.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(d&7);break}}return f})),c),r.encode=l=>le(l,r.codec()),r.decode=l=>ce(l,r.codec())})(Te||(Te={}));var qe=C("libp2p:autonat"),yg=4,wg=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;constructor(e,t){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??eA}/${tA}/${rA}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{qe.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new b("handleIncomingAutonatStream timeout",H.ERR_TIMEOUT))};t.addEventListener("abort",n,{once:!0});try{(0,bg.setMaxListeners)?.(1/0,t)}catch{}let s=this.components.addressManager.getAddresses().map(i=>i.toOptions().host);try{let i=this;await Ae(e.stream,o=>Et(o),async function*(o){let a=await Yn(o);if(a==null){qe("no message received"),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=Te.decode(a)}catch(m){qe.error("could not decode message",m),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){qe.error("dial was missing from message"),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let u,f=l.peer;if(f==null||f.id==null){qe.error("PeerId missing from message"),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{u=dt(f.id)}catch(m){qe.error("invalid PeerId",m),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(qe("incoming request from %p",u),!e.connection.remotePeer.equals(u)){qe("target peer %p did not equal sending peer %p",u,e.connection.remotePeer),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let h=f.addrs.map(m=>oe(m)).filter(m=>{let g=m.toOptions().host===e.connection.remoteAddr.toOptions().host;return qe.trace("request to dial %a was sent from %a is same host %s",m,e.connection.remoteAddr,g),g}).filter(m=>{let g=m.toOptions().host,y=!(Or(g)??!1);return qe.trace("host %s was public %s",g,y),y}).filter(m=>{let g=m.toOptions().host,y=!s.includes(g);return qe.trace("host %s was not our host %s",g,y),y}).filter(m=>{let g=!!i.components.transportManager.transportForMultiaddr(m);return qe.trace("transport for %a is supported %s",m,g),g}).map(m=>(m.getPeerId()==null&&(m=m.encapsulate(`/p2p/${u.toString()}`)),m));if(h.length===0){qe("no valid multiaddrs for %p in message",u),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}qe("dial multiaddrs %s for peer %p",h.map(m=>m.toString()).join(", "),u);let d="",p=h[0];for await(let m of h){let g;p=m;try{if(g=await i.components.connectionManager.openConnection(m,{signal:t}),!g.remoteAddr.equals(m))throw qe.error("tried to dial %a but dialed %a",m,g.remoteAddr),new Error("Unexpected remote address");qe("Success %p",u),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.OK,addr:g.remoteAddr.decapsulateCode(me("p2p").code).bytes}});return}catch(y){qe("could not dial %p",u,y),d=y.message}finally{g!=null&&await g.close()}}yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_DIAL_ERROR,statusText:d,addr:p.bytes}})},o=>St(o),e.stream)}catch(i){qe.error("error handling incoming autonat stream",i)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{qe.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(i=>{let o=i.toOptions();return!(Or(o.host)??!1)});if(t.length===0){qe("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);try{(0,bg.setMaxListeners)?.(1/0,n)}catch{}let s=this;try{qe("verify multiaddrs %s",t.map(f=>f.toString()).join(", "));let i=Te.encode({type:Te.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(f=>f.bytes)}}}),a=(await Tf()).toBytes(),c={},l=[],u=async f=>{let h=()=>{};try{qe("asking %p to verify multiaddr",f.id);let d=await s.components.connectionManager.openConnection(f.id,{signal:n}),p=await d.newStream(this.protocol,{signal:n});h=()=>{p.abort(new b("verifyAddress timeout",H.ERR_TIMEOUT))},n.addEventListener("abort",h,{once:!0});let m=await Ae([i],y=>St(y),p,y=>Et(y),async y=>Yn(y));if(m==null){qe("no response received from %p",d.remotePeer);return}let g=Te.decode(m);if(g.type!==Te.MessageType.DIAL_RESPONSE||g.dialResponse==null){qe("invalid autonat response from %p",d.remotePeer);return}if(g.dialResponse.status===Te.ResponseStatus.OK){let y=d.remoteAddr.toOptions(),w;if(y.family===4)w=y.host.split(".")[0];else if(y.family===6)w=y.host.split(":")[0];else{qe('remote address "%s" was not IP4 or IP6?',y.host);return}if(l.includes(w)){qe("already have response from network segment %d - %s",w,y.host);return}l.push(w)}return g.dialResponse}catch(d){qe.error("error asking remote to verify multiaddr",d)}finally{n.removeEventListener("abort",h)}};for await(let f of Vo(Dn(this.components.peerRouting.getClosestPeers(a,{signal:n}),h=>async()=>u(h)),{concurrency:yg}))try{if(f==null)continue;let h=f.addr==null?t[0]:oe(f.addr);if(qe("autonat response for %a is %s",h,f.status),f.status===Te.ResponseStatus.E_BAD_REQUEST||f.status===Te.ResponseStatus.E_DIAL_REFUSED||f.addr==null&&t.length>1)continue;if(!t.some(p=>p.equals(h))){qe("peer reported %a 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===Te.ResponseStatus.OK?c[d].success++:f.status===Te.ResponseStatus.E_DIAL_ERROR&&c[d].failure++,c[d].success===yg){qe("%a is externally dialable",h),e.confirmObservedAddr(h);return}if(c[d].failure===yg){qe("%a is not externally dialable",h),e.removeObservedAddr(h);return}}catch(h){qe.error("could not verify external address",h)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function nA(r={}){return e=>new wg(e,r)}var e$=re(Cr(),1);var Eg="/libp2p/relay";var sA="circuit-relay-relay";var Qz=BigInt(131072),Hi="/libp2p/circuit/relay/0.2.0/hop",Xd="/libp2p/circuit/relay/0.2.0/stop",Xz=30*1e3,jz=30*1e3;var ei;(function(r){let e;(function(s){s.RESERVE="RESERVE",s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.RESERVE=0]="RESERVE",s[s.CONNECT=1]="CONNECT",s[s.STATUS=2]="STATUS"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Dc.codec().encode(s.peer,i)),s.reservation!=null&&(i.uint32(26),jd.codec().encode(s.reservation,i)),s.limit!=null&&(i.uint32(34),Cc.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(40),Ft.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Dc.codec().decode(s,s.uint32());break;case 3:o.reservation=jd.codec().decode(s,s.uint32());break;case 4:o.limit=Cc.codec().decode(s,s.uint32());break;case 5:o.status=Ft.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(ei||(ei={}));var Jn;(function(r){let e;(function(s){s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.CONNECT=0]="CONNECT",s[s.STATUS=1]="STATUS"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Dc.codec().encode(s.peer,i)),s.limit!=null&&(i.uint32(26),Cc.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(32),Ft.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Dc.codec().decode(s,s.uint32());break;case 3:o.limit=Cc.codec().decode(s,s.uint32());break;case 4:o.status=Ft.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(Jn||(Jn={}));var Dc;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={id:new Uint8Array(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.id=t.bytes();break;case 2:s.addrs.push(t.bytes());break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(Dc||(Dc={}));var jd;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.expire=t.uint64();break;case 2:s.addrs.push(t.bytes());break;case 3:s.voucher=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(jd||(jd={}));var Cc;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.duration=t.uint32();break;case 2:s.data=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(Cc||(Cc={}));var Ft;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(Ft||(Ft={}));var xg;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(xg||(xg={}));(function(r){r.codec=()=>ut(xg)})(Ft||(Ft={}));var vg;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.relay=t.bytes();break;case 2:s.peer=t.bytes();break;case 3:s.expiration=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(vg||(vg={}));var gye=C("libp2p:circuit-relay:utils");async function _g(r){let e=new TextEncoder().encode(r),t=await Ne.digest(e);return ge.createV0(t)}function Sg(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Jz=re(lA(),1);var kye=C("libp2p:circuit-relay:advert-service");var l7e=C("libp2p:circuit-relay:server");var t$=C("libp2p:stream:converter");function Rg(r){let{stream:e,remoteAddr:t}=r,{sink:n,source:s}=e,i=async function*(){for await(let c of s)c instanceof Uint8Array?yield c:yield*c}(),o={async sink(c){try{await n(c),a()}catch(l){l.type!=="aborted"&&t$(l)}},source:i,remoteAddr:t,timeline:{open:Date.now(),close:void 0},async close(c){a(),await e.close(c)},abort(c){a(),e.abort(c)}};function a(){o.timeline.close==null&&(o.timeline.close=Date.now())}return o}var Wi=C("libp2p:circuit-relay:discover-relays"),Zd=class extends Fe{peerId;peerStore;contentRouting;registrar;started;topologyId;constructor(e){super(),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Hi,{onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}}),this.discover().catch(e=>{Wi.error("error listening on relays",e)}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){Wi("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Hi)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)Wi("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});Wi("found %d relay peers in peer store",e.length);try{Wi("searching content routing for relays");let t=await _g(Eg),n=0;for await(let s of this.contentRouting.findProviders(t))if(s.multiaddrs.length>0&&!s.id.equals(this.peerId)){let i=s.id;n++,await this.peerStore.merge(i,{multiaddrs:s.multiaddrs}),Wi("found relay peer %p in content routing",i),this.safeDispatchEvent("relay:discover",{detail:i})}Wi("found %d relay peers in content routing",n)}catch(t){Wi.error("failed when finding relays on the network",t)}}};var Ig=C("libp2p:circuit-relay:transport:listener"),Ag=class extends Fe{connectionManager;relayStore;listeningAddrs;constructor(e){super(),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new fr,this.relayStore.addEventListener("relay:removed",t=>{this.#e(t.detail)})}async listen(e){Ig("listen on %a",e);let t=e.getPeerId(),n;if(t!=null){let i=ae(t),o=this.connectionManager.getConnectionsMap().get(i)??[];o.length>0&&(n=o[0])}if(n==null){let i=e.toString().split("/p2p-circuit").find(a=>a!==""),o=oe(i);n=await this.connectionManager.openConnection(o)}if(!this.relayStore.hasReservation(n.remotePeer)){await this.relayStore.addRelay(n.remotePeer,"configured");return}let s=this.relayStore.getReservation(n.remotePeer);if(s==null)throw new b("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){Ig("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,s.addrs.map(i=>oe(i).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);Ig("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&this.safeDispatchEvent("close",{})}};function fA(r){return new Ag(r)}var Ar=C("libp2p:circuit-relay:transport:reservation-store"),n$=60*1e3*10,s$=60*1e3*5,i$=30*1e3,Jd=class extends Fe{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;constructor(e,t){super(),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new fr,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e4,this.started=!1,this.reserveQueue=new Xa({concurrency:t?.reservationConcurrency??1}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){Ar("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){Ar("not adding relay as the queue is full");return}if(this.reserveQueue.hasJob(e)){Ar("relay peer is already in the reservation queue");return}Ar("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(Sg(n.reservation.expire)>n$){Ar("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((u,f)=>(f.type==="discovered"&&u++,u),0)>=this.maxDiscoveredRelays){Ar("already have enough discovered relays");return}let s=AbortSignal.timeout(this.reservationCompletionTimeout),i=await this.connectionManager.openConnection(e,{signal:s});if(i.remoteAddr.protoNames().includes("p2p-circuit")){Ar("not creating reservation over relayed connection");return}let o=await this.#e(i,{signal:s});Ar("created reservation on relay peer %p",e);let a=Sg(o.expire),c=Math.min(Math.max(a-s$,i$),Math.pow(2,31)-1),l=setTimeout(()=>{this.addRelay(e,t).catch(u=>{Ar.error("could not refresh reservation to relay %p",e,u)})},c);this.reservations.set(e,{timeout:l,reservation:o,type:t}),await this.peerStore.merge(e,{tags:{[sA]:{value:1,ttl:a}}}),await this.transportManager.listen([oe(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){Ar.error("could not reserve slot on %p",e,n);let s=this.reservations.get(e);s!=null&&clearTimeout(s.timeout),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e,t){t.signal?.throwIfAborted(),Ar("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Hi,t),i=jt(n).pb(ei);await i.write({type:ei.Type.RESERVE},t);let o;try{o=await i.read(t)}catch(c){throw Ar.error("error parsing reserve message response from %p because",e.remotePeer,c),c}finally{await n.close()}if(o.status===Ft.OK&&o.reservation!=null)return o.reservation;let a=`reservation failed with status ${o.status??"undefined"}`;throw Ar.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(Ar("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(Ar("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var pr=C("libp2p:circuit-relay:transport"),o$=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(oe)}catch{return!1}return!0},Tg={maxInboundStopStreams:Pi,maxOutboundStopStreams:Pi,stopTimeout:3e4},Dg=class{discovery;registrar;peerStore;connectionManager;peerId;upgrader;addressManager;connectionGater;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;constructor(e,t){this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??Tg.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Tg.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??Tg.stopTimeout,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new Zd(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(s=>{pr.error("could not add discovered relay %p",n.detail,s)})})),this.reservationStore=new Jd(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{pr.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){await this.reservationStore.start(),await this.discovery?.start(),await this.registrar.handle(Xd,e=>{this.onStop(e).catch(t=>{pr.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),this.started=!0}async stop(){this.discovery?.stop(),await this.reservationStore.stop(),await this.registrar.unhandle(Xd),this.started=!1}[ms]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(p=>p===290).length!==1){let p="Invalid circuit relay address";throw pr.error(p,e),new b(p,H.ERR_RELAYED_DIAL)}let n=e.toString().split("/p2p-circuit"),s=oe(n[0]),i=oe(n[n.length-1]),o=s.getPeerId(),a=i.getPeerId();if(o==null||a==null){let p=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw pr.error(p),new b(p,H.ERR_RELAYED_DIAL)}let c=ae(o),l=ae(a),u=!1,h=this.connectionManager.getConnections(c)[0];h==null&&(await this.peerStore.merge(c,{multiaddrs:[s]}),h=await this.connectionManager.openConnection(c,t),u=!0);let d;try{return d=await h.newStream([Hi]),await this.connectV2({stream:d,connection:h,destinationPeer:l,destinationAddr:i,relayAddr:s,ma:e,disconnectOnFailure:u})}catch(p){throw pr.error("circuit relay dial to destination %p via relay %p failed",l,c,p),d?.abort(p),u&&await h.close(),p}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:s,relayAddr:i,ma:o,disconnectOnFailure:a}){try{let c=jt(e),l=c.pb(ei);await l.write({type:ei.Type.CONNECT,peer:{id:n.toBytes(),addrs:[oe(s).bytes]}});let u=await l.read();if(u.status!==Ft.OK)throw new b(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`,H.ERR_HOP_REQUEST_FAILED);let f=Rg({stream:c.unwrap(),remoteAddr:o,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`)});return pr("new outbound transient connection %a",f.remoteAddr),await this.upgrader.upgradeOutbound(f,{transient:!0})}catch(c){throw pr.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return fA({connectionManager:this.connectionManager,relayStore:this.reservationStore})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Xn.matches(t))}async onStop({connection:e,stream:t}){let n=AbortSignal.timeout(this.stopTimeout),s=jt(t).pb(Jn),i=await s.read({signal:n});if(pr("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){pr.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==Jn.Type.CONNECT){pr.error("invalid stop connect request via peer %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!o$(i)){pr.error("invalid stop connect request via peer %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let o=dt(i.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,o)===!0){pr.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.PERMISSION_DENIED},{signal:n}),await t.close();return}pr.trace("sending success response to %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${o.toString()}`),c=this.addressManager.getAddresses()[0],l=Rg({stream:s.unwrap().unwrap(),remoteAddr:a,localAddr:c});pr("new inbound transient connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:!0}),pr("%s connection %a upgraded","inbound",l.remoteAddr)}};function Cg(r={}){return e=>new Dg(e,r)}var hA=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},a$=new WeakMap;function c$({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:s}={})=>{if(s?.aborted)return Promise.reject(hA());let i,o,a,c=r??clearTimeout,l=()=>{c(i),a(hA())},u=()=>{s&&s.removeEventListener("abort",l)},f=new Promise((h,d)=>{o=()=>{u(),h(n)},a=d,i=(e??setTimeout)(o,t)});return s&&s.addEventListener("abort",l,{once:!0}),a$.set(f,()=>{c(i),i=null,o()}),f}}var l$=c$(),dA=l$;var es;(function(r){let e;(function(s){s.UNUSED="UNUSED",s.CONNECT="CONNECT",s.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.UNUSED=0]="UNUSED",s[s.CONNECT=100]="CONNECT",s[s.SYNC=300]="SYNC"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{if(o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.observedAddresses!=null)for(let a of s.observedAddresses)i.uint32(18),i.bytes(a);o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={observedAddresses:[]},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.observedAddresses.push(s.bytes());break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(es||(es={}));var pt=C("libp2p:dcutr"),pA=1024*4,mA=100,e1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},t1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;constructor(e,t){this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??e1.timeout,this.retries=t.retries??e1.retries,this.maxInboundStreams=t.maxInboundStreams??e1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??e1.maxOutboundStreams}isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Tu,{onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{pt.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Tu,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{pt.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Tu),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let s={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Tu],{signal:s.signal,runOnTransientConnection:!0});let i=jt(t,{maxDataLength:pA}).pb(es);pt("B sending connect to %p",e.remotePeer);let o=Date.now();await i.write({type:es.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(f=>f.bytes)},s),pt("B receiving connect from %p",e.remotePeer);let a=await i.read(s);if(a.type!==es.Type.CONNECT)throw pt("A sent wrong message type"),new b("DCUtR message type was incorrect",H.ERR_INVALID_MESSAGE);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw pt("A did not have any dialable multiaddrs"),new b("DCUtR connect message had no multiaddrs",H.ERR_INVALID_MESSAGE);let l=Date.now()-o;pt("A sending sync, rtt %dms",l),await i.write({type:es.Type.SYNC,observedAddresses:[]},s),pt("A waiting for half RTT"),await dA(l/2),pt("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:s.signal,priority:mA});pt("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(s);break}catch(i){if(pt.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(s)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(s=>{let i=s.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(s=>this.isPublicAndDialable(s));if(n.length>0){let s=AbortSignal.timeout(this.timeout);try{pt("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:s,force:!0});if(i.transient)throw new Error("Could not open a new, non-transient, connection");return pt("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:s}),!0}catch(i){pt.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else pt("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let s=jt(e,{maxDataLength:pA}).pb(es);pt("A receiving connect");let i=await s.read(n);if(i.type!==es.Type.CONNECT)throw pt("B sent wrong message type"),new b("DCUtR message type was incorrect",H.ERR_INVALID_MESSAGE);if(i.observedAddresses.length===0)throw pt("B sent no multiaddrs"),new b("DCUtR connect message had no multiaddrs",H.ERR_INVALID_MESSAGE);let o=this.getDialableMultiaddrs(i.observedAddresses);if(o.length===0)throw pt("B had no dialable multiaddrs"),new b("DCUtR connect message had no dialable multiaddrs",H.ERR_INVALID_MESSAGE);if(pt("A sending connect"),await s.write({type:es.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),pt("A receiving sync"),(await s.read(n)).type!==es.Type.SYNC)throw new b("DCUtR message type was incorrect",H.ERR_INVALID_MESSAGE);pt("A dialing",o);let c=await this.connectionManager.openConnection(o,{signal:n.signal,priority:mA,force:!0});pt("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(s){pt.error("incoming DCUtR from %p failed",t.remotePeer,s),e.abort(s)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let s=oe(n);if(!this.isPublicAndDialable(s))continue;t.push(s)}catch{}return t}isPublicAndDialable(e){if(Vl.matches(e))return!1;if(Yw.matches(e))return!0;if(!Zw.matches(e)||this.transportManager.transportForMultiaddr(e)==null)return!1;let n=e.toOptions();return Or(n.host)===!1}};var Tu="/libp2p/dcutr";function gA(r={}){return e=>new t1(e,r)}var yA="0.46.14";var Pg=`js-libp2p/${yA}`;var bA="0.1.0",wA="id",EA="id/push",xA="1.0.0",vA="1.0.0";var Ng=re(Cr(),1);var Gi;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 5:s.protocolVersion=t.string();break;case 6:s.agentVersion=t.string();break;case 1:s.publicKey=t.bytes();break;case 2:s.listenAddrs.push(t.bytes());break;case 4:s.observedAddr=t.bytes();break;case 3:s.protocols.push(t.string());break;case 8:s.signedPeerRecord=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(Gi||(Gi={}));var mr=C("libp2p:identify"),kg=1024*8,an={protocolPrefix:"ipfs",agentVersion:Pg,timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192,runOnConnectionOpen:!0,runOnTransientConnection:!0},r1=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;runOnTransientConnection;constructor(e,t){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.identifyProtocolStr=`/${t.protocolPrefix??an.protocolPrefix}/${wA}/${xA}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??an.protocolPrefix}/${EA}/${vA}`,this.timeout=t.timeout??an.timeout,this.maxInboundStreams=t.maxInboundStreams??an.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??an.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??an.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??an.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??an.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??an.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??an.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??an.protocolPrefix}/${bA}`,agentVersion:t.agentVersion??an.agentVersion},(t.runOnConnectionOpen??an.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let s=n.detail;this.identify(s).catch(i=>{mr.error("error during identify trigged by connection:open",i)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(s=>{mr.error(s)})}),this.host.agentVersion===Pg&&(AI||RI?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(Hd||Wd||II||TI)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:Q(this.host.agentVersion),ProtocolVersion:Q(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{mr.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{mr.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(u=>u.decapsulateCode(me("p2p").code)),n=new jr({peerId:this.peerId,multiaddrs:t}),s=await wn.seal(n,this.peerId),i=this.registrar.getProtocols(),o=await this.peerStore.get(this.peerId),a=W(o.metadata.get("AgentVersion")??Q(this.host.agentVersion)),c=W(o.metadata.get("ProtocolVersion")??Q(this.host.protocolVersion)),l=e.map(async u=>{let f,h=AbortSignal.timeout(this.timeout);try{(0,Ng.setMaxListeners)?.(1/0,h)}catch{}try{f=await u.newStream([this.identifyPushProtocolStr],{signal:h,runOnTransientConnection:this.runOnTransientConnection}),await jt(f,{maxDataLength:this.maxIdentifyMessageSize??kg}).pb(Gi).write({listenAddrs:t.map(p=>p.bytes),signedPeerRecord:s.marshal(),protocols:i,agentVersion:a,protocolVersion:c},{signal:h}),await f.close({signal:h})}catch(d){mr.error("could not push identify update to peer",d),f?.abort(d)}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==H.ERR_NOT_FOUND)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n;t.signal=t.signal??AbortSignal.timeout(this.timeout);try{n=await e.newStream([this.identifyProtocolStr],{...t,runOnTransientConnection:this.runOnTransientConnection});let i=await jt(n,{maxDataLength:this.maxIdentifyMessageSize??kg}).pb(Gi).read(t);return await n.close(t),i}catch(s){throw mr.error("error while reading identify message",s),n?.abort(s),s}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:s,protocols:i,observedAddr:o}=n;if(s==null)throw new b("public key was missing from identify message",H.ERR_MISSING_PUBLIC_KEY);let a=await ur(s);if(!e.remotePeer.equals(a))throw new b("identified peer does not match the expected peer",H.ERR_INVALID_PEER);if(this.peerId.equals(a))throw new b("identified peer is our own peer id?",H.ERR_INVALID_PEER);let c=u$(o);mr("identify completed for peer %p and protocols %o",a,i),mr("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(mr("storing our observed address %a",c),this.addressManager.addObservedAddr(c));let l=await this.#e(e.remotePeer,n),u={peerId:a,protocolVersion:n.protocolVersion,agentVersion:n.agentVersion,publicKey:n.publicKey,listenAddrs:n.listenAddrs.map(f=>oe(f)),observedAddr:n.observedAddr==null?void 0:oe(n.observedAddr),protocols:n.protocols,signedPeerRecord:l};return this.events.safeDispatchEvent("peer:identify",{detail:u}),u}async _handleIdentify(e){let{connection:t,stream:n}=e,s=AbortSignal.timeout(this.timeout);try{(0,Ng.setMaxListeners)?.(1/0,s)}catch{}try{let i=this.peerId.publicKey??new Uint8Array(0),o=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(me("p2p").code)),c=o.peerRecordEnvelope;if(a.length>0&&c==null){let u=new jr({peerId:this.peerId,multiaddrs:a});c=(await wn.seal(u,this.peerId)).marshal().subarray()}await jt(n).pb(Gi).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:i,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:t.remoteAddr.bytes,protocols:o.protocols},{signal:s}),await n.close({signal:s})}catch(i){mr.error("could not respond to identify request",i),n.abort(i)}}async _handlePush(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let s={signal:AbortSignal.timeout(this.timeout)},o=await jt(n,{maxDataLength:this.maxIdentifyMessageSize??kg}).pb(Gi).read(s);await n.close(s),await this.#e(t.remotePeer,o)}catch(s){mr.error("received invalid message",s),n.abort(s);return}mr("handled push from %p",t.remotePeer)}async#e(e,t){if(mr("received identify from %p",e),t==null)throw new Error("Message was null or undefined");let n={addresses:t.listenAddrs.map(i=>({isCertified:!1,multiaddr:oe(i)})),protocols:t.protocols,metadata:new Map,peerRecordEnvelope:t.signedPeerRecord},s;if(t.signedPeerRecord!=null){mr("received signedPeerRecord in push from %p",e);let i=t.signedPeerRecord,o=await wn.openAndCertify(i,jr.DOMAIN),a=jr.createFromProtobuf(o.payload);if(!a.peerId.equals(o.peerId))throw new Error("signing key does not match PeerId in the PeerRecord");if(!e.equals(a.peerId))throw new Error("signing key does not match remote PeerId");let c;try{c=await this.peerStore.get(a.peerId)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null&&(n.metadata=c.metadata,c.peerRecordEnvelope!=null)){let l=await wn.createFromProtobuf(c.peerRecordEnvelope),u=jr.createFromProtobuf(l.payload);u.seqNumber>=a.seqNumber&&(mr("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,a.seqNumber),a=u,i=c.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=a.multiaddrs.map(l=>({isCertified:!0,multiaddr:l})),s={seq:a.seqNumber,addresses:a.multiaddrs}}else mr("%p did not send a signed peer record",e);return t.agentVersion!=null&&n.metadata.set("AgentVersion",Q(t.agentVersion)),t.protocolVersion!=null&&n.metadata.set("ProtocolVersion",Q(t.protocolVersion)),await this.peerStore.patch(e,n),s}};function u$(r){if(r!=null&&r.length>0)try{return oe(r)}catch{}}function _A(r={}){return e=>new r1(e,r)}var SA="1.0.0",RA="ping",IA="ipfs";var Pc=C("libp2p:ping"),Og=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;constructor(e,t){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??IA}/${RA}/${SA}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){Pc("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now();Ae(t,t).catch(s=>{Pc.error("incoming ping from %p failed with error",e.connection.remotePeer,s)}).finally(()=>{let s=Date.now()-n;Pc("incoming ping from %p complete in %dms",e.connection.remotePeer,s)})}async ping(e,t={}){Pc("pinging %p",e);let n=Date.now(),s=kr(32),i=await this.components.connectionManager.openConnection(e,t),o,a=()=>{};t.signal=t.signal??AbortSignal.timeout(this.timeout);try{o=await i.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{o?.abort(new b("ping timeout",H.ERR_TIMEOUT))},t.signal.addEventListener("abort",a,{once:!0});let c=await Ae([s],o,async u=>Yn(u)),l=Date.now()-n;if(c==null)throw new b(`Did not receive a ping ack after ${l}ms`,H.ERR_WRONG_PING_ACK);if(!de(s,c.subarray()))throw new b(`Received wrong ping ack after ${l}ms`,H.ERR_WRONG_PING_ACK);return Pc("ping %p complete in %dms",i.remotePeer,l),l}catch(c){throw Pc.error("error while pinging %p",i.remotePeer,c),o?.abort(c),c}finally{t.signal.removeEventListener("abort",a),o!=null&&await o.close()}}};function AA(r={}){return e=>new Og(e,r)}var TA={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function DA(){return{addresses:{listen:["/webrtc"]},transports:[Cg({discoverRelays:1}),ZR(),jR(),UI(),LI()],connectionEncryption:[ac()],streamMuxers:[jv(),iS()],peerDiscovery:[l_(TA)],contentRouters:[g_("https://cid.contact")],services:{identify:_A(),autoNAT:nA(),pubsub:lv(),dcutr:gA(),dht:Y_({clientMode:!0,validators:{ipns:JI},selectors:{ipns:ZI}}),ping:AA()}}}async function CA(r,e){let t=DA();return e=e??{},_x({datastore:r,...t,...e,start:!1})}var PA="2.0.3-0749cbf",kA="helia";var m$=C("helia"),g$=["https://dweb.link","https://cf-ipfs.com","https://4everland.io","https://w3s.link","https://cloudflare-ipfs.com"];async function y$(r={}){let e=r.datastore??new Zi,t=r.blockstore??new Mc,n;b$(r.libp2p)?n=r.libp2p:n=await CA(e,r.libp2p);let s=d7(r.hashers),i=r.blockBrokers??[new Wc(n,t,s),new Gc(g$)],o=new U0({...r,datastore:e,blockstore:t,libp2p:n,blockBrokers:i,hashers:s});return r.start!==!1&&await o.start(),w$(o),o}function b$(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}function w$(r){try{if(r.libp2p.services.identify.host.agentVersion.match(/js-libp2p\/\d+\.\d+\.\d+\sUserAgent=/)==null)return;r.libp2p.services.identify.host.agentVersion=`${kA}/${PA} ${r.libp2p.services.identify.host.agentVersion}`}catch(e){m$.error("could not add Helia to agent version",e)}}return Cu(E$);})();
|
|
85
|
+
`),r}var YR=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),QR=r=>[...Array(r)].map(()=>YR.at(Math.floor(Math.random()*YR.length))).join("");var Kd=C("libp2p:webrtc:transport"),wz=1e4,s5e=me("webrtc-direct").code,GR=me("certhash").code,Vd=class{metrics;components;init;constructor(e,t={}){this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}async dial(e,t){let n=await this._connect(e,t);return Kd("dialing address: %a",e),n}createListener(e){throw oS("WebRTCTransport.createListener")}filter(e){return e.filter(rE.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[ms]=!0;async _connect(e,t){let n=new AbortController,s=n.signal,i=e.getPeerId();if(i===null)throw bd("we need to have the remote's PeerId");let o=ae(i),a=ng(Fd(e)),c=await wc.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:sg(a.name)}),l=new wc({certificates:[c]});try{let u=new Promise((_,D)=>{let O=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let U=`Data channel was never opened: state: ${O.readyState}`;Kd.error(U),this.metrics?.dialerEvents.increment({open_error:!0}),D(y4("data",U))},wz);O.onopen=U=>{clearTimeout(N),_(O)},O.onerror=U=>{clearTimeout(N);let te=`Error opening a data channel for handshaking: ${U.target?.toString()??"not specified"}`;Kd.error(te),this.metrics?.dialerEvents.increment({unknown_error:!0}),D(y4("data",te))}}),f="libp2p+webrtc+v1/"+QR(32),h=await l.createOffer(),d=WR(h,f);await l.setLocalDescription(d);let p=HR(e,f);await l.setRemoteDescription(p);let m=await u,g=this.components.peerId,y=this.generateNoisePrologue(l,a.code,e),w=ac({prologueBytes:y})(),E=bc({channel:m,direction:"inbound",...this.init.dataChannel??{}}),R={...E,sink:E.sink.bind(E),source:async function*(){for await(let _ of E.source)for(let D of _)yield D}()},x=new zo({peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),v=mu?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(v,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":x.close().catch(_=>{Kd.error("error closing connection",_)}).finally(()=>{n.abort()});break;default:break}},{signal:s}),this.metrics?.dialerEvents.increment({peer_connection:!0});let I=new $o({peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await w.secureInbound(g,R,o),await t.upgrader.upgradeOutbound(x,{skipProtection:!0,skipEncryption:!0,muxerFactory:I})}catch(u){throw l.close(),u}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw pu("no local certificate");let s=$R(e);if(s==null)throw pu("no local fingerprint found");let i=s.trim().toLowerCase().replaceAll(":",""),o=Q(i,"hex"),a=XR.encode(o,t),c=rg.decode(Fd(n)),l=Q("libp2p-webrtc-noise:");return Se([l,a,c])}};function jR(r){return e=>new Vd(e,r)}function ZR(r){return e=>new Ad(e,r)}function JR(r){let e;try{e=me("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function eI(r){return r.some(([e,t])=>e===me("tls").code)}function sn(r,e,t){let n=tI[me(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${me(r).name}`);let s=n(e,t);return r===me("ip6").code?`[${s}]`:s}var tI={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${sn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${sn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=eI(e),n=JR(e);if(t&&n!==null)return`https://${n}`;let s=t?"https://":"http://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=sn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return sn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return sn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=sn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=eI(e),n=JR(e);if(t&&n!==null)return`wss://${n}`;let s=t?"wss://":"ws://",i=e.pop();if(i===void 0)throw new Error("Unexpected end of multiaddr");let o=sn(i[0],i[1]??"",e);return o=o.replace("tcp://",""),`${s}${o}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=sn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${sn(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function rI(r,e){let n=oe(r).stringTuples(),s=n.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=me(s[0]),o=tI[i.name];if(o==null)throw new Error(`No interpreter found for ${i.name}`);let a=o(s[1]??"",n);return e?.assumeHttp!==!1&&s[0]===me("tcp").code&&(a=a.replace("tcp://","http://"),(s[1]==="443"||s[1]==="80")&&(s[1]==="443"&&(a=a.replace("http://","https://")),a=a.substring(0,a.lastIndexOf(":")))),a}var nI=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",s),r.removeEventListener("error",i)}function s(){n(),e()}function i(o){n(),t(o.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",s),r.addEventListener("error",i)})};var sI=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let s of n){try{await nI(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(s)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((s,i)=>{r.addEventListener("close",o=>{if(o.wasClean||o.code===1006)s();else{let a=Object.assign(new Error("ws error"),{event:o});i(a)}}),setTimeout(()=>{r.close()})})});var cI=re(oI(),1);function aI(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var lI=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,o)=>{if(n){i();return}if(s!=null){o(s);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{o(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new cI.EventIterator(({push:o,stop:a,fail:c})=>{let l=f=>{let h=null;typeof f.data=="string"&&(h=Q(f.data)),aI(f.data)&&(h=new Uint8Array(f.data)),f.data instanceof Uint8Array&&(h=f.data),h!=null&&o(h)},u=f=>{c(f.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let o of i)yield aI(o)?new Uint8Array(o):o}(),n=r.readyState===1,s;return r.addEventListener("open",()=>{n=!0,s=null}),r.addEventListener("close",()=>{n=!1,s=null}),r.addEventListener("error",i=>{n||(s=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var uI=(r,e)=>{e=e??{};let t=lI(r),n=e.remoteAddress,s=e.remotePort;if(r.url!=null)try{let o=new URL(r.url);n=o.hostname,s=parseInt(o.port,10)}catch{}if(n==null||s==null)throw new Error("Remote connection did not have address and/or port");return{sink:sI(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(o=>{r.addEventListener("close",()=>{o()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:s,socket:r}};var fI=WebSocket;var wI=re(bI(),1),Cz={http:"ws",https:"wss"},Pz="ws",EI=(r,e)=>(0,wI.relative)(r,e,Cz,Pz);function xI(r,e){let t=typeof window>"u"?"":window.location;e=e??{};let n=EI(r,t.toString()),s=new fI(n,e.websocket);return uI(s,e)}var SI=re(_I(),1),lg=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,$d=(0,SI.default)(),Hd=lg&&!$d,RI=$d&&!lg,II=$d&&lg,AI=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!$d,Wd=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,P5e=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+(()=>"_")()+"ENV"]==="test",TI=typeof navigator<"u"&&navigator.product==="ReactNative";function PI(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return fc.matches(t)||Fo.matches(t)})}function kI(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Fo.matches(t)})}function NI(){throw new Error("WebSocket Servers can not be created in the browser!")}var Gd=C("libp2p:websockets:socket");function OI(r,e,t){t=t??{};let n={async sink(s){t?.signal!=null&&(s=Qt(s,t.signal));try{await r.sink(s)}catch(i){i.type!=="aborted"&&Gd.error(i)}},source:t.signal!=null?Qt(r.source,t.signal):r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();s.signal=s.signal??AbortSignal.timeout(500);let o=()=>{let{host:a,port:c}=n.remoteAddr.toOptions();Gd("timeout closing stream to %s:%s after %dms, destroying it manually",a,c,Date.now()-i),this.abort(new b("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal.addEventListener("abort",o);try{await r.close()}catch(a){Gd.error("error closing WebSocket gracefully",a),this.abort(a)}finally{s.signal.removeEventListener("abort",o),n.timeline.close=Date.now()}},abort(s){let{host:i,port:o}=n.remoteAddr.toOptions();Gd("timeout closing stream to %s:%s due to error",i,o,s),r.destroy(),n.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{n.timeline.close==null&&(n.timeline.close=Date.now())},{once:!0}),n}var $i=C("libp2p:websockets"),ug=class{init;constructor(e){this.init=e}[Symbol.toStringTag]="@libp2p/websockets";[ms]=!0;async dial(e,t){$i("dialing %s",e),t=t??{};let n=await this._connect(e,t),s=OI(n,e);$i("new outbound connection %s",s.remoteAddr);let i=await t.upgrader.upgradeOutbound(s);return $i("outbound connection %s upgraded",s.remoteAddr),i}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Cn;let n=e.toOptions();$i("dialing %s:%s",n.host,n.port);let s=Ee(),i=xI(rI(e),this.init);if(i.socket.addEventListener("error",()=>{let c=new b(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");$i.error("connection error:",c),s.reject(c)}),t.signal==null)return await Promise.race([i.connected(),s.promise]),$i("connected %s",e),i;let o,a=new Promise((c,l)=>{if(o=()=>{l(new Cn),i.close().catch(u=>{$i.error("error closing raw socket",u)})},t?.signal?.aborted===!0){o();return}t?.signal?.addEventListener("abort",o)});try{await Promise.race([a,s.promise,i.connected()])}finally{o!=null&&t?.signal?.removeEventListener("abort",o)}return $i("connected %s",e),i}createListener(e){return NI({...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):Hd||Wd?kI(e):PI(e)}};function LI(r={}){return()=>new ug(r)}var Ru=C("libp2p:webtransport:stream");async function fg(r,e,t,n,s){let i=r.writable.getWriter(),o=r.readable.getReader();await i.ready;function a(){let h=n.findIndex(d=>d===f);h!==-1&&(n.splice(h,1),f.timeline.close=Date.now(),s?.(f))}let c=!1,l=!1;(async function(){let h=await i.closed.catch(d=>d);if(h!=null){let d=h.message;d.includes("aborted by the remote server")||d.includes("STOP_SENDING")||Ru.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}c=!0,c&&l&&a()})().catch(()=>{Ru.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await o.closed.catch(d=>d);h!=null&&Ru.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),l=!0,c&&l&&a()}().catch(()=>{Ru.error("WebTransport failed to cleanup closed stream")});let u=!1,f={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(h){c||(i.abort(h).catch(d=>{Ru.error("could not abort stream",d)}),c=!0),l=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),a()},async close(h){this.status="closing",await Promise.all([f.closeRead(h),f.closeWrite(h)]),a(),this.status="closed",this.timeline.close=Date.now()},async closeRead(h){if(!l){this.readStatus="closing";try{await o.cancel()}catch(d){d.toString().includes("RESET_STREAM")===!0&&(c=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",l=!0}c&&a()},async closeWrite(h){if(!c){c=!0,this.writeStatus="closing";try{await i.close()}catch(d){d.toString().includes("RESET_STREAM")===!0&&(l=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}l&&a()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let h=await o.read();if(h.done){l=!0,c&&a();return}yield new xe(h.value)}}(),sink:async function(h){if(u)throw new Error("sink already called on stream");u=!0;try{this.writeStatus="writing";for await(let d of h)if(d instanceof Uint8Array)await i.write(d);else for(let p of d)await i.write(p);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await f.closeWrite()}}};return f}function hg(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function BI(r,e){return e.filter(n=>!!r.find(s=>de(n,s))).length===e.length}var Lz=Object.values(cn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Bz(r){return Tn.decode(Lz.decode(r))}function MI(r){if(!Qf.matches(r))throw new b("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([o,a])=>o===me("certhash").code).map(([o,a])=>Bz(a??"")),n=e.filter(([o,a])=>o===me("p2p").code).map(([o,a])=>ae(a??""))[0],s=r.toOptions(),i=s.host;return s.family===6&&i?.includes(":")&&(i=`[${i}]`),{url:`https://${i}:${s.port}`,certhashes:t,remotePeer:n}}var on=C("libp2p:webtransport"),dg=class{components;config;metrics;constructor(e,t={}){this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[ms]=!0;async dial(e,t){t?.signal?.throwIfAborted(),on("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:s,certhashes:i,remotePeer:o}=MI(e);if(o==null)throw new Error("Need a target peerid");if(i.length===0)throw new Error("Expected multiaddr to contain certhashes");let a,c,l=()=>{},u=!1,f=!1,h=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let d=new WebTransport(`${s}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:i.map(p=>({algorithm:"sha-256",value:p.digest}))});if(l=p=>{if(!u)try{this.metrics?.dialerEvents.increment({[p]:!0}),d.close()}catch(m){on.error("error closing wt session",m)}finally{c!=null&&(c.timeline.close=Date.now()),u=!0}},a=()=>{l(f?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),await Promise.race([d.closed,d.ready]),f=!0,this.metrics?.dialerEvents.increment({ready:!0}),d.closed.catch(p=>{on.error("error on remote wt session close",p)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(d,n,o,i))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{on("Closing webtransport"),l("close")},abort:p=>{on("aborting webtransport due to passed err",p),l("abort")},remoteAddr:e,timeline:{open:Date.now()},...hg()},h=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(d),skipProtection:!0})}catch(d){throw on.error("caught wt session err",d),l(h?"upgrade_error":f?"noise_error":"ready_error"),d}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,s){let i=await e.createBidirectionalStream(),o=i.writable.getWriter(),a=i.readable.getReader();await o.ready;let c={source:async function*(){for(;;){let f=await a.read();if(f.value!=null&&(yield f.value),f.done)break}}(),sink:async function(f){for await(let h of f)await o.write(h)}},l=ac()(),{remoteExtensions:u}=await l.secureOutbound(t,c,n);if(o.close().catch(f=>{on.error(`Failed to close authentication stream writer: ${f.message}`)}),a.cancel().catch(f=>{on.error(`Failed to close authentication stream reader: ${f.message}`)}),!BI(u?.webtransportCerthashes??[],s.map(f=>f.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];return async function(){let a=e.incomingBidirectionalStreams.getReader();for(;;){let{done:c,value:l}=await a.read();if(c)break;if(i.length>=n.maxInboundStreams)l.writable.close().catch(u=>{on.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),l.readable.cancel().catch(u=>{on.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await fg(l,String(t++),"inbound",i,s?.onStreamEnd);i.push(u),s?.onIncomingStream?.(u)}}}().catch(()=>{on.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async a=>{let c=await e.createBidirectionalStream(),l=await fg(c,String(t++),s?.direction??"outbound",i,s?.onStreamEnd);return i.push(l),l},close:async a=>{on("Closing webtransport muxer"),await Promise.all(i.map(async c=>c.close(a)))},abort:a=>{on("Aborting webtransport muxer with err:",a);for(let c of i)c.abort(a)},...hg()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(Qf.exactMatch)}};function UI(r={}){return e=>new dg(e,r)}var Ur=re(Jo(),1);var GI=re(FI(),1);var KI="ERR_IPNS_EXPIRED_RECORD",Yd="ERR_UNRECOGNIZED_VALIDITY";var Zs="ERR_SIGNATURE_VERIFICATION",VI="ERR_UNRECOGNIZED_FORMAT";var mg="ERR_UNDEFINED_PARAMETER",qI="ERR_INVALID_RECORD_DATA",zI="ERR_INVALID_VALUE",$I="ERR_INVALID_EMBEDDED_KEY";var HI="ERR_RECORD_TOO_LARGE";var Js;(function(r){let e;(function(s){s.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(s){s[s.EOL=0]="EOL"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.value!=null&&(i.uint32(10),i.bytes(s.value)),s.signatureV1!=null&&(i.uint32(18),i.bytes(s.signatureV1)),s.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(s.validityType,i)),s.validity!=null&&(i.uint32(34),i.bytes(s.validity)),s.sequence!=null&&(i.uint32(40),i.uint64(s.sequence)),s.ttl!=null&&(i.uint32(48),i.uint64(s.ttl)),s.pubKey!=null&&(i.uint32(58),i.bytes(s.pubKey)),s.signatureV2!=null&&(i.uint32(66),i.bytes(s.signatureV2)),s.data!=null&&(i.uint32(74),i.bytes(s.data)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.value=s.bytes();break;case 2:o.signatureV1=s.bytes();break;case 3:o.validityType=r.ValidityType.codec().decode(s);break;case 4:o.validity=s.bytes();break;case 5:o.sequence=s.uint64();break;case 6:o.ttl=s.uint64();break;case 7:o.pubKey=s.bytes();break;case 8:o.signatureV2=s.bytes();break;case 9:o.data=s.bytes();break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(Js||(Js={}));var gg=C("ipns:utils"),Mz=Q("/ipns/"),Uz=114;function Fz(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),s=parseInt(t[2],10)-1,i=parseInt(t[3],10),o=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].padEnd(6,"0").slice(0,3),10);return new Date(Date.UTC(n,s,i,o,a,c,l))}var YI=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw gg.error(n),(0,Ur.default)(n,mg)}let t;if(e.pubKey!=null){try{t=Nr(e.pubKey)}catch(s){throw gg.error(s),s}if(!(await ur(e.pubKey)).equals(r))throw(0,Ur.default)(new Error("Embedded public key did not match PeerID"),$I)}else r.publicKey!=null&&(t=Nr(r.publicKey));if(t!=null)return t;throw(0,Ur.default)(new Error("no public key is available"),mg)};var QI=r=>{let e=Q("ipns-signature:");return Se([e,r])};function Iu(r){let e=Js.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw(0,Ur.default)(new Error("missing data or signatureV2"),Zs);let t=jI(e.data),n=Kz(t.Value),s;try{s=GI.default.fromDate(Fz(W(t.Validity)))}catch{throw gg.error("unrecognized validity format (not an rfc3339 format)"),(0,Ur.default)(new Error("unrecognized validity format (not an rfc3339 format)"),VI)}if(e.value!=null&&e.signatureV1!=null)return Vz(e),{value:n,validityType:Js.ValidityType.EOL,validity:s,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:Js.ValidityType.EOL,validity:s,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}var XI=r=>dt(r.slice(Mz.length));var jI=r=>{let e=dn(r);if(e.ValidityType===0)e.ValidityType=Js.ValidityType.EOL;else throw(0,Ur.default)(new Error("Unknown validity type"),Yd);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},Kz=r=>{if(r!=null){if(La(r))return`/ipns/${r.toCID().toString(ri)}`;if(r instanceof Uint8Array){let n=W(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=ge.asCID(r);if(t!=null)return t.code===Uz?`/ipns/${t.toString(ri)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${ge.decode(r).toV1().toString()}`:`/ipfs/${ge.parse(e).toV1().toString()}`}catch{}}throw(0,Ur.default)(new Error("Value must be a valid content path starting with /"),zI)},Vz=r=>{if(r.data==null)throw(0,Ur.default)(new Error("Record data is missing"),qI);let e=jI(r.data);if(!de(e.Value,r.value??new Uint8Array(0)))throw(0,Ur.default)(new Error('Field "value" did not match between protobuf and CBOR'),Zs);if(!de(e.Validity,r.validity??new Uint8Array(0)))throw(0,Ur.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Zs);if(e.ValidityType!==r.validityType)throw(0,Ur.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Zs);if(e.Sequence!==r.sequence)throw(0,Ur.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Zs);if(e.TTL!==r.ttl)throw(0,Ur.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Zs)};function ZI(r,e){let t=e.map((n,s)=>({record:Iu(n),index:s}));return t.sort((n,s)=>{let i=n.record.sequence,o=s.record.sequence;if(i>o)return-1;if(i<o)return 1;let a=n.record.validity.toDate(),c=s.record.validity.toDate();return a.getTime()>c.getTime()?-1:a.getTime()<c.getTime()?1:0}),t[0].index}var Au=re(Jo(),1);var Qd=C("ipns:validator"),qz=1024*10,zz=async(r,e)=>{let t=Iu(e),n;try{let s=QI(t.data);n=await r.verify(s,t.signatureV2)}catch{n=!1}if(!n)throw Qd.error("record signature verification failed"),(0,Au.default)(new Error("record signature verification failed"),Zs);if(t.validityType===Js.ValidityType.EOL){if(t.validity.toDate().getTime()<Date.now())throw Qd.error("record has expired"),(0,Au.default)(new Error("record has expired"),KI)}else if(t.validityType!=null)throw Qd.error("unrecognized validity type"),(0,Au.default)(new Error("unrecognized validity type"),Yd);Qd("ipns record for %b is valid",t.value)};async function JI(r,e){if(e.byteLength>qz)throw(0,Au.default)(new Error("record too large"),HI);let t=XI(r),n=Iu(e),s=await YI(t,n);await zz(s,e)}var bg=re(Cr(),1);var eA="libp2p",tA="autonat",rA="1.0.0";var Te;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>ut(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(s||(s={})),function(l){l.codec=()=>ut(s)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=ue((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})),u),l.encode=f=>le(f,l.codec()),l.decode=f=>ce(f,l.codec())})(i=r.PeerInfo||(r.PeerInfo={}));let o;(function(l){let u;l.codec=()=>(u==null&&(u=ue((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),r.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=r.PeerInfo.codec().decode(f,f.uint32());break;default:f.skipType(m&7);break}}return d})),u),l.encode=f=>le(f,l.codec()),l.decode=f=>ce(f,l.codec())})(o=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=ue((f,h,d={})=>{d.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(f.status,h)),f.statusText!=null&&(h.uint32(18),h.string(f.statusText)),f.addr!=null&&(h.uint32(26),h.bytes(f.addr)),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=r.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})),u),l.encode=f=>le(f,l.codec()),l.decode=f=>ce(f,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ue((l,u,f={})=>{f.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),f.lengthDelimited!==!1&&u.ldelim()},(l,u)=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let d=l.uint32();switch(d>>>3){case 1:f.type=r.MessageType.codec().decode(l);break;case 2:f.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:f.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(d&7);break}}return f})),c),r.encode=l=>le(l,r.codec()),r.decode=l=>ce(l,r.codec())})(Te||(Te={}));var qe=C("libp2p:autonat"),yg=4,wg=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;constructor(e,t){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??eA}/${tA}/${rA}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{qe.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new b("handleIncomingAutonatStream timeout",H.ERR_TIMEOUT))};t.addEventListener("abort",n,{once:!0});try{(0,bg.setMaxListeners)?.(1/0,t)}catch{}let s=this.components.addressManager.getAddresses().map(i=>i.toOptions().host);try{let i=this;await Ae(e.stream,o=>Et(o),async function*(o){let a=await Yn(o);if(a==null){qe("no message received"),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=Te.decode(a)}catch(m){qe.error("could not decode message",m),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){qe.error("dial was missing from message"),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let u,f=l.peer;if(f==null||f.id==null){qe.error("PeerId missing from message"),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{u=dt(f.id)}catch(m){qe.error("invalid PeerId",m),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(qe("incoming request from %p",u),!e.connection.remotePeer.equals(u)){qe("target peer %p did not equal sending peer %p",u,e.connection.remotePeer),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let h=f.addrs.map(m=>oe(m)).filter(m=>{let g=m.toOptions().host===e.connection.remoteAddr.toOptions().host;return qe.trace("request to dial %a was sent from %a is same host %s",m,e.connection.remoteAddr,g),g}).filter(m=>{let g=m.toOptions().host,y=!(Or(g)??!1);return qe.trace("host %s was public %s",g,y),y}).filter(m=>{let g=m.toOptions().host,y=!s.includes(g);return qe.trace("host %s was not our host %s",g,y),y}).filter(m=>{let g=!!i.components.transportManager.transportForMultiaddr(m);return qe.trace("transport for %a is supported %s",m,g),g}).map(m=>(m.getPeerId()==null&&(m=m.encapsulate(`/p2p/${u.toString()}`)),m));if(h.length===0){qe("no valid multiaddrs for %p in message",u),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}qe("dial multiaddrs %s for peer %p",h.map(m=>m.toString()).join(", "),u);let d="",p=h[0];for await(let m of h){let g;p=m;try{if(g=await i.components.connectionManager.openConnection(m,{signal:t}),!g.remoteAddr.equals(m))throw qe.error("tried to dial %a but dialed %a",m,g.remoteAddr),new Error("Unexpected remote address");qe("Success %p",u),yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.OK,addr:g.remoteAddr.decapsulateCode(me("p2p").code).bytes}});return}catch(y){qe("could not dial %p",u,y),d=y.message}finally{g!=null&&await g.close()}}yield Te.encode({type:Te.MessageType.DIAL_RESPONSE,dialResponse:{status:Te.ResponseStatus.E_DIAL_ERROR,statusText:d,addr:p.bytes}})},o=>St(o),e.stream)}catch(i){qe.error("error handling incoming autonat stream",i)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{qe.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(i=>{let o=i.toOptions();return!(Or(o.host)??!1)});if(t.length===0){qe("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);try{(0,bg.setMaxListeners)?.(1/0,n)}catch{}let s=this;try{qe("verify multiaddrs %s",t.map(f=>f.toString()).join(", "));let i=Te.encode({type:Te.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(f=>f.bytes)}}}),a=(await Tf()).toBytes(),c={},l=[],u=async f=>{let h=()=>{};try{qe("asking %p to verify multiaddr",f.id);let d=await s.components.connectionManager.openConnection(f.id,{signal:n}),p=await d.newStream(this.protocol,{signal:n});h=()=>{p.abort(new b("verifyAddress timeout",H.ERR_TIMEOUT))},n.addEventListener("abort",h,{once:!0});let m=await Ae([i],y=>St(y),p,y=>Et(y),async y=>Yn(y));if(m==null){qe("no response received from %p",d.remotePeer);return}let g=Te.decode(m);if(g.type!==Te.MessageType.DIAL_RESPONSE||g.dialResponse==null){qe("invalid autonat response from %p",d.remotePeer);return}if(g.dialResponse.status===Te.ResponseStatus.OK){let y=d.remoteAddr.toOptions(),w;if(y.family===4)w=y.host.split(".")[0];else if(y.family===6)w=y.host.split(":")[0];else{qe('remote address "%s" was not IP4 or IP6?',y.host);return}if(l.includes(w)){qe("already have response from network segment %d - %s",w,y.host);return}l.push(w)}return g.dialResponse}catch(d){qe.error("error asking remote to verify multiaddr",d)}finally{n.removeEventListener("abort",h)}};for await(let f of Vo(Dn(this.components.peerRouting.getClosestPeers(a,{signal:n}),h=>async()=>u(h)),{concurrency:yg}))try{if(f==null)continue;let h=f.addr==null?t[0]:oe(f.addr);if(qe("autonat response for %a is %s",h,f.status),f.status===Te.ResponseStatus.E_BAD_REQUEST||f.status===Te.ResponseStatus.E_DIAL_REFUSED||f.addr==null&&t.length>1)continue;if(!t.some(p=>p.equals(h))){qe("peer reported %a 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===Te.ResponseStatus.OK?c[d].success++:f.status===Te.ResponseStatus.E_DIAL_ERROR&&c[d].failure++,c[d].success===yg){qe("%a is externally dialable",h),e.confirmObservedAddr(h);return}if(c[d].failure===yg){qe("%a is not externally dialable",h),e.removeObservedAddr(h);return}}catch(h){qe.error("could not verify external address",h)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function nA(r={}){return e=>new wg(e,r)}var e$=re(Cr(),1);var Eg="/libp2p/relay";var sA="circuit-relay-relay";var Qz=BigInt(131072),Hi="/libp2p/circuit/relay/0.2.0/hop",Xd="/libp2p/circuit/relay/0.2.0/stop",Xz=30*1e3,jz=30*1e3;var ei;(function(r){let e;(function(s){s.RESERVE="RESERVE",s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.RESERVE=0]="RESERVE",s[s.CONNECT=1]="CONNECT",s[s.STATUS=2]="STATUS"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Dc.codec().encode(s.peer,i)),s.reservation!=null&&(i.uint32(26),jd.codec().encode(s.reservation,i)),s.limit!=null&&(i.uint32(34),Cc.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(40),Ft.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Dc.codec().decode(s,s.uint32());break;case 3:o.reservation=jd.codec().decode(s,s.uint32());break;case 4:o.limit=Cc.codec().decode(s,s.uint32());break;case 5:o.status=Ft.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(ei||(ei={}));var Jn;(function(r){let e;(function(s){s.CONNECT="CONNECT",s.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.CONNECT=0]="CONNECT",s[s.STATUS=1]="STATUS"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.peer!=null&&(i.uint32(18),Dc.codec().encode(s.peer,i)),s.limit!=null&&(i.uint32(26),Cc.codec().encode(s.limit,i)),s.status!=null&&(i.uint32(32),Ft.codec().encode(s.status,i)),o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.peer=Dc.codec().decode(s,s.uint32());break;case 3:o.limit=Cc.codec().decode(s,s.uint32());break;case 4:o.status=Ft.codec().decode(s);break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(Jn||(Jn={}));var Dc;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={id:new Uint8Array(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.id=t.bytes();break;case 2:s.addrs.push(t.bytes());break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(Dc||(Dc={}));var jd;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.expire=t.uint64();break;case 2:s.addrs.push(t.bytes());break;case 3:s.voucher=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(jd||(jd={}));var Cc;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.duration=t.uint32();break;case 2:s.data=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(Cc||(Cc={}));var Ft;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(Ft||(Ft={}));var xg;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(xg||(xg={}));(function(r){r.codec=()=>ut(xg)})(Ft||(Ft={}));var vg;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 1:s.relay=t.bytes();break;case 2:s.peer=t.bytes();break;case 3:s.expiration=t.uint64();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(vg||(vg={}));var gye=C("libp2p:circuit-relay:utils");async function _g(r){let e=new TextEncoder().encode(r),t=await Ne.digest(e);return ge.createV0(t)}function Sg(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Jz=re(lA(),1);var kye=C("libp2p:circuit-relay:advert-service");var l7e=C("libp2p:circuit-relay:server");var t$=C("libp2p:stream:converter");function Rg(r){let{stream:e,remoteAddr:t}=r,{sink:n,source:s}=e,i=async function*(){for await(let c of s)c instanceof Uint8Array?yield c:yield*c}(),o={async sink(c){try{await n(c),a()}catch(l){l.type!=="aborted"&&t$(l)}},source:i,remoteAddr:t,timeline:{open:Date.now(),close:void 0},async close(c){a(),await e.close(c)},abort(c){a(),e.abort(c)}};function a(){o.timeline.close==null&&(o.timeline.close=Date.now())}return o}var Wi=C("libp2p:circuit-relay:discover-relays"),Zd=class extends Fe{peerId;peerStore;contentRouting;registrar;started;topologyId;constructor(e){super(),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Hi,{onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}}),this.discover().catch(e=>{Wi.error("error listening on relays",e)}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){Wi("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Hi)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)Wi("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});Wi("found %d relay peers in peer store",e.length);try{Wi("searching content routing for relays");let t=await _g(Eg),n=0;for await(let s of this.contentRouting.findProviders(t))if(s.multiaddrs.length>0&&!s.id.equals(this.peerId)){let i=s.id;n++,await this.peerStore.merge(i,{multiaddrs:s.multiaddrs}),Wi("found relay peer %p in content routing",i),this.safeDispatchEvent("relay:discover",{detail:i})}Wi("found %d relay peers in content routing",n)}catch(t){Wi.error("failed when finding relays on the network",t)}}};var Ig=C("libp2p:circuit-relay:transport:listener"),Ag=class extends Fe{connectionManager;relayStore;listeningAddrs;constructor(e){super(),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new fr,this.relayStore.addEventListener("relay:removed",t=>{this.#e(t.detail)})}async listen(e){Ig("listen on %a",e);let t=e.getPeerId(),n;if(t!=null){let i=ae(t),o=this.connectionManager.getConnectionsMap().get(i)??[];o.length>0&&(n=o[0])}if(n==null){let i=e.toString().split("/p2p-circuit").find(a=>a!==""),o=oe(i);n=await this.connectionManager.openConnection(o)}if(!this.relayStore.hasReservation(n.remotePeer)){await this.relayStore.addRelay(n.remotePeer,"configured");return}let s=this.relayStore.getReservation(n.remotePeer);if(s==null)throw new b("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){Ig("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,s.addrs.map(i=>oe(i).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);Ig("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&this.safeDispatchEvent("close",{})}};function fA(r){return new Ag(r)}var Ar=C("libp2p:circuit-relay:transport:reservation-store"),n$=60*1e3*10,s$=60*1e3*5,i$=30*1e3,Jd=class extends Fe{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;constructor(e,t){super(),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new fr,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e4,this.started=!1,this.reserveQueue=new Xa({concurrency:t?.reservationConcurrency??1}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){Ar("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){Ar("not adding relay as the queue is full");return}if(this.reserveQueue.hasJob(e)){Ar("relay peer is already in the reservation queue");return}Ar("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(Sg(n.reservation.expire)>n$){Ar("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((u,f)=>(f.type==="discovered"&&u++,u),0)>=this.maxDiscoveredRelays){Ar("already have enough discovered relays");return}let s=AbortSignal.timeout(this.reservationCompletionTimeout),i=await this.connectionManager.openConnection(e,{signal:s});if(i.remoteAddr.protoNames().includes("p2p-circuit")){Ar("not creating reservation over relayed connection");return}let o=await this.#e(i,{signal:s});Ar("created reservation on relay peer %p",e);let a=Sg(o.expire),c=Math.min(Math.max(a-s$,i$),Math.pow(2,31)-1),l=setTimeout(()=>{this.addRelay(e,t).catch(u=>{Ar.error("could not refresh reservation to relay %p",e,u)})},c);this.reservations.set(e,{timeout:l,reservation:o,type:t}),await this.peerStore.merge(e,{tags:{[sA]:{value:1,ttl:a}}}),await this.transportManager.listen([oe(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){Ar.error("could not reserve slot on %p",e,n);let s=this.reservations.get(e);s!=null&&clearTimeout(s.timeout),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e,t){t.signal?.throwIfAborted(),Ar("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Hi,t),i=jt(n).pb(ei);await i.write({type:ei.Type.RESERVE},t);let o;try{o=await i.read(t)}catch(c){throw Ar.error("error parsing reserve message response from %p because",e.remotePeer,c),c}finally{await n.close()}if(o.status===Ft.OK&&o.reservation!=null)return o.reservation;let a=`reservation failed with status ${o.status??"undefined"}`;throw Ar.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(Ar("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(Ar("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};var pr=C("libp2p:circuit-relay:transport"),o$=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(oe)}catch{return!1}return!0},Tg={maxInboundStopStreams:Pi,maxOutboundStopStreams:Pi,stopTimeout:3e4},Dg=class{discovery;registrar;peerStore;connectionManager;peerId;upgrader;addressManager;connectionGater;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;constructor(e,t){this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??Tg.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Tg.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??Tg.stopTimeout,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new Zd(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(s=>{pr.error("could not add discovered relay %p",n.detail,s)})})),this.reservationStore=new Jd(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{pr.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){await this.reservationStore.start(),await this.discovery?.start(),await this.registrar.handle(Xd,e=>{this.onStop(e).catch(t=>{pr.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),this.started=!0}async stop(){this.discovery?.stop(),await this.reservationStore.stop(),await this.registrar.unhandle(Xd),this.started=!1}[ms]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(p=>p===290).length!==1){let p="Invalid circuit relay address";throw pr.error(p,e),new b(p,H.ERR_RELAYED_DIAL)}let n=e.toString().split("/p2p-circuit"),s=oe(n[0]),i=oe(n[n.length-1]),o=s.getPeerId(),a=i.getPeerId();if(o==null||a==null){let p=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw pr.error(p),new b(p,H.ERR_RELAYED_DIAL)}let c=ae(o),l=ae(a),u=!1,h=this.connectionManager.getConnections(c)[0];h==null&&(await this.peerStore.merge(c,{multiaddrs:[s]}),h=await this.connectionManager.openConnection(c,t),u=!0);let d;try{return d=await h.newStream([Hi]),await this.connectV2({stream:d,connection:h,destinationPeer:l,destinationAddr:i,relayAddr:s,ma:e,disconnectOnFailure:u})}catch(p){throw pr.error("circuit relay dial to destination %p via relay %p failed",l,c,p),d?.abort(p),u&&await h.close(),p}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:s,relayAddr:i,ma:o,disconnectOnFailure:a}){try{let c=jt(e),l=c.pb(ei);await l.write({type:ei.Type.CONNECT,peer:{id:n.toBytes(),addrs:[oe(s).bytes]}});let u=await l.read();if(u.status!==Ft.OK)throw new b(`failed to connect via relay with status ${u?.status?.toString()??"undefined"}`,H.ERR_HOP_REQUEST_FAILED);let f=Rg({stream:c.unwrap(),remoteAddr:o,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`)});return pr("new outbound transient connection %a",f.remoteAddr),await this.upgrader.upgradeOutbound(f,{transient:!0})}catch(c){throw pr.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return fA({connectionManager:this.connectionManager,relayStore:this.reservationStore})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Xn.matches(t))}async onStop({connection:e,stream:t}){let n=AbortSignal.timeout(this.stopTimeout),s=jt(t).pb(Jn),i=await s.read({signal:n});if(pr("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){pr.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==Jn.Type.CONNECT){pr.error("invalid stop connect request via peer %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!o$(i)){pr.error("invalid stop connect request via peer %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let o=dt(i.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,o)===!0){pr.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.PERMISSION_DENIED},{signal:n}),await t.close();return}pr.trace("sending success response to %p",e.remotePeer),await s.write({type:Jn.Type.STATUS,status:Ft.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${o.toString()}`),c=this.addressManager.getAddresses()[0],l=Rg({stream:s.unwrap().unwrap(),remoteAddr:a,localAddr:c});pr("new inbound transient connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:!0}),pr("%s connection %a upgraded","inbound",l.remoteAddr)}};function Cg(r={}){return e=>new Dg(e,r)}var hA=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},a$=new WeakMap;function c$({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:s}={})=>{if(s?.aborted)return Promise.reject(hA());let i,o,a,c=r??clearTimeout,l=()=>{c(i),a(hA())},u=()=>{s&&s.removeEventListener("abort",l)},f=new Promise((h,d)=>{o=()=>{u(),h(n)},a=d,i=(e??setTimeout)(o,t)});return s&&s.addEventListener("abort",l,{once:!0}),a$.set(f,()=>{c(i),i=null,o()}),f}}var l$=c$(),dA=l$;var es;(function(r){let e;(function(s){s.UNUSED="UNUSED",s.CONNECT="CONNECT",s.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(s){s[s.UNUSED=0]="UNUSED",s[s.CONNECT=100]="CONNECT",s[s.SYNC=300]="SYNC"})(t||(t={})),function(s){s.codec=()=>ut(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ue((s,i,o={})=>{if(o.lengthDelimited!==!1&&i.fork(),s.type!=null&&(i.uint32(8),r.Type.codec().encode(s.type,i)),s.observedAddresses!=null)for(let a of s.observedAddresses)i.uint32(18),i.bytes(a);o.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let o={observedAddresses:[]},a=i==null?s.len:s.pos+i;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:o.type=r.Type.codec().decode(s);break;case 2:o.observedAddresses.push(s.bytes());break;default:s.skipType(c&7);break}}return o})),n),r.encode=s=>le(s,r.codec()),r.decode=s=>ce(s,r.codec())})(es||(es={}));var pt=C("libp2p:dcutr"),pA=1024*4,mA=100,e1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},t1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;constructor(e,t){this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??e1.timeout,this.retries=t.retries??e1.retries,this.maxInboundStreams=t.maxInboundStreams??e1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??e1.maxOutboundStreams}isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Tu,{onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{pt.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Tu,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{pt.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Tu),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let s={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Tu],{signal:s.signal,runOnTransientConnection:!0});let i=jt(t,{maxDataLength:pA}).pb(es);pt("B sending connect to %p",e.remotePeer);let o=Date.now();await i.write({type:es.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(f=>f.bytes)},s),pt("B receiving connect from %p",e.remotePeer);let a=await i.read(s);if(a.type!==es.Type.CONNECT)throw pt("A sent wrong message type"),new b("DCUtR message type was incorrect",H.ERR_INVALID_MESSAGE);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw pt("A did not have any dialable multiaddrs"),new b("DCUtR connect message had no multiaddrs",H.ERR_INVALID_MESSAGE);let l=Date.now()-o;pt("A sending sync, rtt %dms",l),await i.write({type:es.Type.SYNC,observedAddresses:[]},s),pt("A waiting for half RTT"),await dA(l/2),pt("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:s.signal,priority:mA});pt("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(s);break}catch(i){if(pt.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(s)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(s=>{let i=s.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(s=>this.isPublicAndDialable(s));if(n.length>0){let s=AbortSignal.timeout(this.timeout);try{pt("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:s,force:!0});if(i.transient)throw new Error("Could not open a new, non-transient, connection");return pt("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:s}),!0}catch(i){pt.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else pt("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let s=jt(e,{maxDataLength:pA}).pb(es);pt("A receiving connect");let i=await s.read(n);if(i.type!==es.Type.CONNECT)throw pt("B sent wrong message type"),new b("DCUtR message type was incorrect",H.ERR_INVALID_MESSAGE);if(i.observedAddresses.length===0)throw pt("B sent no multiaddrs"),new b("DCUtR connect message had no multiaddrs",H.ERR_INVALID_MESSAGE);let o=this.getDialableMultiaddrs(i.observedAddresses);if(o.length===0)throw pt("B had no dialable multiaddrs"),new b("DCUtR connect message had no dialable multiaddrs",H.ERR_INVALID_MESSAGE);if(pt("A sending connect"),await s.write({type:es.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),pt("A receiving sync"),(await s.read(n)).type!==es.Type.SYNC)throw new b("DCUtR message type was incorrect",H.ERR_INVALID_MESSAGE);pt("A dialing",o);let c=await this.connectionManager.openConnection(o,{signal:n.signal,priority:mA,force:!0});pt("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(s){pt.error("incoming DCUtR from %p failed",t.remotePeer,s),e.abort(s)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let s=oe(n);if(!this.isPublicAndDialable(s))continue;t.push(s)}catch{}return t}isPublicAndDialable(e){if(Vl.matches(e))return!1;if(Yw.matches(e))return!0;if(!Zw.matches(e)||this.transportManager.transportForMultiaddr(e)==null)return!1;let n=e.toOptions();return Or(n.host)===!1}};var Tu="/libp2p/dcutr";function gA(r={}){return e=>new t1(e,r)}var yA="0.46.14";var Pg=`js-libp2p/${yA}`;var bA="0.1.0",wA="id",EA="id/push",xA="1.0.0",vA="1.0.0";var Ng=re(Cr(),1);var Gi;(function(r){let e;r.codec=()=>(e==null&&(e=ue((t,n,s={})=>{if(s.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let o=t.uint32();switch(o>>>3){case 5:s.protocolVersion=t.string();break;case 6:s.agentVersion=t.string();break;case 1:s.publicKey=t.bytes();break;case 2:s.listenAddrs.push(t.bytes());break;case 4:s.observedAddr=t.bytes();break;case 3:s.protocols.push(t.string());break;case 8:s.signedPeerRecord=t.bytes();break;default:t.skipType(o&7);break}}return s})),e),r.encode=t=>le(t,r.codec()),r.decode=t=>ce(t,r.codec())})(Gi||(Gi={}));var mr=C("libp2p:identify"),kg=1024*8,an={protocolPrefix:"ipfs",agentVersion:Pg,timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192,runOnConnectionOpen:!0,runOnTransientConnection:!0},r1=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;runOnTransientConnection;constructor(e,t){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.identifyProtocolStr=`/${t.protocolPrefix??an.protocolPrefix}/${wA}/${xA}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??an.protocolPrefix}/${EA}/${vA}`,this.timeout=t.timeout??an.timeout,this.maxInboundStreams=t.maxInboundStreams??an.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??an.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??an.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??an.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??an.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??an.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??an.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??an.protocolPrefix}/${bA}`,agentVersion:t.agentVersion??an.agentVersion},(t.runOnConnectionOpen??an.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let s=n.detail;this.identify(s).catch(i=>{mr.error("error during identify trigged by connection:open",i)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(s=>{mr.error(s)})}),this.host.agentVersion===Pg&&(AI||RI?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(Hd||Wd||II||TI)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:Q(this.host.agentVersion),ProtocolVersion:Q(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{mr.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{mr.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(u=>u.decapsulateCode(me("p2p").code)),n=new jr({peerId:this.peerId,multiaddrs:t}),s=await wn.seal(n,this.peerId),i=this.registrar.getProtocols(),o=await this.peerStore.get(this.peerId),a=W(o.metadata.get("AgentVersion")??Q(this.host.agentVersion)),c=W(o.metadata.get("ProtocolVersion")??Q(this.host.protocolVersion)),l=e.map(async u=>{let f,h=AbortSignal.timeout(this.timeout);try{(0,Ng.setMaxListeners)?.(1/0,h)}catch{}try{f=await u.newStream([this.identifyPushProtocolStr],{signal:h,runOnTransientConnection:this.runOnTransientConnection}),await jt(f,{maxDataLength:this.maxIdentifyMessageSize??kg}).pb(Gi).write({listenAddrs:t.map(p=>p.bytes),signedPeerRecord:s.marshal(),protocols:i,agentVersion:a,protocolVersion:c},{signal:h}),await f.close({signal:h})}catch(d){mr.error("could not push identify update to peer",d),f?.abort(d)}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==H.ERR_NOT_FOUND)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n;t.signal=t.signal??AbortSignal.timeout(this.timeout);try{n=await e.newStream([this.identifyProtocolStr],{...t,runOnTransientConnection:this.runOnTransientConnection});let i=await jt(n,{maxDataLength:this.maxIdentifyMessageSize??kg}).pb(Gi).read(t);return await n.close(t),i}catch(s){throw mr.error("error while reading identify message",s),n?.abort(s),s}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:s,protocols:i,observedAddr:o}=n;if(s==null)throw new b("public key was missing from identify message",H.ERR_MISSING_PUBLIC_KEY);let a=await ur(s);if(!e.remotePeer.equals(a))throw new b("identified peer does not match the expected peer",H.ERR_INVALID_PEER);if(this.peerId.equals(a))throw new b("identified peer is our own peer id?",H.ERR_INVALID_PEER);let c=u$(o);mr("identify completed for peer %p and protocols %o",a,i),mr("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(mr("storing our observed address %a",c),this.addressManager.addObservedAddr(c));let l=await this.#e(e.remotePeer,n),u={peerId:a,protocolVersion:n.protocolVersion,agentVersion:n.agentVersion,publicKey:n.publicKey,listenAddrs:n.listenAddrs.map(f=>oe(f)),observedAddr:n.observedAddr==null?void 0:oe(n.observedAddr),protocols:n.protocols,signedPeerRecord:l};return this.events.safeDispatchEvent("peer:identify",{detail:u}),u}async _handleIdentify(e){let{connection:t,stream:n}=e,s=AbortSignal.timeout(this.timeout);try{(0,Ng.setMaxListeners)?.(1/0,s)}catch{}try{let i=this.peerId.publicKey??new Uint8Array(0),o=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(me("p2p").code)),c=o.peerRecordEnvelope;if(a.length>0&&c==null){let u=new jr({peerId:this.peerId,multiaddrs:a});c=(await wn.seal(u,this.peerId)).marshal().subarray()}await jt(n).pb(Gi).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:i,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:t.remoteAddr.bytes,protocols:o.protocols},{signal:s}),await n.close({signal:s})}catch(i){mr.error("could not respond to identify request",i),n.abort(i)}}async _handlePush(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let s={signal:AbortSignal.timeout(this.timeout)},o=await jt(n,{maxDataLength:this.maxIdentifyMessageSize??kg}).pb(Gi).read(s);await n.close(s),await this.#e(t.remotePeer,o)}catch(s){mr.error("received invalid message",s),n.abort(s);return}mr("handled push from %p",t.remotePeer)}async#e(e,t){if(mr("received identify from %p",e),t==null)throw new Error("Message was null or undefined");let n={addresses:t.listenAddrs.map(i=>({isCertified:!1,multiaddr:oe(i)})),protocols:t.protocols,metadata:new Map,peerRecordEnvelope:t.signedPeerRecord},s;if(t.signedPeerRecord!=null){mr("received signedPeerRecord in push from %p",e);let i=t.signedPeerRecord,o=await wn.openAndCertify(i,jr.DOMAIN),a=jr.createFromProtobuf(o.payload);if(!a.peerId.equals(o.peerId))throw new Error("signing key does not match PeerId in the PeerRecord");if(!e.equals(a.peerId))throw new Error("signing key does not match remote PeerId");let c;try{c=await this.peerStore.get(a.peerId)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null&&(n.metadata=c.metadata,c.peerRecordEnvelope!=null)){let l=await wn.createFromProtobuf(c.peerRecordEnvelope),u=jr.createFromProtobuf(l.payload);u.seqNumber>=a.seqNumber&&(mr("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,a.seqNumber),a=u,i=c.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=a.multiaddrs.map(l=>({isCertified:!0,multiaddr:l})),s={seq:a.seqNumber,addresses:a.multiaddrs}}else mr("%p did not send a signed peer record",e);return t.agentVersion!=null&&n.metadata.set("AgentVersion",Q(t.agentVersion)),t.protocolVersion!=null&&n.metadata.set("ProtocolVersion",Q(t.protocolVersion)),await this.peerStore.patch(e,n),s}};function u$(r){if(r!=null&&r.length>0)try{return oe(r)}catch{}}function _A(r={}){return e=>new r1(e,r)}var SA="1.0.0",RA="ping",IA="ipfs";var Pc=C("libp2p:ping"),Og=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;constructor(e,t){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??IA}/${RA}/${SA}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){Pc("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now();Ae(t,t).catch(s=>{Pc.error("incoming ping from %p failed with error",e.connection.remotePeer,s)}).finally(()=>{let s=Date.now()-n;Pc("incoming ping from %p complete in %dms",e.connection.remotePeer,s)})}async ping(e,t={}){Pc("pinging %p",e);let n=Date.now(),s=kr(32),i=await this.components.connectionManager.openConnection(e,t),o,a=()=>{};t.signal=t.signal??AbortSignal.timeout(this.timeout);try{o=await i.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{o?.abort(new b("ping timeout",H.ERR_TIMEOUT))},t.signal.addEventListener("abort",a,{once:!0});let c=await Ae([s],o,async u=>Yn(u)),l=Date.now()-n;if(c==null)throw new b(`Did not receive a ping ack after ${l}ms`,H.ERR_WRONG_PING_ACK);if(!de(s,c.subarray()))throw new b(`Received wrong ping ack after ${l}ms`,H.ERR_WRONG_PING_ACK);return Pc("ping %p complete in %dms",i.remotePeer,l),l}catch(c){throw Pc.error("error while pinging %p",i.remotePeer,c),o?.abort(c),c}finally{t.signal.removeEventListener("abort",a),o!=null&&await o.close()}}};function AA(r={}){return e=>new Og(e,r)}var TA={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function DA(){return{addresses:{listen:["/webrtc"]},transports:[Cg({discoverRelays:1}),ZR(),jR(),UI(),LI()],connectionEncryption:[ac()],streamMuxers:[jv(),iS()],peerDiscovery:[l_(TA)],contentRouters:[g_("https://cid.contact")],services:{identify:_A(),autoNAT:nA(),pubsub:lv(),dcutr:gA(),dht:Y_({clientMode:!0,validators:{ipns:JI},selectors:{ipns:ZI}}),ping:AA()}}}async function CA(r,e){let t=DA();return e=e??{},_x({datastore:r,...t,...e,start:!1})}var PA="2.0.3-7ef5e79",kA="helia";var m$=C("helia"),g$=["https://dweb.link","https://cf-ipfs.com","https://4everland.io","https://w3s.link","https://cloudflare-ipfs.com"];async function y$(r={}){let e=r.datastore??new Zi,t=r.blockstore??new Mc,n;b$(r.libp2p)?n=r.libp2p:n=await CA(e,r.libp2p);let s=d7(r.hashers),i=r.blockBrokers??[new Wc(n,t,s),new Gc(g$)],o=new U0({...r,datastore:e,blockstore:t,libp2p:n,blockBrokers:i,hashers:s});return r.start!==!1&&await o.start(),w$(o),o}function b$(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}function w$(r){try{if(r.libp2p.services.identify.host.agentVersion.match(/js-libp2p\/\d+\.\d+\.\d+\sUserAgent=/)==null)return;r.libp2p.services.identify.host.agentVersion=`${kA}/${PA} ${r.libp2p.services.identify.host.agentVersion}`}catch(e){m$.error("could not add Helia to agent version",e)}}return Cu(E$);})();
|
|
86
86
|
/*! Bundled license information:
|
|
87
87
|
|
|
88
88
|
@noble/hashes/esm/utils.js:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p-defaults.d.ts","sourceRoot":"","sources":["../../../src/utils/libp2p-defaults.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAU,MAAM,iBAAiB,CAAA;AASzD,OAAO,EAA6C,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1G,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAG3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAE3C,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,UAAU,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,eAAe,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,wBAAgB,cAAc,IAAK,aAAa,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"libp2p-defaults.d.ts","sourceRoot":"","sources":["../../../src/utils/libp2p-defaults.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAU,MAAM,iBAAiB,CAAA;AASzD,OAAO,EAA6C,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1G,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAG3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAE3C,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,UAAU,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,eAAe,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,wBAAgB,cAAc,IAAK,aAAa,CAAC,qBAAqB,CAAC,CAoDtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p-defaults.js","sourceRoot":"","sources":["../../../src/utils/libp2p-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAmB,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAA;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAwB,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAepD,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,SAAS,EAAE;YACT,MAAM,EAAE;gBACN,oBAAoB;gBACpB,SAAS;aACV;SACF;QACD,UAAU,EAAE;YACV,qBAAqB,CAAC;gBACpB,cAAc,EAAE,CAAC;aAClB,CAAC;YACF,GAAG,EAAE;YACL,MAAM,EAAE;YACR,YAAY,EAAE;YACd,UAAU,EAAE;SACb;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE;SACR;QACD,YAAY,EAAE;YACZ,KAAK,EAAE;YACP,KAAK,EAAE;SACR;QACD,aAAa,EAAE;YACb,IAAI,EAAE;YACN,SAAS,CAAC,eAAe,CAAC;SAC3B;QACD,cAAc,EAAE;YACd,kBAAkB,CAAC,qBAAqB,CAAC;SAC1C;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,eAAe,EAAE;YAC3B,OAAO,EAAE,cAAc,EAAE;YACzB,IAAI,EAAE,cAAc,EAAE;YACtB,MAAM,EAAE,SAAS,EAAE;YACnB,KAAK,EAAE,YAAY,EAAE;YACrB,GAAG,EAAE,MAAM,CAAC;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,aAAa;iBACpB;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,YAAY;iBACnB;aACF,CAAC;YACF,KAAK,EAAE,kBAAkB,CAAC;gBACxB,SAAS,EAAE,IAAI;aAChB,CAAC;YACF,IAAI,EAAE,WAAW,EAAE;SACpB;KACF,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"libp2p-defaults.js","sourceRoot":"","sources":["../../../src/utils/libp2p-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAmB,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAA;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAwB,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAepD,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,SAAS,EAAE;YACT,MAAM,EAAE;gBACN,oBAAoB;gBACpB,eAAe;gBACf,SAAS;aACV;SACF;QACD,UAAU,EAAE;YACV,qBAAqB,CAAC;gBACpB,cAAc,EAAE,CAAC;aAClB,CAAC;YACF,GAAG,EAAE;YACL,MAAM,EAAE;YACR,YAAY,EAAE;YACd,UAAU,EAAE;SACb;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE;SACR;QACD,YAAY,EAAE;YACZ,KAAK,EAAE;YACP,KAAK,EAAE;SACR;QACD,aAAa,EAAE;YACb,IAAI,EAAE;YACN,SAAS,CAAC,eAAe,CAAC;SAC3B;QACD,cAAc,EAAE;YACd,kBAAkB,CAAC,qBAAqB,CAAC;SAC1C;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,eAAe,EAAE;YAC3B,OAAO,EAAE,cAAc,EAAE;YACzB,IAAI,EAAE,cAAc,EAAE;YACtB,MAAM,EAAE,SAAS,EAAE;YACnB,KAAK,EAAE,YAAY,EAAE;YACrB,GAAG,EAAE,MAAM,CAAC;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,aAAa;iBACpB;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,YAAY;iBACnB;aACF,CAAC;YACF,KAAK,EAAE,kBAAkB,CAAC;gBACxB,SAAS,EAAE,IAAI;aAChB,CAAC;YACF,IAAI,EAAE,WAAW,EAAE;SACpB;KACF,CAAA;AACH,CAAC"}
|
package/dist/src/version.d.ts
CHANGED
package/dist/src/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "helia",
|
|
3
|
-
"version": "2.0.3-
|
|
3
|
+
"version": "2.0.3-7ef5e79",
|
|
4
4
|
"description": "An implementation of IPFS in JavaScript",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia/tree/master/packages/helia#readme",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"@chainsafe/libp2p-gossipsub": "^10.0.0",
|
|
78
78
|
"@chainsafe/libp2p-noise": "^13.0.0",
|
|
79
79
|
"@chainsafe/libp2p-yamux": "^5.0.0",
|
|
80
|
-
"@helia/interface": "2.0.0-
|
|
80
|
+
"@helia/interface": "2.0.0-7ef5e79",
|
|
81
81
|
"@ipld/dag-cbor": "^9.0.0",
|
|
82
82
|
"@ipld/dag-json": "^10.0.1",
|
|
83
83
|
"@ipld/dag-pb": "^4.0.3",
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '2.0.3-
|
|
1
|
+
export const version = '2.0.3-7ef5e79'
|
|
2
2
|
export const name = 'helia'
|