signet-login 0.1.0
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/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/callback.d.ts +27 -0
- package/dist/callback.js +46 -0
- package/dist/modal.d.ts +13 -0
- package/dist/modal.js +401 -0
- package/dist/redirect.d.ts +85 -0
- package/dist/redirect.js +226 -0
- package/dist/signers.d.ts +81 -0
- package/dist/signers.js +128 -0
- package/dist/signet-login.d.ts +87 -0
- package/dist/signet-login.iife.js +77 -0
- package/dist/signet-login.js +265 -0
- package/dist/storage.d.ts +38 -0
- package/dist/storage.js +159 -0
- package/dist/types.d.ts +164 -0
- package/dist/types.js +35 -0
- package/dist/verify.d.ts +43 -0
- package/dist/verify.js +117 -0
- package/package.json +64 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";var __SignetLoginIIFE=(()=>{var zt=Object.defineProperty;var ds=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var ps=Object.prototype.hasOwnProperty;var gs=(t,e,r)=>e in t?zt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var bs=(t,e)=>{for(var r in e)zt(t,r,{get:e[r],enumerable:!0})},ys=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of hs(e))!ps.call(t,o)&&o!==r&&zt(t,o,{get:()=>e[o],enumerable:!(n=ds(e,o))||n.enumerable});return t};var ms=t=>ys(zt({},"__esModule",{value:!0}),t);var v=(t,e,r)=>gs(t,typeof e!="symbol"?e+"":e,r);var Ua={};bs(Ua,{handleCallback:()=>as,handleRedirectCallback:()=>fs,login:()=>ss,logout:()=>ls,restoreSession:()=>cs});var He={relayUrl:"wss://relay.damus.io",signetAppOrigin:"https://mysignet.app",timeout:12e4,theme:"auto",persist:!0,mode:"relay"},Zr=300*1e3,X={pubkey:"signet:login.pubkey",method:"signet:login.method",authEvent:"signet:login.authEvent",bunkerUri:"signet:login.bunkerUri",bunkerClientSk:"signet:login.bunkerClientSk",expiresAt:"signet:login.expiresAt",displayName:"signet:login.displayName",pendingRedirect:"signet:login.pendingRedirect"};function kt(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function he(t,e=""){if(!Number.isSafeInteger(t)||t<0){let r=e&&`"${e}" `;throw new Error(`${r}expected integer >= 0, got ${t}`)}}function W(t,e,r=""){let n=kt(t),o=t?.length,i=e!==void 0;if(!n||i&&o!==e){let s=r&&`"${r}" `,c=i?` of length ${e}`:"",a=n?`length=${o}`:`type=${typeof t}`;throw new Error(s+"expected Uint8Array"+c+", got "+a)}return t}function Ye(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash must wrapped by utils.createHasher");he(t.outputLen),he(t.blockLen)}function ct(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 Gr(t,e){W(t,void 0,"digestInto() output");let r=e.outputLen;if(t.length<r)throw new Error('"digestInto() output" expected to be of length >='+r)}function Se(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Gt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function ge(t,e){return t<<32-e|t>>>e}var Wr=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",xs=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function pe(t){if(W(t),Wr)return t.toHex();let e="";for(let r=0;r<t.length;r++)e+=xs[t[r]];return e}var ve={_0:48,_9:57,A:65,F:70,a:97,f:102};function zr(t){if(t>=ve._0&&t<=ve._9)return t-ve._0;if(t>=ve.A&&t<=ve.F)return t-(ve.A-10);if(t>=ve.a&&t<=ve.f)return t-(ve.a-10)}function ne(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);if(Wr)return Uint8Array.fromHex(t);let e=t.length,r=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let o=0,i=0;o<r;o++,i+=2){let s=zr(t.charCodeAt(i)),c=zr(t.charCodeAt(i+1));if(s===void 0||c===void 0){let a=t[i]+t[i+1];throw new Error('hex string expected, got non-hex character "'+a+'" at index '+i)}n[o]=s*16+c}return n}function F(...t){let e=0;for(let n=0;n<t.length;n++){let o=t[n];W(o),e+=o.length}let r=new Uint8Array(e);for(let n=0,o=0;n<t.length;n++){let i=t[n];r.set(i,o),o+=i.length}return r}function Yr(t,e={}){let r=(o,i)=>t(i).update(o).digest(),n=t(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.create=o=>t(o),Object.assign(r,e),Object.freeze(r)}function xe(t=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(t))}var Xr=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Jr(t,e,r){return t&e^~t&r}function Qr(t,e,r){return t&e^t&r^e&r}var Wt=class{constructor(e,r,n,o){v(this,"blockLen");v(this,"outputLen");v(this,"padOffset");v(this,"isLE");v(this,"buffer");v(this,"view");v(this,"finished",!1);v(this,"length",0);v(this,"pos",0);v(this,"destroyed",!1);this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Gt(this.buffer)}update(e){ct(this),W(e);let{view:r,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let c=Math.min(o-this.pos,i-s);if(c===o){let a=Gt(e);for(;o<=i-s;s+=o)this.process(a,s);continue}n.set(e.subarray(s,s+c),this.pos),this.pos+=c,s+=c,this.pos===o&&(this.process(r,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ct(this),Gr(e,this),this.finished=!0;let{buffer:r,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;r[s++]=128,Se(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let g=s;g<o;g++)r[g]=0;n.setBigUint64(o-8,BigInt(this.length*8),i),this.process(n,0);let c=Gt(e),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let f=a/4,p=this.get();if(f>p.length)throw new Error("_sha2: outputLen bigger than state");for(let g=0;g<f;g++)c.setUint32(4*g,p[g],i)}digest(){let{buffer:e,outputLen:r}=this;this.digestInto(e);let n=e.slice(0,r);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:r,buffer:n,length:o,finished:i,destroyed:s,pos:c}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=c,o%r&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Be=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var ws=Uint32Array.from([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]),Pe=new Uint32Array(64),Cn=class extends Wt{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:r,C:n,D:o,E:i,F:s,G:c,H:a}=this;return[e,r,n,o,i,s,c,a]}set(e,r,n,o,i,s,c,a){this.A=e|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=c|0,this.H=a|0}process(e,r){for(let g=0;g<16;g++,r+=4)Pe[g]=e.getUint32(r,!1);for(let g=16;g<64;g++){let d=Pe[g-15],l=Pe[g-2],b=ge(d,7)^ge(d,18)^d>>>3,E=ge(l,17)^ge(l,19)^l>>>10;Pe[g]=E+Pe[g-7]+b+Pe[g-16]|0}let{A:n,B:o,C:i,D:s,E:c,F:a,G:f,H:p}=this;for(let g=0;g<64;g++){let d=ge(c,6)^ge(c,11)^ge(c,25),l=p+d+Jr(c,a,f)+ws[g]+Pe[g]|0,E=(ge(n,2)^ge(n,13)^ge(n,22))+Qr(n,o,i)|0;p=f,f=a,a=c,c=s+l|0,s=i,i=o,o=n,n=l+E|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,c=c+this.E|0,a=a+this.F|0,f=f+this.G|0,p=p+this.H|0,this.set(n,o,i,s,c,a,f,p)}roundClean(){Se(Pe)}destroy(){this.set(0,0,0,0,0,0,0,0),Se(this.buffer)}},Nn=class extends Cn{constructor(){super(32);v(this,"A",Be[0]|0);v(this,"B",Be[1]|0);v(this,"C",Be[2]|0);v(this,"D",Be[3]|0);v(this,"E",Be[4]|0);v(this,"F",Be[5]|0);v(this,"G",Be[6]|0);v(this,"H",Be[7]|0)}};var ae=Yr(()=>new Nn,Xr(1));var Pn=BigInt(0),Hn=BigInt(1);function At(t,e=""){if(typeof t!="boolean"){let r=e&&`"${e}" `;throw new Error(r+"expected boolean, got type="+typeof t)}return t}function Fr(t){if(typeof t=="bigint"){if(!Yt(t))throw new Error("positive bigint expected, got "+t)}else he(t);return t}function Rt(t){let e=Fr(t).toString(16);return e.length&1?"0"+e:e}function eo(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return t===""?Pn:BigInt("0x"+t)}function qe(t){return eo(pe(t))}function qn(t){return eo(pe(Es(W(t)).reverse()))}function Xt(t,e){he(e),t=Fr(t);let r=ne(t.toString(16).padStart(e*2,"0"));if(r.length!==e)throw new Error("number too large");return r}function Mn(t,e){return Xt(t,e).reverse()}function Es(t){return Uint8Array.from(t)}function to(t){return Uint8Array.from(t,(e,r)=>{let n=e.charCodeAt(0);if(e.length!==1||n>127)throw new Error(`string contains non-ASCII character "${t[r]}" with code ${n} at position ${r}`);return n})}var Yt=t=>typeof t=="bigint"&&Pn<=t;function vs(t,e,r){return Yt(t)&&Yt(e)&&Yt(r)&&e<=t&&t<r}function no(t,e,r,n){if(!vs(e,r,n))throw new Error("expected valid "+t+": "+r+" <= n < "+n+", got "+e)}function Dn(t){let e;for(e=0;t>Pn;t>>=Hn,e+=1);return e}var _t=t=>(Hn<<BigInt(t))-Hn;function ro(t,e,r){if(he(t,"hashLen"),he(e,"qByteLen"),typeof r!="function")throw new Error("hmacFn must be a function");let n=B=>new Uint8Array(B),o=Uint8Array.of(),i=Uint8Array.of(0),s=Uint8Array.of(1),c=1e3,a=n(t),f=n(t),p=0,g=()=>{a.fill(1),f.fill(0),p=0},d=(...B)=>r(f,F(a,...B)),l=(B=o)=>{f=d(i,B),a=d(),B.length!==0&&(f=d(s,B),a=d())},b=()=>{if(p++>=c)throw new Error("drbg: tried max amount of iterations");let B=0,_=[];for(;B<e;){a=d();let P=a.slice();_.push(P),B+=a.length}return F(..._)};return(B,_)=>{g(),l(B);let P;for(;!(P=_(b()));)l();return g(),P}}function Lt(t,e={},r={}){if(!t||typeof t!="object")throw new Error("expected valid options object");function n(i,s,c){let a=t[i];if(c&&a===void 0)return;let f=typeof a;if(f!==s||a===null)throw new Error(`param "${i}" is invalid: expected ${s}, got ${f}`)}let o=(i,s)=>Object.entries(i).forEach(([c,a])=>n(c,a,s));o(e,!1),o(r,!0)}function $n(t){let e=new WeakMap;return(r,...n)=>{let o=e.get(r);if(o!==void 0)return o;let i=t(r,...n);return e.set(r,i),i}}var ie=BigInt(0),re=BigInt(1),Xe=BigInt(2),so=BigInt(3),co=BigInt(4),ao=BigInt(5),Ss=BigInt(7),fo=BigInt(8),Bs=BigInt(9),lo=BigInt(16);function be(t,e){let r=t%e;return r>=ie?r:e+r}function le(t,e,r){let n=t;for(;e-- >ie;)n*=n,n%=r;return n}function oo(t,e){if(t===ie)throw new Error("invert: expected non-zero number");if(e<=ie)throw new Error("invert: expected positive modulus, got "+e);let r=be(t,e),n=e,o=ie,i=re,s=re,c=ie;for(;r!==ie;){let f=n/r,p=n%r,g=o-s*f,d=i-c*f;n=r,r=p,o=s,i=c,s=g,c=d}if(n!==re)throw new Error("invert: does not exist");return be(o,e)}function Kn(t,e,r){if(!t.eql(t.sqr(e),r))throw new Error("Cannot find square root")}function uo(t,e){let r=(t.ORDER+re)/co,n=t.pow(e,r);return Kn(t,n,e),n}function ks(t,e){let r=(t.ORDER-ao)/fo,n=t.mul(e,Xe),o=t.pow(n,r),i=t.mul(e,o),s=t.mul(t.mul(i,Xe),o),c=t.mul(i,t.sub(s,t.ONE));return Kn(t,c,e),c}function As(t){let e=at(t),r=ho(t),n=r(e,e.neg(e.ONE)),o=r(e,n),i=r(e,e.neg(n)),s=(t+Ss)/lo;return(c,a)=>{let f=c.pow(a,s),p=c.mul(f,n),g=c.mul(f,o),d=c.mul(f,i),l=c.eql(c.sqr(p),a),b=c.eql(c.sqr(g),a);f=c.cmov(f,p,l),p=c.cmov(d,g,b);let E=c.eql(c.sqr(p),a),B=c.cmov(f,p,E);return Kn(c,B,a),B}}function ho(t){if(t<so)throw new Error("sqrt is not defined for small field");let e=t-re,r=0;for(;e%Xe===ie;)e/=Xe,r++;let n=Xe,o=at(t);for(;io(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return uo;let i=o.pow(n,e),s=(e+re)/Xe;return function(a,f){if(a.is0(f))return f;if(io(a,f)!==1)throw new Error("Cannot find square root");let p=r,g=a.mul(a.ONE,i),d=a.pow(f,e),l=a.pow(f,s);for(;!a.eql(d,a.ONE);){if(a.is0(d))return a.ZERO;let b=1,E=a.sqr(d);for(;!a.eql(E,a.ONE);)if(b++,E=a.sqr(E),b===p)throw new Error("Cannot find square root");let B=re<<BigInt(p-b-1),_=a.pow(g,B);p=b,g=a.sqr(_),d=a.mul(d,g),l=a.mul(l,_)}return l}}function Rs(t){return t%co===so?uo:t%fo===ao?ks:t%lo===Bs?As(t):ho(t)}var _s=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function jn(t){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},r=_s.reduce((n,o)=>(n[o]="function",n),e);return Lt(t,r),t}function Ls(t,e,r){if(r<ie)throw new Error("invalid exponent, negatives unsupported");if(r===ie)return t.ONE;if(r===re)return e;let n=t.ONE,o=e;for(;r>ie;)r&re&&(n=t.mul(n,o)),o=t.sqr(o),r>>=re;return n}function Jt(t,e,r=!1){let n=new Array(e.length).fill(r?t.ZERO:void 0),o=e.reduce((s,c,a)=>t.is0(c)?s:(n[a]=s,t.mul(s,c)),t.ONE),i=t.inv(o);return e.reduceRight((s,c,a)=>t.is0(c)?s:(n[a]=t.mul(s,n[a]),t.mul(s,c)),i),n}function io(t,e){let r=(t.ORDER-re)/Xe,n=t.pow(e,r),o=t.eql(n,t.ONE),i=t.eql(n,t.ZERO),s=t.eql(n,t.neg(t.ONE));if(!o&&!i&&!s)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function Is(t,e){e!==void 0&&he(e);let r=e!==void 0?e:t.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}var Vn=class{constructor(e,r={}){v(this,"ORDER");v(this,"BITS");v(this,"BYTES");v(this,"isLE");v(this,"ZERO",ie);v(this,"ONE",re);v(this,"_lengths");v(this,"_sqrt");v(this,"_mod");if(e<=ie)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,r!=null&&typeof r=="object"&&(typeof r.BITS=="number"&&(n=r.BITS),typeof r.sqrt=="function"&&(this.sqrt=r.sqrt),typeof r.isLE=="boolean"&&(this.isLE=r.isLE),r.allowedLengths&&(this._lengths=r.allowedLengths?.slice()),typeof r.modFromBytes=="boolean"&&(this._mod=r.modFromBytes));let{nBitLength:o,nByteLength:i}=Is(e,n);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=i,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return be(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return ie<=e&&e<this.ORDER}is0(e){return e===ie}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&re)===re}neg(e){return be(-e,this.ORDER)}eql(e,r){return e===r}sqr(e){return be(e*e,this.ORDER)}add(e,r){return be(e+r,this.ORDER)}sub(e,r){return be(e-r,this.ORDER)}mul(e,r){return be(e*r,this.ORDER)}pow(e,r){return Ls(this,e,r)}div(e,r){return be(e*oo(r,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,r){return e+r}subN(e,r){return e-r}mulN(e,r){return e*r}inv(e){return oo(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=Rs(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?Mn(e,this.BYTES):Xt(e,this.BYTES)}fromBytes(e,r=!1){W(e);let{_lengths:n,BYTES:o,isLE:i,ORDER:s,_mod:c}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let f=new Uint8Array(o);f.set(e,i?0:f.length-e.length),e=f}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let a=i?qn(e):qe(e);if(c&&(a=be(a,s)),!r&&!this.isValid(a))throw new Error("invalid field element: outside of range 0..ORDER");return a}invertBatch(e){return Jt(this,e)}cmov(e,r,n){return n?r:e}};function at(t,e={}){return new Vn(t,e)}function po(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 Zn(t){let e=po(t);return e+Math.ceil(e/2)}function Qt(t,e,r=!1){W(t);let n=t.length,o=po(e),i=Zn(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=r?qn(t):qe(t),c=be(s,e-re)+re;return r?Mn(c,o):Xt(c,o)}var ft=BigInt(0),Je=BigInt(1);function It(t,e){let r=e.negate();return t?r:e}function Yn(t,e){let r=Jt(t.Fp,e.map(n=>n.Z));return e.map((n,o)=>t.fromAffine(n.toAffine(r[o])))}function mo(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function zn(t,e){mo(t,e);let r=Math.ceil(e/t)+1,n=2**(t-1),o=2**t,i=_t(t),s=BigInt(t);return{windows:r,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function go(t,e,r){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=r,c=Number(t&o),a=t>>s;c>n&&(c-=i,a+=Je);let f=e*n,p=f+Math.abs(c)-1,g=c===0,d=c<0,l=e%2!==0;return{nextN:a,offset:p,isZero:g,isNeg:d,isNegF:l,offsetF:f}}var Gn=new WeakMap,xo=new WeakMap;function Wn(t){return xo.get(t)||1}function bo(t){if(t!==ft)throw new Error("invalid wNAF")}var Ft=class{constructor(e,r){v(this,"BASE");v(this,"ZERO");v(this,"Fn");v(this,"bits");this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=r}_unsafeLadder(e,r,n=this.ZERO){let o=e;for(;r>ft;)r&Je&&(n=n.add(o)),o=o.double(),r>>=Je;return n}precomputeWindow(e,r){let{windows:n,windowSize:o}=zn(r,this.bits),i=[],s=e,c=s;for(let a=0;a<n;a++){c=s,i.push(c);for(let f=1;f<o;f++)c=c.add(s),i.push(c);s=c.double()}return i}wNAF(e,r,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,i=this.BASE,s=zn(e,this.bits);for(let c=0;c<s.windows;c++){let{nextN:a,offset:f,isZero:p,isNeg:g,isNegF:d,offsetF:l}=go(n,c,s);n=a,p?i=i.add(It(d,r[l])):o=o.add(It(g,r[f]))}return bo(n),{p:o,f:i}}wNAFUnsafe(e,r,n,o=this.ZERO){let i=zn(e,this.bits);for(let s=0;s<i.windows&&n!==ft;s++){let{nextN:c,offset:a,isZero:f,isNeg:p}=go(n,s,i);if(n=c,!f){let g=r[a];o=o.add(p?g.negate():g)}}return bo(n),o}getPrecomputes(e,r,n){let o=Gn.get(r);return o||(o=this.precomputeWindow(r,e),e!==1&&(typeof n=="function"&&(o=n(o)),Gn.set(r,o))),o}cached(e,r,n){let o=Wn(e);return this.wNAF(o,this.getPrecomputes(o,e,n),r)}unsafe(e,r,n,o){let i=Wn(e);return i===1?this._unsafeLadder(e,r,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,n),r,o)}createCache(e,r){mo(r,this.bits),xo.set(e,r),Gn.delete(e)}hasCache(e){return Wn(e)!==1}};function wo(t,e,r,n){let o=e,i=t.ZERO,s=t.ZERO;for(;r>ft||n>ft;)r&Je&&(i=i.add(o)),n&Je&&(s=s.add(o)),o=o.double(),r>>=Je,n>>=Je;return{p1:i,p2:s}}function yo(t,e,r){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return jn(e),e}else return at(t,{isLE:r})}function Eo(t,e,r={},n){if(n===void 0&&(n=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(let a of["p","n","h"]){let f=e[a];if(!(typeof f=="bigint"&&f>ft))throw new Error(`CURVE.${a} must be positive bigint`)}let o=yo(e.p,r.Fp,n),i=yo(e.n,r.Fn,n),c=["Gx","Gy","a",t==="weierstrass"?"b":"d"];for(let a of c)if(!o.isValid(e[a]))throw new Error(`CURVE.${a} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:i}}function en(t,e){return function(n){let o=t(n);return{secretKey:o,publicKey:e(o)}}}var tn=class{constructor(e,r){v(this,"oHash");v(this,"iHash");v(this,"blockLen");v(this,"outputLen");v(this,"finished",!1);v(this,"destroyed",!1);if(Ye(e),W(r,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(r.length>n?e.create().update(r).digest():r);for(let i=0;i<o.length;i++)o[i]^=54;this.iHash.update(o),this.oHash=e.create();for(let i=0;i<o.length;i++)o[i]^=106;this.oHash.update(o),Se(o)}update(e){return ct(this),this.iHash.update(e),this}digestInto(e){ct(this),W(e,this.outputLen,"output"),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:r,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:c}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=c,e.oHash=r._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},we=(t,e,r)=>new tn(t,e).update(r).digest();we.create=(t,e)=>new tn(t,e);var vo=(t,e)=>(t+(t>=0?e:-e)/So)/e;function Os(t,e,r){let[[n,o],[i,s]]=e,c=vo(s*t,r),a=vo(-o*t,r),f=t-c*n-a*i,p=-c*o-a*s,g=f<ke,d=p<ke;g&&(f=-f),d&&(p=-p);let l=_t(Math.ceil(Dn(r)/2))+lt;if(f<ke||f>=l||p<ke||p>=l)throw new Error("splitScalar (endomorphism): failed, k="+t);return{k1neg:g,k1:f,k2neg:d,k2:p}}function Jn(t){if(!["compact","recovered","der"].includes(t))throw new Error('Signature format must be "compact", "recovered", or "der"');return t}function Xn(t,e){let r={};for(let n of Object.keys(e))r[n]=t[n]===void 0?e[n]:t[n];return At(r.lowS,"lowS"),At(r.prehash,"prehash"),r.format!==void 0&&Jn(r.format),r}var Qn=class extends Error{constructor(e=""){super(e)}},Me={Err:Qn,_tlv:{encode:(t,e)=>{let{Err:r}=Me;if(t<0||t>256)throw new r("tlv.encode: wrong tag");if(e.length&1)throw new r("tlv.encode: unpadded data");let n=e.length/2,o=Rt(n);if(o.length/2&128)throw new r("tlv.encode: long form length too big");let i=n>127?Rt(o.length/2|128):"";return Rt(t)+i+o+e},decode(t,e){let{Err:r}=Me,n=0;if(t<0||t>256)throw new r("tlv.encode: wrong tag");if(e.length<2||e[n++]!==t)throw new r("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let a=o&127;if(!a)throw new r("tlv.decode(long): indefinite length not supported");if(a>4)throw new r("tlv.decode(long): byte length is too big");let f=e.subarray(n,n+a);if(f.length!==a)throw new r("tlv.decode: length bytes not complete");if(f[0]===0)throw new r("tlv.decode(long): zero leftmost byte");for(let p of f)s=s<<8|p;if(n+=a,s<128)throw new r("tlv.decode(long): not minimal encoding")}let c=e.subarray(n,n+s);if(c.length!==s)throw new r("tlv.decode: wrong value length");return{v:c,l:e.subarray(n+s)}}},_int:{encode(t){let{Err:e}=Me;if(t<ke)throw new e("integer: negative integers are not allowed");let r=Rt(t);if(Number.parseInt(r[0],16)&8&&(r="00"+r),r.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return r},decode(t){let{Err:e}=Me;if(t[0]&128)throw new e("invalid signature integer: negative");if(t[0]===0&&!(t[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return qe(t)}},toSig(t){let{Err:e,_int:r,_tlv:n}=Me,o=W(t,void 0,"signature"),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:c,l:a}=n.decode(2,i),{v:f,l:p}=n.decode(2,a);if(p.length)throw new e("invalid signature: left bytes after parsing");return{r:r.decode(c),s:r.decode(f)}},hexFromSig(t){let{_tlv:e,_int:r}=Me,n=e.encode(2,r.encode(t.r)),o=e.encode(2,r.encode(t.s)),i=n+o;return e.encode(48,i)}},ke=BigInt(0),lt=BigInt(1),So=BigInt(2),nn=BigInt(3),Ts=BigInt(4);function Bo(t,e={}){let r=Eo("weierstrass",t,e),{Fp:n,Fn:o}=r,i=r.CURVE,{h:s,n:c}=i;Lt(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:a}=e;if(a&&(!n.is0(i.a)||typeof a.beta!="bigint"||!Array.isArray(a.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let f=Ao(n,o);function p(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function g(x,u,h){let{x:y,y:w}=u.toAffine(),k=n.toBytes(y);if(At(h,"isCompressed"),h){p();let m=!n.isOdd(w);return F(ko(m),k)}else return F(Uint8Array.of(4),k,n.toBytes(w))}function d(x){W(x,void 0,"Point");let{publicKey:u,publicKeyUncompressed:h}=f,y=x.length,w=x[0],k=x.subarray(1);if(y===u&&(w===2||w===3)){let m=n.fromBytes(k);if(!n.isValid(m))throw new Error("bad point: is not on curve, wrong x");let A=E(m),S;try{S=n.sqrt(A)}catch(M){let C=M instanceof Error?": "+M.message:"";throw new Error("bad point: is not on curve, sqrt error"+C)}p();let R=n.isOdd(S);return(w&1)===1!==R&&(S=n.neg(S)),{x:m,y:S}}else if(y===h&&w===4){let m=n.BYTES,A=n.fromBytes(k.subarray(0,m)),S=n.fromBytes(k.subarray(m,m*2));if(!B(A,S))throw new Error("bad point: is not on curve");return{x:A,y:S}}else throw new Error(`bad point: got length ${y}, expected compressed=${u} or uncompressed=${h}`)}let l=e.toBytes||g,b=e.fromBytes||d;function E(x){let u=n.sqr(x),h=n.mul(u,x);return n.add(n.add(h,n.mul(x,i.a)),i.b)}function B(x,u){let h=n.sqr(u),y=E(x);return n.eql(h,y)}if(!B(i.Gx,i.Gy))throw new Error("bad curve params: generator point");let _=n.mul(n.pow(i.a,nn),Ts),P=n.mul(n.sqr(i.b),BigInt(27));if(n.is0(n.add(_,P)))throw new Error("bad curve params: a or b");function N(x,u,h=!1){if(!n.isValid(u)||h&&n.is0(u))throw new Error(`bad point coordinate ${x}`);return u}function H(x){if(!(x instanceof I))throw new Error("Weierstrass Point expected")}function q(x){if(!a||!a.basises)throw new Error("no endo");return Os(x,a.basises,o.ORDER)}let Z=$n((x,u)=>{let{X:h,Y:y,Z:w}=x;if(n.eql(w,n.ONE))return{x:h,y};let k=x.is0();u==null&&(u=k?n.ONE:n.inv(w));let m=n.mul(h,u),A=n.mul(y,u),S=n.mul(w,u);if(k)return{x:n.ZERO,y:n.ZERO};if(!n.eql(S,n.ONE))throw new Error("invZ was invalid");return{x:m,y:A}}),Y=$n(x=>{if(x.is0()){if(e.allowInfinityPoint&&!n.is0(x.Y))return;throw new Error("bad point: ZERO")}let{x:u,y:h}=x.toAffine();if(!n.isValid(u)||!n.isValid(h))throw new Error("bad point: x or y not field elements");if(!B(u,h))throw new Error("bad point: equation left != right");if(!x.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function G(x,u,h,y,w){return h=new I(n.mul(h.X,x),h.Y,h.Z),u=It(y,u),h=It(w,h),u.add(h)}let L=class L{constructor(u,h,y){v(this,"X");v(this,"Y");v(this,"Z");this.X=N("x",u),this.Y=N("y",h,!0),this.Z=N("z",y),Object.freeze(this)}static CURVE(){return i}static fromAffine(u){let{x:h,y}=u||{};if(!u||!n.isValid(h)||!n.isValid(y))throw new Error("invalid affine point");if(u instanceof L)throw new Error("projective point not allowed");return n.is0(h)&&n.is0(y)?L.ZERO:new L(h,y,n.ONE)}static fromBytes(u){let h=L.fromAffine(b(W(u,void 0,"point")));return h.assertValidity(),h}static fromHex(u){return L.fromBytes(ne(u))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(u=8,h=!0){return D.createCache(this,u),h||this.multiply(nn),this}assertValidity(){Y(this)}hasEvenY(){let{y:u}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(u)}equals(u){H(u);let{X:h,Y:y,Z:w}=this,{X:k,Y:m,Z:A}=u,S=n.eql(n.mul(h,A),n.mul(k,w)),R=n.eql(n.mul(y,A),n.mul(m,w));return S&&R}negate(){return new L(this.X,n.neg(this.Y),this.Z)}double(){let{a:u,b:h}=i,y=n.mul(h,nn),{X:w,Y:k,Z:m}=this,A=n.ZERO,S=n.ZERO,R=n.ZERO,T=n.mul(w,w),M=n.mul(k,k),C=n.mul(m,m),O=n.mul(w,k);return O=n.add(O,O),R=n.mul(w,m),R=n.add(R,R),A=n.mul(u,R),S=n.mul(y,C),S=n.add(A,S),A=n.sub(M,S),S=n.add(M,S),S=n.mul(A,S),A=n.mul(O,A),R=n.mul(y,R),C=n.mul(u,C),O=n.sub(T,C),O=n.mul(u,O),O=n.add(O,R),R=n.add(T,T),T=n.add(R,T),T=n.add(T,C),T=n.mul(T,O),S=n.add(S,T),C=n.mul(k,m),C=n.add(C,C),T=n.mul(C,O),A=n.sub(A,T),R=n.mul(C,M),R=n.add(R,R),R=n.add(R,R),new L(A,S,R)}add(u){H(u);let{X:h,Y:y,Z:w}=this,{X:k,Y:m,Z:A}=u,S=n.ZERO,R=n.ZERO,T=n.ZERO,M=i.a,C=n.mul(i.b,nn),O=n.mul(h,k),$=n.mul(y,m),z=n.mul(w,A),V=n.add(h,y),j=n.add(k,m);V=n.mul(V,j),j=n.add(O,$),V=n.sub(V,j),j=n.add(h,w);let Q=n.add(k,A);return j=n.mul(j,Q),Q=n.add(O,z),j=n.sub(j,Q),Q=n.add(y,w),S=n.add(m,A),Q=n.mul(Q,S),S=n.add($,z),Q=n.sub(Q,S),T=n.mul(M,j),S=n.mul(C,z),T=n.add(S,T),S=n.sub($,T),T=n.add($,T),R=n.mul(S,T),$=n.add(O,O),$=n.add($,O),z=n.mul(M,z),j=n.mul(C,j),$=n.add($,z),z=n.sub(O,z),z=n.mul(M,z),j=n.add(j,z),O=n.mul($,j),R=n.add(R,O),O=n.mul(Q,j),S=n.mul(V,S),S=n.sub(S,O),O=n.mul(V,$),T=n.mul(Q,T),T=n.add(T,O),new L(S,R,T)}subtract(u){return this.add(u.negate())}is0(){return this.equals(L.ZERO)}multiply(u){let{endo:h}=e;if(!o.isValidNot0(u))throw new Error("invalid scalar: out of range");let y,w,k=m=>D.cached(this,m,A=>Yn(L,A));if(h){let{k1neg:m,k1:A,k2neg:S,k2:R}=q(u),{p:T,f:M}=k(A),{p:C,f:O}=k(R);w=M.add(O),y=G(h.beta,T,C,m,S)}else{let{p:m,f:A}=k(u);y=m,w=A}return Yn(L,[y,w])[0]}multiplyUnsafe(u){let{endo:h}=e,y=this;if(!o.isValid(u))throw new Error("invalid scalar: out of range");if(u===ke||y.is0())return L.ZERO;if(u===lt)return y;if(D.hasCache(this))return this.multiply(u);if(h){let{k1neg:w,k1:k,k2neg:m,k2:A}=q(u),{p1:S,p2:R}=wo(L,y,k,A);return G(h.beta,S,R,w,m)}else return D.unsafe(y,u)}toAffine(u){return Z(this,u)}isTorsionFree(){let{isTorsionFree:u}=e;return s===lt?!0:u?u(L,this):D.unsafe(this,c).is0()}clearCofactor(){let{clearCofactor:u}=e;return s===lt?this:u?u(L,this):this.multiplyUnsafe(s)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}toBytes(u=!0){return At(u,"isCompressed"),this.assertValidity(),l(L,this,u)}toHex(u=!0){return pe(this.toBytes(u))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}};v(L,"BASE",new L(i.Gx,i.Gy,n.ONE)),v(L,"ZERO",new L(n.ZERO,n.ONE,n.ZERO)),v(L,"Fp",n),v(L,"Fn",o);let I=L,K=o.BITS,D=new Ft(I,e.endo?Math.ceil(K/2):K);return I.BASE.precompute(8),I}function ko(t){return Uint8Array.of(t?2:3)}function Ao(t,e){return{secretKey:e.BYTES,publicKey:1+t.BYTES,publicKeyUncompressed:1+2*t.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function Us(t,e={}){let{Fn:r}=t,n=e.randomBytes||xe,o=Object.assign(Ao(t.Fp,r),{seed:Zn(r.ORDER)});function i(l){try{let b=r.fromBytes(l);return r.isValidNot0(b)}catch{return!1}}function s(l,b){let{publicKey:E,publicKeyUncompressed:B}=o;try{let _=l.length;return b===!0&&_!==E||b===!1&&_!==B?!1:!!t.fromBytes(l)}catch{return!1}}function c(l=n(o.seed)){return Qt(W(l,o.seed,"seed"),r.ORDER)}function a(l,b=!0){return t.BASE.multiply(r.fromBytes(l)).toBytes(b)}function f(l){let{secretKey:b,publicKey:E,publicKeyUncompressed:B}=o;if(!kt(l)||"_lengths"in r&&r._lengths||b===E)return;let _=W(l,void 0,"key").length;return _===E||_===B}function p(l,b,E=!0){if(f(l)===!0)throw new Error("first arg must be private key");if(f(b)===!1)throw new Error("second arg must be public key");let B=r.fromBytes(l);return t.fromBytes(b).multiply(B).toBytes(E)}let g={isValidSecretKey:i,isValidPublicKey:s,randomSecretKey:c},d=en(c,a);return Object.freeze({getPublicKey:a,getSharedSecret:p,keygen:d,Point:t,utils:g,lengths:o})}function Ro(t,e,r={}){Ye(e),Lt(r,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),r=Object.assign({},r);let n=r.randomBytes||xe,o=r.hmac||((u,h)=>we(e,u,h)),{Fp:i,Fn:s}=t,{ORDER:c,BITS:a}=s,{keygen:f,getPublicKey:p,getSharedSecret:g,utils:d,lengths:l}=Us(t,r),b={prehash:!0,lowS:typeof r.lowS=="boolean"?r.lowS:!0,format:"compact",extraEntropy:!1},E=c*So<i.ORDER;function B(u){let h=c>>lt;return u>h}function _(u,h){if(!s.isValidNot0(h))throw new Error(`invalid signature ${u}: out of range 1..Point.Fn.ORDER`);return h}function P(){if(E)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function N(u,h){Jn(h);let y=l.signature,w=h==="compact"?y:h==="recovered"?y+1:void 0;return W(u,w)}class H{constructor(h,y,w){v(this,"r");v(this,"s");v(this,"recovery");if(this.r=_("r",h),this.s=_("s",y),w!=null){if(P(),![0,1,2,3].includes(w))throw new Error("invalid recovery id");this.recovery=w}Object.freeze(this)}static fromBytes(h,y=b.format){N(h,y);let w;if(y==="der"){let{r:S,s:R}=Me.toSig(W(h));return new H(S,R)}y==="recovered"&&(w=h[0],y="compact",h=h.subarray(1));let k=l.signature/2,m=h.subarray(0,k),A=h.subarray(k,k*2);return new H(s.fromBytes(m),s.fromBytes(A),w)}static fromHex(h,y){return this.fromBytes(ne(h),y)}assertRecovery(){let{recovery:h}=this;if(h==null)throw new Error("invalid recovery id: must be present");return h}addRecoveryBit(h){return new H(this.r,this.s,h)}recoverPublicKey(h){let{r:y,s:w}=this,k=this.assertRecovery(),m=k===2||k===3?y+c:y;if(!i.isValid(m))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let A=i.toBytes(m),S=t.fromBytes(F(ko((k&1)===0),A)),R=s.inv(m),T=Z(W(h,void 0,"msgHash")),M=s.create(-T*R),C=s.create(w*R),O=t.BASE.multiplyUnsafe(M).add(S.multiplyUnsafe(C));if(O.is0())throw new Error("invalid recovery: point at infinify");return O.assertValidity(),O}hasHighS(){return B(this.s)}toBytes(h=b.format){if(Jn(h),h==="der")return ne(Me.hexFromSig(this));let{r:y,s:w}=this,k=s.toBytes(y),m=s.toBytes(w);return h==="recovered"?(P(),F(Uint8Array.of(this.assertRecovery()),k,m)):F(k,m)}toHex(h){return pe(this.toBytes(h))}}let q=r.bits2int||function(h){if(h.length>8192)throw new Error("input is too large");let y=qe(h),w=h.length*8-a;return w>0?y>>BigInt(w):y},Z=r.bits2int_modN||function(h){return s.create(q(h))},Y=_t(a);function G(u){return no("num < 2^"+a,u,ke,Y),s.toBytes(u)}function I(u,h){return W(u,void 0,"message"),h?W(e(u),void 0,"prehashed message"):u}function K(u,h,y){let{lowS:w,prehash:k,extraEntropy:m}=Xn(y,b);u=I(u,k);let A=Z(u),S=s.fromBytes(h);if(!s.isValidNot0(S))throw new Error("invalid private key");let R=[G(S),G(A)];if(m!=null&&m!==!1){let O=m===!0?n(l.secretKey):m;R.push(W(O,void 0,"extraEntropy"))}let T=F(...R),M=A;function C(O){let $=q(O);if(!s.isValidNot0($))return;let z=s.inv($),V=t.BASE.multiply($).toAffine(),j=s.create(V.x);if(j===ke)return;let Q=s.create(z*s.create(M+j*S));if(Q===ke)return;let St=(V.x===j?0:2)|Number(V.y<),Bt=Q;return w&&B(Q)&&(Bt=s.neg(Q),St^=1),new H(j,Bt,E?void 0:St)}return{seed:T,k2sig:C}}function D(u,h,y={}){let{seed:w,k2sig:k}=K(u,h,y);return ro(e.outputLen,s.BYTES,o)(w,k).toBytes(y.format)}function L(u,h,y,w={}){let{lowS:k,prehash:m,format:A}=Xn(w,b);if(y=W(y,void 0,"publicKey"),h=I(h,m),!kt(u)){let S=u instanceof H?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+S)}N(u,A);try{let S=H.fromBytes(u,A),R=t.fromBytes(y);if(k&&S.hasHighS())return!1;let{r:T,s:M}=S,C=Z(h),O=s.inv(M),$=s.create(C*O),z=s.create(T*O),V=t.BASE.multiplyUnsafe($).add(R.multiplyUnsafe(z));return V.is0()?!1:s.create(V.x)===T}catch{return!1}}function x(u,h,y={}){let{prehash:w}=Xn(y,b);return h=I(h,w),H.fromBytes(u,"recovered").recoverPublicKey(h).toBytes()}return Object.freeze({keygen:f,getPublicKey:p,getSharedSecret:g,utils:d,lengths:l,Point:t,sign:D,verify:L,recoverPublicKey:x,Signature:H,hash:e})}var sn={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},Cs={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]},Ns=BigInt(0),Fn=BigInt(2);function Hs(t){let e=sn.p,r=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),c=BigInt(44),a=BigInt(88),f=t*t*t%e,p=f*f*t%e,g=le(p,r,e)*p%e,d=le(g,r,e)*p%e,l=le(d,Fn,e)*f%e,b=le(l,o,e)*l%e,E=le(b,i,e)*b%e,B=le(E,c,e)*E%e,_=le(B,a,e)*B%e,P=le(_,c,e)*E%e,N=le(P,r,e)*p%e,H=le(N,s,e)*b%e,q=le(H,n,e)*f%e,Z=le(q,Fn,e);if(!rn.eql(rn.sqr(Z),t))throw new Error("Cannot find square root");return Z}var rn=at(sn.p,{sqrt:Hs}),Qe=Bo(sn,{Fp:rn,endo:Cs}),cn=Ro(Qe,ae),_o={};function on(t,...e){let r=_o[t];if(r===void 0){let n=ae(to(t));r=F(n,n),_o[t]=r}return ae(F(r,...e))}var tr=t=>t.toBytes(!0).slice(1),nr=t=>t%Fn===Ns;function er(t){let{Fn:e,BASE:r}=Qe,n=e.fromBytes(t),o=r.multiply(n);return{scalar:nr(o.y)?n:e.neg(n),bytes:tr(o)}}function Io(t){let e=rn;if(!e.isValidNot0(t))throw new Error("invalid x: Fail if x \u2265 p");let r=e.create(t*t),n=e.create(r*t+BigInt(7)),o=e.sqrt(n);nr(o)||(o=e.neg(o));let i=Qe.fromAffine({x:t,y:o});return i.assertValidity(),i}var Ot=qe;function Oo(...t){return Qe.Fn.create(Ot(on("BIP0340/challenge",...t)))}function Lo(t){return er(t).bytes}function Ps(t,e,r=xe(32)){let{Fn:n}=Qe,o=W(t,void 0,"message"),{bytes:i,scalar:s}=er(e),c=W(r,32,"auxRand"),a=n.toBytes(s^Ot(on("BIP0340/aux",c))),f=on("BIP0340/nonce",a,i,o),{bytes:p,scalar:g}=er(f),d=Oo(p,i,o),l=new Uint8Array(64);if(l.set(p,0),l.set(n.toBytes(n.create(g+d*s)),32),!To(l,o,i))throw new Error("sign: Invalid signature produced");return l}function To(t,e,r){let{Fp:n,Fn:o,BASE:i}=Qe,s=W(t,64,"signature"),c=W(e,void 0,"message"),a=W(r,32,"publicKey");try{let f=Io(Ot(a)),p=Ot(s.subarray(0,32));if(!n.isValidNot0(p))return!1;let g=Ot(s.subarray(32,64));if(!o.isValidNot0(g))return!1;let d=Oo(o.toBytes(p),tr(f),c),l=i.multiplyUnsafe(g).add(f.multiplyUnsafe(o.neg(d))),{x:b,y:E}=l.toAffine();return!(l.is0()||!nr(E)||b!==p)}catch{return!1}}var ut=(()=>{let r=(n=xe(48))=>Qt(n,sn.n);return{keygen:en(r,Lo),getPublicKey:Lo,sign:Ps,verify:To,Point:Qe,utils:{randomSecretKey:r,taggedHash:on,lift_x:Io,pointToBytes:tr},lengths:{secretKey:32,publicKey:32,publicKeyHasPrefix:!1,signature:64,seed:48}}})();function qs(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function an(t){if(typeof t!="boolean")throw new Error(`boolean expected, not ${t}`)}function fn(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function ee(t,e,r=""){let n=qs(t),o=t?.length,i=e!==void 0;if(!n||i&&o!==e){let s=r&&`"${r}" `,c=i?` of length ${e}`:"",a=n?`length=${o}`:`type=${typeof t}`;throw new Error(s+"expected Uint8Array"+c+", got "+a)}return t}function rr(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 Uo(t,e){ee(t,void 0,"output");let r=e.outputLen;if(t.length<r)throw new Error("digestInto() expects output buffer of length at least "+r)}function Ae(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Re(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Ms(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}var Ds=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Co(t,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(t,e)}function dt(t,e){if(t.length!==e.length)return!1;let r=0;for(let n=0;n<t.length;n++)r|=t[n]^e[n];return r===0}var or=(t,e)=>{function r(n,...o){if(ee(n,void 0,"key"),!Ds)throw new Error("Non little-endian hardware is not yet supported");if(t.nonceLength!==void 0){let p=o[0];ee(p,t.varSizeNonce?void 0:t.nonceLength,"nonce")}let i=t.tagLength;i&&o[1]!==void 0&&ee(o[1],void 0,"AAD");let s=e(n,...o),c=(p,g)=>{if(g!==void 0){if(p!==2)throw new Error("cipher output not supported");ee(g,void 0,"output")}},a=!1;return{encrypt(p,g){if(a)throw new Error("cannot encrypt() twice with same key + nonce");return a=!0,ee(p),c(s.encrypt.length,g),s.encrypt(p,g)},decrypt(p,g){if(ee(p),i&&p.length<i)throw new Error('"ciphertext" expected length bigger than tagLength='+i);return c(s.decrypt.length,g),s.decrypt(p,g)}}}return Object.assign(r,t),r};function ir(t,e,r=!0){if(e===void 0)return new Uint8Array(t);if(e.length!==t)throw new Error('"output" expected Uint8Array of length '+t+", got: "+e.length);if(r&&!$s(e))throw new Error("invalid output, must be aligned");return e}function No(t,e,r){an(r);let n=new Uint8Array(16),o=Ms(n);return o.setBigUint64(0,BigInt(e),r),o.setBigUint64(8,BigInt(t),r),n}function $s(t){return t.byteOffset%4===0}function ht(t){return Uint8Array.from(t)}var Po=t=>Uint8Array.from(t.split(""),e=>e.charCodeAt(0)),Vs=Po("expand 16-byte k"),Ks=Po("expand 32-byte k"),js=Ae(Vs),Zs=Ae(Ks);function U(t,e){return t<<e|t>>>32-e}function sr(t){return t.byteOffset%4===0}var ln=64,zs=16,qo=2**32-1,Ho=Uint32Array.of();function Gs(t,e,r,n,o,i,s,c){let a=o.length,f=new Uint8Array(ln),p=Ae(f),g=sr(o)&&sr(i),d=g?Ae(o):Ho,l=g?Ae(i):Ho;for(let b=0;b<a;s++){if(t(e,r,n,p,s,c),s>=qo)throw new Error("arx: counter overflow");let E=Math.min(ln,a-b);if(g&&E===ln){let B=b/4;if(b%4!==0)throw new Error("arx: invalid block position");for(let _=0,P;_<zs;_++)P=B+_,l[P]=d[P]^p[_];b+=ln;continue}for(let B=0,_;B<E;B++)_=b+B,i[_]=o[_]^f[B];b+=E}}function cr(t,e){let{allowShortKeys:r,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=Co({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof t!="function")throw new Error("core must be a function");return fn(o),fn(s),an(i),an(r),(c,a,f,p,g=0)=>{ee(c,void 0,"key"),ee(a,void 0,"nonce"),ee(f,void 0,"data");let d=f.length;if(p===void 0&&(p=new Uint8Array(d)),ee(p,void 0,"output"),fn(g),g<0||g>=qo)throw new Error("arx: counter overflow");if(p.length<d)throw new Error(`arx: output (${p.length}) is shorter than data (${d})`);let l=[],b=c.length,E,B;if(b===32)l.push(E=ht(c)),B=Zs;else if(b===16&&r)E=new Uint8Array(32),E.set(c),E.set(c,16),B=js,l.push(E);else throw ee(c,32,"arx key"),new Error("invalid key size");sr(a)||l.push(a=ht(a));let _=Ae(E);if(n){if(a.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(B,_,Ae(a.subarray(0,16)),_),a=a.subarray(16)}let P=16-o;if(P!==a.length)throw new Error(`arx: nonce must be ${P} or 16 bytes`);if(P!==12){let H=new Uint8Array(12);H.set(a,i?0:12-a.length),a=H,l.push(a)}let N=Ae(a);return Gs(t,B,_,N,f,p,g,s),Re(...l),p}}function te(t,e){return t[e++]&255|(t[e++]&255)<<8}var ar=class{constructor(e){v(this,"blockLen",16);v(this,"outputLen",16);v(this,"buffer",new Uint8Array(16));v(this,"r",new Uint16Array(10));v(this,"h",new Uint16Array(10));v(this,"pad",new Uint16Array(8));v(this,"pos",0);v(this,"finished",!1);e=ht(ee(e,32,"key"));let r=te(e,0),n=te(e,2),o=te(e,4),i=te(e,6),s=te(e,8),c=te(e,10),a=te(e,12),f=te(e,14);this.r[0]=r&8191,this.r[1]=(r>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|c<<2)&8191,this.r[7]=(c>>>11|a<<5)&8065,this.r[8]=(a>>>8|f<<8)&8191,this.r[9]=f>>>5&127;for(let p=0;p<8;p++)this.pad[p]=te(e,16+2*p)}process(e,r,n=!1){let o=n?0:2048,{h:i,r:s}=this,c=s[0],a=s[1],f=s[2],p=s[3],g=s[4],d=s[5],l=s[6],b=s[7],E=s[8],B=s[9],_=te(e,r+0),P=te(e,r+2),N=te(e,r+4),H=te(e,r+6),q=te(e,r+8),Z=te(e,r+10),Y=te(e,r+12),G=te(e,r+14),I=i[0]+(_&8191),K=i[1]+((_>>>13|P<<3)&8191),D=i[2]+((P>>>10|N<<6)&8191),L=i[3]+((N>>>7|H<<9)&8191),x=i[4]+((H>>>4|q<<12)&8191),u=i[5]+(q>>>1&8191),h=i[6]+((q>>>14|Z<<2)&8191),y=i[7]+((Z>>>11|Y<<5)&8191),w=i[8]+((Y>>>8|G<<8)&8191),k=i[9]+(G>>>5|o),m=0,A=m+I*c+K*(5*B)+D*(5*E)+L*(5*b)+x*(5*l);m=A>>>13,A&=8191,A+=u*(5*d)+h*(5*g)+y*(5*p)+w*(5*f)+k*(5*a),m+=A>>>13,A&=8191;let S=m+I*a+K*c+D*(5*B)+L*(5*E)+x*(5*b);m=S>>>13,S&=8191,S+=u*(5*l)+h*(5*d)+y*(5*g)+w*(5*p)+k*(5*f),m+=S>>>13,S&=8191;let R=m+I*f+K*a+D*c+L*(5*B)+x*(5*E);m=R>>>13,R&=8191,R+=u*(5*b)+h*(5*l)+y*(5*d)+w*(5*g)+k*(5*p),m+=R>>>13,R&=8191;let T=m+I*p+K*f+D*a+L*c+x*(5*B);m=T>>>13,T&=8191,T+=u*(5*E)+h*(5*b)+y*(5*l)+w*(5*d)+k*(5*g),m+=T>>>13,T&=8191;let M=m+I*g+K*p+D*f+L*a+x*c;m=M>>>13,M&=8191,M+=u*(5*B)+h*(5*E)+y*(5*b)+w*(5*l)+k*(5*d),m+=M>>>13,M&=8191;let C=m+I*d+K*g+D*p+L*f+x*a;m=C>>>13,C&=8191,C+=u*c+h*(5*B)+y*(5*E)+w*(5*b)+k*(5*l),m+=C>>>13,C&=8191;let O=m+I*l+K*d+D*g+L*p+x*f;m=O>>>13,O&=8191,O+=u*a+h*c+y*(5*B)+w*(5*E)+k*(5*b),m+=O>>>13,O&=8191;let $=m+I*b+K*l+D*d+L*g+x*p;m=$>>>13,$&=8191,$+=u*f+h*a+y*c+w*(5*B)+k*(5*E),m+=$>>>13,$&=8191;let z=m+I*E+K*b+D*l+L*d+x*g;m=z>>>13,z&=8191,z+=u*p+h*f+y*a+w*c+k*(5*B),m+=z>>>13,z&=8191;let V=m+I*B+K*E+D*b+L*l+x*d;m=V>>>13,V&=8191,V+=u*g+h*p+y*f+w*a+k*c,m+=V>>>13,V&=8191,m=(m<<2)+m|0,m=m+A|0,A=m&8191,m=m>>>13,S+=m,i[0]=A,i[1]=S,i[2]=R,i[3]=T,i[4]=M,i[5]=C,i[6]=O,i[7]=$,i[8]=z,i[9]=V}finalize(){let{h:e,pad:r}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let c=2;c<10;c++)e[c]+=o,o=e[c]>>>13,e[c]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let c=1;c<10;c++)n[c]=e[c]+o,o=n[c]>>>13,n[c]&=8191;n[9]-=8192;let i=(o^1)-1;for(let c=0;c<10;c++)n[c]&=i;i=~i;for(let c=0;c<10;c++)e[c]=e[c]&i|n[c];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+r[0];e[0]=s&65535;for(let c=1;c<8;c++)s=(e[c]+r[c]|0)+(s>>>16)|0,e[c]=s&65535;Re(n)}update(e){rr(this),ee(e),e=ht(e);let{buffer:r,blockLen:n}=this,o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}r.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(r,0,!1),this.pos=0)}return this}destroy(){Re(this.h,this.r,this.buffer,this.pad)}digestInto(e){rr(this),Uo(e,this),this.finished=!0;let{buffer:r,h:n}=this,{pos:o}=this;if(o){for(r[o++]=1;o<16;o++)r[o]=0;this.process(r,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:r}=this;this.digestInto(e);let n=e.slice(0,r);return this.destroy(),n}};function Ws(t){let e=(n,o)=>t(o).update(n).digest(),r=t(new Uint8Array(32));return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}var Mo=Ws(t=>new ar(t));function Vo(t,e,r,n,o,i=20){let s=t[0],c=t[1],a=t[2],f=t[3],p=e[0],g=e[1],d=e[2],l=e[3],b=e[4],E=e[5],B=e[6],_=e[7],P=o,N=r[0],H=r[1],q=r[2],Z=s,Y=c,G=a,I=f,K=p,D=g,L=d,x=l,u=b,h=E,y=B,w=_,k=P,m=N,A=H,S=q;for(let T=0;T<i;T+=2)Z=Z+K|0,k=U(k^Z,16),u=u+k|0,K=U(K^u,12),Z=Z+K|0,k=U(k^Z,8),u=u+k|0,K=U(K^u,7),Y=Y+D|0,m=U(m^Y,16),h=h+m|0,D=U(D^h,12),Y=Y+D|0,m=U(m^Y,8),h=h+m|0,D=U(D^h,7),G=G+L|0,A=U(A^G,16),y=y+A|0,L=U(L^y,12),G=G+L|0,A=U(A^G,8),y=y+A|0,L=U(L^y,7),I=I+x|0,S=U(S^I,16),w=w+S|0,x=U(x^w,12),I=I+x|0,S=U(S^I,8),w=w+S|0,x=U(x^w,7),Z=Z+D|0,S=U(S^Z,16),y=y+S|0,D=U(D^y,12),Z=Z+D|0,S=U(S^Z,8),y=y+S|0,D=U(D^y,7),Y=Y+L|0,k=U(k^Y,16),w=w+k|0,L=U(L^w,12),Y=Y+L|0,k=U(k^Y,8),w=w+k|0,L=U(L^w,7),G=G+x|0,m=U(m^G,16),u=u+m|0,x=U(x^u,12),G=G+x|0,m=U(m^G,8),u=u+m|0,x=U(x^u,7),I=I+K|0,A=U(A^I,16),h=h+A|0,K=U(K^h,12),I=I+K|0,A=U(A^I,8),h=h+A|0,K=U(K^h,7);let R=0;n[R++]=s+Z|0,n[R++]=c+Y|0,n[R++]=a+G|0,n[R++]=f+I|0,n[R++]=p+K|0,n[R++]=g+D|0,n[R++]=d+L|0,n[R++]=l+x|0,n[R++]=b+u|0,n[R++]=E+h|0,n[R++]=B+y|0,n[R++]=_+w|0,n[R++]=P+k|0,n[R++]=N+m|0,n[R++]=H+A|0,n[R++]=q+S|0}function Ys(t,e,r,n){let o=t[0],i=t[1],s=t[2],c=t[3],a=e[0],f=e[1],p=e[2],g=e[3],d=e[4],l=e[5],b=e[6],E=e[7],B=r[0],_=r[1],P=r[2],N=r[3];for(let q=0;q<20;q+=2)o=o+a|0,B=U(B^o,16),d=d+B|0,a=U(a^d,12),o=o+a|0,B=U(B^o,8),d=d+B|0,a=U(a^d,7),i=i+f|0,_=U(_^i,16),l=l+_|0,f=U(f^l,12),i=i+f|0,_=U(_^i,8),l=l+_|0,f=U(f^l,7),s=s+p|0,P=U(P^s,16),b=b+P|0,p=U(p^b,12),s=s+p|0,P=U(P^s,8),b=b+P|0,p=U(p^b,7),c=c+g|0,N=U(N^c,16),E=E+N|0,g=U(g^E,12),c=c+g|0,N=U(N^c,8),E=E+N|0,g=U(g^E,7),o=o+f|0,N=U(N^o,16),b=b+N|0,f=U(f^b,12),o=o+f|0,N=U(N^o,8),b=b+N|0,f=U(f^b,7),i=i+p|0,B=U(B^i,16),E=E+B|0,p=U(p^E,12),i=i+p|0,B=U(B^i,8),E=E+B|0,p=U(p^E,7),s=s+g|0,_=U(_^s,16),d=d+_|0,g=U(g^d,12),s=s+g|0,_=U(_^s,8),d=d+_|0,g=U(g^d,7),c=c+a|0,P=U(P^c,16),l=l+P|0,a=U(a^l,12),c=c+a|0,P=U(P^c,8),l=l+P|0,a=U(a^l,7);let H=0;n[H++]=o,n[H++]=i,n[H++]=s,n[H++]=c,n[H++]=B,n[H++]=_,n[H++]=P,n[H++]=N}var pt=cr(Vo,{counterRight:!1,counterLength:4,allowShortKeys:!1}),Xs=cr(Vo,{counterRight:!1,counterLength:8,extendNonceFn:Ys,allowShortKeys:!1});var Js=new Uint8Array(16),Do=(t,e)=>{t.update(e);let r=e.length%16;r&&t.update(Js.subarray(r))},Qs=new Uint8Array(32);function $o(t,e,r,n,o){o!==void 0&&ee(o,void 0,"AAD");let i=t(e,r,Qs),s=No(n.length,o?o.length:0,!0),c=Mo.create(i);o&&Do(c,o),Do(c,n),c.update(s);let a=c.digest();return Re(i,s),a}var Ko=t=>(e,r,n)=>({encrypt(i,s){let c=i.length;s=ir(c+16,s,!1),s.set(i);let a=s.subarray(0,-16);t(e,r,a,a,1);let f=$o(t,e,r,a,n);return s.set(f,c),Re(f),s},decrypt(i,s){s=ir(i.length-16,s,!1);let c=i.subarray(0,-16),a=i.subarray(-16),f=$o(t,e,r,c,n);if(!dt(a,f))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),t(e,r,s,s,1),Re(f),s}}),qf=or({blockSize:64,nonceLength:12,tagLength:16},Ko(pt)),Mf=or({blockSize:64,nonceLength:24,tagLength:16},Ko(Xs));function un(t,e,r){return Ye(t),r===void 0&&(r=new Uint8Array(t.outputLen)),we(t,r,e)}var fr=Uint8Array.of(0),jo=Uint8Array.of();function dn(t,e,r,n=32){Ye(t),he(n,"length");let o=t.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let i=Math.ceil(n/o);r===void 0?r=jo:W(r,void 0,"info");let s=new Uint8Array(i*o),c=we.create(t,e),a=c._cloneInto(),f=new Uint8Array(c.outputLen);for(let p=0;p<i;p++)fr[0]=p+1,a.update(p===0?jo:f).update(r).update(fr).digestInto(f),s.set(f,o*p),c._cloneInto(a);return c.destroy(),a.destroy(),Se(f,fr),s.slice(0,n)}function zo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Fs(t){if(!zo(t))throw new Error("Uint8Array expected")}function Go(t,e){return Array.isArray(e)?e.length===0?!0:t?e.every(r=>typeof r=="string"):e.every(r=>Number.isSafeInteger(r)):!1}function Tt(t,e){if(typeof e!="string")throw new Error(`${t}: string expected`);return!0}function dr(t){if(!Number.isSafeInteger(t))throw new Error(`invalid integer: ${t}`)}function ur(t){if(!Array.isArray(t))throw new Error("array expected")}function hn(t,e){if(!Go(!0,e))throw new Error(`${t}: array of strings expected`)}function ec(t,e){if(!Go(!1,e))throw new Error(`${t}: array of numbers expected`)}function tc(...t){let e=i=>i,r=(i,s)=>c=>i(s(c)),n=t.map(i=>i.encode).reduceRight(r,e),o=t.map(i=>i.decode).reduce(r,e);return{encode:n,decode:o}}function nc(t){let e=typeof t=="string"?t.split(""):t,r=e.length;hn("alphabet",e);let n=new Map(e.map((o,i)=>[o,i]));return{encode:o=>(ur(o),o.map(i=>{if(!Number.isSafeInteger(i)||i<0||i>=r)throw new Error(`alphabet.encode: digit index outside alphabet "${i}". Allowed: ${t}`);return e[i]})),decode:o=>(ur(o),o.map(i=>{Tt("alphabet.decode",i);let s=n.get(i);if(s===void 0)throw new Error(`Unknown letter: "${i}". Allowed: ${t}`);return s}))}}function rc(t=""){return Tt("join",t),{encode:e=>(hn("join.decode",e),e.join(t)),decode:e=>(Tt("join.decode",e),e.split(t))}}function oc(t,e="="){return dr(t),Tt("padding",e),{encode(r){for(hn("padding.encode",r);r.length*t%8;)r.push(e);return r},decode(r){hn("padding.decode",r);let n=r.length;if(n*t%8)throw new Error("padding: invalid, string should have whole number of bytes");for(;n>0&&r[n-1]===e;n--)if((n-1)*t%8===0)throw new Error("padding: invalid, string has too much padding");return r.slice(0,n)}}}var Wo=(t,e)=>e===0?t:Wo(e,t%e),pn=(t,e)=>t+(e-Wo(t,e)),lr=(()=>{let t=[];for(let e=0;e<40;e++)t.push(2**e);return t})();function Zo(t,e,r,n){if(ur(t),e<=0||e>32)throw new Error(`convertRadix2: wrong from=${e}`);if(r<=0||r>32)throw new Error(`convertRadix2: wrong to=${r}`);if(pn(e,r)>32)throw new Error(`convertRadix2: carry overflow from=${e} to=${r} carryBits=${pn(e,r)}`);let o=0,i=0,s=lr[e],c=lr[r]-1,a=[];for(let f of t){if(dr(f),f>=s)throw new Error(`convertRadix2: invalid data word=${f} from=${e}`);if(o=o<<e|f,i+e>32)throw new Error(`convertRadix2: carry overflow pos=${i} from=${e}`);for(i+=e;i>=r;i-=r)a.push((o>>i-r&c)>>>0);let p=lr[i];if(p===void 0)throw new Error("invalid carry");o&=p-1}if(o=o<<r-i&c,!n&&i>=e)throw new Error("Excess padding");if(!n&&o>0)throw new Error(`Non-zero padding: ${o}`);return n&&i>0&&a.push(o>>>0),a}function ic(t,e=!1){if(dr(t),t<=0||t>32)throw new Error("radix2: bits should be in (0..32]");if(pn(8,t)>32||pn(t,8)>32)throw new Error("radix2: carry overflow");return{encode:r=>{if(!zo(r))throw new Error("radix2.encode input should be Uint8Array");return Zo(Array.from(r),8,t,!e)},decode:r=>(ec("radix2.decode",r),Uint8Array.from(Zo(r,t,8,e)))}}var sc=typeof Uint8Array.from([]).toBase64=="function"&&typeof Uint8Array.fromBase64=="function",cc=(t,e)=>{Tt("base64",t);let r=e?/^[A-Za-z0-9=_-]+$/:/^[A-Za-z0-9=+/]+$/,n=e?"base64url":"base64";if(t.length>0&&!r.test(t))throw new Error("invalid base64");return Uint8Array.fromBase64(t,{alphabet:n,lastChunkHandling:"strict"})},Ut=sc?{encode(t){return Fs(t),t.toBase64()},decode(t){return cc(t,!1)}}:tc(ic(6),nc("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),oc(6),rc(""));var Fe=Symbol("verified"),ac=t=>t instanceof Object;function fc(t){if(!ac(t)||typeof t.kind!="number"||typeof t.content!="string"||typeof t.created_at!="number"||typeof t.pubkey!="string"||!t.pubkey.match(/^[a-f0-9]{64}$/)||!Array.isArray(t.tags))return!1;for(let e=0;e<t.tags.length;e++){let r=t.tags[e];if(!Array.isArray(r))return!1;for(let n=0;n<r.length;n++)if(typeof r[n]!="string")return!1}return!0}var lc=new TextDecoder("utf-8"),br=new TextEncoder;function Ct(t){try{t.indexOf("://")===-1&&(t="wss://"+t);let e=new URL(t);return e.protocol==="http:"?e.protocol="ws:":e.protocol==="https:"&&(e.protocol="wss:"),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()}catch{throw new Error(`Invalid URL: ${t}`)}}var uc=class{generateSecretKey(){return ut.utils.randomSecretKey()}getPublicKey(t){return pe(ut.getPublicKey(t))}finalizeEvent(t,e){let r=t;return r.pubkey=pe(ut.getPublicKey(e)),r.id=hr(r),r.sig=pe(ut.sign(ne(hr(r)),e)),r[Fe]=!0,r}verifyEvent(t){if(typeof t[Fe]=="boolean")return t[Fe];try{let e=hr(t);if(e!==t.id)return t[Fe]=!1,!1;let r=ut.verify(ne(t.sig),ne(e),ne(t.pubkey));return t[Fe]=r,r}catch{return t[Fe]=!1,!1}}};function dc(t){if(!fc(t))throw new Error("can't serialize event with wrong or missing properties");return JSON.stringify([0,t.pubkey,t.created_at,t.kind,t.tags,t.content])}function hr(t){let e=ae(br.encode(dc(t)));return pe(e)}var bn=new uc,Wf=bn.generateSecretKey,Yo=bn.getPublicKey,hc=bn.finalizeEvent,Jo=bn.verifyEvent,Qo=1,Fo=65535;function pr(t,e){let r=cn.getSharedSecret(t,ne("02"+e)).subarray(1,33);return un(ae,r,br.encode("nip44-v2"))}function ei(t,e){let r=dn(ae,t,e,76);return{chacha_key:r.subarray(0,32),chacha_nonce:r.subarray(32,44),hmac_key:r.subarray(44,76)}}function ti(t){if(!Number.isSafeInteger(t)||t<1)throw new Error("expected positive integer");if(t<=32)return 32;let e=1<<Math.floor(Math.log2(t-1))+1,r=e<=256?32:e/8;return r*(Math.floor((t-1)/r)+1)}function pc(t){if(!Number.isSafeInteger(t)||t<Qo||t>Fo)throw new Error("invalid plaintext size: must be between 1 and 65535 bytes");let e=new Uint8Array(2);return new DataView(e.buffer).setUint16(0,t,!1),e}function gc(t){let e=br.encode(t),r=e.length,n=pc(r),o=new Uint8Array(ti(r)-r);return F(n,e,o)}function bc(t){let e=new DataView(t.buffer).getUint16(0),r=t.subarray(2,2+e);if(e<Qo||e>Fo||r.length!==e||t.length!==2+ti(e))throw new Error("invalid padding");return lc.decode(r)}function ni(t,e,r){if(r.length!==32)throw new Error("AAD associated data must be 32 bytes");let n=F(r,e);return we(ae,t,n)}function yc(t){if(typeof t!="string")throw new Error("payload must be a valid string");let e=t.length;if(e<132||e>87472)throw new Error("invalid payload length: "+e);if(t[0]==="#")throw new Error("unknown encryption version");let r;try{r=Ut.decode(t)}catch(i){throw new Error("invalid base64: "+i.message)}let n=r.length;if(n<99||n>65603)throw new Error("invalid data length: "+n);let o=r[0];if(o!==2)throw new Error("unknown encryption version "+o);return{nonce:r.subarray(1,33),ciphertext:r.subarray(33,-32),mac:r.subarray(-32)}}function mc(t,e,r=xe(32)){let{chacha_key:n,chacha_nonce:o,hmac_key:i}=ei(e,r),s=gc(t),c=pt(n,o,s),a=ni(i,c,r);return Ut.encode(F(new Uint8Array([2]),r,c,a))}function Xo(t,e){let{nonce:r,ciphertext:n,mac:o}=yc(t),{chacha_key:i,chacha_nonce:s,hmac_key:c}=ei(e,r),a=ni(c,n,r);if(!dt(a,o))throw new Error("invalid MAC");let f=pt(i,s,n);return bc(f)}var xc=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,wc;try{wc=fetch}catch{}var Ec=22242,gr=24133;function vc(t,e){if(t.ids&&t.ids.indexOf(e.id)===-1||t.kinds&&t.kinds.indexOf(e.kind)===-1||t.authors&&t.authors.indexOf(e.pubkey)===-1)return!1;for(let r in t)if(r[0]==="#"){let n=r.slice(1),o=t[`#${n}`];if(o&&!e.tags.find(([i,s])=>i===r.slice(1)&&o.indexOf(s)!==-1))return!1}return!(t.since&&e.created_at<t.since||t.until&&e.created_at>t.until)}function Sc(t,e){for(let r=0;r<t.length;r++)if(vc(t[r],e))return!0;return!1}function Bc(t,e){let r=e.length+3,n=t.indexOf(`"${e}":`)+r,o=t.slice(n).indexOf('"')+n+1;return t.slice(o,o+64)}function kc(t){let e=t.slice(0,22).indexOf('"EVENT"');if(e===-1)return null;let r=t.slice(e+7+1).indexOf('"');if(r===-1)return null;let n=e+7+1+r,o=t.slice(n+1,80).indexOf('"');if(o===-1)return null;let i=n+1+o;return t.slice(n+1,i)}function Ac(t,e){return{kind:Ec,created_at:Math.floor(Date.now()/1e3),tags:[["relay",t],["challenge",e]],content:""}}var ri=class extends Error{constructor(t,e){super(`Tried to send message '${t} on a closed connection to ${e}.`),this.name="SendingOnClosedConnection"}},oi=class{constructor(t,e){v(this,"url");v(this,"_connected",!1);v(this,"onclose",null);v(this,"onnotice",t=>console.debug(`NOTICE from ${this.url}: ${t}`));v(this,"onauth");v(this,"baseEoseTimeout",4400);v(this,"publishTimeout",4400);v(this,"pingFrequency",29e3);v(this,"pingTimeout",2e4);v(this,"resubscribeBackoff",[1e4,1e4,1e4,2e4,2e4,3e4,6e4]);v(this,"openSubs",new Map);v(this,"enablePing");v(this,"enableReconnect");v(this,"idleSince",Date.now());v(this,"ongoingOperations",0);v(this,"reconnectTimeoutHandle");v(this,"pingIntervalHandle");v(this,"reconnectAttempts",0);v(this,"skipReconnection",!1);v(this,"connectionPromise");v(this,"openCountRequests",new Map);v(this,"openEventPublishes",new Map);v(this,"ws");v(this,"challenge");v(this,"authPromise");v(this,"serial",0);v(this,"verifyEvent");v(this,"_WebSocket");this.url=Ct(t),this.verifyEvent=e.verifyEvent,this._WebSocket=e.websocketImplementation||WebSocket,this.enablePing=e.enablePing,this.enableReconnect=e.enableReconnect||!1}static async connect(t,e){let r=new oi(t,e);return await r.connect(e),r}closeAllSubscriptions(t){for(let[e,r]of this.openSubs)r.close(t);this.openSubs.clear();for(let[e,r]of this.openEventPublishes)r.reject(new Error(t));this.openEventPublishes.clear();for(let[e,r]of this.openCountRequests)r.reject(new Error(t));this.openCountRequests.clear()}get connected(){return this._connected}async reconnect(){let t=this.resubscribeBackoff[Math.min(this.reconnectAttempts,this.resubscribeBackoff.length-1)];this.reconnectAttempts++,this.reconnectTimeoutHandle=setTimeout(async()=>{try{await this.connect()}catch{}},t)}handleHardClose(t){this.pingIntervalHandle&&(clearInterval(this.pingIntervalHandle),this.pingIntervalHandle=void 0),this._connected=!1,this.connectionPromise=void 0,this.idleSince=void 0,this.enableReconnect&&!this.skipReconnection?this.reconnect():(this.onclose?.(),this.closeAllSubscriptions(t))}async connect(t){let e;return this.connectionPromise?this.connectionPromise:(this.challenge=void 0,this.authPromise=void 0,this.skipReconnection=!1,this.connectionPromise=new Promise((r,n)=>{t?.timeout&&(e=setTimeout(()=>{n("connection timed out"),this.connectionPromise=void 0,this.skipReconnection=!0,this.onclose?.(),this.handleHardClose("relay connection timed out")},t.timeout)),t?.abort&&(t.abort.onabort=n);try{this.ws=new this._WebSocket(this.url)}catch(o){clearTimeout(e),n(o);return}this.ws.onopen=()=>{this.reconnectTimeoutHandle&&(clearTimeout(this.reconnectTimeoutHandle),this.reconnectTimeoutHandle=void 0),clearTimeout(e),this._connected=!0;let o=this.reconnectAttempts>0;this.reconnectAttempts=0;for(let i of this.openSubs.values()){if(i.eosed=!1,o)for(let s=0;s<i.filters.length;s++)i.lastEmitted&&(i.filters[s].since=i.lastEmitted+1);i.fire()}this.enablePing&&(this.pingIntervalHandle=setInterval(()=>this.pingpong(),this.pingFrequency)),r()},this.ws.onerror=()=>{clearTimeout(e),n("connection failed"),this.connectionPromise=void 0,this.skipReconnection=!0,this.onclose?.(),this.handleHardClose("relay connection failed")},this.ws.onclose=o=>{clearTimeout(e),n(o.message||"websocket closed"),this.handleHardClose("relay connection closed")},this.ws.onmessage=this._onmessage.bind(this)}),this.connectionPromise)}waitForPingPong(){return new Promise(t=>{this.ws.once("pong",()=>t(!0)),this.ws.ping()})}waitForDummyReq(){return new Promise((t,e)=>{if(!this.connectionPromise)return e(new Error(`no connection to ${this.url}, can't ping`));try{let r=this.subscribe([{ids:["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],limit:0}],{label:"<forced-ping>",oneose:()=>{t(!0),r.close()},onclose(){t(!0)},eoseTimeout:this.pingTimeout+1e3})}catch(r){e(r)}})}async pingpong(){this.ws?.readyState===1&&(await Promise.any([this.ws&&this.ws.ping&&this.ws.once?this.waitForPingPong():this.waitForDummyReq(),new Promise(e=>setTimeout(()=>e(!1),this.pingTimeout))])||this.ws?.readyState===this._WebSocket.OPEN&&this.ws?.close())}async send(t){if(!this.connectionPromise)throw new ri(t,this.url);this.connectionPromise.then(()=>{this.ws?.send(t)})}async auth(t){let e=this.challenge;if(!e)throw new Error("can't perform auth, no challenge was received");return this.authPromise?this.authPromise:(this.authPromise=new Promise(async(r,n)=>{try{let o=await t(Ac(this.url,e)),i=setTimeout(()=>{let s=this.openEventPublishes.get(o.id);s&&(s.reject(new Error("auth timed out")),this.openEventPublishes.delete(o.id))},this.publishTimeout);this.openEventPublishes.set(o.id,{resolve:r,reject:n,timeout:i}),this.send('["AUTH",'+JSON.stringify(o)+"]")}catch(o){console.warn("subscribe auth function failed:",o)}}),this.authPromise)}async publish(t){this.idleSince=void 0,this.ongoingOperations++;let e=new Promise((r,n)=>{let o=setTimeout(()=>{let i=this.openEventPublishes.get(t.id);i&&(i.reject(new Error("publish timed out")),this.openEventPublishes.delete(t.id))},this.publishTimeout);this.openEventPublishes.set(t.id,{resolve:r,reject:n,timeout:o})});return this.send('["EVENT",'+JSON.stringify(t)+"]"),this.ongoingOperations--,this.ongoingOperations===0&&(this.idleSince=Date.now()),e}async count(t,e){this.serial++;let r=e?.id||"count:"+this.serial,n=new Promise((o,i)=>{this.openCountRequests.set(r,{resolve:o,reject:i})});return this.send('["COUNT","'+r+'",'+JSON.stringify(t).substring(1)),n}subscribe(t,e){e.label!=="<forced-ping>"&&(this.idleSince=void 0,this.ongoingOperations++);let r=this.prepareSubscription(t,e);return r.fire(),e.abort&&(e.abort.onabort=()=>r.close(String(e.abort.reason||"<aborted>"))),r}prepareSubscription(t,e){this.serial++;let r=e.id||(e.label?e.label+":":"sub:")+this.serial,n=new Rc(this,r,t,e);return this.openSubs.set(r,n),n}close(){this.skipReconnection=!0,this.reconnectTimeoutHandle&&(clearTimeout(this.reconnectTimeoutHandle),this.reconnectTimeoutHandle=void 0),this.pingIntervalHandle&&(clearInterval(this.pingIntervalHandle),this.pingIntervalHandle=void 0),this.closeAllSubscriptions("relay connection closed by us"),this._connected=!1,this.idleSince=void 0,this.onclose?.(),this.ws?.readyState===this._WebSocket.OPEN&&this.ws?.close()}_onmessage(t){let e=t.data;if(!e)return;let r=kc(e);if(r){let n=this.openSubs.get(r);if(!n)return;let o=Bc(e,"id"),i=n.alreadyHaveEvent?.(o);if(n.receivedEvent?.(this,o),i)return}try{let n=JSON.parse(e);switch(n[0]){case"EVENT":{let o=this.openSubs.get(n[1]),i=n[2];this.verifyEvent(i)&&Sc(o.filters,i)?o.onevent(i):o.oninvalidevent?.(i),(!o.lastEmitted||o.lastEmitted<i.created_at)&&(o.lastEmitted=i.created_at);return}case"COUNT":{let o=n[1],i=n[2],s=this.openCountRequests.get(o);s&&(s.resolve(i.count),this.openCountRequests.delete(o));return}case"EOSE":{let o=this.openSubs.get(n[1]);if(!o)return;o.receivedEose();return}case"OK":{let o=n[1],i=n[2],s=n[3],c=this.openEventPublishes.get(o);c&&(clearTimeout(c.timeout),i?c.resolve(s):c.reject(new Error(s)),this.openEventPublishes.delete(o));return}case"CLOSED":{let o=n[1],i=this.openSubs.get(o);if(!i)return;i.closed=!0,i.close(n[2]);return}case"NOTICE":{this.onnotice(n[1]);return}case"AUTH":{this.challenge=n[1],this.onauth&&this.auth(this.onauth);return}default:{this.openSubs.get(n[1])?.oncustom?.(n);return}}}catch(n){try{let[o,i,s]=JSON.parse(e);console.warn(`[nostr] relay ${this.url} error processing message:`,n,s)}catch{console.warn(`[nostr] relay ${this.url} error processing message:`,n)}return}}},Rc=class{constructor(t,e,r,n){v(this,"relay");v(this,"id");v(this,"lastEmitted");v(this,"closed",!1);v(this,"eosed",!1);v(this,"filters");v(this,"alreadyHaveEvent");v(this,"receivedEvent");v(this,"onevent");v(this,"oninvalidevent");v(this,"oneose");v(this,"onclose");v(this,"oncustom");v(this,"eoseTimeout");v(this,"eoseTimeoutHandle");if(r.length===0)throw new Error("subscription can't be created with zero filters");this.relay=t,this.filters=r,this.id=e,this.alreadyHaveEvent=n.alreadyHaveEvent,this.receivedEvent=n.receivedEvent,this.eoseTimeout=n.eoseTimeout||t.baseEoseTimeout,this.oneose=n.oneose,this.onclose=n.onclose,this.oninvalidevent=n.oninvalidevent,this.onevent=n.onevent||(o=>{console.warn(`onevent() callback not defined for subscription '${this.id}' in relay ${this.relay.url}. event received:`,o)})}fire(){this.relay.send('["REQ","'+this.id+'",'+JSON.stringify(this.filters).substring(1)),this.eoseTimeoutHandle=setTimeout(this.receivedEose.bind(this),this.eoseTimeout)}receivedEose(){this.eosed||(clearTimeout(this.eoseTimeoutHandle),this.eosed=!0,this.oneose?.())}close(t="closed by caller"){if(!this.closed&&this.relay.connected){try{this.relay.send('["CLOSE",'+JSON.stringify(this.id)+"]")}catch(e){if(!(e instanceof ri))throw e}this.closed=!0}this.relay.openSubs.delete(this.id),this.relay.ongoingOperations--,this.relay.ongoingOperations===0&&(this.relay.idleSince=Date.now()),this.onclose?.(t)}},_c=t=>(t[Fe]=!0,!0),Lc=class{constructor(t){v(this,"relays",new Map);v(this,"seenOn",new Map);v(this,"trackRelays",!1);v(this,"verifyEvent");v(this,"enablePing");v(this,"enableReconnect");v(this,"automaticallyAuth");v(this,"trustedRelayURLs",new Set);v(this,"onRelayConnectionFailure");v(this,"onRelayConnectionSuccess");v(this,"allowConnectingToRelay");v(this,"maxWaitForConnection");v(this,"_WebSocket");this.verifyEvent=t.verifyEvent,this._WebSocket=t.websocketImplementation,this.enablePing=t.enablePing,this.enableReconnect=t.enableReconnect||!1,this.automaticallyAuth=t.automaticallyAuth,this.onRelayConnectionFailure=t.onRelayConnectionFailure,this.onRelayConnectionSuccess=t.onRelayConnectionSuccess,this.allowConnectingToRelay=t.allowConnectingToRelay,this.maxWaitForConnection=t.maxWaitForConnection||3e3}async ensureRelay(t,e){t=Ct(t);let r=this.relays.get(t);if(r||(r=new oi(t,{verifyEvent:this.trustedRelayURLs.has(t)?_c:this.verifyEvent,websocketImplementation:this._WebSocket,enablePing:this.enablePing,enableReconnect:this.enableReconnect}),r.onclose=()=>{this.relays.delete(t)},this.relays.set(t,r)),this.automaticallyAuth){let n=this.automaticallyAuth(t);n&&(r.onauth=n)}try{await r.connect({timeout:e?.connectionTimeout,abort:e?.abort})}catch(n){throw this.relays.delete(t),n}return r}close(t){t.map(Ct).forEach(e=>{this.relays.get(e)?.close(),this.relays.delete(e)})}subscribe(t,e,r){let n=[],o=[];for(let i=0;i<t.length;i++){let s=Ct(t[i]);n.find(c=>c.url===s)||o.indexOf(s)===-1&&(o.push(s),n.push({url:s,filter:e}))}return this.subscribeMap(n,r)}subscribeMany(t,e,r){return this.subscribe(t,e,r)}subscribeMap(t,e){let r=new Map;for(let d of t){let{url:l,filter:b}=d;r.has(l)||r.set(l,[]),r.get(l).push(b)}let n=Array.from(r.entries()).map(([d,l])=>({url:d,filters:l}));this.trackRelays&&(e.receivedEvent=(d,l)=>{let b=this.seenOn.get(l);b||(b=new Set,this.seenOn.set(l,b)),b.add(d)});let o=new Set,i=[],s=[],c=d=>{s[d]||(s[d]=!0,s.filter(l=>l).length===n.length&&(e.oneose?.(),c=()=>{}))},a=[],f=(d,l)=>{a[d]||(c(d),a[d]=l,a.filter(b=>b).length===n.length&&(e.onclose?.(a),f=()=>{}))},p=d=>{if(e.alreadyHaveEvent?.(d))return!0;let l=o.has(d);return o.add(d),l},g=Promise.all(n.map(async({url:d,filters:l},b)=>{if(this.allowConnectingToRelay?.(d,["read",l])===!1){f(b,"connection skipped by allowConnectingToRelay");return}let E;try{E=await this.ensureRelay(d,{connectionTimeout:this.maxWaitForConnection<(e.maxWait||0)?Math.max(e.maxWait*.8,e.maxWait-1e3):this.maxWaitForConnection,abort:e.abort})}catch(_){this.onRelayConnectionFailure?.(d),f(b,_?.message||String(_));return}this.onRelayConnectionSuccess?.(d);let B=E.subscribe(l,{...e,oneose:()=>c(b),onclose:_=>{_.startsWith("auth-required: ")&&e.onauth?E.auth(e.onauth).then(()=>{E.subscribe(l,{...e,oneose:()=>c(b),onclose:P=>{f(b,P)},alreadyHaveEvent:p,eoseTimeout:e.maxWait,abort:e.abort})}).catch(P=>{f(b,`auth was required and attempted, but failed with: ${P}`)}):f(b,_)},alreadyHaveEvent:p,eoseTimeout:e.maxWait,abort:e.abort});i.push(B)}));return{async close(d){await g,i.forEach(l=>{l.close(d)})}}}subscribeEose(t,e,r){let n;return n=this.subscribe(t,e,{...r,oneose(){let o="closed automatically on eose";n?n.close(o):r.onclose?.(t.map(i=>o))}}),n}subscribeManyEose(t,e,r){return this.subscribeEose(t,e,r)}async querySync(t,e,r){return new Promise(async n=>{let o=[];this.subscribeEose(t,e,{...r,onevent(i){o.push(i)},onclose(i){n(o)}})})}async get(t,e,r){e.limit=1;let n=await this.querySync(t,e,r);return n.sort((o,i)=>i.created_at-o.created_at),n[0]||null}publish(t,e,r){return t.map(Ct).map(async(n,o,i)=>{if(i.indexOf(n)!==o)return Promise.reject("duplicate url");if(this.allowConnectingToRelay?.(n,["write",e])===!1)return Promise.reject("connection skipped by allowConnectingToRelay");let s;try{s=await this.ensureRelay(n,{connectionTimeout:this.maxWaitForConnection<(r?.maxWait||0)?Math.max(r.maxWait*.8,r.maxWait-1e3):this.maxWaitForConnection,abort:r?.abort})}catch(c){return this.onRelayConnectionFailure?.(n),"connection failure: "+String(c)}return s.publish(e).catch(async c=>{if(c instanceof Error&&c.message.startsWith("auth-required: ")&&r?.onauth)return await s.auth(r.onauth),s.publish(e);throw c}).then(c=>{if(this.trackRelays){let a=this.seenOn.get(e.id);a||(a=new Set,this.seenOn.set(e.id,a)),a.add(s)}return c})})}listConnectionStatus(){let t=new Map;return this.relays.forEach((e,r)=>t.set(r,e.connected)),t}destroy(){this.relays.forEach(t=>t.close()),this.relays=new Map}pruneIdleRelays(t=1e4){let e=[];for(let[r,n]of this.relays)n.idleSince&&Date.now()-n.idleSince>=t&&(this.relays.delete(r),e.push(r),n.close());return e}},ii;try{ii=WebSocket}catch{}var Ic=class extends Lc{constructor(t){super({verifyEvent:Jo,websocketImplementation:ii,maxWaitForConnection:3e3,...t})}},si;try{si=fetch}catch{}var Oc=/^bunker:\/\/([0-9a-f]{64})\??([?\/\w:.=&%-]*)$/;async function ci(t){let e=t.match(Oc);if(e)try{let r=e[1],n=new URLSearchParams(e[2]);return{pubkey:r,relays:n.getAll("relay"),secret:n.get("secret")}}catch{}return Tc(t)}async function Tc(t){let e=t.match(xc);if(!e)return null;let[r,n="_",o]=e;try{let i=`https://${o}/.well-known/nostr.json?name=${n}`,s=await(await si(i,{redirect:"error"})).json(),c=s.names[n],a=s.nip46[c]||[];return{pubkey:c,relays:a,secret:null}}catch{return null}}var gn=class{constructor(t,e){v(this,"params");v(this,"pool");v(this,"subCloser");v(this,"isOpen");v(this,"serial");v(this,"idPrefix");v(this,"listeners");v(this,"waitingForAuth");v(this,"secretKey");v(this,"conversationKey");v(this,"bp");v(this,"cachedPubKey");this.params=e,this.pool=e.pool||new Ic,this.secretKey=t,this.isOpen=!1,this.idPrefix=Math.random().toString(36).substring(7),this.serial=0,this.listeners={},this.waitingForAuth={}}static fromBunker(t,e,r={}){if(e.relays.length===0)throw new Error("no relays specified for this bunker");let n=new gn(t,r);return n.conversationKey=pr(t,e.pubkey),n.bp=e,n.setupSubscription(),n}static async fromURI(t,e,r={},n=3e5){let o=new gn(t,r),i=new URL(e),s=Yo(t);return new Promise((c,a)=>{let f=!1,p=o.pool.subscribe(i.searchParams.getAll("relay"),{kinds:[gr],"#p":[s],limit:0},{onevent:async g=>{try{let d=pr(t,g.pubkey),l=Xo(g.content,d);JSON.parse(l).result===i.searchParams.get("secret")&&(p.close(),o.bp={pubkey:g.pubkey,relays:i.searchParams.getAll("relay"),secret:i.searchParams.get("secret")},o.conversationKey=pr(t,g.pubkey),o.setupSubscription(),f=!0,await Promise.race([new Promise(E=>setTimeout(E,1e3)),o.switchRelays()]),c(o))}catch(d){console.warn("failed to process potential connection event",d)}},onclose:()=>{f||a(new Error("subscription closed before connection was established."))},maxWait:typeof n=="number"?n:void 0,abort:typeof n!="number"?n:void 0})})}setupSubscription(){let t=this.listeners,e=this.waitingForAuth,r=this.conversationKey;this.subCloser=this.pool.subscribe(this.bp.relays,{kinds:[gr],authors:[this.bp.pubkey],"#p":[Yo(this.secretKey)],limit:0},{onevent:async n=>{let o=JSON.parse(Xo(n.content,r)),{id:i,result:s,error:c}=o;if(s==="auth_url"&&e[i]){delete e[i],this.params.onauth?this.params.onauth(c):console.warn(`nostr-tools/nip46: remote signer ${this.bp.pubkey} tried to send an "auth_url"='${c}' but there was no onauth() callback configured.`);return}let a=t[i];a&&(c?a.reject(c):s&&a.resolve(s),delete t[i])},onclose:()=>{this.subCloser=void 0}}),this.isOpen=!0}async switchRelays(){try{let t=await this.sendRequest("switch_relays",[]),e=JSON.parse(t);if(!e||JSON.stringify(e.sort())===JSON.stringify(this.bp.relays))return!1;this.bp.relays=e;let r=this.subCloser;return setTimeout(()=>{r.close()},5e3),this.subCloser=void 0,this.setupSubscription(),!0}catch{return!1}}async close(){this.isOpen=!1,this.subCloser.close()}async sendRequest(t,e){return new Promise(async(r,n)=>{try{if(!this.isOpen)throw new Error("this signer is not open anymore, create a new one");this.subCloser||this.setupSubscription(),this.serial++;let o=`${this.idPrefix}-${this.serial}`,i=mc(JSON.stringify({id:o,method:t,params:e}),this.conversationKey),s=hc({kind:gr,tags:[["p",this.bp.pubkey]],content:i,created_at:Math.floor(Date.now()/1e3)},this.secretKey);this.listeners[o]={resolve:r,reject:n},this.waitingForAuth[o]=!0,await Promise.any(this.pool.publish(this.bp.relays,s))}catch(o){n(o)}})}async ping(){let t=await this.sendRequest("ping",[]);if(t!=="pong")throw new Error(`result is not pong: ${t}`)}async connect(){await this.sendRequest("connect",[this.bp.pubkey,this.bp.secret||""])}async getPublicKey(){return this.cachedPubKey||(this.cachedPubKey=await this.sendRequest("get_public_key",[])),this.cachedPubKey}async signEvent(t){let e=await this.sendRequest("sign_event",[JSON.stringify(t)]),r=JSON.parse(e);if(Jo(r))return r;throw new Error(`event returned from bunker is improperly signed: ${JSON.stringify(r)}`)}async nip04Encrypt(t,e){return await this.sendRequest("nip04_encrypt",[t,e])}async nip04Decrypt(t,e){return await this.sendRequest("nip04_decrypt",[t,e])}async nip44Encrypt(t,e){return await this.sendRequest("nip44_encrypt",[t,e])}async nip44Decrypt(t,e){return await this.sendRequest("nip44_decrypt",[t,e])}};function Nt(){return typeof window<"u"&&!!window.nostr&&typeof window.nostr.signEvent=="function"}var yr=class{constructor(e,r){this.pubkey=e;this.provider=r;this.method="nip07";this.capabilities={canSignEvents:!0,hasNip44:!!r.nip44},r.nip44&&(this.nip44={encrypt:(n,o)=>r.nip44.encrypt(n,o),decrypt:(n,o)=>r.nip44.decrypt(n,o)})}async signEvent(e){return this.provider.signEvent(e)}async close(){}};async function Ht(){if(!Nt())throw new Error("no-nip07-provider");let t=window.nostr,e=await t.getPublicKey();if(!/^[0-9a-f]{64}$/i.test(e))throw new Error("invalid-pubkey-from-nip07");return new yr(e.toLowerCase(),t)}var mr=class{constructor(e,r,n,o){this.pubkey=e;this.bunker=r;this.bunkerUri=n;this.clientSecretKey=o;this.method="bunker";this.capabilities={canSignEvents:!0,hasNip44:!0};this.nip44={encrypt:(i,s)=>r.nip44Encrypt(i,s),decrypt:(i,s)=>r.nip44Decrypt(i,s)}}async signEvent(e){let{pubkey:r,...n}=e,o={kind:n.kind,content:n.content,created_at:n.created_at??Math.floor(Date.now()/1e3),tags:n.tags??[]};return await this.bunker.signEvent(o)}async close(){await this.bunker.close()}};async function yn(t){let e=t.uri.trim();if(!e)throw new Error("empty-bunker-uri");let r=await ci(e);if(!r)throw new Error("invalid-bunker-uri");let n=t.clientSecretKey??Uc();if(n.length!==32)throw new Error("invalid-client-secret-key");let o=gn.fromBunker(n,r,{onauth:t.onauth});await o.connect();let i=await o.getPublicKey();if(!/^[0-9a-f]{64}$/i.test(i))throw await o.close().catch(()=>{}),new Error("invalid-pubkey-from-bunker");return new mr(i.toLowerCase(),o,e,n)}function Uc(){let t=new Uint8Array(32);return crypto.getRandomValues(t),t}var Ee=class{constructor(e,r){this.pubkey=e;this.authEvent=r;this.method="redirect";this.capabilities={canSignEvents:!1,hasNip44:!1}}async signEvent(e){throw new Error("signer-auth-only: this session was established via redirect and cannot sign new events. Install a NIP-07 extension (bark, Alby) or paste a bunker URI to upgrade.")}async close(){}};var et=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function tt(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Pt(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("positive integer expected, got "+t)}function ye(t,...e){if(!tt(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error("Uint8Array expected of length "+e+", got length="+t.length)}function mn(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");Pt(t.outputLen),Pt(t.blockLen)}function bt(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 fi(t,e){ye(t);let r=e.outputLen;if(t.length<r)throw new Error("digestInto() expects output buffer of length at least "+r)}function nt(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function xn(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function me(t,e){return t<<32-e|t>>>e}var li=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Cc=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function se(t){if(ye(t),li)return t.toHex();let e="";for(let r=0;r<t.length;r++)e+=Cc[t[r]];return e}var _e={_0:48,_9:57,A:65,F:70,a:97,f:102};function ai(t){if(t>=_e._0&&t<=_e._9)return t-_e._0;if(t>=_e.A&&t<=_e.F)return t-(_e.A-10);if(t>=_e.a&&t<=_e.f)return t-(_e.a-10)}function rt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);if(li)return Uint8Array.fromHex(t);let e=t.length,r=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let o=0,i=0;o<r;o++,i+=2){let s=ai(t.charCodeAt(i)),c=ai(t.charCodeAt(i+1));if(s===void 0||c===void 0){let a=t[i]+t[i+1];throw new Error('hex string expected, got non-hex character "'+a+'" at index '+i)}n[o]=s*16+c}return n}function wn(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function qt(t){return typeof t=="string"&&(t=wn(t)),ye(t),t}function fe(...t){let e=0;for(let n=0;n<t.length;n++){let o=t[n];ye(o),e+=o.length}let r=new Uint8Array(e);for(let n=0,o=0;n<t.length;n++){let i=t[n];r.set(i,o),o+=i.length}return r}var gt=class{};function ui(t){let e=n=>t().update(qt(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function ot(t=32){if(et&&typeof et.getRandomValues=="function")return et.getRandomValues(new Uint8Array(t));if(et&&typeof et.randomBytes=="function")return Uint8Array.from(et.randomBytes(t));throw new Error("crypto.getRandomValues must be defined")}function Nc(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(r>>o&i),c=Number(r&i),a=n?4:0,f=n?0:4;t.setUint32(e+a,s,n),t.setUint32(e+f,c,n)}function di(t,e,r){return t&e^~t&r}function hi(t,e,r){return t&e^t&r^e&r}var En=class extends gt{constructor(e,r,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=xn(this.buffer)}update(e){bt(this),e=qt(e),ye(e);let{view:r,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let c=Math.min(o-this.pos,i-s);if(c===o){let a=xn(e);for(;o<=i-s;s+=o)this.process(a,s);continue}n.set(e.subarray(s,s+c),this.pos),this.pos+=c,s+=c,this.pos===o&&(this.process(r,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){bt(this),fi(e,this),this.finished=!0;let{buffer:r,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;r[s++]=128,nt(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let g=s;g<o;g++)r[g]=0;Nc(n,o-8,BigInt(this.length*8),i),this.process(n,0);let c=xn(e),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let f=a/4,p=this.get();if(f>p.length)throw new Error("_sha2: outputLen bigger than state");for(let g=0;g<f;g++)c.setUint32(4*g,p[g],i)}digest(){let{buffer:e,outputLen:r}=this;this.digestInto(e);let n=e.slice(0,r);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:r,buffer:n,length:o,finished:i,destroyed:s,pos:c}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=c,o%r&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Le=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Hc=Uint32Array.from([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]),De=new Uint32Array(64),vn=class extends En{constructor(e=32){super(64,e,8,!1),this.A=Le[0]|0,this.B=Le[1]|0,this.C=Le[2]|0,this.D=Le[3]|0,this.E=Le[4]|0,this.F=Le[5]|0,this.G=Le[6]|0,this.H=Le[7]|0}get(){let{A:e,B:r,C:n,D:o,E:i,F:s,G:c,H:a}=this;return[e,r,n,o,i,s,c,a]}set(e,r,n,o,i,s,c,a){this.A=e|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=c|0,this.H=a|0}process(e,r){for(let g=0;g<16;g++,r+=4)De[g]=e.getUint32(r,!1);for(let g=16;g<64;g++){let d=De[g-15],l=De[g-2],b=me(d,7)^me(d,18)^d>>>3,E=me(l,17)^me(l,19)^l>>>10;De[g]=E+De[g-7]+b+De[g-16]|0}let{A:n,B:o,C:i,D:s,E:c,F:a,G:f,H:p}=this;for(let g=0;g<64;g++){let d=me(c,6)^me(c,11)^me(c,25),l=p+d+di(c,a,f)+Hc[g]+De[g]|0,E=(me(n,2)^me(n,13)^me(n,22))+hi(n,o,i)|0;p=f,f=a,a=c,c=s+l|0,s=i,i=o,o=n,n=l+E|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,c=c+this.E|0,a=a+this.F|0,f=f+this.G|0,p=p+this.H|0,this.set(n,o,i,s,c,a,f,p)}roundClean(){nt(De)}destroy(){this.set(0,0,0,0,0,0,0,0),nt(this.buffer)}};var yt=ui(()=>new vn);var Sn=class extends gt{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,mn(e);let n=qt(r);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,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),nt(i)}update(e){return bt(this),this.iHash.update(e),this}digestInto(e){bt(this),ye(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:r,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:c}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=c,e.oHash=r._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},xr=(t,e,r)=>new Sn(t,e).update(r).digest();xr.create=(t,e)=>new Sn(t,e);var vr=BigInt(0),Er=BigInt(1);function Mt(t,e=""){if(typeof t!="boolean"){let r=e&&`"${e}"`;throw new Error(r+"expected boolean, got type="+typeof t)}return t}function $e(t,e,r=""){let n=tt(t),o=t?.length,i=e!==void 0;if(!n||i&&o!==e){let s=r&&`"${r}" `,c=i?` of length ${e}`:"",a=n?`length=${o}`:`type=${typeof t}`;throw new Error(s+"expected Uint8Array"+c+", got "+a)}return t}function Dt(t){let e=t.toString(16);return e.length&1?"0"+e:e}function pi(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return t===""?vr:BigInt("0x"+t)}function Ie(t){return pi(se(t))}function Sr(t){return ye(t),pi(se(Uint8Array.from(t).reverse()))}function mt(t,e){return rt(t.toString(16).padStart(e*2,"0"))}function Br(t,e){return mt(t,e).reverse()}function J(t,e,r){let n;if(typeof e=="string")try{n=rt(e)}catch(i){throw new Error(t+" must be hex string or Uint8Array, cause: "+i)}else if(tt(e))n=Uint8Array.from(e);else throw new Error(t+" must be hex string or Uint8Array");let o=n.length;if(typeof r=="number"&&o!==r)throw new Error(t+" of length "+r+" expected, got "+o);return n}var wr=t=>typeof t=="bigint"&&vr<=t;function $t(t,e,r){return wr(t)&&wr(e)&&wr(r)&&e<=t&&t<r}function gi(t,e,r,n){if(!$t(e,r,n))throw new Error("expected valid "+t+": "+r+" <= n < "+n+", got "+e)}function Bn(t){let e;for(e=0;t>vr;t>>=Er,e+=1);return e}var Ve=t=>(Er<<BigInt(t))-Er;function bi(t,e,r){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 r!="function")throw new Error("hmacFn must be a function");let n=l=>new Uint8Array(l),o=l=>Uint8Array.of(l),i=n(t),s=n(t),c=0,a=()=>{i.fill(1),s.fill(0),c=0},f=(...l)=>r(s,i,...l),p=(l=n(0))=>{s=f(o(0),l),i=f(),l.length!==0&&(s=f(o(1),l),i=f())},g=()=>{if(c++>=1e3)throw new Error("drbg: tried 1000 values");let l=0,b=[];for(;l<e;){i=f();let E=i.slice();b.push(E),l+=i.length}return fe(...b)};return(l,b)=>{a(),p(l);let E;for(;!(E=b(g()));)p();return a(),E}}function Vt(t,e,r={}){if(!t||typeof t!="object")throw new Error("expected valid options object");function n(o,i,s){let c=t[o];if(s&&c===void 0)return;let a=typeof c;if(a!==i||c===null)throw new Error(`param "${o}" is invalid: expected ${i}, got ${a}`)}Object.entries(e).forEach(([o,i])=>n(o,i,!1)),Object.entries(r).forEach(([o,i])=>n(o,i,!0))}function kr(t){let e=new WeakMap;return(r,...n)=>{let o=e.get(r);if(o!==void 0)return o;let i=t(r,...n);return e.set(r,i),i}}var ce=BigInt(0),oe=BigInt(1),it=BigInt(2),xi=BigInt(3),wi=BigInt(4),Ei=BigInt(5),Pc=BigInt(7),vi=BigInt(8),qc=BigInt(9),Si=BigInt(16);function ue(t,e){let r=t%e;return r>=ce?r:e+r}function de(t,e,r){let n=t;for(;e-- >ce;)n*=n,n%=r;return n}function yi(t,e){if(t===ce)throw new Error("invert: expected non-zero number");if(e<=ce)throw new Error("invert: expected positive modulus, got "+e);let r=ue(t,e),n=e,o=ce,i=oe,s=oe,c=ce;for(;r!==ce;){let f=n/r,p=n%r,g=o-s*f,d=i-c*f;n=r,r=p,o=s,i=c,s=g,c=d}if(n!==oe)throw new Error("invert: does not exist");return ue(o,e)}function Ar(t,e,r){if(!t.eql(t.sqr(e),r))throw new Error("Cannot find square root")}function Bi(t,e){let r=(t.ORDER+oe)/wi,n=t.pow(e,r);return Ar(t,n,e),n}function Mc(t,e){let r=(t.ORDER-Ei)/vi,n=t.mul(e,it),o=t.pow(n,r),i=t.mul(e,o),s=t.mul(t.mul(i,it),o),c=t.mul(i,t.sub(s,t.ONE));return Ar(t,c,e),c}function Dc(t){let e=Ke(t),r=ki(t),n=r(e,e.neg(e.ONE)),o=r(e,n),i=r(e,e.neg(n)),s=(t+Pc)/Si;return(c,a)=>{let f=c.pow(a,s),p=c.mul(f,n),g=c.mul(f,o),d=c.mul(f,i),l=c.eql(c.sqr(p),a),b=c.eql(c.sqr(g),a);f=c.cmov(f,p,l),p=c.cmov(d,g,b);let E=c.eql(c.sqr(p),a),B=c.cmov(f,p,E);return Ar(c,B,a),B}}function ki(t){if(t<xi)throw new Error("sqrt is not defined for small field");let e=t-oe,r=0;for(;e%it===ce;)e/=it,r++;let n=it,o=Ke(t);for(;mi(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return Bi;let i=o.pow(n,e),s=(e+oe)/it;return function(a,f){if(a.is0(f))return f;if(mi(a,f)!==1)throw new Error("Cannot find square root");let p=r,g=a.mul(a.ONE,i),d=a.pow(f,e),l=a.pow(f,s);for(;!a.eql(d,a.ONE);){if(a.is0(d))return a.ZERO;let b=1,E=a.sqr(d);for(;!a.eql(E,a.ONE);)if(b++,E=a.sqr(E),b===p)throw new Error("Cannot find square root");let B=oe<<BigInt(p-b-1),_=a.pow(g,B);p=b,g=a.sqr(_),d=a.mul(d,g),l=a.mul(l,_)}return l}}function $c(t){return t%wi===xi?Bi:t%vi===Ei?Mc:t%Si===qc?Dc(t):ki(t)}var Vc=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Rr(t){let e={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},r=Vc.reduce((n,o)=>(n[o]="function",n),e);return Vt(t,r),t}function Kc(t,e,r){if(r<ce)throw new Error("invalid exponent, negatives unsupported");if(r===ce)return t.ONE;if(r===oe)return e;let n=t.ONE,o=e;for(;r>ce;)r&oe&&(n=t.mul(n,o)),o=t.sqr(o),r>>=oe;return n}function kn(t,e,r=!1){let n=new Array(e.length).fill(r?t.ZERO:void 0),o=e.reduce((s,c,a)=>t.is0(c)?s:(n[a]=s,t.mul(s,c)),t.ONE),i=t.inv(o);return e.reduceRight((s,c,a)=>t.is0(c)?s:(n[a]=t.mul(s,n[a]),t.mul(s,c)),i),n}function mi(t,e){let r=(t.ORDER-oe)/it,n=t.pow(e,r),o=t.eql(n,t.ONE),i=t.eql(n,t.ZERO),s=t.eql(n,t.neg(t.ONE));if(!o&&!i&&!s)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function An(t,e){e!==void 0&&Pt(e);let r=e!==void 0?e:t.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function Ke(t,e,r=!1,n={}){if(t<=ce)throw new Error("invalid field: expected ORDER > 0, got "+t);let o,i,s=!1,c;if(typeof e=="object"&&e!=null){if(n.sqrt||r)throw new Error("cannot specify opts in two arguments");let d=e;d.BITS&&(o=d.BITS),d.sqrt&&(i=d.sqrt),typeof d.isLE=="boolean"&&(r=d.isLE),typeof d.modFromBytes=="boolean"&&(s=d.modFromBytes),c=d.allowedLengths}else typeof e=="number"&&(o=e),n.sqrt&&(i=n.sqrt);let{nBitLength:a,nByteLength:f}=An(t,o);if(f>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let p,g=Object.freeze({ORDER:t,isLE:r,BITS:a,BYTES:f,MASK:Ve(a),ZERO:ce,ONE:oe,allowedLengths:c,create:d=>ue(d,t),isValid:d=>{if(typeof d!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof d);return ce<=d&&d<t},is0:d=>d===ce,isValidNot0:d=>!g.is0(d)&&g.isValid(d),isOdd:d=>(d&oe)===oe,neg:d=>ue(-d,t),eql:(d,l)=>d===l,sqr:d=>ue(d*d,t),add:(d,l)=>ue(d+l,t),sub:(d,l)=>ue(d-l,t),mul:(d,l)=>ue(d*l,t),pow:(d,l)=>Kc(g,d,l),div:(d,l)=>ue(d*yi(l,t),t),sqrN:d=>d*d,addN:(d,l)=>d+l,subN:(d,l)=>d-l,mulN:(d,l)=>d*l,inv:d=>yi(d,t),sqrt:i||(d=>(p||(p=$c(t)),p(g,d))),toBytes:d=>r?Br(d,f):mt(d,f),fromBytes:(d,l=!0)=>{if(c){if(!c.includes(d.length)||d.length>f)throw new Error("Field.fromBytes: expected "+c+" bytes, got "+d.length);let E=new Uint8Array(f);E.set(d,r?0:E.length-d.length),d=E}if(d.length!==f)throw new Error("Field.fromBytes: expected "+f+" bytes, got "+d.length);let b=r?Sr(d):Ie(d);if(s&&(b=ue(b,t)),!l&&!g.isValid(b))throw new Error("invalid field element: outside of range 0..ORDER");return b},invertBatch:d=>kn(g,d),cmov:(d,l,b)=>b?l:d});return Object.freeze(g)}function Ai(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 _r(t){let e=Ai(t);return e+Math.ceil(e/2)}function Rn(t,e,r=!1){let n=t.length,o=Ai(e),i=_r(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=r?Sr(t):Ie(t),c=ue(s,e-oe)+oe;return r?Br(c,o):mt(c,o)}var xt=BigInt(0),st=BigInt(1);function Kt(t,e){let r=e.negate();return t?r:e}function Ln(t,e){let r=kn(t.Fp,e.map(n=>n.Z));return e.map((n,o)=>t.fromAffine(n.toAffine(r[o])))}function Ii(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Lr(t,e){Ii(t,e);let r=Math.ceil(e/t)+1,n=2**(t-1),o=2**t,i=Ve(t),s=BigInt(t);return{windows:r,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function Ri(t,e,r){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=r,c=Number(t&o),a=t>>s;c>n&&(c-=i,a+=st);let f=e*n,p=f+Math.abs(c)-1,g=c===0,d=c<0,l=e%2!==0;return{nextN:a,offset:p,isZero:g,isNeg:d,isNegF:l,offsetF:f}}function jc(t,e){if(!Array.isArray(t))throw new Error("array expected");t.forEach((r,n)=>{if(!(r instanceof e))throw new Error("invalid point at index "+n)})}function Zc(t,e){if(!Array.isArray(t))throw new Error("array of scalars expected");t.forEach((r,n)=>{if(!e.isValid(r))throw new Error("invalid scalar at index "+n)})}var Ir=new WeakMap,Oi=new WeakMap;function Or(t){return Oi.get(t)||1}function _i(t){if(t!==xt)throw new Error("invalid wNAF")}var _n=class{constructor(e,r){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=r}_unsafeLadder(e,r,n=this.ZERO){let o=e;for(;r>xt;)r&st&&(n=n.add(o)),o=o.double(),r>>=st;return n}precomputeWindow(e,r){let{windows:n,windowSize:o}=Lr(r,this.bits),i=[],s=e,c=s;for(let a=0;a<n;a++){c=s,i.push(c);for(let f=1;f<o;f++)c=c.add(s),i.push(c);s=c.double()}return i}wNAF(e,r,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,i=this.BASE,s=Lr(e,this.bits);for(let c=0;c<s.windows;c++){let{nextN:a,offset:f,isZero:p,isNeg:g,isNegF:d,offsetF:l}=Ri(n,c,s);n=a,p?i=i.add(Kt(d,r[l])):o=o.add(Kt(g,r[f]))}return _i(n),{p:o,f:i}}wNAFUnsafe(e,r,n,o=this.ZERO){let i=Lr(e,this.bits);for(let s=0;s<i.windows&&n!==xt;s++){let{nextN:c,offset:a,isZero:f,isNeg:p}=Ri(n,s,i);if(n=c,!f){let g=r[a];o=o.add(p?g.negate():g)}}return _i(n),o}getPrecomputes(e,r,n){let o=Ir.get(r);return o||(o=this.precomputeWindow(r,e),e!==1&&(typeof n=="function"&&(o=n(o)),Ir.set(r,o))),o}cached(e,r,n){let o=Or(e);return this.wNAF(o,this.getPrecomputes(o,e,n),r)}unsafe(e,r,n,o){let i=Or(e);return i===1?this._unsafeLadder(e,r,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,n),r,o)}createCache(e,r){Ii(r,this.bits),Oi.set(e,r),Ir.delete(e)}hasCache(e){return Or(e)!==1}};function Ti(t,e,r,n){let o=e,i=t.ZERO,s=t.ZERO;for(;r>xt||n>xt;)r&st&&(i=i.add(o)),n&st&&(s=s.add(o)),o=o.double(),r>>=st,n>>=st;return{p1:i,p2:s}}function Ui(t,e,r,n){jc(r,t),Zc(n,e);let o=r.length,i=n.length;if(o!==i)throw new Error("arrays of points and scalars must have equal length");let s=t.ZERO,c=Bn(BigInt(o)),a=1;c>12?a=c-3:c>4?a=c-2:c>0&&(a=2);let f=Ve(a),p=new Array(Number(f)+1).fill(s),g=Math.floor((e.BITS-1)/a)*a,d=s;for(let l=g;l>=0;l-=a){p.fill(s);for(let E=0;E<i;E++){let B=n[E],_=Number(B>>BigInt(l)&f);p[_]=p[_].add(r[E])}let b=s;for(let E=p.length-1,B=s;E>0;E--)B=B.add(p[E]),b=b.add(B);if(d=d.add(b),l!==0)for(let E=0;E<a;E++)d=d.double()}return d}function Li(t,e,r){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Rr(e),e}else return Ke(t,{isLE:r})}function Ci(t,e,r={},n){if(n===void 0&&(n=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(let a of["p","n","h"]){let f=e[a];if(!(typeof f=="bigint"&&f>xt))throw new Error(`CURVE.${a} must be positive bigint`)}let o=Li(e.p,r.Fp,n),i=Li(e.n,r.Fn,n),c=["Gx","Gy","a",t==="weierstrass"?"b":"d"];for(let a of c)if(!o.isValid(e[a]))throw new Error(`CURVE.${a} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:i}}var Ni=(t,e)=>(t+(t>=0?e:-e)/Hi)/e;function zc(t,e,r){let[[n,o],[i,s]]=e,c=Ni(s*t,r),a=Ni(-o*t,r),f=t-c*n-a*i,p=-c*o-a*s,g=f<Te,d=p<Te;g&&(f=-f),d&&(p=-p);let l=Ve(Math.ceil(Bn(r)/2))+wt;if(f<Te||f>=l||p<Te||p>=l)throw new Error("splitScalar (endomorphism): failed, k="+t);return{k1neg:g,k1:f,k2neg:d,k2:p}}function Ur(t){if(!["compact","recovered","der"].includes(t))throw new Error('Signature format must be "compact", "recovered", or "der"');return t}function Tr(t,e){let r={};for(let n of Object.keys(e))r[n]=t[n]===void 0?e[n]:t[n];return Mt(r.lowS,"lowS"),Mt(r.prehash,"prehash"),r.format!==void 0&&Ur(r.format),r}var Cr=class extends Error{constructor(e=""){super(e)}},Oe={Err:Cr,_tlv:{encode:(t,e)=>{let{Err:r}=Oe;if(t<0||t>256)throw new r("tlv.encode: wrong tag");if(e.length&1)throw new r("tlv.encode: unpadded data");let n=e.length/2,o=Dt(n);if(o.length/2&128)throw new r("tlv.encode: long form length too big");let i=n>127?Dt(o.length/2|128):"";return Dt(t)+i+o+e},decode(t,e){let{Err:r}=Oe,n=0;if(t<0||t>256)throw new r("tlv.encode: wrong tag");if(e.length<2||e[n++]!==t)throw new r("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let a=o&127;if(!a)throw new r("tlv.decode(long): indefinite length not supported");if(a>4)throw new r("tlv.decode(long): byte length is too big");let f=e.subarray(n,n+a);if(f.length!==a)throw new r("tlv.decode: length bytes not complete");if(f[0]===0)throw new r("tlv.decode(long): zero leftmost byte");for(let p of f)s=s<<8|p;if(n+=a,s<128)throw new r("tlv.decode(long): not minimal encoding")}let c=e.subarray(n,n+s);if(c.length!==s)throw new r("tlv.decode: wrong value length");return{v:c,l:e.subarray(n+s)}}},_int:{encode(t){let{Err:e}=Oe;if(t<Te)throw new e("integer: negative integers are not allowed");let r=Dt(t);if(Number.parseInt(r[0],16)&8&&(r="00"+r),r.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return r},decode(t){let{Err:e}=Oe;if(t[0]&128)throw new e("invalid signature integer: negative");if(t[0]===0&&!(t[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return Ie(t)}},toSig(t){let{Err:e,_int:r,_tlv:n}=Oe,o=J("signature",t),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:c,l:a}=n.decode(2,i),{v:f,l:p}=n.decode(2,a);if(p.length)throw new e("invalid signature: left bytes after parsing");return{r:r.decode(c),s:r.decode(f)}},hexFromSig(t){let{_tlv:e,_int:r}=Oe,n=e.encode(2,r.encode(t.r)),o=e.encode(2,r.encode(t.s)),i=n+o;return e.encode(48,i)}},Te=BigInt(0),wt=BigInt(1),Hi=BigInt(2),In=BigInt(3),Gc=BigInt(4);function je(t,e){let{BYTES:r}=t,n;if(typeof e=="bigint")n=e;else{let o=J("private key",e);try{n=t.fromBytes(o)}catch{throw new Error(`invalid private key: expected ui8a of size ${r}, got ${typeof e}`)}}if(!t.isValidNot0(n))throw new Error("invalid private key: out of range [1..N-1]");return n}function Wc(t,e={}){let r=Ci("weierstrass",t,e),{Fp:n,Fn:o}=r,i=r.CURVE,{h:s,n:c}=i;Vt(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",wrapPrivateKey:"boolean"});let{endo:a}=e;if(a&&(!n.is0(i.a)||typeof a.beta!="bigint"||!Array.isArray(a.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let f=qi(n,o);function p(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function g(L,x,u){let{x:h,y}=x.toAffine(),w=n.toBytes(h);if(Mt(u,"isCompressed"),u){p();let k=!n.isOdd(y);return fe(Pi(k),w)}else return fe(Uint8Array.of(4),w,n.toBytes(y))}function d(L){$e(L,void 0,"Point");let{publicKey:x,publicKeyUncompressed:u}=f,h=L.length,y=L[0],w=L.subarray(1);if(h===x&&(y===2||y===3)){let k=n.fromBytes(w);if(!n.isValid(k))throw new Error("bad point: is not on curve, wrong x");let m=E(k),A;try{A=n.sqrt(m)}catch(T){let M=T instanceof Error?": "+T.message:"";throw new Error("bad point: is not on curve, sqrt error"+M)}p();let S=n.isOdd(A);return(y&1)===1!==S&&(A=n.neg(A)),{x:k,y:A}}else if(h===u&&y===4){let k=n.BYTES,m=n.fromBytes(w.subarray(0,k)),A=n.fromBytes(w.subarray(k,k*2));if(!B(m,A))throw new Error("bad point: is not on curve");return{x:m,y:A}}else throw new Error(`bad point: got length ${h}, expected compressed=${x} or uncompressed=${u}`)}let l=e.toBytes||g,b=e.fromBytes||d;function E(L){let x=n.sqr(L),u=n.mul(x,L);return n.add(n.add(u,n.mul(L,i.a)),i.b)}function B(L,x){let u=n.sqr(x),h=E(L);return n.eql(u,h)}if(!B(i.Gx,i.Gy))throw new Error("bad curve params: generator point");let _=n.mul(n.pow(i.a,In),Gc),P=n.mul(n.sqr(i.b),BigInt(27));if(n.is0(n.add(_,P)))throw new Error("bad curve params: a or b");function N(L,x,u=!1){if(!n.isValid(x)||u&&n.is0(x))throw new Error(`bad point coordinate ${L}`);return x}function H(L){if(!(L instanceof I))throw new Error("ProjectivePoint expected")}function q(L){if(!a||!a.basises)throw new Error("no endo");return zc(L,a.basises,o.ORDER)}let Z=kr((L,x)=>{let{X:u,Y:h,Z:y}=L;if(n.eql(y,n.ONE))return{x:u,y:h};let w=L.is0();x==null&&(x=w?n.ONE:n.inv(y));let k=n.mul(u,x),m=n.mul(h,x),A=n.mul(y,x);if(w)return{x:n.ZERO,y:n.ZERO};if(!n.eql(A,n.ONE))throw new Error("invZ was invalid");return{x:k,y:m}}),Y=kr(L=>{if(L.is0()){if(e.allowInfinityPoint&&!n.is0(L.Y))return;throw new Error("bad point: ZERO")}let{x,y:u}=L.toAffine();if(!n.isValid(x)||!n.isValid(u))throw new Error("bad point: x or y not field elements");if(!B(x,u))throw new Error("bad point: equation left != right");if(!L.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function G(L,x,u,h,y){return u=new I(n.mul(u.X,L),u.Y,u.Z),x=Kt(h,x),u=Kt(y,u),x.add(u)}class I{constructor(x,u,h){this.X=N("x",x),this.Y=N("y",u,!0),this.Z=N("z",h),Object.freeze(this)}static CURVE(){return i}static fromAffine(x){let{x:u,y:h}=x||{};if(!x||!n.isValid(u)||!n.isValid(h))throw new Error("invalid affine point");if(x instanceof I)throw new Error("projective point not allowed");return n.is0(u)&&n.is0(h)?I.ZERO:new I(u,h,n.ONE)}static fromBytes(x){let u=I.fromAffine(b($e(x,void 0,"point")));return u.assertValidity(),u}static fromHex(x){return I.fromBytes(J("pointHex",x))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(x=8,u=!0){return D.createCache(this,x),u||this.multiply(In),this}assertValidity(){Y(this)}hasEvenY(){let{y:x}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(x)}equals(x){H(x);let{X:u,Y:h,Z:y}=this,{X:w,Y:k,Z:m}=x,A=n.eql(n.mul(u,m),n.mul(w,y)),S=n.eql(n.mul(h,m),n.mul(k,y));return A&&S}negate(){return new I(this.X,n.neg(this.Y),this.Z)}double(){let{a:x,b:u}=i,h=n.mul(u,In),{X:y,Y:w,Z:k}=this,m=n.ZERO,A=n.ZERO,S=n.ZERO,R=n.mul(y,y),T=n.mul(w,w),M=n.mul(k,k),C=n.mul(y,w);return C=n.add(C,C),S=n.mul(y,k),S=n.add(S,S),m=n.mul(x,S),A=n.mul(h,M),A=n.add(m,A),m=n.sub(T,A),A=n.add(T,A),A=n.mul(m,A),m=n.mul(C,m),S=n.mul(h,S),M=n.mul(x,M),C=n.sub(R,M),C=n.mul(x,C),C=n.add(C,S),S=n.add(R,R),R=n.add(S,R),R=n.add(R,M),R=n.mul(R,C),A=n.add(A,R),M=n.mul(w,k),M=n.add(M,M),R=n.mul(M,C),m=n.sub(m,R),S=n.mul(M,T),S=n.add(S,S),S=n.add(S,S),new I(m,A,S)}add(x){H(x);let{X:u,Y:h,Z:y}=this,{X:w,Y:k,Z:m}=x,A=n.ZERO,S=n.ZERO,R=n.ZERO,T=i.a,M=n.mul(i.b,In),C=n.mul(u,w),O=n.mul(h,k),$=n.mul(y,m),z=n.add(u,h),V=n.add(w,k);z=n.mul(z,V),V=n.add(C,O),z=n.sub(z,V),V=n.add(u,y);let j=n.add(w,m);return V=n.mul(V,j),j=n.add(C,$),V=n.sub(V,j),j=n.add(h,y),A=n.add(k,m),j=n.mul(j,A),A=n.add(O,$),j=n.sub(j,A),R=n.mul(T,V),A=n.mul(M,$),R=n.add(A,R),A=n.sub(O,R),R=n.add(O,R),S=n.mul(A,R),O=n.add(C,C),O=n.add(O,C),$=n.mul(T,$),V=n.mul(M,V),O=n.add(O,$),$=n.sub(C,$),$=n.mul(T,$),V=n.add(V,$),C=n.mul(O,V),S=n.add(S,C),C=n.mul(j,V),A=n.mul(z,A),A=n.sub(A,C),C=n.mul(z,O),R=n.mul(j,R),R=n.add(R,C),new I(A,S,R)}subtract(x){return this.add(x.negate())}is0(){return this.equals(I.ZERO)}multiply(x){let{endo:u}=e;if(!o.isValidNot0(x))throw new Error("invalid scalar: out of range");let h,y,w=k=>D.cached(this,k,m=>Ln(I,m));if(u){let{k1neg:k,k1:m,k2neg:A,k2:S}=q(x),{p:R,f:T}=w(m),{p:M,f:C}=w(S);y=T.add(C),h=G(u.beta,R,M,k,A)}else{let{p:k,f:m}=w(x);h=k,y=m}return Ln(I,[h,y])[0]}multiplyUnsafe(x){let{endo:u}=e,h=this;if(!o.isValid(x))throw new Error("invalid scalar: out of range");if(x===Te||h.is0())return I.ZERO;if(x===wt)return h;if(D.hasCache(this))return this.multiply(x);if(u){let{k1neg:y,k1:w,k2neg:k,k2:m}=q(x),{p1:A,p2:S}=Ti(I,h,w,m);return G(u.beta,A,S,y,k)}else return D.unsafe(h,x)}multiplyAndAddUnsafe(x,u,h){let y=this.multiplyUnsafe(u).add(x.multiplyUnsafe(h));return y.is0()?void 0:y}toAffine(x){return Z(this,x)}isTorsionFree(){let{isTorsionFree:x}=e;return s===wt?!0:x?x(I,this):D.unsafe(this,c).is0()}clearCofactor(){let{clearCofactor:x}=e;return s===wt?this:x?x(I,this):this.multiplyUnsafe(s)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}toBytes(x=!0){return Mt(x,"isCompressed"),this.assertValidity(),l(I,this,x)}toHex(x=!0){return se(this.toBytes(x))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get px(){return this.X}get py(){return this.X}get pz(){return this.Z}toRawBytes(x=!0){return this.toBytes(x)}_setWindowSize(x){this.precompute(x)}static normalizeZ(x){return Ln(I,x)}static msm(x,u){return Ui(I,o,x,u)}static fromPrivateKey(x){return I.BASE.multiply(je(o,x))}}I.BASE=new I(i.Gx,i.Gy,n.ONE),I.ZERO=new I(n.ZERO,n.ONE,n.ZERO),I.Fp=n,I.Fn=o;let K=o.BITS,D=new _n(I,e.endo?Math.ceil(K/2):K);return I.BASE.precompute(8),I}function Pi(t){return Uint8Array.of(t?2:3)}function qi(t,e){return{secretKey:e.BYTES,publicKey:1+t.BYTES,publicKeyUncompressed:1+2*t.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function Yc(t,e={}){let{Fn:r}=t,n=e.randomBytes||ot,o=Object.assign(qi(t.Fp,r),{seed:_r(r.ORDER)});function i(l){try{return!!je(r,l)}catch{return!1}}function s(l,b){let{publicKey:E,publicKeyUncompressed:B}=o;try{let _=l.length;return b===!0&&_!==E||b===!1&&_!==B?!1:!!t.fromBytes(l)}catch{return!1}}function c(l=n(o.seed)){return Rn($e(l,o.seed,"seed"),r.ORDER)}function a(l,b=!0){return t.BASE.multiply(je(r,l)).toBytes(b)}function f(l){let b=c(l);return{secretKey:b,publicKey:a(b)}}function p(l){if(typeof l=="bigint")return!1;if(l instanceof t)return!0;let{secretKey:b,publicKey:E,publicKeyUncompressed:B}=o;if(r.allowedLengths||b===E)return;let _=J("key",l).length;return _===E||_===B}function g(l,b,E=!0){if(p(l)===!0)throw new Error("first arg must be private key");if(p(b)===!1)throw new Error("second arg must be public key");let B=je(r,l);return t.fromHex(b).multiply(B).toBytes(E)}return Object.freeze({getPublicKey:a,getSharedSecret:g,keygen:f,Point:t,utils:{isValidSecretKey:i,isValidPublicKey:s,randomSecretKey:c,isValidPrivateKey:i,randomPrivateKey:c,normPrivateKeyToScalar:l=>je(r,l),precompute(l=8,b=t.BASE){return b.precompute(l,!1)}},lengths:o})}function Xc(t,e,r={}){mn(e),Vt(r,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});let n=r.randomBytes||ot,o=r.hmac||((u,...h)=>xr(e,u,fe(...h))),{Fp:i,Fn:s}=t,{ORDER:c,BITS:a}=s,{keygen:f,getPublicKey:p,getSharedSecret:g,utils:d,lengths:l}=Yc(t,r),b={prehash:!1,lowS:typeof r.lowS=="boolean"?r.lowS:!1,format:void 0,extraEntropy:!1},E="compact";function B(u){let h=c>>wt;return u>h}function _(u,h){if(!s.isValidNot0(h))throw new Error(`invalid signature ${u}: out of range 1..Point.Fn.ORDER`);return h}function P(u,h){Ur(h);let y=l.signature,w=h==="compact"?y:h==="recovered"?y+1:void 0;return $e(u,w,`${h} signature`)}class N{constructor(h,y,w){this.r=_("r",h),this.s=_("s",y),w!=null&&(this.recovery=w),Object.freeze(this)}static fromBytes(h,y=E){P(h,y);let w;if(y==="der"){let{r:S,s:R}=Oe.toSig($e(h));return new N(S,R)}y==="recovered"&&(w=h[0],y="compact",h=h.subarray(1));let k=s.BYTES,m=h.subarray(0,k),A=h.subarray(k,k*2);return new N(s.fromBytes(m),s.fromBytes(A),w)}static fromHex(h,y){return this.fromBytes(rt(h),y)}addRecoveryBit(h){return new N(this.r,this.s,h)}recoverPublicKey(h){let y=i.ORDER,{r:w,s:k,recovery:m}=this;if(m==null||![0,1,2,3].includes(m))throw new Error("recovery id invalid");if(c*Hi<y&&m>1)throw new Error("recovery id is ambiguous for h>1 curve");let S=m===2||m===3?w+c:w;if(!i.isValid(S))throw new Error("recovery id 2 or 3 invalid");let R=i.toBytes(S),T=t.fromBytes(fe(Pi((m&1)===0),R)),M=s.inv(S),C=q(J("msgHash",h)),O=s.create(-C*M),$=s.create(k*M),z=t.BASE.multiplyUnsafe(O).add(T.multiplyUnsafe($));if(z.is0())throw new Error("point at infinify");return z.assertValidity(),z}hasHighS(){return B(this.s)}toBytes(h=E){if(Ur(h),h==="der")return rt(Oe.hexFromSig(this));let y=s.toBytes(this.r),w=s.toBytes(this.s);if(h==="recovered"){if(this.recovery==null)throw new Error("recovery bit must be present");return fe(Uint8Array.of(this.recovery),y,w)}return fe(y,w)}toHex(h){return se(this.toBytes(h))}assertValidity(){}static fromCompact(h){return N.fromBytes(J("sig",h),"compact")}static fromDER(h){return N.fromBytes(J("sig",h),"der")}normalizeS(){return this.hasHighS()?new N(this.r,s.neg(this.s),this.recovery):this}toDERRawBytes(){return this.toBytes("der")}toDERHex(){return se(this.toBytes("der"))}toCompactRawBytes(){return this.toBytes("compact")}toCompactHex(){return se(this.toBytes("compact"))}}let H=r.bits2int||function(h){if(h.length>8192)throw new Error("input is too large");let y=Ie(h),w=h.length*8-a;return w>0?y>>BigInt(w):y},q=r.bits2int_modN||function(h){return s.create(H(h))},Z=Ve(a);function Y(u){return gi("num < 2^"+a,u,Te,Z),s.toBytes(u)}function G(u,h){return $e(u,void 0,"message"),h?$e(e(u),void 0,"prehashed message"):u}function I(u,h,y){if(["recovered","canonical"].some(O=>O in y))throw new Error("sign() legacy options not supported");let{lowS:w,prehash:k,extraEntropy:m}=Tr(y,b);u=G(u,k);let A=q(u),S=je(s,h),R=[Y(S),Y(A)];if(m!=null&&m!==!1){let O=m===!0?n(l.secretKey):m;R.push(J("extraEntropy",O))}let T=fe(...R),M=A;function C(O){let $=H(O);if(!s.isValidNot0($))return;let z=s.inv($),V=t.BASE.multiply($).toAffine(),j=s.create(V.x);if(j===Te)return;let Q=s.create(z*s.create(M+j*S));if(Q===Te)return;let St=(V.x===j?0:2)|Number(V.y&wt),Bt=Q;return w&&B(Q)&&(Bt=s.neg(Q),St^=1),new N(j,Bt,St)}return{seed:T,k2sig:C}}function K(u,h,y={}){u=J("message",u);let{seed:w,k2sig:k}=I(u,h,y);return bi(e.outputLen,s.BYTES,o)(w,k)}function D(u){let h,y=typeof u=="string"||tt(u),w=!y&&u!==null&&typeof u=="object"&&typeof u.r=="bigint"&&typeof u.s=="bigint";if(!y&&!w)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");if(w)h=new N(u.r,u.s);else if(y){try{h=N.fromBytes(J("sig",u),"der")}catch(k){if(!(k instanceof Oe.Err))throw k}if(!h)try{h=N.fromBytes(J("sig",u),"compact")}catch{return!1}}return h||!1}function L(u,h,y,w={}){let{lowS:k,prehash:m,format:A}=Tr(w,b);if(y=J("publicKey",y),h=G(J("message",h),m),"strict"in w)throw new Error("options.strict was renamed to lowS");let S=A===void 0?D(u):N.fromBytes(J("sig",u),A);if(S===!1)return!1;try{let R=t.fromBytes(y);if(k&&S.hasHighS())return!1;let{r:T,s:M}=S,C=q(h),O=s.inv(M),$=s.create(C*O),z=s.create(T*O),V=t.BASE.multiplyUnsafe($).add(R.multiplyUnsafe(z));return V.is0()?!1:s.create(V.x)===T}catch{return!1}}function x(u,h,y={}){let{prehash:w}=Tr(y,b);return h=G(h,w),N.fromBytes(u,"recovered").recoverPublicKey(h).toBytes()}return Object.freeze({keygen:f,getPublicKey:p,getSharedSecret:g,utils:d,lengths:l,Point:t,sign:K,verify:L,recoverPublicKey:x,Signature:N,hash:e})}function Jc(t){let e={a:t.a,b:t.b,p:t.Fp.ORDER,n:t.n,h:t.h,Gx:t.Gx,Gy:t.Gy},r=t.Fp,n=t.allowedPrivateKeyLengths?Array.from(new Set(t.allowedPrivateKeyLengths.map(s=>Math.ceil(s/2)))):void 0,o=Ke(e.n,{BITS:t.nBitLength,allowedLengths:n,modFromBytes:t.wrapPrivateKey}),i={Fp:r,Fn:o,allowInfinityPoint:t.allowInfinityPoint,endo:t.endo,isTorsionFree:t.isTorsionFree,clearCofactor:t.clearCofactor,fromBytes:t.fromBytes,toBytes:t.toBytes};return{CURVE:e,curveOpts:i}}function Qc(t){let{CURVE:e,curveOpts:r}=Jc(t),n={hmac:t.hmac,randomBytes:t.randomBytes,lowS:t.lowS,bits2int:t.bits2int,bits2int_modN:t.bits2int_modN};return{CURVE:e,curveOpts:r,hash:t.hash,ecdsaOpts:n}}function Fc(t,e){let r=e.Point;return Object.assign({},e,{ProjectivePoint:r,CURVE:Object.assign({},t,An(r.Fn.ORDER,r.Fn.BITS))})}function Mi(t){let{CURVE:e,curveOpts:r,hash:n,ecdsaOpts:o}=Qc(t),i=Wc(e,r),s=Xc(i,n,o);return Fc(t,s)}function Di(t,e){let r=n=>Mi({...t,hash:n});return{...r(e),create:r}}var Et={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},ea={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]},ta=BigInt(0),$i=BigInt(1),Nr=BigInt(2);function na(t){let e=Et.p,r=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),c=BigInt(44),a=BigInt(88),f=t*t*t%e,p=f*f*t%e,g=de(p,r,e)*p%e,d=de(g,r,e)*p%e,l=de(d,Nr,e)*f%e,b=de(l,o,e)*l%e,E=de(b,i,e)*b%e,B=de(E,c,e)*E%e,_=de(B,a,e)*B%e,P=de(_,c,e)*E%e,N=de(P,r,e)*p%e,H=de(N,s,e)*b%e,q=de(H,n,e)*f%e,Z=de(q,Nr,e);if(!On.eql(On.sqr(Z),t))throw new Error("Cannot find square root");return Z}var On=Ke(Et.p,{sqrt:na}),ji=Di({...Et,Fp:On,lowS:!0,endo:ea},yt),Vi={};function Tn(t,...e){let r=Vi[t];if(r===void 0){let n=yt(wn(t));r=fe(n,n),Vi[t]=r}return yt(fe(r,...e))}var Pr=t=>t.toBytes(!0).slice(1),vt=ji.Point,qr=t=>t%Nr===ta;function Hr(t){let{Fn:e,BASE:r}=vt,n=je(e,t),o=r.multiply(n);return{scalar:qr(o.y)?n:e.neg(n),bytes:Pr(o)}}function Zi(t){let e=On;if(!e.isValidNot0(t))throw new Error("invalid x: Fail if x \u2265 p");let r=e.create(t*t),n=e.create(r*t+BigInt(7)),o=e.sqrt(n);qr(o)||(o=e.neg(o));let i=vt.fromAffine({x:t,y:o});return i.assertValidity(),i}var jt=Ie;function zi(...t){return vt.Fn.create(jt(Tn("BIP0340/challenge",...t)))}function Ki(t){return Hr(t).bytes}function ra(t,e,r=ot(32)){let{Fn:n}=vt,o=J("message",t),{bytes:i,scalar:s}=Hr(e),c=J("auxRand",r,32),a=n.toBytes(s^jt(Tn("BIP0340/aux",c))),f=Tn("BIP0340/nonce",a,i,o),{bytes:p,scalar:g}=Hr(f),d=zi(p,i,o),l=new Uint8Array(64);if(l.set(p,0),l.set(n.toBytes(n.create(g+d*s)),32),!Gi(l,o,i))throw new Error("sign: Invalid signature produced");return l}function Gi(t,e,r){let{Fn:n,BASE:o}=vt,i=J("signature",t,64),s=J("message",e),c=J("publicKey",r,32);try{let a=Zi(jt(c)),f=jt(i.subarray(0,32));if(!$t(f,$i,Et.p))return!1;let p=jt(i.subarray(32,64));if(!$t(p,$i,Et.n))return!1;let g=zi(n.toBytes(f),Pr(a),s),d=o.multiplyUnsafe(p).add(a.multiplyUnsafe(n.neg(g))),{x:l,y:b}=d.toAffine();return!(d.is0()||!qr(b)||l!==f)}catch{return!1}}var Ze=(()=>{let r=(o=ot(48))=>Rn(o,Et.n);ji.utils.randomSecretKey;function n(o){let i=r(o);return{secretKey:i,publicKey:Ki(i)}}return{keygen:n,getPublicKey:Ki,sign:ra,verify:Gi,Point:vt,utils:{randomSecretKey:r,randomPrivateKey:r,taggedHash:Tn,lift_x:Zi,pointToBytes:Pr,numberToBytesBE:mt,bytesToNumberBE:Ie,mod:ue},lengths:{secretKey:32,publicKey:32,publicKeyHasPrefix:!1,signature:64,seed:48}}})();var Mr=yt;var oa=new TextDecoder("utf-8"),ia=new TextEncoder,sa=1,ca=65535;function Dr(t,e){let r=cn.getSharedSecret(t,ne("02"+e)).subarray(1,33);return un(ae,r,ia.encode("nip44-v2"))}function aa(t,e){let r=dn(ae,t,e,76);return{chacha_key:r.subarray(0,32),chacha_nonce:r.subarray(32,44),hmac_key:r.subarray(44,76)}}function fa(t){if(!Number.isSafeInteger(t)||t<1)throw new Error("expected positive integer");if(t<=32)return 32;let e=1<<Math.floor(Math.log2(t-1))+1,r=e<=256?32:e/8;return r*(Math.floor((t-1)/r)+1)}function la(t){let e=new DataView(t.buffer).getUint16(0),r=t.subarray(2,2+e);if(e<sa||e>ca||r.length!==e||t.length!==2+fa(e))throw new Error("invalid padding");return oa.decode(r)}function ua(t,e,r){if(r.length!==32)throw new Error("AAD associated data must be 32 bytes");let n=F(r,e);return we(ae,t,n)}function da(t){if(typeof t!="string")throw new Error("payload must be a valid string");let e=t.length;if(e<132||e>87472)throw new Error("invalid payload length: "+e);if(t[0]==="#")throw new Error("unknown encryption version");let r;try{r=Ut.decode(t)}catch(i){throw new Error("invalid base64: "+i.message)}let n=r.length;if(n<99||n>65603)throw new Error("invalid data length: "+n);let o=r[0];if(o!==2)throw new Error("unknown encryption version "+o);return{nonce:r.subarray(1,33),ciphertext:r.subarray(33,-32),mac:r.subarray(-32)}}function $r(t,e){let{nonce:r,ciphertext:n,mac:o}=da(t),{chacha_key:i,chacha_nonce:s,hmac_key:c}=aa(e,r),a=ua(c,n,r);if(!dt(a,o))throw new Error("invalid MAC");let f=pt(i,s,n);return la(f)}function ha(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function pa(){let t=new Uint8Array(16);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}function Un(t,e){let r=t.find(n=>n[0]===e);return r?r[1]:void 0}function Ue(t){let e=new Uint8Array(t.length/2);for(let r=0;r<e.length;r++)e[r]=parseInt(t.substr(r*2,2),16);return e}async function ga(t){if(!t.id||!t.pubkey||!t.sig||!t.tags||t.kind!==30470||!/^[0-9a-f]{128}$/i.test(t.sig)||!/^[0-9a-f]{64}$/i.test(t.pubkey)||!/^[0-9a-f]{64}$/i.test(t.id)||t.tags.length>100||t.content.length>65536||t.tags.some(s=>s.some(c=>c.length>1024)))return!1;let e=t.tags.map(s=>s[0]);if(!e.includes("tier")||!e.includes("age-range")||!e.includes("entity-type"))return!1;let r=JSON.stringify([0,t.pubkey,t.created_at,t.kind,t.tags,t.content]),n=new TextEncoder,o=Mr(n.encode(r));if(se(o)!==t.id.toLowerCase())return!1;try{let s=Ue(t.sig),c=Ue(t.id),a=Ue(t.pubkey);return Ze.verify(s,c,a)}catch{return!1}}function ba(t,e){if(t===e||t==="18+"&&e==="18+")return!0;let r=["0-3","4-7","8-12","13-17","18+"],n=r.indexOf(t),o=r.indexOf(e);return n===-1||o===-1?!1:e==="18+"?t==="18+":t===e}async function ya(t,e){if(e==null||!/^https:\/\//i.test(e)||!/^[0-9a-f]{64}$/i.test(t))return null;try{let r=await fetch(`${e}/status/${t}`,{signal:AbortSignal.timeout(5e3)});if(!r.ok)return null;let n=await r.json();if(typeof n!="object"||n===null)return null;let o=n;return{confirmed:o.confirmed===!0,method:["A","B","C","D"].includes(o.method)?o.method:null,profession:typeof o.profession=="string"?o.profession:void 0,jurisdiction:typeof o.jurisdiction=="string"?o.jurisdiction:void 0}}catch{return null}}async function ma(t,e){if(!["0-3","4-7","8-12","13-17","18+"].includes(t))return{verified:!1,ageRange:null,tier:null,entityType:null,credentialId:null,verifierPubkey:null,verifierConfirmed:null,verifierMethod:null,issuedAt:null,expiresAt:null,error:"invalid-age-range"};let n={requiredAgeRange:t,relayUrl:e?.relayUrl||"wss://relay.damus.io",theme:e?.theme||"auto",timeout:e?.timeout||12e4,verifierCheckUrl:e?.verifierCheckUrl!==void 0?e.verifierCheckUrl:"https://verify.signet.forgesworn.dev",acceptUnconfirmed:e?.acceptUnconfirmed||!1,...e};n.timeout=Math.max(5e3,Math.min(n.timeout??12e4,6e5));let o=pa(),i={type:"signet-verify-request",requestId:o,requiredAgeRange:n.requiredAgeRange,relayUrl:n.relayUrl,timestamp:Math.floor(Date.now()/1e3)},s=JSON.stringify(i),c=btoa(s);return new Promise(a=>{let f=document.createElement("style");f.textContent="#signet-verify-dialog::backdrop{background:rgba(0,0,0,0.7)}",document.head.appendChild(f);let p=n.theme==="dark"||n.theme==="auto"&&window.matchMedia("(prefers-color-scheme: dark)").matches,g=p?"#1a1a2e":"#ffffff",d=p?"#e0e0e0":"#1a1a2e",l=p?"#888":"#666",b=document.createElement("dialog");b.id="signet-verify-dialog",b.style.cssText=`border:none;border-radius:16px;padding:32px;max-width:380px;width:90%;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,0.3);background:${g};color:${d};font-family:system-ui,-apple-system,sans-serif;`,b.innerHTML=`
|
|
2
|
+
<h2 style="margin:0 0 8px;font-size:1.3rem;">Verify your age with Signet</h2>
|
|
3
|
+
<p style="margin:0 0 24px;color:${l};font-size:0.9rem;">Scan this QR code with your Signet app to prove you are ${ha(t)}. No personal data is shared.</p>
|
|
4
|
+
<div id="signet-qr" style="display:flex;justify-content:center;margin-bottom:24px;"></div>
|
|
5
|
+
<p style="margin:0 0 16px;color:${l};font-size:0.8rem;">Waiting for verification...</p>
|
|
6
|
+
<button id="signet-cancel" style="background:none;border:1px solid ${l};color:${d};padding:10px 24px;border-radius:8px;cursor:pointer;font-size:0.9rem;">Cancel</button>
|
|
7
|
+
`,document.body.appendChild(b),b.showModal();let E=b.querySelector("#signet-qr");if(E){let _=document.createElement("div");_.style.cssText=`width:200px;height:200px;background:${p?"#2a2a3e":"#f0f0f0"};border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:0.75rem;color:${l};word-break:break-all;padding:12px;`,_.textContent=`signet:verify:${c.slice(0,40)}...`,E.appendChild(_)}let B=new BroadcastChannel("signet-verify-"+o);b.querySelector("#signet-cancel")?.addEventListener("click",()=>{B.close(),b.close(),b.remove(),f.remove(),a({verified:!1,ageRange:null,tier:null,entityType:null,credentialId:null,verifierPubkey:null,verifierConfirmed:null,verifierMethod:null,issuedAt:null,expiresAt:null,error:"cancelled"})}),B.onmessage=async _=>{let P=_.data;if(typeof P!="object"||P===null)return;let N=P;if(N.type!=="signet-verify-response"||N.requestId!==o||!N.credential||typeof N.credential!="object"||!Array.isArray(N.credential.tags))return;let H=N.credential,q=await ga(H),Z=Un(H.tags,"age-range"),Y=Un(H.tags,"tier"),G=Un(H.tags,"entity-type"),I=Un(H.tags,"expires"),K=Z?ba(Z,n.requiredAgeRange):!1,D=await ya(H.pubkey,n.verifierCheckUrl),L=D?.confirmed??null,x=D?.method??null,u=n.acceptUnconfirmed||L===!0;b.close(),b.remove(),f.remove(),B.close();let h=Y?parseInt(Y,10):null,y=I?parseInt(I,10):null,w=Math.floor(Date.now()/1e3),k=y===null||!isNaN(y)&&y>w,m;q?k?K?u||(m=L===!1?"verifier-not-confirmed":"verifier-check-unavailable"):m="age-range-not-met":m="credential-expired":m="invalid-credential",a({verified:q&&k&&K&&u,ageRange:Z||null,tier:h!==null&&!isNaN(h)?h:null,entityType:G||null,credentialId:H.id,verifierPubkey:H.pubkey,verifierConfirmed:L,verifierMethod:x,issuedAt:H.created_at,expiresAt:y!==null&&!isNaN(y)?y:null,error:m})},setTimeout(()=>{b.close(),b.remove(),f.remove(),B.close(),a({verified:!1,ageRange:null,tier:null,entityType:null,credentialId:null,verifierPubkey:null,verifierConfirmed:null,verifierMethod:null,issuedAt:null,expiresAt:null,error:"timeout"})},n.timeout)})}function Vr(t){let e=JSON.stringify([0,t.pubkey,t.created_at,t.kind,t.tags,t.content]),r=Mr(new TextEncoder().encode(e));return se(r)}async function xa(t,e){try{let r=Dr(e,t.pubkey),n=$r(t.content,r),o=JSON.parse(n);if(typeof o!="object"||o===null)return null;let i=o;if(i.kind!==13||typeof i.pubkey!="string"||!/^[0-9a-f]{64}$/i.test(i.pubkey)||typeof i.created_at!="number"||!Array.isArray(i.tags)||typeof i.content!="string"||typeof i.id!="string"||!/^[0-9a-f]{64}$/i.test(i.id)||typeof i.sig!="string"||!/^[0-9a-f]{128}$/i.test(i.sig)||Vr({pubkey:i.pubkey,created_at:i.created_at,kind:13,tags:i.tags,content:i.content})!==i.id.toLowerCase())return null;let c=Ue(i.sig),a=Ue(i.id),f=Ue(i.pubkey);if(!Ze.verify(c,a,f))return null;let p=Dr(e,i.pubkey),g=$r(i.content,p),d=JSON.parse(g);if(typeof d!="object"||d===null)return null;let l=d;if(typeof l.pubkey!="string"||l.pubkey!==i.pubkey||typeof l.kind!="number"||typeof l.created_at!="number"||!Array.isArray(l.tags)||typeof l.content!="string")return null;let b=typeof l.id=="string"?l.id:Vr({pubkey:l.pubkey,created_at:l.created_at,kind:l.kind,tags:l.tags,content:l.content});return{pubkey:l.pubkey,id:b,kind:l.kind,created_at:l.created_at,tags:l.tags,content:l.content}}catch{return null}}function wa(t){if(typeof t!="string")return;let e=t.replace(/[\x00-\x1f\x7f-\x9f\u200b-\u200f\u2028-\u202e\u2066-\u2069]/g,"").trim().slice(0,64);return e.length>0?e:void 0}async function Kr(t){if(!/^[0-9a-f]{64}$/i.test(t.requestId))throw new Error("invalid-request-id");if(!(t.sessionPrivKey instanceof Uint8Array)||t.sessionPrivKey.length!==32)throw new Error("invalid-session-privkey");if(!/^wss:\/\//i.test(t.relayUrl)&&!/^ws:\/\/(localhost|127\.0\.0\.1)([:\/]|$)/i.test(t.relayUrl))throw new Error("invalid-relay-url");if(typeof t.expectedOrigin!="string"||t.expectedOrigin.length===0)throw new Error("invalid-expected-origin");let e=se(Ze.getPublicKey(t.sessionPrivKey)),r=Math.max(5e3,Math.min(t.timeout??12e4,6e5)),n=t.requestId.toLowerCase(),o=t.expectedOrigin;return new Promise((i,s)=>{let c=`sa-${Math.random().toString(36).slice(2,12)}`,a=!1,f;try{f=new WebSocket(t.relayUrl)}catch{s(new Error("relay-error"));return}let p=d=>{if(!a){a=!0,clearTimeout(g);try{f.close()}catch{}d()}},g=setTimeout(()=>{p(()=>s(new Error("timeout")))},r);f.onopen=()=>{let d=Math.floor(Date.now()/1e3)-60;f.send(JSON.stringify(["REQ",c,{kinds:[1059],"#p":[e],since:d}]))},f.onmessage=async d=>{if(a)return;let l;try{l=JSON.parse(typeof d.data=="string"?d.data:"")}catch{return}if(!Array.isArray(l)||l[0]!=="EVENT"||l[1]!==c)return;let b=l[2];if(typeof b!="object"||b===null)return;let E=b;if(E.kind!==1059||typeof E.pubkey!="string"||typeof E.content!="string")return;let B=await xa({pubkey:E.pubkey,content:E.content},t.sessionPrivKey);if(!B||B.kind!==29999)return;let _=B.tags.find(u=>u[0]==="session");if(!_||_[1]!==n)return;let P=B.tags.find(u=>u[0]==="status");if(P?.[1]==="rejected"){p(()=>s(new Error("denied")));return}if(P?.[1]!=="approved"||Math.abs(Date.now()/1e3-B.created_at)>300)return;let H;try{let u=JSON.parse(B.content);if(typeof u!="object"||u===null)return;H=u}catch{return}if(H.type!=="signet-auth-response"||H.requestId!==n||typeof H.authEvent!="object"||H.authEvent===null)return;let q=H.authEvent;if(typeof q.id!="string"||!/^[0-9a-f]{64}$/i.test(q.id)||typeof q.pubkey!="string"||!/^[0-9a-f]{64}$/i.test(q.pubkey)||typeof q.sig!="string"||!/^[0-9a-f]{128}$/i.test(q.sig)||q.kind!==21236||typeof q.created_at!="number"||!Array.isArray(q.tags)||typeof q.content!="string"||q.pubkey.toLowerCase()!==B.pubkey.toLowerCase()||Vr({pubkey:q.pubkey,created_at:q.created_at,kind:21236,tags:q.tags,content:q.content})!==q.id.toLowerCase())return;let Y=!1;try{let u=Ue(q.sig),h=Ue(q.id),y=Ue(q.pubkey);Y=Ze.verify(u,h,y)}catch{Y=!1}if(!Y)return;let G=q.tags,I=G.find(u=>Array.isArray(u)&&u[0]==="challenge");if(!I||typeof I[1]!="string"||I[1].toLowerCase()!==n)return;let K=G.find(u=>Array.isArray(u)&&u[0]==="origin");if(!K||K[1]!==o||Math.abs(Date.now()/1e3-q.created_at)>300)return;let L={id:q.id.toLowerCase(),pubkey:q.pubkey.toLowerCase(),kind:21236,created_at:q.created_at,tags:G,content:q.content,sig:q.sig},x=wa(H.displayName);p(()=>i({pubkey:L.pubkey,authEvent:L,credential:H.credential,...x!==void 0?{displayName:x}:{},createdAt:L.created_at}))},f.onerror=()=>{p(()=>s(new Error("relay-error")))}})}typeof window<"u"&&(window.Signet={verifyAge:ma,waitForAuthResponse:Kr});function jr(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Ea(){let t=new Uint8Array(32);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}function Zt(t){return t==="dark"?!0:t==="light"?!1:typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches}function va(t){let e=document.createElement("style");e.textContent="#signet-login-dialog::backdrop{background:rgba(0,0,0,0.7)}",document.head.appendChild(e);let r=Zt(t),n=r?"#1a1a2e":"#ffffff",o=r?"#e0e0e0":"#1a1a2e",i=document.createElement("dialog");return i.id="signet-login-dialog",i.style.cssText=`border:none;border-radius:16px;padding:32px;max-width:380px;width:90%;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,0.3);background:${n};color:${o};font-family:system-ui,-apple-system,sans-serif;`,document.body.appendChild(i),i.showModal(),{dialog:i,style:e}}function Sa(t){try{t.dialog.close()}catch{}t.dialog.remove(),t.style.remove()}function Ce(t,e=!1){return e?"background:#2c3e8f;color:white;border:0;padding:12px 16px;border-radius:8px;cursor:pointer;font-size:0.95rem;width:100%;margin-bottom:8px;text-align:left;display:flex;align-items:center;gap:12px;":`background:transparent;color:${t?"#e0e0e0":"#1a1a2e"};border:1px solid ${t?"#3a3a4e":"#d0d0d0"};padding:12px 16px;border-radius:8px;cursor:pointer;font-size:0.95rem;width:100%;margin-bottom:8px;text-align:left;display:flex;align-items:center;gap:12px;`}function Ba(t,e,r){let n=Zt(r),o=n?"#888":"#666",i=Nt();return t.dialog.innerHTML=`
|
|
8
|
+
<h2 style="margin:0 0 8px;font-size:1.3rem;">Sign in to ${jr(e)}</h2>
|
|
9
|
+
<p style="margin:0 0 24px;color:${o};font-size:0.9rem;">Choose how you want to sign in. Your keys never leave your control.</p>
|
|
10
|
+
<div style="display:flex;flex-direction:column;">
|
|
11
|
+
${i?`<button data-choice="nip07" style="${Ce(n,!0)}"><span style="font-size:1.2rem;">\u{1F310}</span><span><strong>Browser extension</strong><br><span style="font-size:0.8rem;opacity:0.8;">bark, Alby, nos2x</span></span></button>`:""}
|
|
12
|
+
<button data-choice="redirect" style="${Ce(n)}"><span style="font-size:1.2rem;">\u{1FAAA}</span><span><strong>Sign in with Signet</strong><br><span style="font-size:0.8rem;color:${o};">Scan QR with your phone</span></span></button>
|
|
13
|
+
<button data-choice="bunker" style="${Ce(n)}"><span style="font-size:1.2rem;">\u{1F511}</span><span><strong>Paste bunker URI</strong><br><span style="font-size:0.8rem;color:${o};">For NIP-46 power users</span></span></button>
|
|
14
|
+
</div>
|
|
15
|
+
<button data-choice="cancel" style="background:none;border:0;color:${o};padding:12px;cursor:pointer;font-size:0.85rem;margin-top:8px;">Cancel</button>
|
|
16
|
+
`,new Promise(s=>{t.dialog.querySelectorAll("button[data-choice]").forEach(c=>{c.addEventListener("click",()=>{let a=c.dataset.choice;s(a)})})})}async function ka(t,e){let r=Zt(e.theme),n=r?"#888":"#666",o=r?"#e0e0e0":"#1a1a2e";t.dialog.innerHTML=`
|
|
17
|
+
<h2 style="margin:0 0 8px;font-size:1.2rem;">Waiting for your extension</h2>
|
|
18
|
+
<p style="margin:0 0 20px;color:${n};font-size:0.85rem;">Approve the sign-in prompt in bark, Alby, nos2x, or whichever NIP-07 extension you use. Cold-start can take a few seconds.</p>
|
|
19
|
+
<div style="display:flex;align-items:center;justify-content:center;gap:14px;margin:0 0 24px;color:${o};">
|
|
20
|
+
<div style="width:28px;height:28px;border:3px solid ${r?"#3a3a4e":"#d0d0d0"};border-top-color:#5b6dff;border-radius:50%;animation:signet-login-spin 0.9s linear infinite;"></div>
|
|
21
|
+
<span id="signet-login-nip07-elapsed" style="font-variant-numeric:tabular-nums;font-size:0.95rem;">Connecting\u2026</span>
|
|
22
|
+
</div>
|
|
23
|
+
<div style="display:flex;gap:8px;justify-content:space-between;">
|
|
24
|
+
<button data-action="back" style="${Ce(r)}width:auto;flex:0 0 auto;padding:8px 16px;">\u2190 Back</button>
|
|
25
|
+
<button data-action="cancel" style="${Ce(r)}width:auto;flex:0 0 auto;padding:8px 16px;">Cancel</button>
|
|
26
|
+
</div>
|
|
27
|
+
<style>@keyframes signet-login-spin{to{transform:rotate(360deg)}}</style>
|
|
28
|
+
`;let i=t.dialog.querySelector("#signet-login-nip07-elapsed"),s=0,c=window.setInterval(()=>{s+=1,i&&(i.textContent=`Waiting for your signer (${s}s)\u2026`)},1e3),a=new Promise(f=>{t.dialog.querySelector('[data-action="back"]')?.addEventListener("click",()=>f(null)),t.dialog.querySelector('[data-action="cancel"]')?.addEventListener("click",()=>f(null))});try{let f=await Promise.race([Ht(),a]);if(!f)return null;let p=await Promise.race([f.signEvent({kind:21236,content:"",tags:[["challenge",e.challenge],["origin",e.origin],["app",e.appName]]}),a]);if(!p){try{await f.close()}catch{}return null}return{pubkey:f.pubkey,authEvent:p}}catch(f){return i&&(i.textContent=`\u2717 ${f instanceof Error?f.message:String(f)}`,i.style.color="#d04848"),await Promise.race([new Promise(p=>setTimeout(p,2500)),a]),null}finally{window.clearInterval(c)}}async function Aa(t,e){let r=Zt(e.theme),n=r?"#888":"#666",o=Ze.utils.randomPrivateKey(),i=se(Ze.getPublicKey(o)),s=new URLSearchParams({auth:"1",challenge:e.challenge,origin:e.origin,name:e.appName,callback:e.redirectCallback??`${e.origin}/`,t:String(Math.floor(Date.now()/1e3)),relay:e.relayUrl,sessionPubkey:i}),c=`${e.signetAppOrigin}/?${s.toString()}`;return t.dialog.innerHTML=`
|
|
29
|
+
<h2 style="margin:0 0 8px;font-size:1.2rem;">Sign in with Signet</h2>
|
|
30
|
+
<p style="margin:0 0 16px;color:${n};font-size:0.85rem;">Open the link on your phone, or scan the QR if rendered.</p>
|
|
31
|
+
<div style="background:${r?"#0f0f1f":"#f5f5f8"};border-radius:8px;padding:16px;margin-bottom:16px;">
|
|
32
|
+
<div id="signet-login-qr" style="width:200px;height:200px;margin:0 auto 12px;background:${r?"#1a1a2e":"#ffffff"};border-radius:6px;display:flex;align-items:center;justify-content:center;color:${n};font-size:0.8rem;text-align:center;padding:12px;box-sizing:border-box;">
|
|
33
|
+
QR placeholder<br><span style="font-size:0.7rem;">(bundle qr lib for production)</span>
|
|
34
|
+
</div>
|
|
35
|
+
<a href="${jr(c)}" target="_blank" rel="noopener" style="display:block;color:#5b6dff;font-size:0.75rem;word-break:break-all;text-decoration:none;">${jr(c.slice(0,80))}\u2026</a>
|
|
36
|
+
</div>
|
|
37
|
+
<p id="signet-login-status" style="margin:0 0 12px;color:${n};font-size:0.85rem;">Waiting for approval\u2026</p>
|
|
38
|
+
<div style="display:flex;gap:8px;justify-content:space-between;">
|
|
39
|
+
<button data-action="back" style="${Ce(r)}width:auto;flex:0 0 auto;padding:8px 16px;">\u2190 Back</button>
|
|
40
|
+
<button data-action="cancel" style="${Ce(r)}width:auto;flex:0 0 auto;padding:8px 16px;">Cancel</button>
|
|
41
|
+
</div>
|
|
42
|
+
`,new Promise(a=>{let f=!1,p=g=>{f||(f=!0,a(g))};t.dialog.querySelector('[data-action="back"]')?.addEventListener("click",()=>{p(null)}),t.dialog.querySelector('[data-action="cancel"]')?.addEventListener("click",()=>{p(null)}),Kr({requestId:e.challenge,relayUrl:e.relayUrl,sessionPrivKey:o,expectedOrigin:e.origin,timeout:e.timeout}).then(g=>{let d={id:g.authEvent.id,pubkey:g.authEvent.pubkey,kind:21236,created_at:g.authEvent.created_at,tags:g.authEvent.tags,content:g.authEvent.content,sig:g.authEvent.sig},l={pubkey:g.pubkey,authEvent:d};g.displayName&&(l.displayName=g.displayName),p(l)}).catch(g=>{let d=t.dialog.querySelector("#signet-login-status");d&&(d.textContent=`\u2717 ${g instanceof Error?g.message:String(g)}`,d.style.color="#d04848")})})}async function Ra(t,e){let r=Zt(e.theme),n=r?"#888":"#666",o=r?"#0f0f1f":"#f5f5f8",i=r?"#e0e0e0":"#1a1a2e";return t.dialog.innerHTML=`
|
|
43
|
+
<h2 style="margin:0 0 8px;font-size:1.2rem;">Paste bunker URI</h2>
|
|
44
|
+
<p style="margin:0 0 16px;color:${n};font-size:0.85rem;">Connect to your NIP-46 bunker (Heartwood, nsecBunker, or any compatible signer).</p>
|
|
45
|
+
<textarea id="signet-login-bunker-input" placeholder="bunker://..." rows="3" style="width:100%;background:${o};color:${i};border:1px solid ${r?"#3a3a4e":"#d0d0d0"};border-radius:8px;padding:10px;font-size:0.85rem;font-family:ui-monospace,monospace;box-sizing:border-box;resize:vertical;margin-bottom:12px;"></textarea>
|
|
46
|
+
<p id="signet-login-bunker-status" style="margin:0 0 12px;color:${n};font-size:0.85rem;min-height:1.2em;"></p>
|
|
47
|
+
<div style="display:flex;gap:8px;justify-content:space-between;">
|
|
48
|
+
<button data-action="back" style="${Ce(r)}width:auto;flex:0 0 auto;padding:8px 16px;">\u2190 Back</button>
|
|
49
|
+
<button data-action="connect" style="${Ce(r,!0)}width:auto;flex:1;padding:8px 16px;text-align:center;">Connect</button>
|
|
50
|
+
</div>
|
|
51
|
+
`,new Promise(s=>{let c=!1,a=d=>{c||(c=!0,s(d))},f=t.dialog.querySelector("#signet-login-bunker-input"),p=t.dialog.querySelector("#signet-login-bunker-status"),g=t.dialog.querySelector('[data-action="connect"]');t.dialog.querySelector('[data-action="back"]')?.addEventListener("click",()=>{a(null)}),g?.addEventListener("click",async()=>{let d=f?.value.trim()??"";if(!d){p&&(p.textContent="Please paste a bunker URI.");return}p&&(p.textContent="Connecting\u2026",p.style.color=""),g.disabled=!0;try{let l=await yn({uri:d});a(l)}catch(l){p&&(p.textContent=`\u2717 ${l instanceof Error?l.message:String(l)}`,p.style.color="#d04848"),g.disabled=!1}})})}function _a(t){let e=t.challenge??Ea();if(!/^[0-9a-f]{64}$/i.test(e))throw new Error("challenge-must-be-64-hex");let r=typeof window<"u"?window.location.origin:"http://localhost",n=Math.max(5e3,Math.min(t.timeout??He.timeout,6e5)),o={appName:t.appName,challenge:e.toLowerCase(),origin:r,relayUrl:t.relayUrl??He.relayUrl,theme:t.theme??He.theme,timeout:n,signetAppOrigin:t.signetAppOrigin??He.signetAppOrigin};return t.preferredMethod!==void 0&&(o.preferredMethod=t.preferredMethod),t.redirectCallback!==void 0&&(o.redirectCallback=t.redirectCallback),o}async function Wi(t){if(!t.appName||t.appName.length===0)throw new Error("appName-required");if(t.appName.length>64)throw new Error("appName-too-long");let e=_a(t),r=va(e.theme);try{for(;;){let n=e.preferredMethod?e.preferredMethod:await Ba(r,e.appName,e.theme);if(n==="cancel")return null;if(n==="nip07"){let o=await ka(r,e);if(!o){if(e.preferredMethod)return null;continue}let i=await Ht();return{pubkey:o.pubkey,method:"nip07",signer:i,authEvent:o.authEvent}}if(n==="redirect"){let o=await Aa(r,e);if(!o){if(e.preferredMethod)return null;continue}let i=new Ee(o.pubkey,o.authEvent),s={pubkey:o.pubkey,method:"redirect",signer:i,authEvent:o.authEvent};return o.displayName&&(s.displayName=o.displayName),s}if(n==="bunker"){let o=await Ra(r,e);if(!o){if(e.preferredMethod)return null;continue}let i=await o.signEvent({kind:21236,content:"",tags:[["challenge",e.challenge],["origin",e.origin],["app",e.appName]]});return{pubkey:o.pubkey,method:"bunker",signer:o,authEvent:i}}}}finally{Sa(r)}}function ze(t){try{return typeof localStorage<"u"?localStorage.getItem(t):null}catch{return null}}function Ge(t,e){try{typeof localStorage<"u"&&localStorage.setItem(t,e)}catch{}}function We(t){try{typeof localStorage<"u"&&localStorage.removeItem(t)}catch{}}function Yi(t){Ge(X.pubkey,t.pubkey),Ge(X.method,t.method),Ge(X.authEvent,t.authEventJson),t.bunkerUri!==void 0&&Ge(X.bunkerUri,t.bunkerUri),t.bunkerClientSkHex!==void 0&&Ge(X.bunkerClientSk,t.bunkerClientSkHex),t.expiresAt!==void 0&&Ge(X.expiresAt,String(t.expiresAt)),t.displayName!==void 0&&Ge(X.displayName,t.displayName)}function Xi(){let t=ze(X.pubkey),e=ze(X.method),r=ze(X.authEvent);if(!t||!e||!r||!/^[0-9a-f]{64}$/i.test(t)||e!=="nip07"&&e!=="redirect"&&e!=="bunker")return null;let n;try{if(n=JSON.parse(r),typeof n!="object"||n===null||n.pubkey!==t)return null}catch{return null}let o=ze(X.expiresAt),i=o?Number(o):void 0;if(i!==void 0&&Number.isFinite(i)&&Date.now()>i)return Ne(),null;let s={pubkey:t,method:e,authEventJson:r},c=ze(X.bunkerUri),a=ze(X.bunkerClientSk),f=ze(X.displayName);return c&&(s.bunkerUri=c),a&&(s.bunkerClientSkHex=a),i!==void 0&&Number.isFinite(i)&&(s.expiresAt=i),f&&(s.displayName=f),s}function Ne(){We(X.pubkey),We(X.method),We(X.authEvent),We(X.bunkerUri),We(X.bunkerClientSk),We(X.expiresAt),We(X.displayName)}function Ji(t){Ge(X.pendingRedirect,JSON.stringify(t))}function Qi(){let t=ze(X.pendingRedirect);if(!t)return null;try{let e=JSON.parse(t),r=e.challenge,n=e.origin,o=e.appName,i=e.createdAt;return typeof r!="string"||!/^[0-9a-f]{64}$/i.test(r)||typeof n!="string"||n.length===0||typeof o!="string"||o.length===0||typeof i!="number"||!Number.isFinite(i)?null:{challenge:r,origin:n,appName:o,createdAt:i}}catch{return null}}function Fi(){We(X.pendingRedirect)}function es(t){let e="";for(let r=0;r<t.length;r++)e+=t[r].toString(16).padStart(2,"0");return e}function ts(t){if(t.length%2!==0)throw new Error("odd-hex-length");let e=new Uint8Array(t.length/2);for(let r=0;r<e.length;r++)e[r]=parseInt(t.slice(r*2,r*2+2),16);return e}function ns(t){let e={};typeof window<"u"&&new URLSearchParams(window.location.search).forEach((o,i)=>{e[i]=o});let r=typeof window<"u"&&!!window.opener&&window.opener!==window;if(r){try{window.opener.postMessage({type:"signet-login-callback",params:e},"*")}catch{}if(t?.closeAfterPost??!0)try{window.close()}catch{}}return{params:e,isPopup:r}}var rs=/^[0-9a-f]{64}$/i,La=/^[0-9a-f]{128}$/i;function Ia(t){let e=t.redirectCallback??`${t.origin}/`,r=new URLSearchParams({auth:"1",challenge:t.challenge,origin:t.origin,name:t.appName,callback:e,t:String(Math.floor(Date.now()/1e3))});return`${t.signetAppOrigin}/?${r.toString()}`}function os(t){if(typeof window>"u")throw new Error("signet-login: redirect mode requires a browser environment");let e={challenge:t.challenge,origin:t.origin,appName:t.appName,createdAt:Date.now()};Ji(e);let r=Ia(t);return window.location.href=r,new Promise(()=>{})}function Oa(){if(typeof window>"u")return;let t=new URL(window.location.href),e=["pubkey","npub","signature","eventId","error","warnings","fromNP","display_name","t"],r=!1;for(let o of e)t.searchParams.has(o)&&(t.searchParams.delete(o),r=!0);if(!r)return;let n=t.pathname+(t.search?t.search:"")+t.hash;try{window.history.replaceState(window.history.state,document.title,n)}catch{}}function is(){if(typeof window>"u")return{kind:"no-callback"};let t=new URLSearchParams(window.location.search),e=t.get("error"),r=t.get("pubkey"),n=t.get("signature"),o=t.get("eventId");if(!e&&!r&&!n&&!o)return{kind:"no-callback"};let i=Qi(),s=B=>(Fi(),Oa(),B);if(e==="denied")return s({kind:"denied"});if(!i)return s({kind:"invalid",reason:"no-pending-state"});if(i.origin!==window.location.origin)return s({kind:"invalid",reason:"origin-mismatch"});if(Date.now()-i.createdAt>Zr)return s({kind:"invalid",reason:"pending-stale"});if(!r||!rs.test(r))return s({kind:"invalid",reason:"pubkey-malformed"});if(!n||!La.test(n))return s({kind:"invalid",reason:"signature-malformed"});if(!o||!rs.test(o))return s({kind:"invalid",reason:"eventId-malformed"});let c,a=t.get("t");if(a&&/^\d+$/.test(a)){let B=Number(a);if(!Number.isFinite(B))return s({kind:"invalid",reason:"t-malformed"});c=B}else c=Math.floor(Date.now()/1e3),typeof console<"u"&&console.warn("signet-login: redirect callback missing `t` param \u2014 auth event created_at approximated. Server-side verification may reject. Upgrade signet-app to emit `t` in the redirect URL.");let f=r.toLowerCase(),p=n.toLowerCase(),d={id:o.toLowerCase(),pubkey:f,kind:21236,created_at:c,tags:[["challenge",i.challenge],["origin",i.origin],["app",i.appName]],content:"",sig:p},l=t.get("display_name")||void 0,b=new Ee(f,d),E={pubkey:f,method:"redirect",signer:b,authEvent:d};return l&&(E.displayName=l),s({kind:"session",session:E})}async function ss(t){if(t.mode==="redirect"){if(typeof window>"u")throw new Error("signet-login: redirect mode requires a browser environment");let r=t.challenge??Ta();if(!/^[0-9a-f]{64}$/i.test(r))throw new Error("challenge-must-be-64-hex");if(!t.appName||t.appName.length===0)throw new Error("appName-required");if(t.appName.length>64)throw new Error("appName-too-long");return os({appName:t.appName,challenge:r.toLowerCase(),origin:window.location.origin,signetAppOrigin:t.signetAppOrigin??He.signetAppOrigin,...t.redirectCallback!==void 0?{redirectCallback:t.redirectCallback}:{}})}let e=await Wi(t);return e?(t.persist!==!1&&us(e),e):null}function Ta(){let t=new Uint8Array(32);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}async function cs(t){let e=Xi();if(!e)return null;let r;try{r=JSON.parse(e.authEventJson)}catch{return Ne(),null}if(e.method==="nip07"){if(!Nt()){let i=new Ee(e.pubkey,r);return{pubkey:e.pubkey,method:"redirect",signer:i,authEvent:r}}try{let i=await Ht();return i.pubkey!==e.pubkey?(Ne(),null):{pubkey:e.pubkey,method:"nip07",signer:i,authEvent:r}}catch{return Ne(),null}}if(e.method==="bunker"){if(t?.reconnectBunker===!1){let i=new Ee(e.pubkey,r);return{pubkey:e.pubkey,method:"redirect",signer:i,authEvent:r}}if(!e.bunkerUri||!e.bunkerClientSkHex)return Ne(),null;try{let i=ts(e.bunkerClientSkHex),s=await yn({uri:e.bunkerUri,clientSecretKey:i});return s.pubkey!==e.pubkey?(await s.close(),Ne(),null):{pubkey:e.pubkey,method:"bunker",signer:s,authEvent:r}}catch{return Ne(),null}}let n=new Ee(e.pubkey,r),o={pubkey:e.pubkey,method:"redirect",signer:n,authEvent:r};return e.displayName&&(o.displayName=e.displayName),o}var as=ns;async function fs(){let t=is();return t.kind==="session"&&us(t.session),t}async function ls(t){if(t)try{await t.signer.close()}catch{}Ne()}function us(t){let e={pubkey:t.pubkey,method:t.method,authEventJson:JSON.stringify(t.authEvent)};if(t.method==="bunker"){let r=t.signer;r.bunkerUri&&r.clientSecretKey instanceof Uint8Array&&(e.bunkerUri=r.bunkerUri,e.bunkerClientSkHex=es(r.clientSecretKey))}t.expiresAt!==void 0&&(e.expiresAt=t.expiresAt),t.displayName!==void 0&&(e.displayName=t.displayName),Yi(e)}if(typeof window<"u"){let e=window.Signet??{};Object.assign(e,{login:ss,restoreSession:cs,logout:ls,handleCallback:as,handleRedirectCallback:fs}),window.Signet=e}return ms(Ua);})();
|
|
52
|
+
/*! Bundled license information:
|
|
53
|
+
|
|
54
|
+
@noble/hashes/utils.js:
|
|
55
|
+
@noble/hashes/esm/utils.js:
|
|
56
|
+
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
57
|
+
|
|
58
|
+
@noble/curves/utils.js:
|
|
59
|
+
@noble/curves/abstract/modular.js:
|
|
60
|
+
@noble/curves/abstract/curve.js:
|
|
61
|
+
@noble/curves/abstract/weierstrass.js:
|
|
62
|
+
@noble/curves/secp256k1.js:
|
|
63
|
+
@noble/curves/esm/utils.js:
|
|
64
|
+
@noble/curves/esm/abstract/modular.js:
|
|
65
|
+
@noble/curves/esm/abstract/curve.js:
|
|
66
|
+
@noble/curves/esm/abstract/weierstrass.js:
|
|
67
|
+
@noble/curves/esm/_shortw_utils.js:
|
|
68
|
+
@noble/curves/esm/secp256k1.js:
|
|
69
|
+
(*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
70
|
+
|
|
71
|
+
@noble/ciphers/utils.js:
|
|
72
|
+
(*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
|
|
73
|
+
|
|
74
|
+
@scure/base/index.js:
|
|
75
|
+
(*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
76
|
+
*/
|
|
77
|
+
Object.assign((globalThis.Signet||={}),__SignetLoginIIFE);
|