helia 3.0.1-5c6a066 → 3.0.1-ece384a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -66,7 +66,7 @@ a=ice-ufrag:`+e+`
66
66
  `).replace(/\na=ice-pwd:[^\n]*\n/,`
67
67
  a=ice-pwd:`+e+`
68
68
  `),r}var eK=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),tK=r=>[...Array(r)].map(()=>eK.at(Math.floor(Math.random()*eK.length))).join("");var Wie=1e4,SUe=xe("webrtc-direct").code,ZM=xe("certhash").code,bg=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),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 this.log("dialing address: %a",e),n}createListener(e){throw dO("WebRTCTransport.createListener")}filter(e){return e.filter(GB.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[qs]=!0;async _connect(e,t){let n=new AbortController,s=n.signal,o=e.getPeerId();if(o===null)throw Jy("we need to have the remote's PeerId");let i=Me(o),a=pE(gg(e)),c=await Af.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:mE(a.name)}),l=new Af({certificates:[c]});try{let u=new Promise((_,C)=>{let M=l.createDataChannel("",{negotiated:!0,id:0}),O=setTimeout(()=>{let F=`Data channel was never opened: state: ${M.readyState}`;this.log.error(F),this.metrics?.dialerEvents.increment({open_error:!0}),C(B7("data",F))},Wie);M.onopen=F=>{clearTimeout(O),_(M)},M.onerror=F=>{clearTimeout(O);let ce=`Error opening a data channel for handshaking: ${F.target?.toString()??"not specified"}`;this.log.error(ce),this.metrics?.dialerEvents.increment({unknown_error:!0}),C(B7("data",ce))}}),f="libp2p+webrtc+v1/"+tK(32),h=await l.createOffer(),p=JM(h,f);await l.setLocalDescription(p);let d=XM(e,f);await l.setRemoteDescription(d);let m=await u,y=this.components.peerId,b=this.generateNoisePrologue(l,a.code,e),w=Au({prologueBytes:b})(this.components),E=_f({channel:m,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),x={...E,sink:E.sink.bind(E),source:async function*(){for await(let _ of E.source)for(let C of _)yield C}()},v=new il(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),S=Rp?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(S,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":v.close().catch(_=>{this.log.error("error closing connection",_)}).finally(()=>{n.abort()});break;default:break}},{signal:s}),this.metrics?.dialerEvents.increment({peer_connection:!0});let A=new al(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await w.secureInbound(y,x,i),await t.upgrader.upgradeOutbound(v,{skipProtection:!0,skipEncryption:!0,muxerFactory:A})}catch(u){throw l.close(),u}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw Ap("no local certificate");let s=QM(e,{log:this.log});if(s==null)throw Ap("no local fingerprint found");let o=s.trim().toLowerCase().replaceAll(":",""),i=R(o,"hex"),a=rK.encode(i,t),c=dE.decode(gg(n)),l=R("libp2p-webrtc-noise:");return be([l,a,c])}};function nK(r){return e=>new bg(e,r)}function sK(r){return e=>new og(e,r)}function oK(r){let e;try{e=xe("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function iK(r){return r.some(([e,t])=>e===xe("tls").code)}function Pn(r,e,t){let n=aK[xe(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${xe(r).name}`);let s=n(e,t);return r===xe("ip6").code?`[${s}]`:s}var aK={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://${Pn(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://${Pn(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`${Pn(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`${Pn(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=iK(e),n=oK(e);if(t&&n!==null)return`https://${n}`;let s=t?"https://":"http://",o=e.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let i=Pn(o[0],o[1]??"",e);return i=i.replace("tcp://",""),`${s}${i}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Pn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Pn(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=Pn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=iK(e),n=oK(e);if(t&&n!==null)return`wss://${n}`;let s=t?"wss://":"ws://",o=e.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let i=Pn(o[0],o[1]??"",e);return i=i.replace("tcp://",""),`${s}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Pn(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`${Pn(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`${Pn(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`${Pn(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function cK(r,e){let n=pe(r).stringTuples(),s=n.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let o=xe(s[0]),i=aK[o.name];if(i==null)throw new Error(`No interpreter found for ${o.name}`);let a=i(s[1]??"",n);return e?.assumeHttp!==!1&&s[0]===xe("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 lK=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",o)}function s(){n(),e()}function o(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",s),r.addEventListener("error",o)})};var uK=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let s of n){try{await lK(r)}catch(o){if(o.message==="socket closed")break;throw o}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(s)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((s,o)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)s();else{let a=Object.assign(new Error("ws error"),{event:i});o(a)}}),setTimeout(()=>{r.close()})})});var pK=ue(hK(),1);function dK(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var mK=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((o,i)=>{if(n){o();return}if(s!=null){i(s);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(o)},l=u=>{a(()=>{i(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let o=new pK.EventIterator(({push:i,stop:a,fail:c})=>{let l=f=>{let h=null;typeof f.data=="string"&&(h=R(f.data)),dK(f.data)&&(h=new Uint8Array(f.data)),f.data instanceof Uint8Array&&(h=f.data),h!=null&&i(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 i of o)yield dK(i)?new Uint8Array(i):i}(),n=r.readyState===1,s;return r.addEventListener("open",()=>{n=!0,s=null}),r.addEventListener("close",()=>{n=!1,s=null}),r.addEventListener("error",o=>{n||(s=o.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var yK=(r,e)=>{e=e??{};let t=mK(r),n=e.remoteAddress,s=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,s=parseInt(i.port,10)}catch{}if(n==null||s==null)throw new Error("Remote connection did not have address and/or port");return{sink:uK(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:s,socket:r}};var gK=WebSocket;var jie={"http:":"ws:","https:":"wss:"},bK="ws:",wK=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??bK}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??bK,s=e.host,o=e.port!=null&&s?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${s}${o}${r}`}let t=new URL(r);for(let[n,s]of Object.entries(jie))t.protocol===n&&(t.protocol=s);return t};function EK(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=wK(r,t),s=new gK(n.toString(),e.websocket);return yK(s,e)}function vK(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return ef.matches(t)||zc.matches(t)})}function xK(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return zc.matches(t)})}function SK(){throw new Error("WebSocket Servers can not be created in the browser!")}function _K(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),s={log:n,async sink(o){try{await r.sink(async function*(){for await(let i of o)i instanceof Uint8Array?yield i:yield i.subarray()}())}catch(i){i.type!=="aborted"&&n.error(i)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(o={}){let i=Date.now();if(o.signal==null){let c=AbortSignal.timeout(500);o={...o,signal:c}}let a=()=>{let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",c,l,Date.now()-i),this.abort(new g("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};o.signal?.addEventListener("abort",a);try{await r.close()}catch(c){n.error("error closing WebSocket gracefully",c),this.abort(c)}finally{o.signal?.removeEventListener("abort",a),s.timeline.close=Date.now()}},abort(o){let{host:i,port:a}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",i,a,o),r.destroy(),s.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var bE=class{log;init;logger;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.init=t}[Symbol.toStringTag]="@libp2p/websockets";[qs]=!0;async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),s=_K(n,e,{logger:this.logger});this.log("new outbound connection %s",s.remoteAddr);let o=await t.upgrader.upgradeOutbound(s);return this.log("outbound connection %s upgraded",s.remoteAddr),o}async _connect(e,t){if(t?.signal?.aborted===!0)throw new us;let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let s=Ae(),o=EK(cK(e),this.init);if(o.socket.addEventListener("error",()=>{let c=new g(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",c),s.reject(c)}),t.signal==null)return await Promise.race([o.connected(),s.promise]),this.log("connected %s",e),o;let i,a=new Promise((c,l)=>{if(i=()=>{l(new us),o.close().catch(u=>{this.log.error("error closing raw socket",u)})},t?.signal?.aborted===!0){i();return}t?.signal?.addEventListener("abort",i)});try{await Promise.race([a,s.promise,o.connected()])}finally{i!=null&&t?.signal?.removeEventListener("abort",i)}return this.log("connected %s",e),o}createListener(e){return SK({logger:this.logger},{...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):ly||uy?xK(e):vK(e)}};function AK(r={}){return e=>new bE(e,r)}async function wE(r,e,t,n,s,o){let i=o.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=r.writable.getWriter(),c=r.readable.getReader();await a.ready;function l(){let d=n.findIndex(m=>m===p);d!==-1&&(n.splice(d,1),p.timeline.close=Date.now(),s?.(p))}let u=!1,f=!1;(async function(){let d=await a.closed.catch(m=>m);if(d!=null){let m=d.message;m.includes("aborted by the remote server")||m.includes("STOP_SENDING")||i.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${d.message}`)}u=!0,u&&f&&l()})().catch(()=>{i.error("WebTransport failed to cleanup closed stream")}),async function(){let d=await c.closed.catch(m=>m);d!=null&&i.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${d.message}`),f=!0,u&&f&&l()}().catch(()=>{i.error("WebTransport failed to cleanup closed stream")});let h=!1,p={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(d){u||(a.abort(d).catch(m=>{i.error("could not abort stream",m)}),u=!0),f=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),l()},async close(d){this.status="closing",await Promise.all([p.closeRead(d),p.closeWrite(d)]),l(),this.status="closed",this.timeline.close=Date.now()},async closeRead(d){if(!f){this.readStatus="closing";try{await c.cancel()}catch(m){m.toString().includes("RESET_STREAM")===!0&&(u=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",f=!0}u&&l()},async closeWrite(d){if(!u){u=!0,this.writeStatus="closing";try{await a.close()}catch(m){m.toString().includes("RESET_STREAM")===!0&&(f=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}f&&l()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let d=await c.read();if(d.done){f=!0,u&&l();return}yield new Pe(d.value)}}(),sink:async function(d){if(h)throw new Error("sink already called on stream");h=!0;try{this.writeStatus="writing";for await(let m of d)if(m instanceof Uint8Array)await a.write(m);else for(let y of m)await a.write(y);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await p.closeWrite()}},log:i};return p}function EE(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function RK(r,e){return e.filter(n=>!!r.find(s=>V(n,s))).length===e.length}var Zie=Object.values(Nn).map(r=>r.decoder).reduce((r,e)=>r.or(e));function eae(r){return os.decode(Zie.decode(r))}function IK(r){if(!oy.matches(r))throw new g("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===xe("certhash").code).map(([i,a])=>eae(a??"")),n=e.filter(([i,a])=>i===xe("p2p").code).map(([i,a])=>Me(a??""))[0],s=r.toOptions(),o=s.host;return s.family===6&&o?.includes(":")&&(o=`[${o}]`),{url:`https://${o}:${s.port}`,certhashes:t,remotePeer:n}}var vE=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),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";[qs]=!0;async dial(e,t){t?.signal?.throwIfAborted(),this.log("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:o,remotePeer:i}=IK(e);if(i==null)throw new Error("Need a target peerid");if(o.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 p=new WebTransport(`${s}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:o.map(d=>({algorithm:"sha-256",value:d.digest}))});if(l=d=>{if(!u)try{this.metrics?.dialerEvents.increment({[d]:!0}),p.close()}catch(m){this.log.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([p.closed,p.ready]),f=!0,this.metrics?.dialerEvents.increment({ready:!0}),p.closed.catch(d=>{this.log.error("error on remote wt session close",d)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(p,n,i,o))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("Closing webtransport"),l("close")},abort:d=>{this.log("aborting webtransport due to passed err",d),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...EE()},h=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(p),skipProtection:!0})}catch(p){throw this.log.error("caught wt session err",p),l(h?"upgrade_error":f?"noise_error":"ready_error"),p}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,s){let o=await e.createBidirectionalStream(),i=o.writable.getWriter(),a=o.readable.getReader();await i.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)h instanceof Uint8Array?await i.write(h):await i.write(h.subarray())}},l=Au()(this.components),{remoteExtensions:u}=await l.secureOutbound(t,c,n);if(i.close().catch(f=>{this.log.error(`Failed to close authentication stream writer: ${f.message}`)}),a.cancel().catch(f=>{this.log.error(`Failed to close authentication stream reader: ${f.message}`)}),!RK(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,s=this;return{protocol:"webtransport",createStreamMuxer:o=>{typeof o=="function"&&(o={onIncomingStream:o});let i=[];return async function(){let c=e.incomingBidirectionalStreams.getReader();for(;;){let{done:l,value:u}=await c.read();if(l)break;if(i.length>=n.maxInboundStreams)u.writable.close().catch(f=>{s.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${f.message}`)}),u.readable.cancel().catch(f=>{s.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${f.message}`)});else{let f=await wE(u,String(t++),"inbound",i,o?.onStreamEnd,s.components.logger);i.push(f),o?.onIncomingStream?.(f)}}}().catch(()=>{this.log.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async c=>{let l=await e.createBidirectionalStream(),u=await wE(l,String(t++),o?.direction??"outbound",i,o?.onStreamEnd,s.components.logger);return i.push(u),u},close:async c=>{this.log("Closing webtransport muxer"),await Promise.all(i.map(async l=>l.close(c)))},abort:c=>{this.log("Aborting webtransport muxer with err:",c);for(let l of i)l.abort(c)},...EE()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(oy.exactMatch)}};function TK(r={}){return e=>new vE(e,r)}var _E={};$(_E,{Ed25519PrivateKey:()=>ul,Ed25519PublicKey:()=>Lp,generateKeyPair:()=>oae,generateKeyPairFromSeed:()=>LK,unmarshalEd25519PrivateKey:()=>nae,unmarshalEd25519PublicKey:()=>sae});function rs(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Lf=32,Di=64,vg=32;function kK(){let r=_e.utils.randomPrivateKey(),e=_e.getPublicKey(r);return{privateKey:BK(r,e),publicKey:e}}function DK(r){if(r.length!==vg)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=_e.getPublicKey(e);return{privateKey:BK(e,t),publicKey:t}}function CK(r,e){let t=r.subarray(0,vg);return _e.sign(e instanceof Uint8Array?e:e.subarray(),t)}function PK(r,e,t){return _e.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function BK(r,e){let t=new Uint8Array(Di);for(let n=0;n<vg;n++)t[n]=r[n],t[vg+n]=e[n];return t}var Jr={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var xE={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function NK(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,s=r?.digest??"SHA-256",o=r?.saltLength??16,i=r?.iterations??32767,a=Jr.get();t*=8;async function c(f,h){let p=a.getRandomValues(new Uint8Array(o)),d=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:d};typeof h=="string"&&(h=R(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",xE,{name:"AES-GCM"},!0,["encrypt"]);try{let w={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",xE,{name:"AES-GCM"},!0,["encrypt"])}}else{let w={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,E,{name:e,length:t},!0,["encrypt"])}let b=await a.subtle.encrypt(m,y,f);return be([p,m.iv,new Uint8Array(b)])}async function l(f,h){let p=f.subarray(0,o),d=f.subarray(o,o+n),m=f.subarray(o+n),y={name:e,iv:d};typeof h=="string"&&(h=R(h));let b;if(h.length===0)try{let E={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}catch{b=await a.subtle.importKey("jwk",xE,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}let w=await a.subtle.decrypt(y,b,m);return new Uint8Array(w)}return{encrypt:c,decrypt:l}}async function Of(r,e){let n=await NK().encrypt(r,e);return dt.encode(n)}var Jt;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Jt||(Jt={}));var SE;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(SE||(SE={}));(function(r){r.codec=()=>Oe(SE)})(Jt||(Jt={}));var To;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Jt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.Type=Jt.codec().decode(t);break;case 2:s.Data=t.bytes();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(To||(To={}));var Ci;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Jt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.Type=Jt.codec().decode(t);break;case 2:s.Data=t.bytes();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ci||(Ci={}));var Lp=class{_key;constructor(e){this._key=Mf(e,Lf)}verify(e,t){return PK(this._key,t,e)}marshal(){return this._key}get bytes(){return To.encode({Type:Jt.Ed25519,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}},ul=class{_key;_publicKey;constructor(e,t){this._key=Mf(e,Di),this._publicKey=Mf(t,Lf)}sign(e){return CK(this._key,e)}get public(){return new Lp(this._publicKey)}marshal(){return this._key}get bytes(){return Ci.encode({Type:Jt.Ed25519,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}async hash(){let e=q.digest(this.bytes),t;return rs(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=Ot.digest(this.public.bytes);return ye.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Of(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function nae(r){if(r.length>Di){r=Mf(r,Di+Lf);let n=r.subarray(0,Di),s=r.subarray(Di,r.length);return new ul(n,s)}r=Mf(r,Di);let e=r.subarray(0,Di),t=r.subarray(Lf);return new ul(e,t)}function sae(r){return r=Mf(r,Lf),new Lp(r)}async function oae(){let{privateKey:r,publicKey:e}=kK();return new ul(r,e)}async function LK(r){let{privateKey:e,publicKey:t}=DK(r);return new ul(e,t)}function Mf(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new g(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var kE={};$(kE,{MAX_RSA_KEY_SIZE:()=>Kp,RsaPrivateKey:()=>Kf,RsaPublicKey:()=>Mp,fromJwk:()=>gae,generateKeyPair:()=>bae,unmarshalRsaPrivateKey:()=>IE,unmarshalRsaPublicKey:()=>yae});function fl(r){if(isNaN(r)||r<=0)throw new g("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return Pt(r)}var $a={};$($a,{exportToPem:()=>fae,importFromPem:()=>hae,jwkToPkcs1:()=>aae,jwkToPkix:()=>lae,pkcs1ToJwk:()=>iae,pkixToJwk:()=>cae});function iae(r){let{result:e}=Ve(r),t=e.valueBlock.value;return{n:T(ko(t[1].toBigInt()),"base64url"),e:T(ko(t[2].toBigInt()),"base64url"),d:T(ko(t[3].toBigInt()),"base64url"),p:T(ko(t[4].toBigInt()),"base64url"),q:T(ko(t[5].toBigInt()),"base64url"),dp:T(ko(t[6].toBigInt()),"base64url"),dq:T(ko(t[7].toBigInt()),"base64url"),qi:T(ko(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function aae(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new X({value:[new W({value:0}),W.fromBigInt(Do(R(r.n,"base64url"))),W.fromBigInt(Do(R(r.e,"base64url"))),W.fromBigInt(Do(R(r.d,"base64url"))),W.fromBigInt(Do(R(r.p,"base64url"))),W.fromBigInt(Do(R(r.q,"base64url"))),W.fromBigInt(Do(R(r.dp,"base64url"))),W.fromBigInt(Do(R(r.dq,"base64url"))),W.fromBigInt(Do(R(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function cae(r){let{result:e}=Ve(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:T(ko(t[0].toBigInt()),"base64url"),e:T(ko(t[1].toBigInt()),"base64url")}}function lae(r){if(r.n==null||r.e==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new X({value:[new X({value:[new Re({value:"1.2.840.113549.1.1.1"}),new ut]}),new Kr({valueHex:new X({value:[W.fromBigInt(Do(R(r.n,"base64url"))),W.fromBigInt(Do(R(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function ko(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),s=0,o=0;for(;s<t;)n[s]=parseInt(e.slice(o,o+2),16),s+=1,o+=2;return n}function Do(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var uae=16,AE=32,RE=1e4;async function fae(r,e){let t=Jr.get(),s=new X({value:[new W({value:0}),new X({value:[new Re({value:"1.2.840.113549.1.1.1"}),new ut]}),new Ye({valueHex:r.marshal()})]}).toBER(),o=new Uint8Array(s,0,s.byteLength),i=fl(uae),a=await dr(Bt,e,i,{c:RE,dkLen:AE}),c=fl(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,o),f=new X({value:[new Ye({valueHex:i}),new W({value:RE}),new W({value:AE}),new X({value:[new Re({value:"1.2.840.113549.2.11"}),new ut]})]}),h=new X({value:[new Re({value:"1.2.840.113549.1.5.13"}),new X({value:[new X({value:[new Re({value:"1.2.840.113549.1.5.12"}),f]}),new X({value:[new Re({value:"2.16.840.1.101.3.4.1.42"}),new Ye({valueHex:c})]})]})]}),d=new X({value:[h,new Ye({valueHex:u})]}).toBER(),m=new Uint8Array(d,0,d.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...T(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
69
- `)}async function hae(r,e){let t=Jr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=R(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:o}=Ve(s),{iv:i,salt:a,iterations:c,keySize:l,cipherText:u}=dae(o),f=await dr(Bt,e,a,{c,dkLen:l}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Op(await t.subtle.decrypt({name:"AES-CBC",iv:i},h,u)),{result:d}=Ve(p);n=OK(d)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=R(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:o}=Ve(s);n=OK(o)}else throw new g("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return IE(n)}function dae(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new g("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new g("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let o=n.valueBlock.value[1],i=Op(o.valueBlock.value[0].getValue()),a=RE,c=AE;if(o.valueBlock.value.length===3)a=Number(o.valueBlock.value[1].toBigInt()),c=Number(o.valueBlock.value[2].toBigInt());else if(o.valueBlock.value.length===2)throw new g("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new g("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let f=Op(l.valueBlock.value[1].getValue());return{cipherText:Op(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:f}}function OK(r){return Op(r.valueBlock.value[2].getValue())}function Op(r){return new Uint8Array(r,0,r.byteLength)}async function MK(r){let e=await Jr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await FK(e);return{privateKey:t[0],publicKey:t[1]}}async function TE(r){let t=[await Jr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await pae(r)],n=await FK({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function KK(r,e){let t=await Jr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Jr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function UK(r,e,t){let n=await Jr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Jr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function FK(r){if(r.privateKey==null||r.publicKey==null)throw new g("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([Jr.get().subtle.exportKey("jwk",r.privateKey),Jr.get().subtle.exportKey("jwk",r.publicKey)])}async function pae(r){return Jr.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Sg(r){if(r.kty!=="RSA")throw new g("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new g("invalid key modulus","ERR_INVALID_KEY_MODULUS");return R(r.n,"base64url").length*8}var Kp=8192,Mp=class{_key;constructor(e){this._key=e}verify(e,t){return UK(this._key,t,e)}marshal(){return $a.jwkToPkix(this._key)}get bytes(){return To.encode({Type:Jt.RSA,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}},Kf=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return fl(16)}sign(e){return KK(this._key,e)}get public(){if(this._publicKey==null)throw new g("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new Mp(this._publicKey)}marshal(){return $a.jwkToPkcs1(this._key)}get bytes(){return Ci.encode({Type:Jt.RSA,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return T(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return $a.exportToPem(this,e);if(t==="libp2p-key")return Of(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function IE(r){let e=$a.pkcs1ToJwk(r);if(Sg(e)>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await TE(e);return new Kf(t.privateKey,t.publicKey)}function yae(r){let e=$a.pkixToJwk(r);if(Sg(e)>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new Mp(e)}async function gae(r){if(Sg(r)>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await TE(r);return new Kf(e.privateKey,e.publicKey)}async function bae(r){if(r>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await MK(r);return new Kf(e.privateKey,e.publicKey)}var CE={};$(CE,{Secp256k1PrivateKey:()=>Fp,Secp256k1PublicKey:()=>Up,generateKeyPair:()=>xae,unmarshalSecp256k1PrivateKey:()=>Eae,unmarshalSecp256k1PublicKey:()=>vae});function VK(){return Z.utils.randomPrivateKey()}function qK(r,e){let t=q.digest(e instanceof Uint8Array?e:e.subarray());if(rs(t))return t.then(({digest:n})=>Z.sign(n,r).toDERRawBytes()).catch(n=>{throw new g(String(n),"ERR_INVALID_INPUT")});try{return Z.sign(t.digest,r).toDERRawBytes()}catch(n){throw new g(String(n),"ERR_INVALID_INPUT")}}function HK(r,e,t){let n=q.digest(t instanceof Uint8Array?t:t.subarray());if(rs(n))return n.then(({digest:s})=>Z.verify(e,s,r)).catch(s=>{throw new g(String(s),"ERR_INVALID_INPUT")});try{return Z.verify(e,n.digest,r)}catch(s){throw new g(String(s),"ERR_INVALID_INPUT")}}function $K(r){return Z.ProjectivePoint.fromHex(r).toRawBytes(!0)}function zK(r){try{Z.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}function DE(r){try{Z.ProjectivePoint.fromHex(r)}catch(e){throw new g(String(e),"ERR_INVALID_PUBLIC_KEY")}}function GK(r){try{return Z.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}var Up=class{_key;constructor(e){DE(e),this._key=e}verify(e,t){return HK(this._key,t,e)}marshal(){return $K(this._key)}get bytes(){return To.encode({Type:Jt.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}async hash(){let e=q.digest(this.bytes),t;return rs(e)?{bytes:t}=await e:t=e.bytes,t}},Fp=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??GK(e),zK(this._key),DE(this._publicKey)}sign(e){return qK(this._key,e)}get public(){return new Up(this._publicKey)}marshal(){return this._key}get bytes(){return Ci.encode({Type:Jt.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return T(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Of(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Eae(r){return new Fp(r)}function vae(r){return new Up(r)}async function xae(){let r=VK();return new Fp(r)}var _g={rsa:kE,ed25519:_E,secp256k1:CE};function Sae(r){let e=Object.keys(_g).join(" / ");return new g(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function PE(r){let e=To.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Jt.RSA:return _g.rsa.unmarshalRsaPublicKey(t);case Jt.Ed25519:return _g.ed25519.unmarshalEd25519PublicKey(t);case Jt.Secp256k1:return _g.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw Sae(e.Type??"unknown")}}var dn=ue(Oo(),1);var eU=ue(bm(),1);var WK="ERR_IPNS_EXPIRED_RECORD",Ag="ERR_UNRECOGNIZED_VALIDITY";var Pi="ERR_SIGNATURE_VERIFICATION",YK="ERR_UNRECOGNIZED_FORMAT";var BE="ERR_UNDEFINED_PARAMETER",jK="ERR_INVALID_RECORD_DATA",QK="ERR_INVALID_VALUE",XK="ERR_INVALID_EMBEDDED_KEY";var JK="ERR_RECORD_TOO_LARGE";var Bi;(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=()=>Oe(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((s,o,i={})=>{i.lengthDelimited!==!1&&o.fork(),s.value!=null&&(o.uint32(10),o.bytes(s.value)),s.signatureV1!=null&&(o.uint32(18),o.bytes(s.signatureV1)),s.validityType!=null&&(o.uint32(24),r.ValidityType.codec().encode(s.validityType,o)),s.validity!=null&&(o.uint32(34),o.bytes(s.validity)),s.sequence!=null&&(o.uint32(40),o.uint64(s.sequence)),s.ttl!=null&&(o.uint32(48),o.uint64(s.ttl)),s.pubKey!=null&&(o.uint32(58),o.bytes(s.pubKey)),s.signatureV2!=null&&(o.uint32(66),o.bytes(s.signatureV2)),s.data!=null&&(o.uint32(74),o.bytes(s.data)),i.lengthDelimited!==!1&&o.ldelim()},(s,o)=>{let i={},a=o==null?s.len:s.pos+o;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:i.value=s.bytes();break;case 2:i.signatureV1=s.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(s);break;case 4:i.validity=s.bytes();break;case 5:i.sequence=s.uint64();break;case 6:i.ttl=s.uint64();break;case 7:i.pubKey=s.bytes();break;case 8:i.signatureV2=s.bytes();break;case 9:i.data=s.bytes();break;default:s.skipType(c&7);break}}return i})),n),r.encode=s=>re(s,r.codec()),r.decode=s=>te(s,r.codec())})(Bi||(Bi={}));var NE=is("ipns:utils"),_ae=R("/ipns/"),Aae=114;function Rae(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,o=parseInt(t[3],10),i=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,o,i,a,c,l))}var tU=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw NE.error(n),(0,dn.default)(n,BE)}let t;if(e.pubKey!=null){try{t=PE(e.pubKey)}catch(s){throw NE.error(s),s}if(!(await cr(e.pubKey)).equals(r))throw(0,dn.default)(new Error("Embedded public key did not match PeerID"),XK)}else r.publicKey!=null&&(t=PE(r.publicKey));if(t!=null)return t;throw(0,dn.default)(new Error("no public key is available"),BE)};var rU=r=>{let e=R("ipns-signature:");return be([e,r])};function Vp(r){let e=Bi.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,dn.default)(new Error("missing data or signatureV2"),Pi);let t=sU(e.data),n=Iae(t.Value),s;try{s=eU.default.fromDate(Rae(T(t.Validity)))}catch{throw NE.error("unrecognized validity format (not an rfc3339 format)"),(0,dn.default)(new Error("unrecognized validity format (not an rfc3339 format)"),YK)}if(e.value!=null&&e.signatureV1!=null)return Tae(e),{value:n,validityType:Bi.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:Bi.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 nU=r=>vt(r.slice(_ae.length));var sU=r=>{let e=nn(r);if(e.ValidityType===0)e.ValidityType=Bi.ValidityType.EOL;else throw(0,dn.default)(new Error("Unknown validity type"),Ag);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},Iae=r=>{if(r!=null){if(kl(r))return`/ipns/${r.toCID().toString(Mi)}`;if(r instanceof Uint8Array){let n=T(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=Se.asCID(r);if(t!=null)return t.code===Aae?`/ipns/${t.toString(Mi)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${Se.decode(r).toV1().toString()}`:`/ipfs/${Se.parse(e).toV1().toString()}`}catch{}}throw(0,dn.default)(new Error("Value must be a valid content path starting with /"),QK)},Tae=r=>{if(r.data==null)throw(0,dn.default)(new Error("Record data is missing"),jK);let e=sU(r.data);if(!V(e.Value,r.value??new Uint8Array(0)))throw(0,dn.default)(new Error('Field "value" did not match between protobuf and CBOR'),Pi);if(!V(e.Validity,r.validity??new Uint8Array(0)))throw(0,dn.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Pi);if(e.ValidityType!==r.validityType)throw(0,dn.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Pi);if(e.Sequence!==r.sequence)throw(0,dn.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Pi);if(e.TTL!==r.ttl)throw(0,dn.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Pi)};function oU(r,e){let t=e.map((n,s)=>({record:Vp(n),index:s}));return t.sort((n,s)=>{let o=n.record.sequence,i=s.record.sequence;if(o>i)return-1;if(o<i)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 qp=ue(Oo(),1);var Rg=is("ipns:validator"),kae=1024*10,Dae=async(r,e)=>{let t=Vp(e),n;try{let s=rU(t.data);n=await r.verify(s,t.signatureV2)}catch{n=!1}if(!n)throw Rg.error("record signature verification failed"),(0,qp.default)(new Error("record signature verification failed"),Pi);if(t.validityType===Bi.ValidityType.EOL){if(t.validity.toDate().getTime()<Date.now())throw Rg.error("record has expired"),(0,qp.default)(new Error("record has expired"),WK)}else if(t.validityType!=null)throw Rg.error("unrecognized validity type"),(0,qp.default)(new Error("unrecognized validity type"),Ag);Rg("ipns record for %b is valid",t.value)};async function iU(r,e){if(e.byteLength>kae)throw(0,qp.default)(new Error("record too large"),JK);let t=nU(r),n=Vp(e),s=await tU(t,n);await Dae(s,e)}var Ig="1.2.0",Tg="libp2p";var cU="3.0.1-5c6a066",lU="helia";var uU={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 kg(r={}){return{peerId:r.peerId,addresses:{listen:["/webrtc"]},transports:[Sw({discoverRelays:1}),sK(),nK(),TK(),AK()],connectionEncryption:[Au()],streamMuxers:[pD(),cO()],peerDiscovery:[tB(uU)],services:{autoNAT:HP(),dcutr:XB(),delegatedRouting:()=>cP("https://delegated-ipfs.dev"),dht:dL({clientMode:!0,validators:{ipns:iU},selectors:{ipns:oU}}),identify:uN({agentVersion:`${lU}/${cU} ${Tg}/${Ig} UserAgent=${globalThis.navigator.userAgent}`}),keychain:Wy(r.keychain),ping:hO(),pubsub:Ek()}}}var ME={};$(ME,{Ed25519PrivateKey:()=>hl,Ed25519PublicKey:()=>Hp,generateKeyPair:()=>Lae,generateKeyPairFromSeed:()=>gU,unmarshalEd25519PrivateKey:()=>Bae,unmarshalEd25519PublicKey:()=>Nae});function ns(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Uf=32,Ni=64,Dg=32;function fU(){let r=_e.utils.randomPrivateKey(),e=_e.getPublicKey(r);return{privateKey:mU(r,e),publicKey:e}}function hU(r){if(r.length!==Dg)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=_e.getPublicKey(e);return{privateKey:mU(e,t),publicKey:t}}function dU(r,e){let t=r.subarray(0,Dg);return _e.sign(e instanceof Uint8Array?e:e.subarray(),t)}function pU(r,e,t){return _e.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function mU(r,e){let t=new Uint8Array(Ni);for(let n=0;n<Dg;n++)t[n]=r[n],t[Dg+n]=e[n];return t}var Zr={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var LE={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function yU(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,s=r?.digest??"SHA-256",o=r?.saltLength??16,i=r?.iterations??32767,a=Zr.get();t*=8;async function c(f,h){let p=a.getRandomValues(new Uint8Array(o)),d=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:d};typeof h=="string"&&(h=R(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",LE,{name:"AES-GCM"},!0,["encrypt"]);try{let w={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",LE,{name:"AES-GCM"},!0,["encrypt"])}}else{let w={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,E,{name:e,length:t},!0,["encrypt"])}let b=await a.subtle.encrypt(m,y,f);return be([p,m.iv,new Uint8Array(b)])}async function l(f,h){let p=f.subarray(0,o),d=f.subarray(o,o+n),m=f.subarray(o+n),y={name:e,iv:d};typeof h=="string"&&(h=R(h));let b;if(h.length===0)try{let E={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}catch{b=await a.subtle.importKey("jwk",LE,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}let w=await a.subtle.decrypt(y,b,m);return new Uint8Array(w)}return{encrypt:c,decrypt:l}}async function Ff(r,e){let n=await yU().encrypt(r,e);return dt.encode(n)}var Tt;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Tt||(Tt={}));var OE;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(OE||(OE={}));(function(r){r.codec=()=>Oe(OE)})(Tt||(Tt={}));var Co;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Tt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.Type=Tt.codec().decode(t);break;case 2:s.Data=t.bytes();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Co||(Co={}));var Po;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Tt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.Type=Tt.codec().decode(t);break;case 2:s.Data=t.bytes();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Po||(Po={}));var Hp=class{_key;constructor(e){this._key=Vf(e,Uf)}verify(e,t){return pU(this._key,t,e)}marshal(){return this._key}get bytes(){return Co.encode({Type:Tt.Ed25519,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return ns(e)?e.then(({bytes:t})=>t):e.bytes}},hl=class{_key;_publicKey;constructor(e,t){this._key=Vf(e,Ni),this._publicKey=Vf(t,Uf)}sign(e){return dU(this._key,e)}get public(){return new Hp(this._publicKey)}marshal(){return this._key}get bytes(){return Po.encode({Type:Tt.Ed25519,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}async hash(){let e=q.digest(this.bytes),t;return ns(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=Ot.digest(this.public.bytes);return ye.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Ff(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Bae(r){if(r.length>Ni){r=Vf(r,Ni+Uf);let n=r.subarray(0,Ni),s=r.subarray(Ni,r.length);return new hl(n,s)}r=Vf(r,Ni);let e=r.subarray(0,Ni),t=r.subarray(Uf);return new hl(e,t)}function Nae(r){return r=Vf(r,Uf),new Hp(r)}async function Lae(){let{privateKey:r,publicKey:e}=fU();return new hl(r,e)}async function gU(r){let{privateKey:e,publicKey:t}=hU(r);return new hl(e,t)}function Vf(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new g(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var qE={};$(qE,{MAX_RSA_KEY_SIZE:()=>Gp,RsaPrivateKey:()=>qf,RsaPublicKey:()=>zp,fromJwk:()=>Wae,generateKeyPair:()=>Yae,unmarshalRsaPrivateKey:()=>FE,unmarshalRsaPublicKey:()=>Gae});function dl(r){if(isNaN(r)||r<=0)throw new g("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return Pt(r)}var za={};$(za,{exportToPem:()=>Vae,importFromPem:()=>qae,jwkToPkcs1:()=>Mae,jwkToPkix:()=>Uae,pkcs1ToJwk:()=>Oae,pkixToJwk:()=>Kae});function Oae(r){let{result:e}=Ve(r),t=e.valueBlock.value;return{n:T(Bo(t[1].toBigInt()),"base64url"),e:T(Bo(t[2].toBigInt()),"base64url"),d:T(Bo(t[3].toBigInt()),"base64url"),p:T(Bo(t[4].toBigInt()),"base64url"),q:T(Bo(t[5].toBigInt()),"base64url"),dp:T(Bo(t[6].toBigInt()),"base64url"),dq:T(Bo(t[7].toBigInt()),"base64url"),qi:T(Bo(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function Mae(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new X({value:[new W({value:0}),W.fromBigInt(No(R(r.n,"base64url"))),W.fromBigInt(No(R(r.e,"base64url"))),W.fromBigInt(No(R(r.d,"base64url"))),W.fromBigInt(No(R(r.p,"base64url"))),W.fromBigInt(No(R(r.q,"base64url"))),W.fromBigInt(No(R(r.dp,"base64url"))),W.fromBigInt(No(R(r.dq,"base64url"))),W.fromBigInt(No(R(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Kae(r){let{result:e}=Ve(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:T(Bo(t[0].toBigInt()),"base64url"),e:T(Bo(t[1].toBigInt()),"base64url")}}function Uae(r){if(r.n==null||r.e==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new X({value:[new X({value:[new Re({value:"1.2.840.113549.1.1.1"}),new ut]}),new Kr({valueHex:new X({value:[W.fromBigInt(No(R(r.n,"base64url"))),W.fromBigInt(No(R(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Bo(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),s=0,o=0;for(;s<t;)n[s]=parseInt(e.slice(o,o+2),16),s+=1,o+=2;return n}function No(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var Fae=16,KE=32,UE=1e4;async function Vae(r,e){let t=Zr.get(),s=new X({value:[new W({value:0}),new X({value:[new Re({value:"1.2.840.113549.1.1.1"}),new ut]}),new Ye({valueHex:r.marshal()})]}).toBER(),o=new Uint8Array(s,0,s.byteLength),i=dl(Fae),a=await dr(Bt,e,i,{c:UE,dkLen:KE}),c=dl(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,o),f=new X({value:[new Ye({valueHex:i}),new W({value:UE}),new W({value:KE}),new X({value:[new Re({value:"1.2.840.113549.2.11"}),new ut]})]}),h=new X({value:[new Re({value:"1.2.840.113549.1.5.13"}),new X({value:[new X({value:[new Re({value:"1.2.840.113549.1.5.12"}),f]}),new X({value:[new Re({value:"2.16.840.1.101.3.4.1.42"}),new Ye({valueHex:c})]})]})]}),d=new X({value:[h,new Ye({valueHex:u})]}).toBER(),m=new Uint8Array(d,0,d.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...T(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
69
+ `)}async function hae(r,e){let t=Jr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=R(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:o}=Ve(s),{iv:i,salt:a,iterations:c,keySize:l,cipherText:u}=dae(o),f=await dr(Bt,e,a,{c,dkLen:l}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Op(await t.subtle.decrypt({name:"AES-CBC",iv:i},h,u)),{result:d}=Ve(p);n=OK(d)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=R(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:o}=Ve(s);n=OK(o)}else throw new g("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return IE(n)}function dae(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new g("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new g("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let o=n.valueBlock.value[1],i=Op(o.valueBlock.value[0].getValue()),a=RE,c=AE;if(o.valueBlock.value.length===3)a=Number(o.valueBlock.value[1].toBigInt()),c=Number(o.valueBlock.value[2].toBigInt());else if(o.valueBlock.value.length===2)throw new g("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new g("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let f=Op(l.valueBlock.value[1].getValue());return{cipherText:Op(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:f}}function OK(r){return Op(r.valueBlock.value[2].getValue())}function Op(r){return new Uint8Array(r,0,r.byteLength)}async function MK(r){let e=await Jr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await FK(e);return{privateKey:t[0],publicKey:t[1]}}async function TE(r){let t=[await Jr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await pae(r)],n=await FK({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function KK(r,e){let t=await Jr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Jr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function UK(r,e,t){let n=await Jr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Jr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function FK(r){if(r.privateKey==null||r.publicKey==null)throw new g("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([Jr.get().subtle.exportKey("jwk",r.privateKey),Jr.get().subtle.exportKey("jwk",r.publicKey)])}async function pae(r){return Jr.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Sg(r){if(r.kty!=="RSA")throw new g("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new g("invalid key modulus","ERR_INVALID_KEY_MODULUS");return R(r.n,"base64url").length*8}var Kp=8192,Mp=class{_key;constructor(e){this._key=e}verify(e,t){return UK(this._key,t,e)}marshal(){return $a.jwkToPkix(this._key)}get bytes(){return To.encode({Type:Jt.RSA,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}},Kf=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return fl(16)}sign(e){return KK(this._key,e)}get public(){if(this._publicKey==null)throw new g("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new Mp(this._publicKey)}marshal(){return $a.jwkToPkcs1(this._key)}get bytes(){return Ci.encode({Type:Jt.RSA,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return T(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return $a.exportToPem(this,e);if(t==="libp2p-key")return Of(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function IE(r){let e=$a.pkcs1ToJwk(r);if(Sg(e)>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await TE(e);return new Kf(t.privateKey,t.publicKey)}function yae(r){let e=$a.pkixToJwk(r);if(Sg(e)>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new Mp(e)}async function gae(r){if(Sg(r)>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await TE(r);return new Kf(e.privateKey,e.publicKey)}async function bae(r){if(r>Kp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await MK(r);return new Kf(e.privateKey,e.publicKey)}var CE={};$(CE,{Secp256k1PrivateKey:()=>Fp,Secp256k1PublicKey:()=>Up,generateKeyPair:()=>xae,unmarshalSecp256k1PrivateKey:()=>Eae,unmarshalSecp256k1PublicKey:()=>vae});function VK(){return Z.utils.randomPrivateKey()}function qK(r,e){let t=q.digest(e instanceof Uint8Array?e:e.subarray());if(rs(t))return t.then(({digest:n})=>Z.sign(n,r).toDERRawBytes()).catch(n=>{throw new g(String(n),"ERR_INVALID_INPUT")});try{return Z.sign(t.digest,r).toDERRawBytes()}catch(n){throw new g(String(n),"ERR_INVALID_INPUT")}}function HK(r,e,t){let n=q.digest(t instanceof Uint8Array?t:t.subarray());if(rs(n))return n.then(({digest:s})=>Z.verify(e,s,r)).catch(s=>{throw new g(String(s),"ERR_INVALID_INPUT")});try{return Z.verify(e,n.digest,r)}catch(s){throw new g(String(s),"ERR_INVALID_INPUT")}}function $K(r){return Z.ProjectivePoint.fromHex(r).toRawBytes(!0)}function zK(r){try{Z.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}function DE(r){try{Z.ProjectivePoint.fromHex(r)}catch(e){throw new g(String(e),"ERR_INVALID_PUBLIC_KEY")}}function GK(r){try{return Z.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}var Up=class{_key;constructor(e){DE(e),this._key=e}verify(e,t){return HK(this._key,t,e)}marshal(){return $K(this._key)}get bytes(){return To.encode({Type:Jt.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}async hash(){let e=q.digest(this.bytes),t;return rs(e)?{bytes:t}=await e:t=e.bytes,t}},Fp=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??GK(e),zK(this._key),DE(this._publicKey)}sign(e){return qK(this._key,e)}get public(){return new Up(this._publicKey)}marshal(){return this._key}get bytes(){return Ci.encode({Type:Jt.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return rs(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return T(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Of(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Eae(r){return new Fp(r)}function vae(r){return new Up(r)}async function xae(){let r=VK();return new Fp(r)}var _g={rsa:kE,ed25519:_E,secp256k1:CE};function Sae(r){let e=Object.keys(_g).join(" / ");return new g(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function PE(r){let e=To.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Jt.RSA:return _g.rsa.unmarshalRsaPublicKey(t);case Jt.Ed25519:return _g.ed25519.unmarshalEd25519PublicKey(t);case Jt.Secp256k1:return _g.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw Sae(e.Type??"unknown")}}var dn=ue(Oo(),1);var eU=ue(bm(),1);var WK="ERR_IPNS_EXPIRED_RECORD",Ag="ERR_UNRECOGNIZED_VALIDITY";var Pi="ERR_SIGNATURE_VERIFICATION",YK="ERR_UNRECOGNIZED_FORMAT";var BE="ERR_UNDEFINED_PARAMETER",jK="ERR_INVALID_RECORD_DATA",QK="ERR_INVALID_VALUE",XK="ERR_INVALID_EMBEDDED_KEY";var JK="ERR_RECORD_TOO_LARGE";var Bi;(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=()=>Oe(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((s,o,i={})=>{i.lengthDelimited!==!1&&o.fork(),s.value!=null&&(o.uint32(10),o.bytes(s.value)),s.signatureV1!=null&&(o.uint32(18),o.bytes(s.signatureV1)),s.validityType!=null&&(o.uint32(24),r.ValidityType.codec().encode(s.validityType,o)),s.validity!=null&&(o.uint32(34),o.bytes(s.validity)),s.sequence!=null&&(o.uint32(40),o.uint64(s.sequence)),s.ttl!=null&&(o.uint32(48),o.uint64(s.ttl)),s.pubKey!=null&&(o.uint32(58),o.bytes(s.pubKey)),s.signatureV2!=null&&(o.uint32(66),o.bytes(s.signatureV2)),s.data!=null&&(o.uint32(74),o.bytes(s.data)),i.lengthDelimited!==!1&&o.ldelim()},(s,o)=>{let i={},a=o==null?s.len:s.pos+o;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:i.value=s.bytes();break;case 2:i.signatureV1=s.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(s);break;case 4:i.validity=s.bytes();break;case 5:i.sequence=s.uint64();break;case 6:i.ttl=s.uint64();break;case 7:i.pubKey=s.bytes();break;case 8:i.signatureV2=s.bytes();break;case 9:i.data=s.bytes();break;default:s.skipType(c&7);break}}return i})),n),r.encode=s=>re(s,r.codec()),r.decode=s=>te(s,r.codec())})(Bi||(Bi={}));var NE=is("ipns:utils"),_ae=R("/ipns/"),Aae=114;function Rae(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,o=parseInt(t[3],10),i=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,o,i,a,c,l))}var tU=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw NE.error(n),(0,dn.default)(n,BE)}let t;if(e.pubKey!=null){try{t=PE(e.pubKey)}catch(s){throw NE.error(s),s}if(!(await cr(e.pubKey)).equals(r))throw(0,dn.default)(new Error("Embedded public key did not match PeerID"),XK)}else r.publicKey!=null&&(t=PE(r.publicKey));if(t!=null)return t;throw(0,dn.default)(new Error("no public key is available"),BE)};var rU=r=>{let e=R("ipns-signature:");return be([e,r])};function Vp(r){let e=Bi.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,dn.default)(new Error("missing data or signatureV2"),Pi);let t=sU(e.data),n=Iae(t.Value),s;try{s=eU.default.fromDate(Rae(T(t.Validity)))}catch{throw NE.error("unrecognized validity format (not an rfc3339 format)"),(0,dn.default)(new Error("unrecognized validity format (not an rfc3339 format)"),YK)}if(e.value!=null&&e.signatureV1!=null)return Tae(e),{value:n,validityType:Bi.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:Bi.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 nU=r=>vt(r.slice(_ae.length));var sU=r=>{let e=nn(r);if(e.ValidityType===0)e.ValidityType=Bi.ValidityType.EOL;else throw(0,dn.default)(new Error("Unknown validity type"),Ag);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},Iae=r=>{if(r!=null){if(kl(r))return`/ipns/${r.toCID().toString(Mi)}`;if(r instanceof Uint8Array){let n=T(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=Se.asCID(r);if(t!=null)return t.code===Aae?`/ipns/${t.toString(Mi)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${Se.decode(r).toV1().toString()}`:`/ipfs/${Se.parse(e).toV1().toString()}`}catch{}}throw(0,dn.default)(new Error("Value must be a valid content path starting with /"),QK)},Tae=r=>{if(r.data==null)throw(0,dn.default)(new Error("Record data is missing"),jK);let e=sU(r.data);if(!V(e.Value,r.value??new Uint8Array(0)))throw(0,dn.default)(new Error('Field "value" did not match between protobuf and CBOR'),Pi);if(!V(e.Validity,r.validity??new Uint8Array(0)))throw(0,dn.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Pi);if(e.ValidityType!==r.validityType)throw(0,dn.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Pi);if(e.Sequence!==r.sequence)throw(0,dn.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Pi);if(e.TTL!==r.ttl)throw(0,dn.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Pi)};function oU(r,e){let t=e.map((n,s)=>({record:Vp(n),index:s}));return t.sort((n,s)=>{let o=n.record.sequence,i=s.record.sequence;if(o>i)return-1;if(o<i)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 qp=ue(Oo(),1);var Rg=is("ipns:validator"),kae=1024*10,Dae=async(r,e)=>{let t=Vp(e),n;try{let s=rU(t.data);n=await r.verify(s,t.signatureV2)}catch{n=!1}if(!n)throw Rg.error("record signature verification failed"),(0,qp.default)(new Error("record signature verification failed"),Pi);if(t.validityType===Bi.ValidityType.EOL){if(t.validity.toDate().getTime()<Date.now())throw Rg.error("record has expired"),(0,qp.default)(new Error("record has expired"),WK)}else if(t.validityType!=null)throw Rg.error("unrecognized validity type"),(0,qp.default)(new Error("unrecognized validity type"),Ag);Rg("ipns record for %b is valid",t.value)};async function iU(r,e){if(e.byteLength>kae)throw(0,qp.default)(new Error("record too large"),JK);let t=nU(r),n=Vp(e),s=await tU(t,n);await Dae(s,e)}var Ig="1.2.0",Tg="libp2p";var cU="3.0.1-ece384a",lU="helia";var uU={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 kg(r={}){return{peerId:r.peerId,addresses:{listen:["/webrtc"]},transports:[Sw({discoverRelays:1}),sK(),nK(),TK(),AK()],connectionEncryption:[Au()],streamMuxers:[pD(),cO()],peerDiscovery:[tB(uU)],services:{autoNAT:HP(),dcutr:XB(),delegatedRouting:()=>cP("https://delegated-ipfs.dev"),dht:dL({clientMode:!0,validators:{ipns:iU},selectors:{ipns:oU}}),identify:uN({agentVersion:`${lU}/${cU} ${Tg}/${Ig} UserAgent=${globalThis.navigator.userAgent}`}),keychain:Wy(r.keychain),ping:hO(),pubsub:Ek()}}}var ME={};$(ME,{Ed25519PrivateKey:()=>hl,Ed25519PublicKey:()=>Hp,generateKeyPair:()=>Lae,generateKeyPairFromSeed:()=>gU,unmarshalEd25519PrivateKey:()=>Bae,unmarshalEd25519PublicKey:()=>Nae});function ns(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Uf=32,Ni=64,Dg=32;function fU(){let r=_e.utils.randomPrivateKey(),e=_e.getPublicKey(r);return{privateKey:mU(r,e),publicKey:e}}function hU(r){if(r.length!==Dg)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=_e.getPublicKey(e);return{privateKey:mU(e,t),publicKey:t}}function dU(r,e){let t=r.subarray(0,Dg);return _e.sign(e instanceof Uint8Array?e:e.subarray(),t)}function pU(r,e,t){return _e.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function mU(r,e){let t=new Uint8Array(Ni);for(let n=0;n<Dg;n++)t[n]=r[n],t[Dg+n]=e[n];return t}var Zr={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var LE={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function yU(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,s=r?.digest??"SHA-256",o=r?.saltLength??16,i=r?.iterations??32767,a=Zr.get();t*=8;async function c(f,h){let p=a.getRandomValues(new Uint8Array(o)),d=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:d};typeof h=="string"&&(h=R(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",LE,{name:"AES-GCM"},!0,["encrypt"]);try{let w={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",LE,{name:"AES-GCM"},!0,["encrypt"])}}else{let w={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},E=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,E,{name:e,length:t},!0,["encrypt"])}let b=await a.subtle.encrypt(m,y,f);return be([p,m.iv,new Uint8Array(b)])}async function l(f,h){let p=f.subarray(0,o),d=f.subarray(o,o+n),m=f.subarray(o+n),y={name:e,iv:d};typeof h=="string"&&(h=R(h));let b;if(h.length===0)try{let E={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}catch{b=await a.subtle.importKey("jwk",LE,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:p,iterations:i,hash:{name:s}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(E,x,{name:e,length:t},!0,["decrypt"])}let w=await a.subtle.decrypt(y,b,m);return new Uint8Array(w)}return{encrypt:c,decrypt:l}}async function Ff(r,e){let n=await yU().encrypt(r,e);return dt.encode(n)}var Tt;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Tt||(Tt={}));var OE;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(OE||(OE={}));(function(r){r.codec=()=>Oe(OE)})(Tt||(Tt={}));var Co;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Tt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.Type=Tt.codec().decode(t);break;case 2:s.Data=t.bytes();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Co||(Co={}));var Po;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Tt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.Type=Tt.codec().decode(t);break;case 2:s.Data=t.bytes();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Po||(Po={}));var Hp=class{_key;constructor(e){this._key=Vf(e,Uf)}verify(e,t){return pU(this._key,t,e)}marshal(){return this._key}get bytes(){return Co.encode({Type:Tt.Ed25519,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return ns(e)?e.then(({bytes:t})=>t):e.bytes}},hl=class{_key;_publicKey;constructor(e,t){this._key=Vf(e,Ni),this._publicKey=Vf(t,Uf)}sign(e){return dU(this._key,e)}get public(){return new Hp(this._publicKey)}marshal(){return this._key}get bytes(){return Po.encode({Type:Tt.Ed25519,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}async hash(){let e=q.digest(this.bytes),t;return ns(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=Ot.digest(this.public.bytes);return ye.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Ff(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Bae(r){if(r.length>Ni){r=Vf(r,Ni+Uf);let n=r.subarray(0,Ni),s=r.subarray(Ni,r.length);return new hl(n,s)}r=Vf(r,Ni);let e=r.subarray(0,Ni),t=r.subarray(Uf);return new hl(e,t)}function Nae(r){return r=Vf(r,Uf),new Hp(r)}async function Lae(){let{privateKey:r,publicKey:e}=fU();return new hl(r,e)}async function gU(r){let{privateKey:e,publicKey:t}=hU(r);return new hl(e,t)}function Vf(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new g(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var qE={};$(qE,{MAX_RSA_KEY_SIZE:()=>Gp,RsaPrivateKey:()=>qf,RsaPublicKey:()=>zp,fromJwk:()=>Wae,generateKeyPair:()=>Yae,unmarshalRsaPrivateKey:()=>FE,unmarshalRsaPublicKey:()=>Gae});function dl(r){if(isNaN(r)||r<=0)throw new g("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return Pt(r)}var za={};$(za,{exportToPem:()=>Vae,importFromPem:()=>qae,jwkToPkcs1:()=>Mae,jwkToPkix:()=>Uae,pkcs1ToJwk:()=>Oae,pkixToJwk:()=>Kae});function Oae(r){let{result:e}=Ve(r),t=e.valueBlock.value;return{n:T(Bo(t[1].toBigInt()),"base64url"),e:T(Bo(t[2].toBigInt()),"base64url"),d:T(Bo(t[3].toBigInt()),"base64url"),p:T(Bo(t[4].toBigInt()),"base64url"),q:T(Bo(t[5].toBigInt()),"base64url"),dp:T(Bo(t[6].toBigInt()),"base64url"),dq:T(Bo(t[7].toBigInt()),"base64url"),qi:T(Bo(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function Mae(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new X({value:[new W({value:0}),W.fromBigInt(No(R(r.n,"base64url"))),W.fromBigInt(No(R(r.e,"base64url"))),W.fromBigInt(No(R(r.d,"base64url"))),W.fromBigInt(No(R(r.p,"base64url"))),W.fromBigInt(No(R(r.q,"base64url"))),W.fromBigInt(No(R(r.dp,"base64url"))),W.fromBigInt(No(R(r.dq,"base64url"))),W.fromBigInt(No(R(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Kae(r){let{result:e}=Ve(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:T(Bo(t[0].toBigInt()),"base64url"),e:T(Bo(t[1].toBigInt()),"base64url")}}function Uae(r){if(r.n==null||r.e==null)throw new g("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new X({value:[new X({value:[new Re({value:"1.2.840.113549.1.1.1"}),new ut]}),new Kr({valueHex:new X({value:[W.fromBigInt(No(R(r.n,"base64url"))),W.fromBigInt(No(R(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Bo(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),s=0,o=0;for(;s<t;)n[s]=parseInt(e.slice(o,o+2),16),s+=1,o+=2;return n}function No(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var Fae=16,KE=32,UE=1e4;async function Vae(r,e){let t=Zr.get(),s=new X({value:[new W({value:0}),new X({value:[new Re({value:"1.2.840.113549.1.1.1"}),new ut]}),new Ye({valueHex:r.marshal()})]}).toBER(),o=new Uint8Array(s,0,s.byteLength),i=dl(Fae),a=await dr(Bt,e,i,{c:UE,dkLen:KE}),c=dl(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,o),f=new X({value:[new Ye({valueHex:i}),new W({value:UE}),new W({value:KE}),new X({value:[new Re({value:"1.2.840.113549.2.11"}),new ut]})]}),h=new X({value:[new Re({value:"1.2.840.113549.1.5.13"}),new X({value:[new X({value:[new Re({value:"1.2.840.113549.1.5.12"}),f]}),new X({value:[new Re({value:"2.16.840.1.101.3.4.1.42"}),new Ye({valueHex:c})]})]})]}),d=new X({value:[h,new Ye({valueHex:u})]}).toBER(),m=new Uint8Array(d,0,d.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...T(m,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
70
70
  `)}async function qae(r,e){let t=Zr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=R(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:o}=Ve(s),{iv:i,salt:a,iterations:c,keySize:l,cipherText:u}=Hae(o),f=await dr(Bt,e,a,{c,dkLen:l}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=$p(await t.subtle.decrypt({name:"AES-CBC",iv:i},h,u)),{result:d}=Ve(p);n=bU(d)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=R(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:o}=Ve(s);n=bU(o)}else throw new g("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return FE(n)}function Hae(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new g("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new g("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let o=n.valueBlock.value[1],i=$p(o.valueBlock.value[0].getValue()),a=UE,c=KE;if(o.valueBlock.value.length===3)a=Number(o.valueBlock.value[1].toBigInt()),c=Number(o.valueBlock.value[2].toBigInt());else if(o.valueBlock.value.length===2)throw new g("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new g("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let f=$p(l.valueBlock.value[1].getValue());return{cipherText:$p(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:f}}function bU(r){return $p(r.valueBlock.value[2].getValue())}function $p(r){return new Uint8Array(r,0,r.byteLength)}async function wU(r){let e=await Zr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await xU(e);return{privateKey:t[0],publicKey:t[1]}}async function VE(r){let t=[await Zr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await $ae(r)],n=await xU({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function EU(r,e){let t=await Zr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Zr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function vU(r,e,t){let n=await Zr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Zr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function xU(r){if(r.privateKey==null||r.publicKey==null)throw new g("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([Zr.get().subtle.exportKey("jwk",r.privateKey),Zr.get().subtle.exportKey("jwk",r.publicKey)])}async function $ae(r){return Zr.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Pg(r){if(r.kty!=="RSA")throw new g("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new g("invalid key modulus","ERR_INVALID_KEY_MODULUS");return R(r.n,"base64url").length*8}var Gp=8192,zp=class{_key;constructor(e){this._key=e}verify(e,t){return vU(this._key,t,e)}marshal(){return za.jwkToPkix(this._key)}get bytes(){return Co.encode({Type:Tt.RSA,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return ns(e)?e.then(({bytes:t})=>t):e.bytes}},qf=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return dl(16)}sign(e){return EU(this._key,e)}get public(){if(this._publicKey==null)throw new g("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new zp(this._publicKey)}marshal(){return za.jwkToPkcs1(this._key)}get bytes(){return Po.encode({Type:Tt.RSA,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return ns(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return T(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return za.exportToPem(this,e);if(t==="libp2p-key")return Ff(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function FE(r){let e=za.pkcs1ToJwk(r);if(Pg(e)>Gp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await VE(e);return new qf(t.privateKey,t.publicKey)}function Gae(r){let e=za.pkixToJwk(r);if(Pg(e)>Gp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new zp(e)}async function Wae(r){if(Pg(r)>Gp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await VE(r);return new qf(e.privateKey,e.publicKey)}async function Yae(r){if(r>Gp)throw new g("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await wU(r);return new qf(e.privateKey,e.publicKey)}var $E={};$($E,{Secp256k1PrivateKey:()=>Yp,Secp256k1PublicKey:()=>Wp,generateKeyPair:()=>Jae,unmarshalSecp256k1PrivateKey:()=>Qae,unmarshalSecp256k1PublicKey:()=>Xae});function SU(){return Z.utils.randomPrivateKey()}function _U(r,e){let t=q.digest(e instanceof Uint8Array?e:e.subarray());if(ns(t))return t.then(({digest:n})=>Z.sign(n,r).toDERRawBytes()).catch(n=>{throw new g(String(n),"ERR_INVALID_INPUT")});try{return Z.sign(t.digest,r).toDERRawBytes()}catch(n){throw new g(String(n),"ERR_INVALID_INPUT")}}function AU(r,e,t){let n=q.digest(t instanceof Uint8Array?t:t.subarray());if(ns(n))return n.then(({digest:s})=>Z.verify(e,s,r)).catch(s=>{throw new g(String(s),"ERR_INVALID_INPUT")});try{return Z.verify(e,n.digest,r)}catch(s){throw new g(String(s),"ERR_INVALID_INPUT")}}function RU(r){return Z.ProjectivePoint.fromHex(r).toRawBytes(!0)}function IU(r){try{Z.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}function HE(r){try{Z.ProjectivePoint.fromHex(r)}catch(e){throw new g(String(e),"ERR_INVALID_PUBLIC_KEY")}}function TU(r){try{return Z.getPublicKey(r,!0)}catch(e){throw new g(String(e),"ERR_INVALID_PRIVATE_KEY")}}var Wp=class{_key;constructor(e){HE(e),this._key=e}verify(e,t){return AU(this._key,t,e)}marshal(){return RU(this._key)}get bytes(){return Co.encode({Type:Tt.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}async hash(){let e=q.digest(this.bytes),t;return ns(e)?{bytes:t}=await e:t=e.bytes,t}},Yp=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??TU(e),IU(this._key),HE(this._publicKey)}sign(e){return _U(this._key,e)}get public(){return new Wp(this._publicKey)}marshal(){return this._key}get bytes(){return Po.encode({Type:Tt.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return V(this.bytes,e.bytes)}hash(){let e=q.digest(this.bytes);return ns(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return T(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return Ff(this.bytes,e);throw new g(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Qae(r){return new Yp(r)}function Xae(r){return new Wp(r)}async function Jae(){let r=SU();return new Yp(r)}var pl={rsa:qE,ed25519:ME,secp256k1:$E};function kU(r){let e=Object.keys(pl).join(" / ");return new g(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function DU(r){let e=Co.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Tt.RSA:return pl.rsa.unmarshalRsaPublicKey(t);case Tt.Ed25519:return pl.ed25519.unmarshalEd25519PublicKey(t);case Tt.Secp256k1:return pl.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw kU(e.Type??"unknown")}}async function CU(r){let e=Po.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Tt.RSA:return pl.rsa.unmarshalRsaPrivateKey(t);case Tt.Ed25519:return pl.ed25519.unmarshalEd25519PrivateKey(t);case Tt.Secp256k1:return pl.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw kU(e.Type??"RSA")}}var Ir={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var Hf;(function(r){let e;(function(s){let o;s.codec=()=>(o==null&&(o=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(u&7);break}}return c})),o),s.encode=i=>re(i,s.codec()),s.decode=i=>te(i,s.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(s){let o;s.codec=()=>(o==null&&(o=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),Ng.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:c.key=i.string();break;case 2:c.value=Ng.codec().decode(i,i.uint32());break;default:i.skipType(u&7);break}}return c})),o),s.encode=i=>re(i,s.codec()),s.decode=i=>te(i,s.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((s,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),s.addresses!=null)for(let a of s.addresses)o.uint32(10),Bg.codec().encode(a,o);if(s.protocols!=null)for(let a of s.protocols)o.uint32(18),o.string(a);if(s.publicKey!=null&&(o.uint32(34),o.bytes(s.publicKey)),s.peerRecordEnvelope!=null&&(o.uint32(42),o.bytes(s.peerRecordEnvelope)),s.metadata!=null&&s.metadata.size!==0)for(let[a,c]of s.metadata.entries())o.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},o);if(s.tags!=null&&s.tags.size!==0)for(let[a,c]of s.tags.entries())o.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},o);i.lengthDelimited!==!1&&o.ldelim()},(s,o)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=o==null?s.len:s.pos+o;for(;s.pos<a;){let c=s.uint32();switch(c>>>3){case 1:i.addresses.push(Bg.codec().decode(s,s.uint32()));break;case 2:i.protocols.push(s.string());break;case 4:i.publicKey=s.bytes();break;case 5:i.peerRecordEnvelope=s.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(s,s.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(s,s.uint32());i.tags.set(l.key,l.value);break}default:s.skipType(c&7);break}}return i})),n),r.encode=s=>re(s,r.codec()),r.decode=s=>te(s,r.codec())})(Hf||(Hf={}));var Bg;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={multiaddr:new Uint8Array(0)},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.multiaddr=t.bytes();break;case 2:s.isCertified=t.bool();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Bg||(Bg={}));var Ng;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,s={})=>{s.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),s.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let s={value:0},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let i=t.uint32();switch(i>>>3){case 1:s.value=t.uint32();break;case 2:s.expiry=t.uint64();break;default:t.skipType(i&7);break}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ng||(Ng={}));function $f(r,e){let t=Hf.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=o_({...r,publicKey:r.publicKey}));let n=new Map,s=BigInt(Date.now());for(let[o,i]of t.tags.entries())i.expiry!=null&&i.expiry<s||n.set(o,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:o,isCertified:i})=>({multiaddr:pe(o),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var zE="/peers/";function zf(r){if(!kl(r)||r.type==null)throw new g("Invalid PeerId",Ir.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new at(`${zE}${e}`)}async function PU(r,e,t){let n=new Map;for(let s of t){if(s==null)continue;if(s.multiaddr instanceof Uint8Array&&(s.multiaddr=pe(s.multiaddr)),!xa(s.multiaddr))throw new g("Multiaddr was invalid",Ir.ERR_INVALID_PARAMETERS);if(!await e(r,s.multiaddr))continue;let o=s.isCertified??!1,i=s.multiaddr.toString(),a=n.get(i);a!=null?s.isCertified=a.isCertified||o:n.set(i,{multiaddr:s.multiaddr,isCertified:o})}return[...n.values()].sort((s,o)=>s.multiaddr.toString().localeCompare(o.multiaddr.toString())).map(({isCertified:s,multiaddr:o})=>({isCertified:s,multiaddr:o.bytes}))}async function Og(r,e,t,n){if(e==null)throw new g("Invalid PeerData",Ir.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!V(e.publicKey,r.publicKey))throw new g("publicKey bytes do not match peer id publicKey bytes",Ir.ERR_INVALID_PARAMETERS);let s=n.existingPeer;if(s!=null&&!r.equals(s.id))throw new g("peer id did not match existing peer id",Ir.ERR_INVALID_PARAMETERS);let o=s?.addresses??[],i=new Set(s?.protocols??[]),a=s?.metadata??new Map,c=s?.tags??new Map,l=s?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(o=[],e.multiaddrs!=null&&o.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&o.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Lg(f,{validate:BU})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Lg(f,{validate:NU,map:LU})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&o.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&o.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=Lg([...a.entries()],{validate:BU})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,d]of f)d==null?h.delete(p):h.set(p,d);c=Lg([...h.entries()],{validate:NU,map:LU})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u={addresses:await PU(r,n.addressFilter??(async()=>!0),o),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:s?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete u.publicKey,u}function Lg(r,e){let t=new Map;for(let[n,s]of r)s!=null&&e.validate(n,s);for(let[n,s]of r.sort(([o],[i])=>o.localeCompare(i)))s!=null&&t.set(n,e.map?.(n,s)??s);return t}function BU(r,e){if(typeof r!="string")throw new g("Metadata key must be a string",Ir.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new g("Metadata value must be a Uint8Array",Ir.ERR_INVALID_PARAMETERS)}function NU(r,e){if(typeof r!="string")throw new g("Tag name must be a string",Ir.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new g("Tag value must be an integer",Ir.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new g("Tag value must be between 0-100",Ir.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new g("Tag ttl must be an integer",Ir.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new g("Tag ttl must be between greater than 0",Ir.ERR_INVALID_PARAMETERS)}}function LU(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Mg(r,e,t){let n=r.toString().split("/")[2],s=nr.decode(n),o=vt(s),i=t.get(o);if(i!=null)return i;let a=$f(o,e);return t.set(o,a),a}function Zae(r,e){return r==null?{}:{prefix:zE,filters:(r.filters??[]).map(t=>({key:n,value:s})=>t(Mg(n,s,e))),orders:(r.orders??[]).map(t=>(n,s)=>t(Mg(n.key,n.value,e),Mg(s.key,s.value,e)))}}var Kg=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=_h({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(zf(e))}async delete(e){if(this.peerId.equals(e))throw new g("Cannot delete self peer",Ir.ERR_INVALID_PARAMETERS);await this.datastore.delete(zf(e))}async load(e){let t=await this.datastore.get(zf(e));return $f(e,t)}async save(e,t){let{existingBuf:n,existingPeer:s}=await this.#e(e),o=await Og(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n,s)}async patch(e,t){let{existingBuf:n,existingPeer:s}=await this.#e(e),o=await Og(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:s});return this.#t(e,o,n,s)}async merge(e,t){let{existingBuf:n,existingPeer:s}=await this.#e(e),o=await Og(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:s});return this.#t(e,o,n,s)}async*all(e){let t=new _r;for await(let{key:n,value:s}of this.datastore.query(Zae(e??{},t))){let o=Mg(n,s,t);o.id.equals(this.peerId)||(yield o)}}async#e(e){try{let t=await this.datastore.get(zf(e)),n=$f(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,s){let o=Hf.encode(t);return n!=null&&V(o,n)?{peer:$f(e,o),previous:s,updated:!1}:(await this.datastore.put(zf(e),o),{peer:$f(e,o),previous:s,updated:!0})}};var Ug=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new Kg(e,t)}async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let s of this.store.all(t))e(s)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await th(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let s=await this.store.save(e,t);return this.#e(e,s),s.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let s=await this.store.patch(e,t);return this.#e(e,s),s.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let s=await this.store.merge(e,t);return this.#e(e,s),s.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await Bs.openAndCertify(e,kn.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let s=kn.createFromProtobuf(n.payload),o;try{o=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(o?.peerRecordEnvelope!=null){let i=await Bs.createFromProtobuf(o.peerRecordEnvelope),a=kn.createFromProtobuf(i.payload);if(a.seqNumber>=s.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,s.seqNumber),!1}return await this.patch(s.peerId,{peerRecordEnvelope:e,addresses:s.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function OU(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var ece=r=>r;function GE(r,e){let t=r.getPeerId();return t!=null&&Me(t).equals(e)&&(r=r.decapsulate(pe(`/p2p/${e.toString()}`))),r}var Fg=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:s=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(o=>o.toString()),this.announce=new Set(s.map(o=>o.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??ece,this._updatePeerStoreAddresses=OU(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>pe(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>pe(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>pe(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>pe(e))}addObservedAddr(e){e=GE(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=GE(e,this.components.peerId);let t=e.toString(),s=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),s||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=GE(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,s])=>s.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>pe(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var WE=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Rl())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>u0(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},tce=["metrics","connectionProtector"],rce=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function MU(r={}){let e=new WE(r);return new Proxy(e,{get(n,s,o){if(typeof s=="string"&&!rce.includes(s)){let i=e.components[s];if(i==null&&!tce.includes(s))throw new g(`${s} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,s,o)},set(n,s,o){return typeof s=="string"?e.components[s]=o:Reflect.set(n,s,o),!0}})}function KU(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!jn(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function YE(r){try{let{address:e}=r.nodeAddress();return!!jn(e)}catch{return!0}}function nce(r,e){let t=YE(r.multiaddr),n=YE(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function sce(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function oce(r,e){let t=op.exactMatch(r.multiaddr),n=op.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Gf(r,e){let t=nce(r,e);if(t!==0)return t;let n=oce(r,e);return n!==0?n:sce(r,e)}var QE=ue(n0(),1),XE=ue(VU(),1);function Vg(r,e,t){return`${r}?name=${e}&type=${t}`}async function qU(r,e){return await(await fetch(r,{headers:new Headers({accept:"application/dns-json"}),signal:e})).json()}function ml(r,e){return`${e}_${r}`}var jE=Object.assign((0,QE.default)("dns-over-http-resolver"),{error:(0,QE.default)("dns-over-http-resolver:error")}),JE=class{_cache;_TXTcache;_servers;_request;_abortControllers;constructor(e={}){this._cache=new XE.default({max:e?.maxCache??100}),this._TXTcache=new XE.default({max:e?.maxCache??100}),this._servers=["https://cloudflare-dns.com/dns-query","https://dns.google/resolve"],this._request=e.request??qU,this._abortControllers=[]}cancel(){this._abortControllers.forEach(e=>{e.abort()})}getServers(){return this._servers}_getShuffledServers(){let e=[...this._servers];for(let t=e.length-1;t>0;t--){let n=Math.floor(Math.random()*t),s=e[t];e[t]=e[n],e[n]=s}return e}setServers(e){this._servers=e}async resolve(e,t="A"){switch(t){case"A":return this.resolve4(e);case"AAAA":return this.resolve6(e);case"TXT":return this.resolveTxt(e);default:throw new Error(`${t} is not supported`)}}async resolve4(e){let t="A",n=this._cache.get(ml(e,t));if(n!=null)return n;let s=!1;for(let o of this._getShuffledServers()){let i=new AbortController;this._abortControllers.push(i);try{let a=await this._request(Vg(o,e,t),i.signal),c=a.Answer.map(u=>u.data),l=Math.min(...a.Answer.map(u=>u.TTL));return this._cache.set(ml(e,t),c,{ttl:l}),c}catch{i.signal.aborted&&(s=!0),jE.error(`${o} could not resolve ${e} record ${t}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==i)}}throw s?Object.assign(new Error("queryA ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${t}`)}async resolve6(e){let t="AAAA",n=this._cache.get(ml(e,t));if(n!=null)return n;let s=!1;for(let o of this._getShuffledServers()){let i=new AbortController;this._abortControllers.push(i);try{let a=await this._request(Vg(o,e,t),i.signal),c=a.Answer.map(u=>u.data),l=Math.min(...a.Answer.map(u=>u.TTL));return this._cache.set(ml(e,t),c,{ttl:l}),c}catch{i.signal.aborted&&(s=!0),jE.error(`${o} could not resolve ${e} record ${t}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==i)}}throw s?Object.assign(new Error("queryAaaa ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${t}`)}async resolveTxt(e){let t="TXT",n=this._TXTcache.get(ml(e,t));if(n!=null)return n;let s=!1;for(let o of this._getShuffledServers()){let i=new AbortController;this._abortControllers.push(i);try{let a=await this._request(Vg(o,e,t),i.signal),c=a.Answer.map(u=>[u.data.replace(/['"]+/g,"")]),l=Math.min(...a.Answer.map(u=>u.TTL));return this._TXTcache.set(ml(e,t),c,{ttl:l}),c}catch{i.signal.aborted&&(s=!0),jE.error(`${o} could not resolve ${e} record ${t}`)}finally{this._abortControllers=this._abortControllers.filter(a=>a!==i)}}throw s?Object.assign(new Error("queryTxt ECANCELLED"),{code:"ECANCELLED"}):new Error(`Could not resolve ${e} record ${t}`)}clearCache(){this._cache.clear(),this._TXTcache.clear()}},HU=JE;var $U=HU;var{code:uce}=xe("dnsaddr");async function Wf(r,e={}){let t=new $U;e.signal!=null&&e.signal.addEventListener("abort",()=>{t.cancel()});let n=r.getPeerId(),[,s]=r.stringTuples().find(([a])=>a===uce)??[];if(s==null)throw new Error("No hostname found in multiaddr");let i=(await t.resolveTxt(`_dnsaddr.${s}`)).flat().map(a=>a.split("=")[1]).filter(Boolean);return n!=null&&(i=i.filter(a=>a.includes(n))),i}var Li;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(Li||(Li={}));var fe;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(fe||(fe={}));var fce={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Wf},addressSorter:Gf},transportManager:{faultTolerance:Ui.FATAL_ALL}};async function zU(r){let e=xf(fce,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new g(Li.ERR_PROTECTOR_REQUIRED,fe.ERR_PROTECTOR_REQUIRED);if(!(await cr(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new g("Private key doesn't match peer id",fe.ERR_INVALID_KEY);return e}function qg(r){if(kl(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:Me(t),r.forEach(n=>{if(!xa(n))throw new g("Invalid Multiaddr",fe.ERR_INVALID_MULTIADDR);let s=n.getPeerId();if(s==null){if(e!=null)throw new g("Multiaddrs must all have the same peer id or have no peer id",fe.ERR_INVALID_PARAMETERS)}else{let o=Me(s);if(e==null||!e.equals(o))throw new g("Multiaddrs must all have the same peer id or have no peer id",fe.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var Hg="last-dial-failure";var $g=5,zg=100,Gg=50,GU=1e3*60*7;var yl={minConnections:$g,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:GU,autoDialDiscoveredPeersDebounce:10},Wg=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??yl.minConnections,this.autoDialPriority=t.autoDialPriority??yl.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??yl.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??yl.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??yl.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??yl.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new La({concurrency:t.autoDialConcurrency??yl.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",s=>{this.log.error("error during auto-dial",s.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(s=>{this.log.error(s)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(s=>{this.log.error(s)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new pr(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),s=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),o=s.sort(()=>Math.random()>.5?1:-1),i=new _r;for(let l of o)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((u,f)=>u+f.value,0));let c=o.sort((l,u)=>{let f=i.get(l.id)??0,h=i.get(u.id)??0;return f>h?-1:f<h?1:0}).filter(l=>{let u=l.metadata.get(Hg);if(u==null)return!0;let f=parseInt(T(u));return isNaN(f)?!0:Date.now()-f>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,s.length);for(let l of c)this.queue.add(async()=>{let u=this.connectionManager.getConnectionsMap().size;if(u>=this.minConnections){this.log("got enough connections now %d/%d",u,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(u=>{this.log.error("could not connect to peerStore stored peer",u)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var WU={maxConnections:zg,allow:[]},Yg=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??WU.maxConnections,this.allow=t.allow??WU.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=Math.max(t-this.maxConnections,0);if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;this.log("max connections limit exceeded %d/%d, pruning %d connection(s)",t,this.maxConnections,n);let s=new _r;for(let a of e){let c=a.remotePeer;if(!s.has(c)){s.set(c,0);try{let l=await this.peerStore.get(c);s.set(c,[...l.tags.values()].reduce((u,f)=>u+f.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let o=e.sort((a,c)=>{let l=s.get(a.remotePeer)??0,u=s.get(c.remotePeer)??0;if(l>u)return 1;if(l<u)return-1;let f=a.timeline.open,h=c.timeline.open;return f<h?1:f>h?-1:0}),i=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===n)break;await Promise.all(i.map(async a=>{try{await a.close()}catch(c){this.log.error(c)}})),this.events.safeDispatchEvent("connection:prune",{detail:i})}};async function r9(r,e){if(!r.protoNames().includes("dnsaddr"))return[r];let n=await pce(r,e),i=(await Promise.all(n.map(async a=>r9(a,e)))).flat().reduce((a,c)=>(a.find(l=>l.equals(c))==null&&a.push(c),a),[]);return e.log("resolved %s to",r,i.map(a=>a.toString())),i}async function pce(r,e){try{return r=pe(r.toString()),await r.resolve(e)}catch(t){return e.log.error(`multiaddr ${r.toString()} could not be resolved`,t),[]}}var jg={addressSorter:Gf,maxParallelDials:Gg,maxPeerAddrsToDial:25,dialTimeout:3e4,resolvers:{dnsaddr:Wf}},Qg=class{queue;components;addressSorter;maxPeerAddrsToDial;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??jg.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??jg.maxPeerAddrsToDial,this.dialTimeout=t.dialTimeout??jg.dialTimeout,this.connections=t.connections??new _r,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,et(1/0,this.shutDownController.signal);for(let[n,s]of Object.entries(t.resolvers??{}))lm.set(n,s);this.queue=new Ho({concurrency:t.maxParallelDials??jg.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:s}=qg(e),o=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:s.find(c=>c.equals(a.remoteAddr)));if(o!=null)return this.log("already connected to %a",o.remoteAddr),o;let i=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of s)if(c.has(l.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let a of s)i.options.multiaddrs.add(a.toString());return i.join(t)}return this.log("creating dial target for %p",n,s.map(a=>a.toString())),this.queue.add(async a=>{let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),l.map(({multiaddr:u})=>u.toString()).forEach(u=>{a?.multiaddrs.add(u)})}catch(u){throw c.clear(),u}try{let u=0,f=[];for(let h of l){if(u===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",u,n),new g("Peer had more than maxPeerAddrsToDial",fe.ERR_TOO_MANY_ADDRESSES);u++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",h.multiaddr),p}catch(p){if(this.log.error("dial failed to %a",h.multiaddr,p),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[Hg]:R(Date.now().toString())}})}catch(d){this.log.error("could not update last dial failure key for %p",n,d)}if(c.aborted)throw new g(p.message,Vo);f.push(p)}}throw f.length===1?f[0]:new l0(f,"All multiaddr dials failed",fe.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority,multiaddrs:new Set(s.map(a=>a.toString())),signal:t.signal})}createDialAbortController(e){let t=ir([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return et(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let s=[...t].map(f=>({multiaddr:pe(f),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new g("Tried to dial self",fe.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new g("The dial request is blocked by gater.allowDialPeer",fe.ERR_PEER_DIAL_INTERCEPTED);if(s.length===0){this.log("loading multiaddrs for %p",e);try{let f=await this.components.peerStore.get(e);s.push(...f.addresses),this.log("loaded multiaddrs for %p",e,s.map(({multiaddr:h})=>h.toString()))}catch(f){if(f.code!==fe.ERR_NOT_FOUND)throw f}}if(s.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let f=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,s.map(({multiaddr:h})=>h.toString())),s.push(...f.multiaddrs.map(h=>({multiaddr:h,isCertified:!1})))}catch(f){f.code!==fe.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,f)}}}let o=(await Promise.all(s.map(async f=>{let h=await r9(f.multiaddr,{...n,log:this.log});return h.length===1&&h[0].equals(f.multiaddr)?f:h.map(p=>({multiaddr:p,isCertified:!1}))}))).flat();if(e!=null){let f=`/p2p/${e.toString()}`;o=o.map(h=>h.multiaddr.protos().pop()?.path===!0?h:h.multiaddr.getPeerId()==null?{multiaddr:h.multiaddr.encapsulate(f),isCertified:h.isCertified}:h)}let i=o.filter(f=>{if(this.components.transportManager.transportForMultiaddr(f.multiaddr)==null)return!1;let h=f.multiaddr.getPeerId();return e!=null&&h!=null?e.equals(h):!0}),a=new Map;for(let f of i){let h=f.multiaddr.toString(),p=a.get(h);if(p!=null){p.isCertified=p.isCertified||f.isCertified||!1;continue}a.set(h,f)}let c=[...a.values()];if(c.length===0)throw new g("The dial request has no valid addresses",fe.ERR_NO_VALID_ADDRESSES);let l=[];for(let f of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(f.multiaddr)||l.push(f);let u=l.sort(this.addressSorter);if(u.length===0)throw new g("The connection gater denied all addresses in the dial request",fe.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",o.map(({multiaddr:f})=>f.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:f})=>f.toString())),u}};var gce=50,gl={minConnections:$g,maxConnections:zg,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100},Xg=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??gl.maxConnections;let n=t.minConnections??gl.minConnections;if(this.maxConnections<n)throw new g("Connection Manager maxConnections must be greater than minConnections",fe.ERR_INVALID_PARAMETERS);this.connections=new _r,this.started=!1,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(s=>pe(s)),this.deny=(t.deny??[]).map(s=>pe(s)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??gl.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Sf({points:t.inboundConnectionThreshold??gl.inboundConnectionThreshold,duration:1}),this.autoDial=new Wg({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??gl.autoDialConcurrency,autoDialPriority:t.autoDialPriority??gl.autoDialPriority,maxQueueLength:t.autoDialMaxQueueLength??gl.autoDialMaxQueueLength}),this.connectionPruner=new Yg({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new Qg(e,{addressSorter:t.addressSorter??Gf,maxParallelDials:t.maxParallelDials??Gg,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??3e4,resolvers:t.resolvers??{dnsaddr:Wf},connections:this.connections})}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let s of n.streams){let o=`${s.direction} ${s.protocol??"unnegotiated"}`;e[o]=(e[o]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let s of n){let o={};for(let i of s.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;o[a]=(o[a]??0)+1}for(let[i,a]of Object.entries(o))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,s]of Object.entries(e)){s=s.sort((i,a)=>i-a);let o=Math.floor(s.length*.9);t[n]=s[o]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(rv)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(s){this.log.error(s)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,s=this.connections.get(n),o=!1;s!=null?s.push(t):(o=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,s=this.connections.get(n);s!=null&&s.length>1?(s=s.filter(o=>o.id!==t.id),this.connections.set(n,s)):s!=null&&(this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.isStarted())throw new g("Not started",fe.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=qg(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),a}let s=await this.dialQueue.dial(e,{...t,priority:t.priority??gce}),o=this.connections.get(s.remotePeer);o==null&&(o=[],this.connections.set(s.remotePeer,o));let i=!1;for(let a of o)a.id===s.id&&(i=!0);return i||o.push(s),s}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async s=>{try{await s.close(t)}catch(o){s.abort(o)}}))}async acceptIncomingConnection(e){if(this.deny.some(s=>e.remoteAddr.toString().startsWith(s.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(s=>e.remoteAddr.toString().startsWith(s.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let s=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(s,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,s),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>pe(n))}))}};var Jg=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new g("No content routers available",fe.ERR_NO_ROUTERS_AVAILABLE);let n=this,s=new pr;for await(let o of cs(...n.routers.map(i=>i.findProviders(e,t))))o!=null&&(o.multiaddrs.length>0&&await this.components.peerStore.merge(o.id,{multiaddrs:o.multiaddrs}),!s.has(o.id)&&(s.add(o.id),yield o))}async provide(e,t={}){if(this.routers.length===0)throw new g("No content routers available",fe.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new g(Li.NOT_STARTED_YET,fe.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async s=>{await s.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new g(Li.NOT_STARTED_YET,fe.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var Zg=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[]}async findPeer(e,t){if(this.routers.length===0)throw new g("No peer routers available",fe.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new g("Should not try to find self",fe.ERR_FIND_SELF);let n=this,s=cs(...this.routers.map(o=>async function*(){try{yield await o.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let o of s)if(o!=null)return o.multiaddrs.length>0&&await this.peerStore.merge(o.id,{multiaddrs:o.multiaddrs}),o;throw new g(Li.NOT_FOUND,fe.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new g("No peer routers available",fe.ERR_NO_ROUTERS_AVAILABLE);let n=this,s=new pr;for await(let o of wi(async function*(){let i=cs(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))o!=null&&(o.multiaddrs.length>0&&await this.peerStore.merge(o.id,{multiaddrs:o.multiaddrs}),!s.has(o.id)&&(s.add(o.id),yield o))}};var o9=32,i9=64,e3=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new g(`No handler registered for protocol ${e}`,fe.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new g(`Handler already registered for protocol ${e}`,fe.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let s=xf.bind({ignoreUndefined:!0})({maxInboundStreams:o9,maxOutboundStreams:i9},n);this.handlers.set(e,{handler:t,options:s}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new g("invalid topology",fe.ERR_INVALID_PARAMETERS);let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,s=this.topologies.get(e);return s==null&&(s=new Map,this.topologies.set(e,s)),s.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let s of n.protocols){let o=this.topologies.get(s);if(o!=null)for(let i of o.values())i.onDisconnect?.(t)}}).catch(n=>{n.code!==fe.ERR_NOT_FOUND&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,s=(n?.protocols??[]).filter(o=>!t.protocols.includes(o));for(let o of s){let i=this.topologies.get(o);if(i!=null)for(let a of i.values())a.onDisconnect?.(t.id)}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,s=e.detail.peerId;for(let o of t){let i=this.topologies.get(o);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.onConnect?.(s,n)}}};var t3=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Vs({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Ui.FATAL_ALL}add(e){let t=e[Symbol.toStringTag];if(t==null)throw new g("Transport must have a valid tag",fe.ERR_INVALID_KEY);if(this.transports.has(t))throw new g(`There is already a transport with the tag ${t}`,fe.ERR_DUPLICATE_TRANSPORT);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let s=n.pop();s!=null&&e.push(s.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.transportForMultiaddr(e);if(n==null)throw new g(`No transport available for address ${String(e)}`,fe.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(s){throw s.code==null&&(s.code=fe.ERR_TRANSPORT_DIAL_FAILED),s}}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}transportForMultiaddr(e){for(let t of this.transports.values())if(t.filter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new g("Not started",fe.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,s]of this.transports.entries()){let o=s.filter(e),i=[];for(let l of o){this.log("creating listener for %s on %a",n,l);let u=s.createListener({upgrader:this.components.upgrader}),f=this.listeners.get(n)??[];f==null&&(f=[],this.listeners.set(n,f)),f.push(u),u.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:u})}),u.addEventListener("close",()=>{let h=f.findIndex(p=>p===u);f.splice(h,1),this.components.events.safeDispatchEvent("transport:close",{detail:u})}),i.push(u.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==Ui.NO_FATAL)throw new g(`Transport (${n}) could not listen on any available address`,fe.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===Ui.FATAL_ALL)throw new g(n,fe.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let s=t.pop();s!=null&&n.push(s.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Tr="/multistream/1.0.0";var bce=R(`
71
71
  `);async function bl(r,e,t){await r.write(e,t)}async function YU(r,e,t){await r.writeV(e,t)}async function wce(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==bce[0])throw e.log.error("Invalid mss message - missing newline",t),new g("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return t.sublist(0,-1)}async function Wa(r,e){let t=await wce(r,e);return T(t.subarray())}async function jp(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return Ece(r,e[0],t);let n=no(r,{...t,maxDataLength:1024}),s=e.shift();if(s==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Tr,s);let o=R(`${Tr}
72
72
  `),i=R(`${s}
@@ -1,3 +1,3 @@
1
- export declare const version = "3.0.1-5c6a066";
1
+ export declare const version = "3.0.1-ece384a";
2
2
  export declare const name = "helia";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
- export const version = '3.0.1-5c6a066';
1
+ export const version = '3.0.1-ece384a';
2
2
  export const name = 'helia';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helia",
3
- "version": "3.0.1-5c6a066",
3
+ "version": "3.0.1-ece384a",
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/main/packages/helia#readme",
@@ -57,9 +57,9 @@
57
57
  "@chainsafe/libp2p-gossipsub": "^11.0.0",
58
58
  "@chainsafe/libp2p-noise": "^14.0.0",
59
59
  "@chainsafe/libp2p-yamux": "^6.0.1",
60
- "@helia/block-brokers": "1.0.0-5c6a066",
60
+ "@helia/block-brokers": "1.0.0-ece384a",
61
61
  "@helia/delegated-routing-v1-http-api-client": "^1.1.0",
62
- "@helia/interface": "3.0.1-5c6a066",
62
+ "@helia/interface": "3.0.1-ece384a",
63
63
  "@ipld/dag-cbor": "^9.0.0",
64
64
  "@ipld/dag-json": "^10.0.1",
65
65
  "@ipld/dag-pb": "^4.0.3",
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '3.0.1-5c6a066'
1
+ export const version = '3.0.1-ece384a'
2
2
  export const name = 'helia'