nostr-fetch
Version:
A utility library that allows JS/TS apps to effortlessly fetch past events from Nostr relays
3 lines • 60.5 kB
JavaScript
var Pn=Object.defineProperty;var _n=(t,e)=>{for(var n in e)Pn(t,n,{get:e[n],enumerable:!0})};var re=class{promise;constructor(){this.promise=new Promise((e,n)=>{this.resolve=r=>{e(r)},this.reject=r=>{n(r)}})}},Me=class extends Error{constructor(){super("channel closed")}},se=class t{#e=[];#t;#n=!1;#s=!1;#o;#r;constructor({highWaterMark:e=void 0}){this.#o=e??Number.POSITIVE_INFINITY}static make(e){let n=new t(e??{});return[n,n]}send(e){if(this.#t!==void 0){this.#t.resolve(e),this.#t=void 0;return}this.#n||this.#e.push(()=>Promise.resolve(e))}error(e){if(this.#t!==void 0){this.#t.reject(e),this.#t=void 0;return}this.#n||this.#e.push(()=>Promise.reject(e))}close(){this.#n||(this.#n=!0,this.#t!==void 0&&(this.#t.reject(new Me),this.#t=void 0))}waitUntilDrained(){return this.#r!==void 0?this.#r.promise:this.#e.length<=this.#o?Promise.resolve():(this.#r=new re,this.#r.promise)}numBufferedItems(){return this.#e.length}get isCompleted(){return this.#n&&this.#e.length===0}recv(){if(this.#e.length>0){let n=this.#e.shift();return this.#r!==void 0&&this.#e.length<=this.#o&&(this.#r.resolve(),this.#r=void 0),n}if(this.#t!==void 0)return()=>Promise.reject(Error("Double receive is not allowed"));let e=new re;return this.#t=e,()=>e.promise}async*[Symbol.asyncIterator](){if(this.#s)throw Error("Iterating a single channel in multiple location is not allowed");for(this.#s=!0;;)try{if(this.isCompleted)break;yield await this.recv()()}catch(e){if(e instanceof Me)break;throw e}}};function Dt(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function qn(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function fe(t,...e){if(!qn(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function zt(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Dt(t.outputLen),Dt(t.blockLen)}function Se(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function jt(t,e){fe(t);let n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}var Pe=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var _e=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),j=(t,e)=>t<<32-e|t>>>e;var Jr=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var Un=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Zt(t){fe(t);let e="";for(let n=0;n<t.length;n++)e+=Un[t[n]];return e}function Vn(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Ae(t){return typeof t=="string"&&(t=Vn(t)),fe(t),t}function Gt(...t){let e=0;for(let r=0;r<t.length;r++){let o=t[r];fe(o),e+=o.length}let n=new Uint8Array(e);for(let r=0,o=0;r<t.length;r++){let s=t[r];n.set(s,o),o+=s.length}return n}var xe=class{clone(){return this._cloneInto()}},es={}.toString;function Qt(t){let e=r=>t().update(Ae(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function qe(t=32){if(Pe&&typeof Pe.getRandomValues=="function")return Pe.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}function $n(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);let o=BigInt(32),s=BigInt(4294967295),i=Number(n>>o&s),a=Number(n&s),c=r?4:0,l=r?0:4;t.setUint32(e+c,i,r),t.setUint32(e+l,a,r)}var Yt=(t,e,n)=>t&e^~t&n,Xt=(t,e,n)=>t&e^t&n^e&n,Ue=class extends xe{constructor(e,n,r,o){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=_e(this.buffer)}update(e){Se(this);let{view:n,buffer:r,blockLen:o}=this;e=Ae(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=_e(e);for(;o<=s-i;i+=o)this.process(c,i);continue}r.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Se(this),jt(e,this),this.finished=!0;let{buffer:n,view:r,blockLen:o,isLE:s}=this,{pos:i}=this;n[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;$n(r,o-8,BigInt(this.length*8),s),this.process(r,0);let a=_e(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,p=this.get();if(l>p.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,p[u],s)}digest(){let{buffer:e,outputLen:n}=this;this.digestInto(e);let r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%n&&e.buffer.set(r),e}};var Wn=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),oe=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ie=new Uint32Array(64),dt=class extends Ue{constructor(){super(64,32,8,!1),this.A=oe[0]|0,this.B=oe[1]|0,this.C=oe[2]|0,this.D=oe[3]|0,this.E=oe[4]|0,this.F=oe[5]|0,this.G=oe[6]|0,this.H=oe[7]|0}get(){let{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:c}=this;return[e,n,r,o,s,i,a,c]}set(e,n,r,o,s,i,a,c){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,n){for(let u=0;u<16;u++,n+=4)ie[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){let x=ie[u-15],v=ie[u-2],E=j(x,7)^j(x,18)^x>>>3,f=j(v,17)^j(v,19)^v>>>10;ie[u]=f+ie[u-7]+E+ie[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:c,G:l,H:p}=this;for(let u=0;u<64;u++){let x=j(a,6)^j(a,11)^j(a,25),v=p+x+Yt(a,c,l)+Wn[u]+ie[u]|0,f=(j(r,2)^j(r,13)^j(r,22))+Xt(r,o,s)|0;p=l,l=c,c=a,a=i+v|0,i=s,s=o,o=r,r=v+f|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,p=p+this.H|0,this.set(r,o,s,i,a,c,l,p)}roundClean(){ie.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Re=Qt(()=>new dt);var gt={};_n(gt,{abytes:()=>Oe,bitGet:()=>Qn,bitLen:()=>Gn,bitMask:()=>Ne,bitSet:()=>Yn,bytesToHex:()=>de,bytesToNumberBE:()=>U,bytesToNumberLE:()=>$e,concatBytes:()=>X,createHmacDrbg:()=>yt,ensureBytes:()=>K,equalBytes:()=>jn,hexToBytes:()=>he,hexToNumber:()=>pt,isBytes:()=>ae,numberToBytesBE:()=>Z,numberToBytesLE:()=>We,numberToHexUnpadded:()=>nn,numberToVarBytesBE:()=>zn,utf8ToBytes:()=>Zn,validateObject:()=>ce});var tn=BigInt(0),Ve=BigInt(1),Hn=BigInt(2);function ae(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Oe(t){if(!ae(t))throw new Error("Uint8Array expected")}var Dn=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function de(t){Oe(t);let e="";for(let n=0;n<t.length;n++)e+=Dn[t[n]];return e}function nn(t){let e=t.toString(16);return e.length&1?`0${e}`:e}function pt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return BigInt(t===""?"0":`0x${t}`)}var Y={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function Jt(t){if(t>=Y._0&&t<=Y._9)return t-Y._0;if(t>=Y._A&&t<=Y._F)return t-(Y._A-10);if(t>=Y._a&&t<=Y._f)return t-(Y._a-10)}function he(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,n=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){let i=Jt(t.charCodeAt(s)),a=Jt(t.charCodeAt(s+1));if(i===void 0||a===void 0){let c=t[s]+t[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}r[o]=i*16+a}return r}function U(t){return pt(de(t))}function $e(t){return Oe(t),pt(de(Uint8Array.from(t).reverse()))}function Z(t,e){return he(t.toString(16).padStart(e*2,"0"))}function We(t,e){return Z(t,e).reverse()}function zn(t){return he(nn(t))}function K(t,e,n){let r;if(typeof e=="string")try{r=he(e)}catch(s){throw new Error(`${t} must be valid hex string, got "${e}". Cause: ${s}`)}else if(ae(e))r=Uint8Array.from(e);else throw new Error(`${t} must be hex string or Uint8Array`);let o=r.length;if(typeof n=="number"&&o!==n)throw new Error(`${t} expected ${n} bytes, got ${o}`);return r}function X(...t){let e=0;for(let r=0;r<t.length;r++){let o=t[r];Oe(o),e+=o.length}let n=new Uint8Array(e);for(let r=0,o=0;r<t.length;r++){let s=t[r];n.set(s,o),o+=s.length}return n}function jn(t,e){if(t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function Zn(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Gn(t){let e;for(e=0;t>tn;t>>=Ve,e+=1);return e}function Qn(t,e){return t>>BigInt(e)&Ve}function Yn(t,e,n){return t|(n?Ve:tn)<<BigInt(e)}var Ne=t=>(Hn<<BigInt(t-1))-Ve,ht=t=>new Uint8Array(t),en=t=>Uint8Array.from(t);function yt(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=ht(t),o=ht(t),s=0,i=()=>{r.fill(1),o.fill(0),s=0},a=(...u)=>n(o,r,...u),c=(u=ht())=>{o=a(en([0]),u),r=a(),u.length!==0&&(o=a(en([1]),u),r=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,x=[];for(;u<e;){r=a();let v=r.slice();x.push(v),u+=r.length}return X(...x)};return(u,x)=>{i(),c(u);let v;for(;!(v=x(l()));)c();return i(),v}}var Xn={bigint:t=>typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||ae(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function ce(t,e,n={}){let r=(o,s,i)=>{let a=Xn[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=t[o];if(!(i&&c===void 0)&&!a(c,t))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))r(o,s,!1);for(let[o,s]of Object.entries(n))r(o,s,!0);return t}var P=BigInt(0),L=BigInt(1),pe=BigInt(2),Jn=BigInt(3),bt=BigInt(4),rn=BigInt(5),sn=BigInt(8),er=BigInt(9),tr=BigInt(16);function M(t,e){let n=t%e;return n>=P?n:e+n}function nr(t,e,n){if(n<=P||e<P)throw new Error("Expected power/modulo > 0");if(n===L)return P;let r=L;for(;e>P;)e&L&&(r=r*t%n),t=t*t%n,e>>=L;return r}function W(t,e,n){let r=t;for(;e-- >P;)r*=r,r%=n;return r}function He(t,e){if(t===P||e<=P)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let n=M(t,e),r=e,o=P,s=L,i=L,a=P;for(;n!==P;){let l=r/n,p=r%n,u=o-i*l,x=s-a*l;r=n,n=p,o=i,s=a,i=u,a=x}if(r!==L)throw new Error("invert: does not exist");return M(o,e)}function rr(t){let e=(t-L)/pe,n,r,o;for(n=t-L,r=0;n%pe===P;n/=pe,r++);for(o=pe;o<t&&nr(o,e,t)!==t-L;o++);if(r===1){let i=(t+L)/bt;return function(c,l){let p=c.pow(l,i);if(!c.eql(c.sqr(p),l))throw new Error("Cannot find square root");return p}}let s=(n+L)/pe;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=r,p=a.pow(a.mul(a.ONE,o),n),u=a.pow(c,s),x=a.pow(c,n);for(;!a.eql(x,a.ONE);){if(a.eql(x,a.ZERO))return a.ZERO;let v=1;for(let f=a.sqr(x);v<l&&!a.eql(f,a.ONE);v++)f=a.sqr(f);let E=a.pow(p,L<<BigInt(l-v-1));p=a.sqr(E),u=a.mul(u,E),x=a.mul(x,p),l=v}return u}}function sr(t){if(t%bt===Jn){let e=(t+L)/bt;return function(r,o){let s=r.pow(o,e);if(!r.eql(r.sqr(s),o))throw new Error("Cannot find square root");return s}}if(t%sn===rn){let e=(t-rn)/sn;return function(r,o){let s=r.mul(o,pe),i=r.pow(s,e),a=r.mul(o,i),c=r.mul(r.mul(a,pe),i),l=r.mul(a,r.sub(c,r.ONE));if(!r.eql(r.sqr(l),o))throw new Error("Cannot find square root");return l}}return t%tr,rr(t)}var or=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function mt(t){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},n=or.reduce((r,o)=>(r[o]="function",r),e);return ce(t,n)}function ir(t,e,n){if(n<P)throw new Error("Expected power > 0");if(n===P)return t.ONE;if(n===L)return e;let r=t.ONE,o=e;for(;n>P;)n&L&&(r=t.mul(r,o)),o=t.sqr(o),n>>=L;return r}function ar(t,e){let n=new Array(e.length),r=e.reduce((s,i,a)=>t.is0(i)?s:(n[a]=s,t.mul(s,i)),t.ONE),o=t.inv(r);return e.reduceRight((s,i,a)=>t.is0(i)?s:(n[a]=t.mul(s,n[a]),t.mul(s,i)),o),n}function Et(t,e){let n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function on(t,e,n=!1,r={}){if(t<=P)throw new Error(`Expected Field ORDER > 0, got ${t}`);let{nBitLength:o,nByteLength:s}=Et(t,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=sr(t),a=Object.freeze({ORDER:t,BITS:o,BYTES:s,MASK:Ne(o),ZERO:P,ONE:L,create:c=>M(c,t),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return P<=c&&c<t},is0:c=>c===P,isOdd:c=>(c&L)===L,neg:c=>M(-c,t),eql:(c,l)=>c===l,sqr:c=>M(c*c,t),add:(c,l)=>M(c+l,t),sub:(c,l)=>M(c-l,t),mul:(c,l)=>M(c*l,t),pow:(c,l)=>ir(a,c,l),div:(c,l)=>M(c*He(l,t),t),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>He(c,t),sqrt:r.sqrt||(c=>i(a,c)),invertBatch:c=>ar(a,c),cmov:(c,l,p)=>p?l:c,toBytes:c=>n?We(c,s):Z(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return n?$e(c):U(c)}});return Object.freeze(a)}function an(t){if(typeof t!="bigint")throw new Error("field order must be bigint");let e=t.toString(2).length;return Math.ceil(e/8)}function vt(t){let e=an(t);return e+Math.ceil(e/2)}function cn(t,e,n=!1){let r=t.length,o=an(e),s=vt(e);if(r<16||r<s||r>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${r}`);let i=n?U(t):$e(t),a=M(i,e-L)+L;return n?We(a,o):Z(a,o)}var lr=BigInt(0),wt=BigInt(1);function ln(t,e){let n=(o,s)=>{let i=s.negate();return o?i:s},r=o=>{let s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:n,unsafeLadder(o,s){let i=t.ZERO,a=o;for(;s>lr;)s&wt&&(i=i.add(a)),a=a.double(),s>>=wt;return i},precomputeWindow(o,s){let{windows:i,windowSize:a}=r(s),c=[],l=o,p=l;for(let u=0;u<i;u++){p=l,c.push(p);for(let x=1;x<a;x++)p=p.add(l),c.push(p);l=p.double()}return c},wNAF(o,s,i){let{windows:a,windowSize:c}=r(o),l=t.ZERO,p=t.BASE,u=BigInt(2**o-1),x=2**o,v=BigInt(o);for(let E=0;E<a;E++){let f=E*c,h=Number(i&u);i>>=v,h>c&&(h-=x,i+=wt);let d=f,g=f+Math.abs(h)-1,R=E%2!==0,T=h<0;h===0?p=p.add(n(R,s[d])):l=l.add(n(T,s[g]))}return{p:l,f:p}},wNAFCached(o,s,i,a){let c=o._WINDOW_SIZE||1,l=s.get(o);return l||(l=this.precomputeWindow(o,c),c!==1&&s.set(o,a(l))),this.wNAF(c,l,i)}}}function St(t){return mt(t.Fp),ce(t,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Et(t.n,t.nBitLength),...t,p:t.Fp.ORDER})}function ur(t){let e=St(t);ce(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:n,Fp:r,a:o}=e;if(n){if(!r.eql(o,r.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof n!="object"||typeof n.beta!="bigint"||typeof n.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:fr,hexToBytes:dr}=gt,ye={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(t){let{Err:e}=ye;if(t.length<2||t[0]!==2)throw new e("Invalid signature integer tag");let n=t[1],r=t.subarray(2,n+2);if(!n||r.length!==n)throw new e("Invalid signature integer: wrong length");if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:fr(r),l:t.subarray(n+2)}},toSig(t){let{Err:e}=ye,n=typeof t=="string"?dr(t):t;Oe(n);let r=n.length;if(r<2||n[0]!=48)throw new e("Invalid signature tag");if(n[1]!==r-2)throw new e("Invalid signature: incorrect length");let{d:o,l:s}=ye._parseInt(n.subarray(2)),{d:i,l:a}=ye._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(t){let e=l=>Number.parseInt(l[0],16)&8?"00"+l:l,n=l=>{let p=l.toString(16);return p.length&1?`0${p}`:p},r=e(n(t.s)),o=e(n(t.r)),s=r.length/2,i=o.length/2,a=n(s),c=n(i);return`30${n(i+s+4)}02${c}${o}02${a}${r}`}},J=BigInt(0),D=BigInt(1),ys=BigInt(2),un=BigInt(3),gs=BigInt(4);function hr(t){let e=ur(t),{Fp:n}=e,r=e.toBytes||((E,f,h)=>{let d=f.toAffine();return X(Uint8Array.from([4]),n.toBytes(d.x),n.toBytes(d.y))}),o=e.fromBytes||(E=>{let f=E.subarray(1),h=n.fromBytes(f.subarray(0,n.BYTES)),d=n.fromBytes(f.subarray(n.BYTES,2*n.BYTES));return{x:h,y:d}});function s(E){let{a:f,b:h}=e,d=n.sqr(E),g=n.mul(d,E);return n.add(n.add(g,n.mul(E,f)),h)}if(!n.eql(n.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(E){return typeof E=="bigint"&&J<E&&E<e.n}function a(E){if(!i(E))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function c(E){let{allowedPrivateKeyLengths:f,nByteLength:h,wrapPrivateKey:d,n:g}=e;if(f&&typeof E!="bigint"){if(ae(E)&&(E=de(E)),typeof E!="string"||!f.includes(E.length))throw new Error("Invalid key");E=E.padStart(h*2,"0")}let R;try{R=typeof E=="bigint"?E:U(K("private key",E,h))}catch{throw new Error(`private key must be ${h} bytes, hex or bigint, not ${typeof E}`)}return d&&(R=M(R,g)),a(R),R}let l=new Map;function p(E){if(!(E instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(f,h,d){if(this.px=f,this.py=h,this.pz=d,f==null||!n.isValid(f))throw new Error("x required");if(h==null||!n.isValid(h))throw new Error("y required");if(d==null||!n.isValid(d))throw new Error("z required")}static fromAffine(f){let{x:h,y:d}=f||{};if(!f||!n.isValid(h)||!n.isValid(d))throw new Error("invalid affine point");if(f instanceof u)throw new Error("projective point not allowed");let g=R=>n.eql(R,n.ZERO);return g(h)&&g(d)?u.ZERO:new u(h,d,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(f){let h=n.invertBatch(f.map(d=>d.pz));return f.map((d,g)=>d.toAffine(h[g])).map(u.fromAffine)}static fromHex(f){let h=u.fromAffine(o(K("pointHex",f)));return h.assertValidity(),h}static fromPrivateKey(f){return u.BASE.multiply(c(f))}_setWindowSize(f){this._WINDOW_SIZE=f,l.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:f,y:h}=this.toAffine();if(!n.isValid(f)||!n.isValid(h))throw new Error("bad point: x or y not FE");let d=n.sqr(h),g=s(f);if(!n.eql(d,g))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:f}=this.toAffine();if(n.isOdd)return!n.isOdd(f);throw new Error("Field doesn't support isOdd")}equals(f){p(f);let{px:h,py:d,pz:g}=this,{px:R,py:T,pz:w}=f,m=n.eql(n.mul(h,w),n.mul(R,g)),b=n.eql(n.mul(d,w),n.mul(T,g));return m&&b}negate(){return new u(this.px,n.neg(this.py),this.pz)}double(){let{a:f,b:h}=e,d=n.mul(h,un),{px:g,py:R,pz:T}=this,w=n.ZERO,m=n.ZERO,b=n.ZERO,O=n.mul(g,g),F=n.mul(R,R),k=n.mul(T,T),B=n.mul(g,R);return B=n.add(B,B),b=n.mul(g,T),b=n.add(b,b),w=n.mul(f,b),m=n.mul(d,k),m=n.add(w,m),w=n.sub(F,m),m=n.add(F,m),m=n.mul(w,m),w=n.mul(B,w),b=n.mul(d,b),k=n.mul(f,k),B=n.sub(O,k),B=n.mul(f,B),B=n.add(B,b),b=n.add(O,O),O=n.add(b,O),O=n.add(O,k),O=n.mul(O,B),m=n.add(m,O),k=n.mul(R,T),k=n.add(k,k),O=n.mul(k,B),w=n.sub(w,O),b=n.mul(k,F),b=n.add(b,b),b=n.add(b,b),new u(w,m,b)}add(f){p(f);let{px:h,py:d,pz:g}=this,{px:R,py:T,pz:w}=f,m=n.ZERO,b=n.ZERO,O=n.ZERO,F=e.a,k=n.mul(e.b,un),B=n.mul(h,R),q=n.mul(d,T),A=n.mul(g,w),H=n.add(h,d),y=n.add(R,T);H=n.mul(H,y),y=n.add(B,q),H=n.sub(H,y),y=n.add(h,g);let S=n.add(R,w);return y=n.mul(y,S),S=n.add(B,A),y=n.sub(y,S),S=n.add(d,g),m=n.add(T,w),S=n.mul(S,m),m=n.add(q,A),S=n.sub(S,m),O=n.mul(F,y),m=n.mul(k,A),O=n.add(m,O),m=n.sub(q,O),O=n.add(q,O),b=n.mul(m,O),q=n.add(B,B),q=n.add(q,B),A=n.mul(F,A),y=n.mul(k,y),q=n.add(q,A),A=n.sub(B,A),A=n.mul(F,A),y=n.add(y,A),B=n.mul(q,y),b=n.add(b,B),B=n.mul(S,y),m=n.mul(H,m),m=n.sub(m,B),B=n.mul(H,q),O=n.mul(S,O),O=n.add(O,B),new u(m,b,O)}subtract(f){return this.add(f.negate())}is0(){return this.equals(u.ZERO)}wNAF(f){return v.wNAFCached(this,l,f,h=>{let d=n.invertBatch(h.map(g=>g.pz));return h.map((g,R)=>g.toAffine(d[R])).map(u.fromAffine)})}multiplyUnsafe(f){let h=u.ZERO;if(f===J)return h;if(a(f),f===D)return this;let{endo:d}=e;if(!d)return v.unsafeLadder(this,f);let{k1neg:g,k1:R,k2neg:T,k2:w}=d.splitScalar(f),m=h,b=h,O=this;for(;R>J||w>J;)R&D&&(m=m.add(O)),w&D&&(b=b.add(O)),O=O.double(),R>>=D,w>>=D;return g&&(m=m.negate()),T&&(b=b.negate()),b=new u(n.mul(b.px,d.beta),b.py,b.pz),m.add(b)}multiply(f){a(f);let h=f,d,g,{endo:R}=e;if(R){let{k1neg:T,k1:w,k2neg:m,k2:b}=R.splitScalar(h),{p:O,f:F}=this.wNAF(w),{p:k,f:B}=this.wNAF(b);O=v.constTimeNegate(T,O),k=v.constTimeNegate(m,k),k=new u(n.mul(k.px,R.beta),k.py,k.pz),d=O.add(k),g=F.add(B)}else{let{p:T,f:w}=this.wNAF(h);d=T,g=w}return u.normalizeZ([d,g])[0]}multiplyAndAddUnsafe(f,h,d){let g=u.BASE,R=(w,m)=>m===J||m===D||!w.equals(g)?w.multiplyUnsafe(m):w.multiply(m),T=R(this,h).add(R(f,d));return T.is0()?void 0:T}toAffine(f){let{px:h,py:d,pz:g}=this,R=this.is0();f==null&&(f=R?n.ONE:n.inv(g));let T=n.mul(h,f),w=n.mul(d,f),m=n.mul(g,f);if(R)return{x:n.ZERO,y:n.ZERO};if(!n.eql(m,n.ONE))throw new Error("invZ was invalid");return{x:T,y:w}}isTorsionFree(){let{h:f,isTorsionFree:h}=e;if(f===D)return!0;if(h)return h(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:f,clearCofactor:h}=e;return f===D?this:h?h(u,this):this.multiplyUnsafe(e.h)}toRawBytes(f=!0){return this.assertValidity(),r(u,this,f)}toHex(f=!0){return de(this.toRawBytes(f))}}u.BASE=new u(e.Gx,e.Gy,n.ONE),u.ZERO=new u(n.ZERO,n.ONE,n.ZERO);let x=e.nBitLength,v=ln(u,e.endo?Math.ceil(x/2):x);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:i}}function pr(t){let e=St(t);return ce(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function fn(t){let e=pr(t),{Fp:n,n:r}=e,o=n.BYTES+1,s=2*n.BYTES+1;function i(y){return J<y&&y<n.ORDER}function a(y){return M(y,r)}function c(y){return He(y,r)}let{ProjectivePoint:l,normPrivateKeyToScalar:p,weierstrassEquation:u,isWithinCurveOrder:x}=hr({...e,toBytes(y,S,C){let I=S.toAffine(),N=n.toBytes(I.x),_=X;return C?_(Uint8Array.from([S.hasEvenY()?2:3]),N):_(Uint8Array.from([4]),N,n.toBytes(I.y))},fromBytes(y){let S=y.length,C=y[0],I=y.subarray(1);if(S===o&&(C===2||C===3)){let N=U(I);if(!i(N))throw new Error("Point is not on curve");let _=u(N),V;try{V=n.sqrt(_)}catch(z){let te=z instanceof Error?": "+z.message:"";throw new Error("Point is not on curve"+te)}let $=(V&D)===D;return(C&1)===1!==$&&(V=n.neg(V)),{x:N,y:V}}else if(S===s&&C===4){let N=n.fromBytes(I.subarray(0,n.BYTES)),_=n.fromBytes(I.subarray(n.BYTES,2*n.BYTES));return{x:N,y:_}}else throw new Error(`Point of length ${S} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),v=y=>de(Z(y,e.nByteLength));function E(y){let S=r>>D;return y>S}function f(y){return E(y)?a(-y):y}let h=(y,S,C)=>U(y.slice(S,C));class d{constructor(S,C,I){this.r=S,this.s=C,this.recovery=I,this.assertValidity()}static fromCompact(S){let C=e.nByteLength;return S=K("compactSignature",S,C*2),new d(h(S,0,C),h(S,C,2*C))}static fromDER(S){let{r:C,s:I}=ye.toSig(K("DER",S));return new d(C,I)}assertValidity(){if(!x(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!x(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(S){return new d(this.r,this.s,S)}recoverPublicKey(S){let{r:C,s:I,recovery:N}=this,_=b(K("msgHash",S));if(N==null||![0,1,2,3].includes(N))throw new Error("recovery id invalid");let V=N===2||N===3?C+e.n:C;if(V>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");let $=N&1?"03":"02",ee=l.fromHex($+v(V)),z=c(V),te=a(-_*z),Be=a(I*z),ne=l.BASE.multiplyAndAddUnsafe(ee,te,Be);if(!ne)throw new Error("point at infinify");return ne.assertValidity(),ne}hasHighS(){return E(this.s)}normalizeS(){return this.hasHighS()?new d(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return he(this.toDERHex())}toDERHex(){return ye.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return he(this.toCompactHex())}toCompactHex(){return v(this.r)+v(this.s)}}let g={isValidPrivateKey(y){try{return p(y),!0}catch{return!1}},normPrivateKeyToScalar:p,randomPrivateKey:()=>{let y=vt(e.n);return cn(e.randomBytes(y),e.n)},precompute(y=8,S=l.BASE){return S._setWindowSize(y),S.multiply(BigInt(3)),S}};function R(y,S=!0){return l.fromPrivateKey(y).toRawBytes(S)}function T(y){let S=ae(y),C=typeof y=="string",I=(S||C)&&y.length;return S?I===o||I===s:C?I===2*o||I===2*s:y instanceof l}function w(y,S,C=!0){if(T(y))throw new Error("first arg must be private key");if(!T(S))throw new Error("second arg must be public key");return l.fromHex(S).multiply(p(y)).toRawBytes(C)}let m=e.bits2int||function(y){let S=U(y),C=y.length*8-e.nBitLength;return C>0?S>>BigInt(C):S},b=e.bits2int_modN||function(y){return a(m(y))},O=Ne(e.nBitLength);function F(y){if(typeof y!="bigint")throw new Error("bigint expected");if(!(J<=y&&y<O))throw new Error(`bigint expected < 2^${e.nBitLength}`);return Z(y,e.nByteLength)}function k(y,S,C=B){if(["recovered","canonical"].some(ue=>ue in C))throw new Error("sign() legacy options not supported");let{hash:I,randomBytes:N}=e,{lowS:_,prehash:V,extraEntropy:$}=C;_==null&&(_=!0),y=K("msgHash",y),V&&(y=K("prehashed msgHash",I(y)));let ee=b(y),z=p(S),te=[F(z),F(ee)];if($!=null&&$!==!1){let ue=$===!0?N(n.BYTES):$;te.push(K("extraEntropy",ue))}let Be=X(...te),ne=ee;function ft(ue){let ve=m(ue);if(!x(ve))return;let $t=c(ve),G=l.BASE.multiply(ve).toAffine(),we=a(G.x);if(we===J)return;let Ke=a($t*a(ne+we*z));if(Ke===J)return;let Wt=(G.x===we?0:2)|Number(G.y&D),Ht=Ke;return _&&E(Ke)&&(Ht=f(Ke),Wt^=1),new d(we,Ht,Wt)}return{seed:Be,k2sig:ft}}let B={lowS:e.lowS,prehash:!1},q={lowS:e.lowS,prehash:!1};function A(y,S,C=B){let{seed:I,k2sig:N}=k(y,S,C),_=e;return yt(_.hash.outputLen,_.nByteLength,_.hmac)(I,N)}l.BASE._setWindowSize(8);function H(y,S,C,I=q){let N=y;if(S=K("msgHash",S),C=K("publicKey",C),"strict"in I)throw new Error("options.strict was renamed to lowS");let{lowS:_,prehash:V}=I,$,ee;try{if(typeof N=="string"||ae(N))try{$=d.fromDER(N)}catch(G){if(!(G instanceof ye.Err))throw G;$=d.fromCompact(N)}else if(typeof N=="object"&&typeof N.r=="bigint"&&typeof N.s=="bigint"){let{r:G,s:we}=N;$=new d(G,we)}else throw new Error("PARSE");ee=l.fromHex(C)}catch(G){if(G.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(_&&$.hasHighS())return!1;V&&(S=e.hash(S));let{r:z,s:te}=$,Be=b(S),ne=c(te),ft=a(Be*ne),ue=a(z*ne),ve=l.BASE.multiplyAndAddUnsafe(ee,ft,ue)?.toAffine();return ve?a(ve.x)===z:!1}return{CURVE:e,getPublicKey:R,getSharedSecret:w,sign:A,verify:H,ProjectivePoint:l,Signature:d,utils:g}}var De=class extends xe{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,zt(e);let r=Ae(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,s=new Uint8Array(o);s.set(r.length>o?e.create().update(r).digest():r);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return Se(this),this.iHash.update(e),this}digestInto(e){Se(this),fe(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},xt=(t,e,n)=>new De(t,e).update(n).digest();xt.create=(t,e)=>new De(t,e);function yr(t){return{hash:t,hmac:(e,...n)=>xt(t,e,Gt(...n)),randomBytes:qe}}function dn(t,e){let n=r=>fn({...t,...yr(r)});return Object.freeze({...n(e),create:n})}var Ge=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),ze=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),yn=BigInt(1),je=BigInt(2),hn=(t,e)=>(t+e/je)/e;function gn(t){let e=Ge,n=BigInt(3),r=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=t*t*t%e,p=l*l*t%e,u=W(p,n,e)*p%e,x=W(u,n,e)*p%e,v=W(x,je,e)*l%e,E=W(v,o,e)*v%e,f=W(E,s,e)*E%e,h=W(f,a,e)*f%e,d=W(h,c,e)*h%e,g=W(d,a,e)*f%e,R=W(g,n,e)*p%e,T=W(R,i,e)*E%e,w=W(T,r,e)*l%e,m=W(w,je,e);if(!Ot.eql(Ot.sqr(m),t))throw new Error("Cannot find square root");return m}var Ot=on(Ge,void 0,void 0,{sqrt:gn}),Ct=dn({a:BigInt(0),b:BigInt(7),Fp:Ot,n:ze,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:t=>{let e=ze,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-yn*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=n,i=BigInt("0x100000000000000000000000000000000"),a=hn(s*t,e),c=hn(-r*t,e),l=M(t-a*n-c*o,e),p=M(-a*r-c*s,e),u=l>i,x=p>i;if(u&&(l=e-l),x&&(p=e-p),l>i||p>i)throw new Error("splitScalar: Endomorphism failed, k="+t);return{k1neg:u,k1:l,k2neg:x,k2:p}}}},Re),Qe=BigInt(0),bn=t=>typeof t=="bigint"&&Qe<t&&t<Ge,gr=t=>typeof t=="bigint"&&Qe<t&&t<ze,pn={};function Ze(t,...e){let n=pn[t];if(n===void 0){let r=Re(Uint8Array.from(t,o=>o.charCodeAt(0)));n=X(r,r),pn[t]=n}return Re(X(n,...e))}var Bt=t=>t.toRawBytes(!0).slice(1),Tt=t=>Z(t,32),Rt=t=>M(t,Ge),Ie=t=>M(t,ze),At=Ct.ProjectivePoint,br=(t,e,n)=>At.BASE.multiplyAndAddUnsafe(t,e,n);function kt(t){let e=Ct.utils.normPrivateKeyToScalar(t),n=At.fromPrivateKey(e);return{scalar:n.hasEvenY()?e:Ie(-e),bytes:Bt(n)}}function mn(t){if(!bn(t))throw new Error("bad x: need 0 < x < p");let e=Rt(t*t),n=Rt(e*t+BigInt(7)),r=gn(n);r%je!==Qe&&(r=Rt(-r));let o=new At(t,r,yn);return o.assertValidity(),o}function En(...t){return Ie(U(Ze("BIP0340/challenge",...t)))}function mr(t){return kt(t).bytes}function Er(t,e,n=qe(32)){let r=K("message",t),{bytes:o,scalar:s}=kt(e),i=K("auxRand",n,32),a=Tt(s^U(Ze("BIP0340/aux",i))),c=Ze("BIP0340/nonce",a,o,r),l=Ie(U(c));if(l===Qe)throw new Error("sign failed: k is zero");let{bytes:p,scalar:u}=kt(l),x=En(p,o,r),v=new Uint8Array(64);if(v.set(p,0),v.set(Tt(Ie(u+x*s)),32),!vn(v,r,o))throw new Error("sign: Invalid signature produced");return v}function vn(t,e,n){let r=K("signature",t,64),o=K("message",e),s=K("publicKey",n,32);try{let i=mn(U(s)),a=U(r.subarray(0,32));if(!bn(a))return!1;let c=U(r.subarray(32,64));if(!gr(c))return!1;let l=En(Tt(a),Bt(i),o),p=br(i,c,Ie(-l));return!(!p||!p.hasEvenY()||p.toAffine().x!==a)}catch{return!1}}var wn={getPublicKey:mr,sign:Er,verify:vn,utils:{randomPrivateKey:Ct.utils.randomPrivateKey,lift_x:mn,pointToBytes:Bt,numberToBytesBE:Z,bytesToNumberBE:U,taggedHash:Ze,mod:M}};var vr=new TextEncoder,Sn=t=>{let e=JSON.stringify([0,t.pubkey,t.created_at,t.kind,t.tags,t.content]),n=Zt(Re(vr.encode(e)));return t.id!==n?!1:wn.verify(t.sig,n,t.pubkey)};var xn={all:0,verbose:10,info:20,warn:30,error:40,none:50},Rn={verbose:console.debug,info:console.info,warn:console.warn,error:console.error},Q=class t{#e;#t;#n;constructor(e,n){this.#e=e,this.#t=n??"",this.#n=n?`[${n}]`:""}subLogger(e){return this.#t?new t(this.#e,`${this.#t}:${e}`):new t(this.#e,e)}log(e,n,...r){xn[e]<xn[this.#e]||(this.#n?Rn[e](`${this.#n} ${n}`,...r):Rn[e](n,...r))}};var le=class t extends Error{static{t.prototype.name="FetchTillEoseFailedSignal"}},Te=class t extends Error{static{t.prototype.name="FetchTillEoseAbortedSignal"}},Ye=t=>t instanceof Error&&t.name==="FetchTillEoseFailedSignal",Xe=t=>t instanceof Error&&t.name==="FetchTillEoseAbortedSignal",Nt={minLogLevel:"warn"};var wr={metadata:0,text:1,recommendRelay:2,contacts:3,encryptedDirectMessage:4,eventDeletion:5,repost:6,reaction:7,badgeAward:8,genericRepost:16,channelCreation:40,channelMetadata:41,channelMessage:42,channelHideMessage:43,channelMuteUser:44,fileMetadata:1063,liveChatMessage:1311,report:1984,label:1985,communityPostApproval:4550,zapRequest:9734,zap:9735,muteList:1e4,pinList:10001,relayList:10002,walletInfo:13194,clientAuth:22242,walletRequest:23194,walletResponse:23195,nostrConnect:24133,httpAuth:27235,categorizedPeopleList:3e4,categorizedBookmarkList:30001,profileBadges:30008,badgeDefinition:30009,marketplaceStall:30017,marketplaceProduct:30018,article:30023,draftArticle:30024,appSpecificData:30078,liveEvent:30311,classifiedListing:30402,draftClassifiedListing:30403,dateBasedCalendarEvent:31922,timeBasedCalendarEvent:31923,calendar:31924,calendarEventRsvp:31925,handlerRecommendation:31989,handlerInformation:31990,communityDefinition:34550},Sr=t=>65<=t&&t<=90||97<=t&&t<=122,xr=t=>t.length===1&&Sr(t.charCodeAt(0)),et=t=>t.startsWith("#")&&xr(t.substring(1)),Rr=["EVENT","EOSE","CLOSED","NOTICE"],Or=t=>Rr.includes(t),Tn=t=>{let e;try{e=JSON.parse(t)}catch(r){console.error("failed to parse R2C message as JSON:",r);return}if(!Array.isArray(e)||e.length===0||typeof e[0]!="string"){console.error("malformed R2C message");return}let n=e[0];if(!Or(n)){console.error("unsupported R2C message type:",e[0]);return}switch(n){case"EVENT":{if(e.length!==3){console.error("malformed R2C EVENT");return}let[,r,o]=e;if(typeof r!="string"||typeof o!="object"||o===null){console.error("malformed R2C EVENT");return}if(!Tr(o)){console.error("malformed event in R2C EVENT");return}return e}case"EOSE":{if(e.length!==2||typeof e[1]!="string"){console.error("malformed R2C EOSE");return}return e}case"CLOSED":{if(e.length!==3||typeof e[1]!="string"||typeof e[2]!="string"){console.error("malformed R2C CLOSED");return}return e}case"NOTICE":{if(e.length!==2){console.error("malformed R2C NOTICE");return}return e}default:return}},Tr=t=>!(!("id"in t)||typeof t.id!="string"||!On(t.id)||!("pubkey"in t)||typeof t.pubkey!="string"||!On(t.pubkey)||!("created_at"in t)||typeof t.created_at!="number"||!("kind"in t)||typeof t.kind!="number"||!("tags"in t)||!Array.isArray(t.tags)||t.tags.some(e=>!Array.isArray(e)||e.some(n=>typeof n!="string"))||!("content"in t)||typeof t.content!="string"||!("sig"in t)||typeof t.sig!="string"||!kr(t.sig)),On=t=>/^[a-f0-9]{64}$/.test(t),kr=t=>/^[a-f0-9]{128}$/.test(t),Cr=t=>!0,Br=t=>{let e=t.ids?new Set(t.ids):void 0,n=t.kinds?new Set(t.kinds):void 0,r=t.authors?new Set(t.authors):void 0,o=[];for(let s of Object.keys(t))s.startsWith("#")&&s.length===2&&o.push([s.charAt(1),new Set(t[s]??[])]);return{ids:e,kinds:n,authors:r,tags:o,since:t.since,until:t.until}},Ar=(t,e)=>t.tags.filter(n=>n[0]===e).map(n=>n[1]??""),Nr=(t,e)=>t.ids!==void 0&&!t.ids.has(e.id)||t.kinds!==void 0&&!t.kinds.has(e.kind)||t.authors!==void 0&&!t.authors.has(e.pubkey)||t.since!==void 0&&e.created_at<t.since||t.until!==void 0&&e.created_at>t.until?!1:t.tags.every(([r,o])=>{let s=Ar(e,r);return s.length===0?!1:s.some(i=>o.has(i))}),Je=class{#e;constructor(e){this.#e=e.map(Br)}match(e){return this.#e.some(n=>Nr(n,e))}},kn=async t=>{try{let e=Ir(t),n=await fetch(e,{headers:{Accept:"application/nostr+json"},signal:AbortSignal.timeout(5e3)});if(!n.ok)return console.error("relay information response is not ok"),new Set;let r=await n.json();return Lr(r)?new Set(r.supported_nips):(console.error("relay information document doesn't have proper 'supported_nips' property"),new Set)}catch(e){return console.error(e),new Set}},Ir=t=>{let e=new URL(t);switch(e.protocol){case"wss:":e.protocol="https:";break;case"ws:":e.protocol="http:";break}return e.toString()},Lr=t=>typeof t=="object"&&t!==null&&"supported_nips"in t&&Array.isArray(t.supported_nips)&&(t.supported_nips.length===0||t.supported_nips.every(e=>typeof e=="number")),Cn=()=>Date.now().toString()+Math.random().toString(32).substring(2,4),Fr=[/^too many concurrent REQs$/i,/^Subscription rejected/i,/^invalid:(.*)must (contain|be) less than or equal to/i,/^message too large$/i,/^Maximum concurrent subscription count reached$/i],Bn=t=>Fr.some(e=>e.test(t));var tt=(t=new Date)=>t.getTime(),nt=(t=new Date)=>Math.floor(tt(t)/1e3),rt=t=>{let e=new URL(t);return e.pathname=e.pathname.replace(/\/+/g,"/"),e.pathname.endsWith("/")&&(e.pathname=e.pathname.slice(0,-1)),(e.port==="80"&&e.protocol==="ws:"||e.port==="443"&&e.protocol==="wss:")&&(e.port=""),e.searchParams.sort(),e.hash="",e.toString()},Kr=t=>Array.from(new Set(t)),ge=t=>Kr(t.filter(e=>{try{return new URL(e),!0}catch{return!1}}).map(e=>rt(e)));var An=(t,e)=>{if(t.length<=e*2||e<=0)return t;let n=t.length;return`${t.slice(0,e)}:${t.slice(n-e)}`};var Nn=(t,e)=>new It(t,e),It=class{#e;#t;#n;#s={connect:new Set,disconnect:new Set,notice:new Set,error:new Set};#o=new Map;#r=[];#i;constructor(e,n){this.#e=e,this.#n=n}get url(){return this.#e}get wsReadyState(){return this.#t?.readyState??0}async forwardToSubAsync(e,n){let r=this.#o.get(e);r!==void 0&&await n(r)}async forwardToSub(e,n){let r=this.#o.get(e);r!==void 0&&n(r)}async handleMsgs(){if(this.#r.length===0){clearInterval(this.#i),this.#i=void 0;return}let e=performance.now();for(;this.#r.length>0&&performance.now()-e<5;){let n=this.#r.shift(),r=Tn(n);if(r!==void 0)switch(r[0]){case"EVENT":{let[,o,s]=r;await this.forwardToSubAsync(o,i=>i._forwardEvent(s));break}case"EOSE":{let[,o]=r;this.forwardToSub(o,s=>s._forwardEose());break}case"CLOSED":{let[,o,s]=r;this.forwardToSub(o,i=>i._forwardClosed(s));break}case"NOTICE":{let[,o]=r;this.#s.notice.forEach(s=>s(o));break}}}}async connect(){return new Promise((e,n)=>{let r=!1,o=setTimeout(()=>{r=!0,n(Error(`attempt to connect to the relay '${this.#e}' timed out`))},this.#n.connectTimeoutMs),s=()=>{n(Error("WebSocket error")),clearTimeout(o)},i=new this.#n.webSocketConstructor(this.#e);i.addEventListener("open",()=>{r||(this.#s.connect.forEach(a=>a()),this.#t=i,i.removeEventListener("error",s),i.addEventListener("error",()=>{this.#s.error.forEach(a=>a())}),e(this),clearTimeout(o))}),i.addEventListener("error",s),i.addEventListener("close",a=>{let c={code:a.code,reason:a.reason,wasClean:a.wasClean};this.#s.disconnect.forEach(l=>l(c))}),i.addEventListener("message",a=>{this.#r.push(a.data),this.#i===void 0&&(this.#i=setInterval(()=>this.handleMsgs(),0))})})}close(){this.#t!==void 0&&this.#t.close()}prepareSub(e,n){let r=n.subId??Cn(),o=new Lt(this,r,e,n);return this.#o.set(r,o),o}_removeSub(e){this.#o.delete(e)}on(e,n){this.#s[e].add(n)}off(e,n){this.#s[e].delete(n)}_sendC2RMessage(e){if(this.#t===void 0||this.#t.readyState!==1)throw Error("not connected to the relay");this.#t.send(JSON.stringify(e))}},Lt=class{#e;#t;#n;#s;#o;#r={event:new Set,eose:new Set,closed:new Set};#i;constructor(e,n,r,o){this.#e=e,this.#t=n,this.#n=r,this.#s=new Je(r),this.#o=o}get subId(){return this.#t}req(){this.#e._sendC2RMessage(["REQ",this.#t,...this.#n]),this.#c()}close(){this.#a(),this.#e._removeSub(this.#t),this.#e._sendC2RMessage(["CLOSE",this.#t])}on(e,n){this.#r[e].add(n)}off(e,n){this.#r[e].delete(n)}#a(){for(let e of Object.values(this.#r))e.clear();this.#i!==void 0&&clearTimeout(this.#i)}#c(){this.#i!==void 0&&(clearTimeout(this.#i),this.#i=void 0),this.#i=setTimeout(()=>{this.#r.eose.forEach(e=>e({aborted:!0}))},this.#o.abortSubBeforeEoseTimeoutMs)}async _forwardEvent(e){this.#c(),!(!this.#o.skipVerification&&!await this.#o.eventVerifier(e))&&(!this.#o.skipFilterMatching&&!this.#s.match(e)||this.#r.event.forEach(n=>n(e)))}_forwardEose(){this.#i!==void 0&&clearTimeout(this.#i),this.#r.eose.forEach(e=>e({aborted:!1}))}_forwardClosed(e){this.#r.closed.forEach(n=>n(e)),this.#a(),this.#e._removeSub(this.#t)}};var In=t=>new Ft(t),Pr=30*1e3,_r=10*1e3,Ft=class{#e=new Map;#t;#n;constructor(e){e.minLogLevel!=="none"&&(this.#n=new Q(e.minLogLevel)),this.#t=setInterval(()=>{this.#n?.log("info","watchdog started");let n=Array.from(this.#e.keys());this.addRelays(n,{connectTimeoutMs:_r,webSocketConstructor:e.webSocketConstructor}).then(()=>{this.#n?.log("info","watchdog completed")})},Pr)}#s(e){return e.state==="connectFailed"&&tt()-e.failedAt>30*1e3||e.state==="disconnected"||e.state==="alive"&&e.relay.wsReadyState===3}async addRelays(e,n){let r=[],o=[];for(let s of e){let i=this.#e.get(s);i===void 0||this.#s(i)?r.push(s):i.state==="connecting"&&o.push(i.wait)}await Promise.all([...r.map(async s=>{let i=this.#n?.subLogger(s),a=new re;try{this.#e.set(s,{state:"connecting",relayUrl:s,wait:a.promise});let c=Nn(s,n);c.on("connect",()=>i?.log("info","connected")),c.on("disconnect",l=>{i?.log("info",`disconnected: ${JSON.stringify(l)}`),this.#e.set(c.url,{state:"disconnected",relayUrl:c.url})}),c.on("error",()=>{i?.log("error","WebSocket error"),this.#e.set(c.url,{state:"disconnected",relayUrl:c.url})}),c.on("notice",l=>i?.log("warn",`NOTICE: ${l}`)),await c.connect(),this.#e.set(s,{state:"alive",relayUrl:s,relay:c})}catch{i?.log("error","failed to connect to the relay"),this.#e.set(s,{state:"connectFailed",relayUrl:s,failedAt:tt()})}finally{a.resolve()}}),...o])}async ensureRelays(e,n){let r=ge(e);await this.addRelays(r,n);let o=[];for(let s of r){let i=this.#e.get(s);i!==void 0&&i.state==="alive"&&o.push(i.relay.url)}return o}async ensureSingleRelay(e,n){let r=rt(e);await this.addRelays([r],n);let o=this.#e.get(r);if(o!==void 0&&o.state==="alive")return o.relay}shutdown(){clearInterval(this.#t);for(let[,e]of this.#e)e.state==="alive"&&e.relay.close();this.#e.clear()}};var Ln={webSocketConstructor:globalThis.WebSocket},st=class{#e;#t;#n;constructor(e){this.#e=In(e),this.#t=e.webSocketConstructor,e.minLogLevel!=="none"&&(this.#n=new Q(e.minLogLevel))}async ensureRelays(e,n){return this.#e.ensureRelays(e,{...n,webSocketConstructor:this.#t})}shutdown(){this.#e.shutdown()}async*fetchTillEose(e,n,r){let o=this.#n?.subLogger(e),s=await this.#e.ensureSingleRelay(e,{connectTimeoutMs:r.connectTimeoutMs,webSocketConstructor:this.#t});if(s===void 0)throw new le("failed to ensure connection to the relay");let[i,a]=se.make(),c=v=>{if(Bn(v)){try{u.close()}catch(E){o?.log("error",`failed to close subscription (id: ${u.subId}): ${E}`)}p(),i.error(new le(`NOTICE: ${v}`))}},l=()=>{p(),i.error(new le("WebSocket error"))},p=()=>{s.off("notice",c),s.off("error",l)};s.on("notice",c),s.on("error",l);let u=s.prepareSub([n],r);u.on("event",v=>{i.send(v)}),u.on("eose",({aborted:v})=>{x(),v?i.error(new Te(`subscription (id: ${u.subId}) aborted before EOSE due to timeout`)):i.close()}),u.on("closed",v=>{i.error(new le(`subscription (id: ${u.subId}) closed by relay: ${v}`))});let x=()=>{try{u.close()}catch(v){o?.log("error",`failed to close subscription (id: ${u.subId}): ${v}`)}p(),o?.log("verbose",`CLOSE: subId=${r.subId??"<auto>"}`)};o?.log("verbose",`REQ: subId=${r.subId??"<auto>"}, filter=%O`,n);try{u.req()}catch(v){i.error(new le("failed to send REQ",{cause:v})),p()}r.signal?.aborted&&(x(),i.error(new Te(`subscription (id: ${u.subId}) aborted by AbortController`))),r.signal?.addEventListener("abort",()=>{x(),i.error(new Te(`subscription (id: ${u.subId}) aborted by AbortController`))}),yield*a}};var be=class t extends Error{static{t.prototype.name="NostrFetchError"}};var me=(t,e,n)=>{let r=[];for(let o of e){let s=o(t);switch(s.severity){case"error":n?.log("error",`assertion error: ${s.msg}`),r.push(s.msg);break;case"warn":n?.log("warn",`warning: ${s.msg}`);break}}if(r.length>0){let o=r.map(s=>`- ${s}`).join(`
`);throw new be(`Invalid request!
${o}`)}};function Ce(t,e,n){return r=>t(r)?{severity:"none"}:{severity:e,msg:n}}function Ee(t,e,n){return r=>t(r).length!==0?{severity:"none"}:{severity:e,msg:n}}function _t(t,e){return n=>{let{since:r,until:o}=t(n);return r===void 0||o===void 0?{severity:"none"}:r<=o?{severity:"none"}:{severity:e,msg:"Invalid time range (since > until)"}}}function Fe(t,e){return n=>{let r=Object.keys(t(n)).filter(o=>o.startsWith("#")&&!et(o));return r.length>0?{severity:e,msg:`Filter has invalid tag queries: ${r.join(", ")}`}:{severity:"none"}}}var at=(t,e)=>t.created_at!==e.created_at?e.created_at-t.created_at:t.id<e.id?-1:t.id>e.id?1:0,Fn=(t,e)=>{switch(t){case"ids":return[e.id];case"authors":return[e.pubkey];case"kinds":return[e.kind]}let n=e.tags.filter(r=>r[0]===t.charAt(1)).map(r=>r[1]??"");return[...new Set(n)]},ot=class{#e;#t;constructor(e,n){this.#e=new Map(e.map(r=>[r,[]])),this.#t=n}getBucket(e){return this.#e.get(e)}add(e,n){let r=this.#e.get(e);return r===void 0?(console.error(`bucket not found for key: ${e}`),{state:"dropped"}):r.length>=this.#t?{state:"dropped"}:(r.push(n),r.length===this.#t?{state:"fulfilled",events:r}:{state:"open"})}calcKeysAndLimitForNextReq(){return[...this.#e.entries()].reduce(({keys:e,limit:n},[r,o])=>{let s=o.length;return{keys:s<this.#t?[...e,r]:e,limit:n+(this.#t-s)}},{keys:[],limit:0})}},it=class{#e;#t;constructor(e,n){this.#e=new Map;let r=[...new Set([...e.values()].flat())];this.#t=new Map(r.map(o=>[o,[]]));for(let[o,s]of e)for(let i of s){let a=n();this.#e.set(this.#n(i,o),a),this.#t.get(i)?.push(a)}}#n(e,n){return`${e}|${n}`}get(e,n){return this.#e.get(this.#n(e,n))}itemsByKey(e){return this.#t.get(e)}},qt=t=>{let e=new AbortController;if(t===void 0)return[e.signal,()=>e.abort()];if(AbortSignal.any!==void 0)return[AbortSignal.any([t,e.signal]),()=>e.abort()];let n=()=>{e.abort()};return t.addEventListener("abort",n,{once:!0}),e.signal.addEventListener("abort",()=>{t.removeEventListener("abort",n)}),[e.signal,()=>e.abort()]},Kt=class{#e=new Map;#t;constructor(e){e.minLogLevel!=="none"&&(this.#t=new Q(e.minLogLevel))}async relaySupportsNips(e,n){let r=this.#t?.subLogger(e);if(n.length===0)return!0;let o=this.#e.get(e);if(o!==void 0)return n.every(i=>o.has(i));let s=await kn(e);return r?.log("info",`supported NIPs: ${s}`),this.#e.set(e,s),n.every(i=>s.has(i))}},Ut=t=>new Kt(t),ct=t=>t?new Mt:new Pt,Mt=class{#e=new Map;report(e,n){let r=this.#e.get(e.id);return r!==void 0?{hasSeen:!0,seenOn:[...r.add(n)]}:(this.#e.set(e.id,new Set([n])),{hasSeen:!1,seenOn:[n]})}getSeenOn(e){return[...this.#e.get(e)??[]]}},Pt=class{#e=new Set;report(e,n){return this.#e.has(e.id)?{hasSeen:!0,seenOn:void 0}:(this.#e.add(e.id),{hasSeen:!1,seenOn:void 0})}getSeenOn(e){return[]}},ke=class t{#e={progress:{max:1,current:0},counts:{fetchedEvents:0,bufferedEvents:0,openedSubs:0,runningSubs:0}};#t=performance.now();#n=new Map;#s;#o;constructor(e,n){this.#s=e,this.#o=setInterval(()=>{this.#s(this.#r())},n)}#r(){return{...this.#e,elapsedTimeMs:performance.now()-this.#t,relays:Object.fromEntries(this.#n)}}static init(e,n){return e!==void 0?new t(e,n):void 0}setProgressMax(e){this.#e.progress.max=Math.max(e,1)}addProgress(e){this.#e.progress.current+=e}setCurrentProgress(e){this.#e.progress.current=e}eventFetched(e){this.#e.counts.fetchedEvents++;let n=this.#n.get(e);n!==void 0&&n.numFetchedEvents++}setNumBufferedEvents(e){this.#e.counts.bufferedEvents=e}subOpened(){this.#e.counts.openedSubs++,this.#e.counts.runningSubs++}subClosed(){this.#e.counts.runningSubs--}initRelayStats(e,n,r){let o=new Set(n),s=ge(e).filter(c=>!o.has(c));console.log(e,n,s);let i=n.map(c=>[c,{status:"fetching",numFetchedEvents:0,frontier:r}]),a=s.map(c=>[c,{status:"connection-failed",numFetchedEvents:0,frontier:0}]);this.#n=new Map([...i,...a])}setRelayStatus(e,n){let r=this.#n.get(e);r!==void 0&&(r.status=n)}setRelayFrontier(e,n){let r=this.#n.get(e);r!==void 0&&(r.frontier=n)}stop(){this.#o!==void 0&&clearInterval(this.#o),this.#s(this.#r())}},Le=class{#e;constructor(e){this.#e=new Map(e.map(n=>[n,0]))}addProgress(e,n){let r=this.#e.get(e)??0;this.#e.set(e,r+n)}setProgress(e,n){this.#e.set(e,n)}calcTotalProgress(){return[...this.#e.values()].reduce((e,n)=>e+n)}};var ut=5e3,qr=500,Ur=5e3,Vt={eventVerifier:Sn,skipVerification:!1,skipFilterMatching:!1,withSeenOn:!1,statsListener:void 0,statsNotifIntervalMs:1e3,connectTimeoutMs:5e3,signal:void 0,abortSignal:void 0,abortSubBeforeEoseTimeoutMs:1e4,limitPerReq:ut},Vr={...Vt,enableBackpressure:!1},$r={...Vt,sort:!1},lt={...Vt,asOf:void 0,reduceVerification:!1},Wr=t=>"relayUrls"in t&&"keys"in t,Hr=t=>Symbol.iterator in Object(t),Dr=t=>"relayUrls"in t&&"authors"in t,zr=t=>Symbol.iterator in Object(t),Kn=t=>{if(Dr(t))return{keys:t.authors,relayUrls:t.relayUrls};if(zr(t))return t;throw Error("adaptAuthorsAndRelays: unreachable")},Mn=class t{#e;#t;#n;constructor(e,n,r){this.#e=e,this.#t=n,r.minLogLevel!=="none"&&(this.#n=new Q(r.minLogLevel))}static