signet-login 0.2.0 → 0.3.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/dist/modal.js +20 -1
- package/dist/redirect.d.ts +10 -0
- package/dist/redirect.js +14 -2
- package/dist/signet-login.iife.js +18 -17
- package/dist/signet-login.js +40 -2
- package/package.json +1 -1
package/dist/modal.js
CHANGED
|
@@ -9,6 +9,7 @@ import { hasNip07, createNip07Signer, createBunkerSigner, EphemeralSigner } from
|
|
|
9
9
|
import { waitForAuthResponse } from 'signet-verify';
|
|
10
10
|
import { schnorr } from '@noble/curves/secp256k1';
|
|
11
11
|
import { bytesToHex } from '@noble/hashes/utils';
|
|
12
|
+
import { startRedirect } from './redirect.js';
|
|
12
13
|
function escapeHtml(str) {
|
|
13
14
|
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
14
15
|
}
|
|
@@ -64,7 +65,8 @@ function renderPicker(refs, appName, theme) {
|
|
|
64
65
|
<p style="margin:0 0 24px;color:${muted};font-size:0.9rem;">Choose how you want to sign in. Your keys never leave your control.</p>
|
|
65
66
|
<div style="display:flex;flex-direction:column;">
|
|
66
67
|
${showNip07 ? `<button data-choice="nip07" style="${buttonStyle(dark, true)}"><span style="font-size:1.2rem;">🌐</span><span><strong>Browser extension</strong><br><span style="font-size:0.8rem;opacity:0.8;">bark, Alby, nos2x</span></span></button>` : ''}
|
|
67
|
-
<button data-choice="redirect" style="${buttonStyle(dark)}"><span style="font-size:1.2rem;">🪪</span><span><strong>Sign in with Signet</strong><br><span style="font-size:0.8rem;color:${muted};">
|
|
68
|
+
<button data-choice="redirect" style="${buttonStyle(dark)}"><span style="font-size:1.2rem;">🪪</span><span><strong>Sign in with Signet</strong><br><span style="font-size:0.8rem;color:${muted};">Open Signet on this device</span></span></button>
|
|
69
|
+
<button data-choice="qr" style="${buttonStyle(dark)}"><span style="font-size:1.2rem;">📱</span><span><strong>Signet on another device</strong><br><span style="font-size:0.8rem;color:${muted};">Scan QR with your phone</span></span></button>
|
|
68
70
|
<button data-choice="bunker" style="${buttonStyle(dark)}"><span style="font-size:1.2rem;">🔑</span><span><strong>Paste bunker URI</strong><br><span style="font-size:0.8rem;color:${muted};">For NIP-46 power users</span></span></button>
|
|
69
71
|
</div>
|
|
70
72
|
<button data-choice="cancel" style="background:none;border:0;color:${muted};padding:12px;cursor:pointer;font-size:0.85rem;margin-top:8px;">Cancel</button>
|
|
@@ -351,6 +353,23 @@ export async function showLoginModal(opts) {
|
|
|
351
353
|
};
|
|
352
354
|
}
|
|
353
355
|
if (choice === 'redirect') {
|
|
356
|
+
// Same-tab navigation. Reuses the same pending-state and callback
|
|
357
|
+
// machinery as `Signet.login({ mode: 'redirect' })`, so this picker
|
|
358
|
+
// path lands the user on signet-app and the consumer's next page
|
|
359
|
+
// load picks up the round-trip via `Signet.handleRedirectCallback`.
|
|
360
|
+
// The promise from `startRedirect` never resolves — the page is gone
|
|
361
|
+
// before the await completes — so the dialog teardown in the finally
|
|
362
|
+
// block is also a no-op for this branch.
|
|
363
|
+
await startRedirect({
|
|
364
|
+
appName: resolved.appName,
|
|
365
|
+
challenge: resolved.challenge,
|
|
366
|
+
origin: resolved.origin,
|
|
367
|
+
signetAppOrigin: resolved.signetAppOrigin,
|
|
368
|
+
...(resolved.redirectCallback !== undefined ? { redirectCallback: resolved.redirectCallback } : {}),
|
|
369
|
+
});
|
|
370
|
+
return null; // unreachable
|
|
371
|
+
}
|
|
372
|
+
if (choice === 'qr') {
|
|
354
373
|
const result = await runRedirectFlow(refs, resolved);
|
|
355
374
|
if (!result) {
|
|
356
375
|
if (resolved.preferredMethod)
|
package/dist/redirect.d.ts
CHANGED
|
@@ -56,6 +56,16 @@ export declare function startRedirect(opts: RedirectStartOptions): Promise<never
|
|
|
56
56
|
export type ConsumeCallbackResult = {
|
|
57
57
|
kind: 'session';
|
|
58
58
|
session: SignetSession;
|
|
59
|
+
/**
|
|
60
|
+
* Optional NIP-46 `bunker://...` URI shipped by signet-app for the
|
|
61
|
+
* redirect-bunker auto-pair flow. When present, the SDK wrapper
|
|
62
|
+
* (`handleRedirectCallback`) upgrades the session from auth-only
|
|
63
|
+
* (`EphemeralSigner`) to a fully-signing `BunkerSigner` so the
|
|
64
|
+
* consumer can publish events without per-event prompts. Absent on
|
|
65
|
+
* older signet-app deployments — the consumer just gets the
|
|
66
|
+
* existing auth-only behaviour.
|
|
67
|
+
*/
|
|
68
|
+
bunkerUri?: string;
|
|
59
69
|
} | {
|
|
60
70
|
kind: 'denied';
|
|
61
71
|
} | {
|
package/dist/redirect.js
CHANGED
|
@@ -88,7 +88,7 @@ function cleanupCallbackUrl() {
|
|
|
88
88
|
if (typeof window === 'undefined')
|
|
89
89
|
return;
|
|
90
90
|
const url = new URL(window.location.href);
|
|
91
|
-
const removed = ['pubkey', 'npub', 'signature', 'eventId', 'error', 'warnings', 'fromNP', 'display_name', 't'];
|
|
91
|
+
const removed = ['pubkey', 'npub', 'signature', 'eventId', 'error', 'warnings', 'fromNP', 'display_name', 't', 'bunker'];
|
|
92
92
|
let touched = false;
|
|
93
93
|
for (const key of removed) {
|
|
94
94
|
if (url.searchParams.has(key)) {
|
|
@@ -219,7 +219,19 @@ export function consumeCallback() {
|
|
|
219
219
|
};
|
|
220
220
|
if (displayName)
|
|
221
221
|
session.displayName = displayName;
|
|
222
|
-
|
|
222
|
+
// Optional bunker URI for the redirect-bunker auto-pair flow. We just
|
|
223
|
+
// shuttle the string here — the async upgrade to a `BunkerSigner` happens
|
|
224
|
+
// in `handleRedirectCallback`, which is already async. Light shape check
|
|
225
|
+
// (must start `bunker://`, length-cap) so a malformed param doesn't
|
|
226
|
+
// travel further into the SDK; deeper validation lives in
|
|
227
|
+
// `createBunkerSigner` / `parsePairingURI`.
|
|
228
|
+
const bunkerRaw = params.get('bunker');
|
|
229
|
+
let bunkerUri;
|
|
230
|
+
if (bunkerRaw && bunkerRaw.length >= 9 && bunkerRaw.length <= 8192
|
|
231
|
+
&& bunkerRaw.slice(0, 9).toLowerCase() === 'bunker://') {
|
|
232
|
+
bunkerUri = bunkerRaw;
|
|
233
|
+
}
|
|
234
|
+
return finalize(bunkerUri ? { kind: 'session', session, bunkerUri } : { kind: 'session', session });
|
|
223
235
|
}
|
|
224
236
|
// Re-export DEFAULTS for tree-shaking-friendly callers that want to avoid
|
|
225
237
|
// importing the full types module just for one constant.
|
|
@@ -1,19 +1,20 @@
|
|
|
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=`
|
|
1
|
+
"use strict";var __SignetLoginIIFE=(()=>{var Gt=Object.defineProperty;var ds=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var ps=Object.prototype.hasOwnProperty;var gs=(t,e,r)=>e in t?Gt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var bs=(t,e)=>{for(var r in e)Gt(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&&Gt(t,o,{get:()=>e[o],enumerable:!(n=ds(e,o))||n.enumerable});return t};var ms=t=>ys(Gt({},"__esModule",{value:!0}),t);var v=(t,e,r)=>gs(t,typeof e!="symbol"?e+"":e,r);var Ua={};bs(Ua,{handleCallback:()=>fs,handleRedirectCallback:()=>ls,login:()=>cs,logout:()=>us,restoreSession:()=>as});var He={relayUrl:"wss://relay.damus.io",signetAppOrigin:"https://mysignet.app",timeout:12e4,theme:"auto",persist:!0,mode:"relay"},Gr=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 Yr(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 Be(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Wt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function ge(t,e){return t<<32-e|t>>>e}var Xr=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),Xr)return t.toHex();let e="";for(let r=0;r<t.length;r++)e+=xs[t[r]];return e}var Se={_0:48,_9:57,A:65,F:70,a:97,f:102};function Wr(t){if(t>=Se._0&&t<=Se._9)return t-Se._0;if(t>=Se.A&&t<=Se.F)return t-(Se.A-10);if(t>=Se.a&&t<=Se.f)return t-(Se.a-10)}function ne(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);if(Xr)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=Wr(t.charCodeAt(i)),c=Wr(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 Jr(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 Qr=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Fr(t,e,r){return t&e^~t&r}function eo(t,e,r){return t&e^t&r^e&r}var Yt=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=Wt(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=Wt(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),Yr(e,this),this.finished=!0;let{buffer:r,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;r[s++]=128,Be(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=Wt(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()}},ke=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),Nn=class extends Yt{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+Fr(c,a,f)+ws[g]+Pe[g]|0,E=(ge(n,2)^ge(n,13)^ge(n,22))+eo(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(){Be(Pe)}destroy(){this.set(0,0,0,0,0,0,0,0),Be(this.buffer)}},Hn=class extends Nn{constructor(){super(32);v(this,"A",ke[0]|0);v(this,"B",ke[1]|0);v(this,"C",ke[2]|0);v(this,"D",ke[3]|0);v(this,"E",ke[4]|0);v(this,"F",ke[5]|0);v(this,"G",ke[6]|0);v(this,"H",ke[7]|0)}};var ae=Jr(()=>new Hn,Qr(1));var qn=BigInt(0),Pn=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 to(t){if(typeof t=="bigint"){if(!Xt(t))throw new Error("positive bigint expected, got "+t)}else he(t);return t}function Rt(t){let e=to(t).toString(16);return e.length&1?"0"+e:e}function no(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return t===""?qn:BigInt("0x"+t)}function qe(t){return no(pe(t))}function Mn(t){return no(pe(Es(W(t)).reverse()))}function Jt(t,e){he(e),t=to(t);let r=ne(t.toString(16).padStart(e*2,"0"));if(r.length!==e)throw new Error("number too large");return r}function $n(t,e){return Jt(t,e).reverse()}function Es(t){return Uint8Array.from(t)}function ro(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 Xt=t=>typeof t=="bigint"&&qn<=t;function vs(t,e,r){return Xt(t)&&Xt(e)&&Xt(r)&&e<=t&&t<r}function oo(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>qn;t>>=Pn,e+=1);return e}var _t=t=>(Pn<<BigInt(t))-Pn;function io(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 N=a.slice();_.push(N),B+=a.length}return F(..._)};return(B,_)=>{g(),l(B);let N;for(;!(N=_(b()));)l();return g(),N}}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 Vn(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),ao=BigInt(3),fo=BigInt(4),lo=BigInt(5),Ss=BigInt(7),uo=BigInt(8),Bs=BigInt(9),ho=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 so(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 jn(t,e,r){if(!t.eql(t.sqr(e),r))throw new Error("Cannot find square root")}function po(t,e){let r=(t.ORDER+re)/fo,n=t.pow(e,r);return jn(t,n,e),n}function ks(t,e){let r=(t.ORDER-lo)/uo,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 jn(t,c,e),c}function As(t){let e=at(t),r=go(t),n=r(e,e.neg(e.ONE)),o=r(e,n),i=r(e,e.neg(n)),s=(t+Ss)/ho;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 jn(c,B,a),B}}function go(t){if(t<ao)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(;co(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return po;let i=o.pow(n,e),s=(e+re)/Xe;return function(a,f){if(a.is0(f))return f;if(co(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%fo===ao?po:t%uo===lo?ks:t%ho===Bs?As(t):go(t)}var _s=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Zn(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 Qt(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 co(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 Os(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 Kn=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}=Os(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*so(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 so(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=Rs(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?$n(e,this.BYTES):Jt(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?Mn(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 Qt(this,e)}cmov(e,r,n){return n?r:e}};function at(t,e={}){return new Kn(t,e)}function bo(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=bo(t);return e+Math.ceil(e/2)}function Ft(t,e,r=!1){W(t);let n=t.length,o=bo(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?Mn(t):qe(t),c=be(s,e-re)+re;return r?$n(c,o):Jt(c,o)}var ft=BigInt(0),Je=BigInt(1);function Ot(t,e){let r=e.negate();return t?r:e}function Xn(t,e){let r=Qt(t.Fp,e.map(n=>n.Z));return e.map((n,o)=>t.fromAffine(n.toAffine(r[o])))}function wo(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Gn(t,e){wo(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 yo(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 Wn=new WeakMap,Eo=new WeakMap;function Yn(t){return Eo.get(t)||1}function mo(t){if(t!==ft)throw new Error("invalid wNAF")}var en=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}=Gn(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=Gn(e,this.bits);for(let c=0;c<s.windows;c++){let{nextN:a,offset:f,isZero:p,isNeg:g,isNegF:d,offsetF:l}=yo(n,c,s);n=a,p?i=i.add(Ot(d,r[l])):o=o.add(Ot(g,r[f]))}return mo(n),{p:o,f:i}}wNAFUnsafe(e,r,n,o=this.ZERO){let i=Gn(e,this.bits);for(let s=0;s<i.windows&&n!==ft;s++){let{nextN:c,offset:a,isZero:f,isNeg:p}=yo(n,s,i);if(n=c,!f){let g=r[a];o=o.add(p?g.negate():g)}}return mo(n),o}getPrecomputes(e,r,n){let o=Wn.get(r);return o||(o=this.precomputeWindow(r,e),e!==1&&(typeof n=="function"&&(o=n(o)),Wn.set(r,o))),o}cached(e,r,n){let o=Yn(e);return this.wNAF(o,this.getPrecomputes(o,e,n),r)}unsafe(e,r,n,o){let i=Yn(e);return i===1?this._unsafeLadder(e,r,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,n),r,o)}createCache(e,r){wo(r,this.bits),Eo.set(e,r),Wn.delete(e)}hasCache(e){return Yn(e)!==1}};function vo(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 xo(t,e,r){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Zn(e),e}else return at(t,{isLE:r})}function So(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=xo(e.p,r.Fp,n),i=xo(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 tn(t,e){return function(n){let o=t(n);return{secretKey:o,publicKey:e(o)}}}var nn=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),Be(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 nn(t,e).update(r).digest();we.create=(t,e)=>new nn(t,e);var Bo=(t,e)=>(t+(t>=0?e:-e)/ko)/e;function Is(t,e,r){let[[n,o],[i,s]]=e,c=Bo(s*t,r),a=Bo(-o*t,r),f=t-c*n-a*i,p=-c*o-a*s,g=f<Ae,d=p<Ae;g&&(f=-f),d&&(p=-p);let l=_t(Math.ceil(Dn(r)/2))+lt;if(f<Ae||f>=l||p<Ae||p>=l)throw new Error("splitScalar (endomorphism): failed, k="+t);return{k1neg:g,k1:f,k2neg:d,k2:p}}function Qn(t){if(!["compact","recovered","der"].includes(t))throw new Error('Signature format must be "compact", "recovered", or "der"');return t}function Jn(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&&Qn(r.format),r}var Fn=class extends Error{constructor(e=""){super(e)}},Me={Err:Fn,_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<Ae)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)}},Ae=BigInt(0),lt=BigInt(1),ko=BigInt(2),rn=BigInt(3),Ts=BigInt(4);function Ao(t,e={}){let r=So("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=_o(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(Ro(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,rn),Ts),N=n.mul(n.sqr(i.b),BigInt(27));if(n.is0(n.add(_,N)))throw new Error("bad curve params: a or b");function H(x,u,h=!1){if(!n.isValid(u)||h&&n.is0(u))throw new Error(`bad point coordinate ${x}`);return u}function P(x){if(!(x instanceof O))throw new Error("Weierstrass Point expected")}function q(x){if(!a||!a.basises)throw new Error("no endo");return Is(x,a.basises,o.ORDER)}let Z=Vn((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=Vn(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 O(n.mul(h.X,x),h.Y,h.Z),u=Ot(y,u),h=Ot(w,h),u.add(h)}let L=class L{constructor(u,h,y){v(this,"X");v(this,"Y");v(this,"Z");this.X=H("x",u),this.Y=H("y",h,!0),this.Z=H("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 $.createCache(this,u),h||this.multiply(rn),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){P(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,rn),{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),I=n.mul(w,k);return I=n.add(I,I),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(I,A),R=n.mul(y,R),C=n.mul(u,C),I=n.sub(T,C),I=n.mul(u,I),I=n.add(I,R),R=n.add(T,T),T=n.add(R,T),T=n.add(T,C),T=n.mul(T,I),S=n.add(S,T),C=n.mul(k,m),C=n.add(C,C),T=n.mul(C,I),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){P(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,rn),I=n.mul(h,k),D=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(I,D),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(I,z),j=n.sub(j,Q),Q=n.add(y,w),S=n.add(m,A),Q=n.mul(Q,S),S=n.add(D,z),Q=n.sub(Q,S),T=n.mul(M,j),S=n.mul(C,z),T=n.add(S,T),S=n.sub(D,T),T=n.add(D,T),R=n.mul(S,T),D=n.add(I,I),D=n.add(D,I),z=n.mul(M,z),j=n.mul(C,j),D=n.add(D,z),z=n.sub(I,z),z=n.mul(M,z),j=n.add(j,z),I=n.mul(D,j),R=n.add(R,I),I=n.mul(Q,j),S=n.mul(V,S),S=n.sub(S,I),I=n.mul(V,D),T=n.mul(Q,T),T=n.add(T,I),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=>$.cached(this,m,A=>Xn(L,A));if(h){let{k1neg:m,k1:A,k2neg:S,k2:R}=q(u),{p:T,f:M}=k(A),{p:C,f:I}=k(R);w=M.add(I),y=G(h.beta,T,C,m,S)}else{let{p:m,f:A}=k(u);y=m,w=A}return Xn(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===Ae||y.is0())return L.ZERO;if(u===lt)return y;if($.hasCache(this))return this.multiply(u);if(h){let{k1neg:w,k1:k,k2neg:m,k2:A}=q(u),{p1:S,p2:R}=vo(L,y,k,A);return G(h.beta,S,R,w,m)}else return $.unsafe(y,u)}toAffine(u){return Z(this,u)}isTorsionFree(){let{isTorsionFree:u}=e;return s===lt?!0:u?u(L,this):$.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 O=L,K=o.BITS,$=new en(O,e.endo?Math.ceil(K/2):K);return O.BASE.precompute(8),O}function Ro(t){return Uint8Array.of(t?2:3)}function _o(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(_o(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 Ft(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=tn(c,a);return Object.freeze({getPublicKey:a,getSharedSecret:p,keygen:d,Point:t,utils:g,lengths:o})}function Lo(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*ko<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 N(){if(E)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function H(u,h){Qn(h);let y=l.signature,w=h==="compact"?y:h==="recovered"?y+1:void 0;return W(u,w)}class P{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(N(),![0,1,2,3].includes(w))throw new Error("invalid recovery id");this.recovery=w}Object.freeze(this)}static fromBytes(h,y=b.format){H(h,y);let w;if(y==="der"){let{r:S,s:R}=Me.toSig(W(h));return new P(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 P(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 P(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(Ro((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),I=t.BASE.multiplyUnsafe(M).add(S.multiplyUnsafe(C));if(I.is0())throw new Error("invalid recovery: point at infinify");return I.assertValidity(),I}hasHighS(){return B(this.s)}toBytes(h=b.format){if(Qn(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"?(N(),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 oo("num < 2^"+a,u,Ae,Y),s.toBytes(u)}function O(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}=Jn(y,b);u=O(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 I=m===!0?n(l.secretKey):m;R.push(W(I,void 0,"extraEntropy"))}let T=F(...R),M=A;function C(I){let D=q(I);if(!s.isValidNot0(D))return;let z=s.inv(D),V=t.BASE.multiply(D).toAffine(),j=s.create(V.x);if(j===Ae)return;let Q=s.create(z*s.create(M+j*S));if(Q===Ae)return;let St=(V.x===j?0:2)|Number(V.y<),Bt=Q;return w&&B(Q)&&(Bt=s.neg(Q),St^=1),new P(j,Bt,E?void 0:St)}return{seed:T,k2sig:C}}function $(u,h,y={}){let{seed:w,k2sig:k}=K(u,h,y);return io(e.outputLen,s.BYTES,o)(w,k).toBytes(y.format)}function L(u,h,y,w={}){let{lowS:k,prehash:m,format:A}=Jn(w,b);if(y=W(y,void 0,"publicKey"),h=O(h,m),!kt(u)){let S=u instanceof P?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+S)}H(u,A);try{let S=P.fromBytes(u,A),R=t.fromBytes(y);if(k&&S.hasHighS())return!1;let{r:T,s:M}=S,C=Z(h),I=s.inv(M),D=s.create(C*I),z=s.create(T*I),V=t.BASE.multiplyUnsafe(D).add(R.multiplyUnsafe(z));return V.is0()?!1:s.create(V.x)===T}catch{return!1}}function x(u,h,y={}){let{prehash:w}=Jn(y,b);return h=O(h,w),P.fromBytes(u,"recovered").recoverPublicKey(h).toBytes()}return Object.freeze({keygen:f,getPublicKey:p,getSharedSecret:g,utils:d,lengths:l,Point:t,sign:$,verify:L,recoverPublicKey:x,Signature:P,hash:e})}var cn={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),er=BigInt(2);function Hs(t){let e=cn.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,er,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,N=le(_,c,e)*E%e,H=le(N,r,e)*p%e,P=le(H,s,e)*b%e,q=le(P,n,e)*f%e,Z=le(q,er,e);if(!on.eql(on.sqr(Z),t))throw new Error("Cannot find square root");return Z}var on=at(cn.p,{sqrt:Hs}),Qe=Ao(cn,{Fp:on,endo:Cs}),an=Lo(Qe,ae),Oo={};function sn(t,...e){let r=Oo[t];if(r===void 0){let n=ae(ro(t));r=F(n,n),Oo[t]=r}return ae(F(r,...e))}var nr=t=>t.toBytes(!0).slice(1),rr=t=>t%er===Ns;function tr(t){let{Fn:e,BASE:r}=Qe,n=e.fromBytes(t),o=r.multiply(n);return{scalar:rr(o.y)?n:e.neg(n),bytes:nr(o)}}function To(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);rr(o)||(o=e.neg(o));let i=Qe.fromAffine({x:t,y:o});return i.assertValidity(),i}var It=qe;function Uo(...t){return Qe.Fn.create(It(sn("BIP0340/challenge",...t)))}function Io(t){return tr(t).bytes}function Ps(t,e,r=xe(32)){let{Fn:n}=Qe,o=W(t,void 0,"message"),{bytes:i,scalar:s}=tr(e),c=W(r,32,"auxRand"),a=n.toBytes(s^It(sn("BIP0340/aux",c))),f=sn("BIP0340/nonce",a,i,o),{bytes:p,scalar:g}=tr(f),d=Uo(p,i,o),l=new Uint8Array(64);if(l.set(p,0),l.set(n.toBytes(n.create(g+d*s)),32),!Co(l,o,i))throw new Error("sign: Invalid signature produced");return l}function Co(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=To(It(a)),p=It(s.subarray(0,32));if(!n.isValidNot0(p))return!1;let g=It(s.subarray(32,64));if(!o.isValidNot0(g))return!1;let d=Uo(o.toBytes(p),nr(f),c),l=i.multiplyUnsafe(g).add(f.multiplyUnsafe(o.neg(d))),{x:b,y:E}=l.toAffine();return!(l.is0()||!rr(E)||b!==p)}catch{return!1}}var ut=(()=>{let r=(n=xe(48))=>Ft(n,cn.n);return{keygen:tn(r,Io),getPublicKey:Io,sign:Ps,verify:Co,Point:Qe,utils:{randomSecretKey:r,taggedHash:sn,lift_x:To,pointToBytes:nr},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 fn(t){if(typeof t!="boolean")throw new Error(`boolean expected, not ${t}`)}function ln(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 or(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 No(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 Re(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function _e(...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 $s=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ho(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 ir=(t,e)=>{function r(n,...o){if(ee(n,void 0,"key"),!$s)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 sr(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&&!Ds(e))throw new Error("invalid output, must be aligned");return e}function Po(t,e,r){fn(r);let n=new Uint8Array(16),o=Ms(n);return o.setBigUint64(0,BigInt(e),r),o.setBigUint64(8,BigInt(t),r),n}function Ds(t){return t.byteOffset%4===0}function ht(t){return Uint8Array.from(t)}var Mo=t=>Uint8Array.from(t.split(""),e=>e.charCodeAt(0)),Vs=Mo("expand 16-byte k"),Ks=Mo("expand 32-byte k"),js=Re(Vs),Zs=Re(Ks);function U(t,e){return t<<e|t>>>32-e}function cr(t){return t.byteOffset%4===0}var un=64,zs=16,$o=2**32-1,qo=Uint32Array.of();function Gs(t,e,r,n,o,i,s,c){let a=o.length,f=new Uint8Array(un),p=Re(f),g=cr(o)&&cr(i),d=g?Re(o):qo,l=g?Re(i):qo;for(let b=0;b<a;s++){if(t(e,r,n,p,s,c),s>=$o)throw new Error("arx: counter overflow");let E=Math.min(un,a-b);if(g&&E===un){let B=b/4;if(b%4!==0)throw new Error("arx: invalid block position");for(let _=0,N;_<zs;_++)N=B+_,l[N]=d[N]^p[_];b+=un;continue}for(let B=0,_;B<E;B++)_=b+B,i[_]=o[_]^f[B];b+=E}}function ar(t,e){let{allowShortKeys:r,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=Ho({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof t!="function")throw new Error("core must be a function");return ln(o),ln(s),fn(i),fn(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"),ln(g),g<0||g>=$o)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");cr(a)||l.push(a=ht(a));let _=Re(E);if(n){if(a.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(B,_,Re(a.subarray(0,16)),_),a=a.subarray(16)}let N=16-o;if(N!==a.length)throw new Error(`arx: nonce must be ${N} or 16 bytes`);if(N!==12){let P=new Uint8Array(12);P.set(a,i?0:12-a.length),a=P,l.push(a)}let H=Re(a);return Gs(t,B,_,H,f,p,g,s),_e(...l),p}}function te(t,e){return t[e++]&255|(t[e++]&255)<<8}var fr=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),N=te(e,r+2),H=te(e,r+4),P=te(e,r+6),q=te(e,r+8),Z=te(e,r+10),Y=te(e,r+12),G=te(e,r+14),O=i[0]+(_&8191),K=i[1]+((_>>>13|N<<3)&8191),$=i[2]+((N>>>10|H<<6)&8191),L=i[3]+((H>>>7|P<<9)&8191),x=i[4]+((P>>>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+O*c+K*(5*B)+$*(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+O*a+K*c+$*(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+O*f+K*a+$*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+O*p+K*f+$*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+O*g+K*p+$*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+O*d+K*g+$*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 I=m+O*l+K*d+$*g+L*p+x*f;m=I>>>13,I&=8191,I+=u*a+h*c+y*(5*B)+w*(5*E)+k*(5*b),m+=I>>>13,I&=8191;let D=m+O*b+K*l+$*d+L*g+x*p;m=D>>>13,D&=8191,D+=u*f+h*a+y*c+w*(5*B)+k*(5*E),m+=D>>>13,D&=8191;let z=m+O*E+K*b+$*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+O*B+K*E+$*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]=I,i[7]=D,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;_e(n)}update(e){or(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(){_e(this.h,this.r,this.buffer,this.pad)}digestInto(e){or(this),No(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 Do=Ws(t=>new fr(t));function jo(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],N=o,H=r[0],P=r[1],q=r[2],Z=s,Y=c,G=a,O=f,K=p,$=g,L=d,x=l,u=b,h=E,y=B,w=_,k=N,m=H,A=P,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+$|0,m=U(m^Y,16),h=h+m|0,$=U($^h,12),Y=Y+$|0,m=U(m^Y,8),h=h+m|0,$=U($^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),O=O+x|0,S=U(S^O,16),w=w+S|0,x=U(x^w,12),O=O+x|0,S=U(S^O,8),w=w+S|0,x=U(x^w,7),Z=Z+$|0,S=U(S^Z,16),y=y+S|0,$=U($^y,12),Z=Z+$|0,S=U(S^Z,8),y=y+S|0,$=U($^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),O=O+K|0,A=U(A^O,16),h=h+A|0,K=U(K^h,12),O=O+K|0,A=U(A^O,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+O|0,n[R++]=p+K|0,n[R++]=g+$|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++]=N+k|0,n[R++]=H+m|0,n[R++]=P+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],N=r[2],H=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,N=U(N^s,16),b=b+N|0,p=U(p^b,12),s=s+p|0,N=U(N^s,8),b=b+N|0,p=U(p^b,7),c=c+g|0,H=U(H^c,16),E=E+H|0,g=U(g^E,12),c=c+g|0,H=U(H^c,8),E=E+H|0,g=U(g^E,7),o=o+f|0,H=U(H^o,16),b=b+H|0,f=U(f^b,12),o=o+f|0,H=U(H^o,8),b=b+H|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,N=U(N^c,16),l=l+N|0,a=U(a^l,12),c=c+a|0,N=U(N^c,8),l=l+N|0,a=U(a^l,7);let P=0;n[P++]=o,n[P++]=i,n[P++]=s,n[P++]=c,n[P++]=B,n[P++]=_,n[P++]=N,n[P++]=H}var pt=ar(jo,{counterRight:!1,counterLength:4,allowShortKeys:!1}),Xs=ar(jo,{counterRight:!1,counterLength:8,extendNonceFn:Ys,allowShortKeys:!1});var Js=new Uint8Array(16),Vo=(t,e)=>{t.update(e);let r=e.length%16;r&&t.update(Js.subarray(r))},Qs=new Uint8Array(32);function Ko(t,e,r,n,o){o!==void 0&&ee(o,void 0,"AAD");let i=t(e,r,Qs),s=Po(n.length,o?o.length:0,!0),c=Do.create(i);o&&Vo(c,o),Vo(c,n),c.update(s);let a=c.digest();return _e(i,s),a}var Zo=t=>(e,r,n)=>({encrypt(i,s){let c=i.length;s=sr(c+16,s,!1),s.set(i);let a=s.subarray(0,-16);t(e,r,a,a,1);let f=Ko(t,e,r,a,n);return s.set(f,c),_e(f),s},decrypt(i,s){s=sr(i.length-16,s,!1);let c=i.subarray(0,-16),a=i.subarray(-16),f=Ko(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),_e(f),s}}),qf=ir({blockSize:64,nonceLength:12,tagLength:16},Zo(pt)),Mf=ir({blockSize:64,nonceLength:24,tagLength:16},Zo(Xs));function dn(t,e,r){return Ye(t),r===void 0&&(r=new Uint8Array(t.outputLen)),we(t,r,e)}var lr=Uint8Array.of(0),zo=Uint8Array.of();function hn(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=zo: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++)lr[0]=p+1,a.update(p===0?zo:f).update(r).update(lr).digestInto(f),s.set(f,o*p),c._cloneInto(a);return c.destroy(),a.destroy(),Be(f,lr),s.slice(0,n)}function Wo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Fs(t){if(!Wo(t))throw new Error("Uint8Array expected")}function Yo(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 hr(t){if(!Number.isSafeInteger(t))throw new Error(`invalid integer: ${t}`)}function dr(t){if(!Array.isArray(t))throw new Error("array expected")}function pn(t,e){if(!Yo(!0,e))throw new Error(`${t}: array of strings expected`)}function ec(t,e){if(!Yo(!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;pn("alphabet",e);let n=new Map(e.map((o,i)=>[o,i]));return{encode:o=>(dr(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=>(dr(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=>(pn("join.decode",e),e.join(t)),decode:e=>(Tt("join.decode",e),e.split(t))}}function oc(t,e="="){return hr(t),Tt("padding",e),{encode(r){for(pn("padding.encode",r);r.length*t%8;)r.push(e);return r},decode(r){pn("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 Xo=(t,e)=>e===0?t:Xo(e,t%e),gn=(t,e)=>t+(e-Xo(t,e)),ur=(()=>{let t=[];for(let e=0;e<40;e++)t.push(2**e);return t})();function Go(t,e,r,n){if(dr(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(gn(e,r)>32)throw new Error(`convertRadix2: carry overflow from=${e} to=${r} carryBits=${gn(e,r)}`);let o=0,i=0,s=ur[e],c=ur[r]-1,a=[];for(let f of t){if(hr(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=ur[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(hr(t),t<=0||t>32)throw new Error("radix2: bits should be in (0..32]");if(gn(8,t)>32||gn(t,8)>32)throw new Error("radix2: carry overflow");return{encode:r=>{if(!Wo(r))throw new Error("radix2.encode input should be Uint8Array");return Go(Array.from(r),8,t,!e)},decode:r=>(ec("radix2.decode",r),Uint8Array.from(Go(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"),yr=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=pr(r),r.sig=pe(ut.sign(ne(pr(r)),e)),r[Fe]=!0,r}verifyEvent(t){if(typeof t[Fe]=="boolean")return t[Fe];try{let e=pr(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 pr(t){let e=ae(yr.encode(dc(t)));return pe(e)}var yn=new uc,Wf=yn.generateSecretKey,Jo=yn.getPublicKey,hc=yn.finalizeEvent,Fo=yn.verifyEvent,ei=1,ti=65535;function gr(t,e){let r=an.getSharedSecret(t,ne("02"+e)).subarray(1,33);return dn(ae,r,yr.encode("nip44-v2"))}function ni(t,e){let r=hn(ae,t,e,76);return{chacha_key:r.subarray(0,32),chacha_nonce:r.subarray(32,44),hmac_key:r.subarray(44,76)}}function ri(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<ei||t>ti)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=yr.encode(t),r=e.length,n=pc(r),o=new Uint8Array(ri(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<ei||e>ti||r.length!==e||t.length!==2+ri(e))throw new Error("invalid padding");return lc.decode(r)}function oi(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}=ni(e,r),s=gc(t),c=pt(n,o,s),a=oi(i,c,r);return Ut.encode(F(new Uint8Array([2]),r,c,a))}function Qo(t,e){let{nonce:r,ciphertext:n,mac:o}=yc(t),{chacha_key:i,chacha_nonce:s,hmac_key:c}=ni(e,r),a=oi(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,br=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 ii=class extends Error{constructor(t,e){super(`Tried to send message '${t} on a closed connection to ${e}.`),this.name="SendingOnClosedConnection"}},si=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 si(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 ii(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 ii))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 si(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:N=>{f(b,N)},alreadyHaveEvent:p,eoseTimeout:e.maxWait,abort:e.abort})}).catch(N=>{f(b,`auth was required and attempted, but failed with: ${N}`)}):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}},ci;try{ci=WebSocket}catch{}var Oc=class extends Lc{constructor(t){super({verifyEvent:Fo,websocketImplementation:ci,maxWaitForConnection:3e3,...t})}},ai;try{ai=fetch}catch{}var Ic=/^bunker:\/\/([0-9a-f]{64})\??([?\/\w:.=&%-]*)$/;async function fi(t){let e=t.match(Ic);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 ai(i,{redirect:"error"})).json(),c=s.names[n],a=s.nip46[c]||[];return{pubkey:c,relays:a,secret:null}}catch{return null}}var bn=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 Oc,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 bn(t,r);return n.conversationKey=gr(t,e.pubkey),n.bp=e,n.setupSubscription(),n}static async fromURI(t,e,r={},n=3e5){let o=new bn(t,r),i=new URL(e),s=Jo(t);return new Promise((c,a)=>{let f=!1,p=o.pool.subscribe(i.searchParams.getAll("relay"),{kinds:[br],"#p":[s],limit:0},{onevent:async g=>{try{let d=gr(t,g.pubkey),l=Qo(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=gr(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:[br],authors:[this.bp.pubkey],"#p":[Jo(this.secretKey)],limit:0},{onevent:async n=>{let o=JSON.parse(Qo(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:br,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(Fo(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 mr=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 mr(e.toLowerCase(),t)}var xr=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 Pt(t){let e=t.uri.trim();if(!e)throw new Error("empty-bunker-uri");let r=await fi(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=bn.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 xr(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 qt(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");qt(t.outputLen),qt(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 ui(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 di=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),di)return t.toHex();let e="";for(let r=0;r<t.length;r++)e+=Cc[t[r]];return e}var Le={_0:48,_9:57,A:65,F:70,a:97,f:102};function li(t){if(t>=Le._0&&t<=Le._9)return t-Le._0;if(t>=Le.A&&t<=Le.F)return t-(Le.A-10);if(t>=Le.a&&t<=Le.f)return t-(Le.a-10)}function rt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);if(di)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=li(t.charCodeAt(i)),c=li(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 Mt(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 hi(t){let e=n=>t().update(Mt(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 pi(t,e,r){return t&e^~t&r}function gi(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=Mt(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),ui(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()}},Oe=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]),$e=new Uint32Array(64),vn=class extends En{constructor(e=32){super(64,e,8,!1),this.A=Oe[0]|0,this.B=Oe[1]|0,this.C=Oe[2]|0,this.D=Oe[3]|0,this.E=Oe[4]|0,this.F=Oe[5]|0,this.G=Oe[6]|0,this.H=Oe[7]|0}get(){let{A:e,B: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)$e[g]=e.getUint32(r,!1);for(let g=16;g<64;g++){let d=$e[g-15],l=$e[g-2],b=me(d,7)^me(d,18)^d>>>3,E=me(l,17)^me(l,19)^l>>>10;$e[g]=E+$e[g-7]+b+$e[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+pi(c,a,f)+Hc[g]+$e[g]|0,E=(me(n,2)^me(n,13)^me(n,22))+gi(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($e)}destroy(){this.set(0,0,0,0,0,0,0,0),nt(this.buffer)}};var yt=hi(()=>new vn);var Sn=class extends gt{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,mn(e);let n=Mt(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()}},wr=(t,e,r)=>new Sn(t,e).update(r).digest();wr.create=(t,e)=>new Sn(t,e);var Sr=BigInt(0),vr=BigInt(1);function $t(t,e=""){if(typeof t!="boolean"){let r=e&&`"${e}"`;throw new Error(r+"expected boolean, got type="+typeof t)}return t}function De(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 bi(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return t===""?Sr:BigInt("0x"+t)}function Ie(t){return bi(se(t))}function Br(t){return ye(t),bi(se(Uint8Array.from(t).reverse()))}function mt(t,e){return rt(t.toString(16).padStart(e*2,"0"))}function kr(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 Er=t=>typeof t=="bigint"&&Sr<=t;function Vt(t,e,r){return Er(t)&&Er(e)&&Er(r)&&e<=t&&t<r}function yi(t,e,r,n){if(!Vt(e,r,n))throw new Error("expected valid "+t+": "+r+" <= n < "+n+", got "+e)}function Bn(t){let e;for(e=0;t>Sr;t>>=vr,e+=1);return e}var Ve=t=>(vr<<BigInt(t))-vr;function mi(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 Kt(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 Ar(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),Ei=BigInt(3),vi=BigInt(4),Si=BigInt(5),Pc=BigInt(7),Bi=BigInt(8),qc=BigInt(9),ki=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 xi(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 Rr(t,e,r){if(!t.eql(t.sqr(e),r))throw new Error("Cannot find square root")}function Ai(t,e){let r=(t.ORDER+oe)/vi,n=t.pow(e,r);return Rr(t,n,e),n}function Mc(t,e){let r=(t.ORDER-Si)/Bi,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 Rr(t,c,e),c}function $c(t){let e=Ke(t),r=Ri(t),n=r(e,e.neg(e.ONE)),o=r(e,n),i=r(e,e.neg(n)),s=(t+Pc)/ki;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 Rr(c,B,a),B}}function Ri(t){if(t<Ei)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(;wi(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return Ai;let i=o.pow(n,e),s=(e+oe)/it;return function(a,f){if(a.is0(f))return f;if(wi(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 Dc(t){return t%vi===Ei?Ai:t%Bi===Si?Mc:t%ki===qc?$c(t):Ri(t)}var Vc=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function _r(t){let e={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},r=Vc.reduce((n,o)=>(n[o]="function",n),e);return Kt(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 wi(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&&qt(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*xi(l,t),t),sqrN:d=>d*d,addN:(d,l)=>d+l,subN:(d,l)=>d-l,mulN:(d,l)=>d*l,inv:d=>xi(d,t),sqrt:i||(d=>(p||(p=Dc(t)),p(g,d))),toBytes:d=>r?kr(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?Br(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 _i(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 Lr(t){let e=_i(t);return e+Math.ceil(e/2)}function Rn(t,e,r=!1){let n=t.length,o=_i(e),i=Lr(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=r?Br(t):Ie(t),c=ue(s,e-oe)+oe;return r?kr(c,o):mt(c,o)}var xt=BigInt(0),st=BigInt(1);function jt(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 Ti(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Or(t,e){Ti(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 Li(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,Ui=new WeakMap;function Tr(t){return Ui.get(t)||1}function Oi(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}=Or(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=Or(e,this.bits);for(let c=0;c<s.windows;c++){let{nextN:a,offset:f,isZero:p,isNeg:g,isNegF:d,offsetF:l}=Li(n,c,s);n=a,p?i=i.add(jt(d,r[l])):o=o.add(jt(g,r[f]))}return Oi(n),{p:o,f:i}}wNAFUnsafe(e,r,n,o=this.ZERO){let i=Or(e,this.bits);for(let s=0;s<i.windows&&n!==xt;s++){let{nextN:c,offset:a,isZero:f,isNeg:p}=Li(n,s,i);if(n=c,!f){let g=r[a];o=o.add(p?g.negate():g)}}return Oi(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=Tr(e);return this.wNAF(o,this.getPrecomputes(o,e,n),r)}unsafe(e,r,n,o){let i=Tr(e);return i===1?this._unsafeLadder(e,r,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,n),r,o)}createCache(e,r){Ti(r,this.bits),Ui.set(e,r),Ir.delete(e)}hasCache(e){return Tr(e)!==1}};function Ci(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 Ni(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 Ii(t,e,r){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return _r(e),e}else return Ke(t,{isLE:r})}function Hi(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=Ii(e.p,r.Fp,n),i=Ii(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 Pi=(t,e)=>(t+(t>=0?e:-e)/qi)/e;function zc(t,e,r){let[[n,o],[i,s]]=e,c=Pi(s*t,r),a=Pi(-o*t,r),f=t-c*n-a*i,p=-c*o-a*s,g=f<Ue,d=p<Ue;g&&(f=-f),d&&(p=-p);let l=Ve(Math.ceil(Bn(r)/2))+wt;if(f<Ue||f>=l||p<Ue||p>=l)throw new Error("splitScalar (endomorphism): failed, k="+t);return{k1neg:g,k1:f,k2neg:d,k2:p}}function Cr(t){if(!["compact","recovered","der"].includes(t))throw new Error('Signature format must be "compact", "recovered", or "der"');return t}function Ur(t,e){let r={};for(let n of Object.keys(e))r[n]=t[n]===void 0?e[n]:t[n];return $t(r.lowS,"lowS"),$t(r.prehash,"prehash"),r.format!==void 0&&Cr(r.format),r}var Nr=class extends Error{constructor(e=""){super(e)}},Te={Err:Nr,_tlv:{encode:(t,e)=>{let{Err:r}=Te;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}=Te,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}=Te;if(t<Ue)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}=Te;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}=Te,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}=Te,n=e.encode(2,r.encode(t.r)),o=e.encode(2,r.encode(t.s)),i=n+o;return e.encode(48,i)}},Ue=BigInt(0),wt=BigInt(1),qi=BigInt(2),On=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=Hi("weierstrass",t,e),{Fp:n,Fn:o}=r,i=r.CURVE,{h:s,n:c}=i;Kt(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=$i(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($t(u,"isCompressed"),u){p();let k=!n.isOdd(y);return fe(Mi(k),w)}else return fe(Uint8Array.of(4),w,n.toBytes(y))}function d(L){De(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,On),Gc),N=n.mul(n.sqr(i.b),BigInt(27));if(n.is0(n.add(_,N)))throw new Error("bad curve params: a or b");function H(L,x,u=!1){if(!n.isValid(x)||u&&n.is0(x))throw new Error(`bad point coordinate ${L}`);return x}function P(L){if(!(L instanceof O))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=Ar((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=Ar(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 O(n.mul(u.X,L),u.Y,u.Z),x=jt(h,x),u=jt(y,u),x.add(u)}class O{constructor(x,u,h){this.X=H("x",x),this.Y=H("y",u,!0),this.Z=H("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 O)throw new Error("projective point not allowed");return n.is0(u)&&n.is0(h)?O.ZERO:new O(u,h,n.ONE)}static fromBytes(x){let u=O.fromAffine(b(De(x,void 0,"point")));return u.assertValidity(),u}static fromHex(x){return O.fromBytes(J("pointHex",x))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(x=8,u=!0){return $.createCache(this,x),u||this.multiply(On),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){P(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 O(this.X,n.neg(this.Y),this.Z)}double(){let{a:x,b:u}=i,h=n.mul(u,On),{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 O(m,A,S)}add(x){P(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,On),C=n.mul(u,w),I=n.mul(h,k),D=n.mul(y,m),z=n.add(u,h),V=n.add(w,k);z=n.mul(z,V),V=n.add(C,I),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,D),V=n.sub(V,j),j=n.add(h,y),A=n.add(k,m),j=n.mul(j,A),A=n.add(I,D),j=n.sub(j,A),R=n.mul(T,V),A=n.mul(M,D),R=n.add(A,R),A=n.sub(I,R),R=n.add(I,R),S=n.mul(A,R),I=n.add(C,C),I=n.add(I,C),D=n.mul(T,D),V=n.mul(M,V),I=n.add(I,D),D=n.sub(C,D),D=n.mul(T,D),V=n.add(V,D),C=n.mul(I,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,I),R=n.mul(j,R),R=n.add(R,C),new O(A,S,R)}subtract(x){return this.add(x.negate())}is0(){return this.equals(O.ZERO)}multiply(x){let{endo:u}=e;if(!o.isValidNot0(x))throw new Error("invalid scalar: out of range");let h,y,w=k=>$.cached(this,k,m=>Ln(O,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(O,[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===Ue||h.is0())return O.ZERO;if(x===wt)return h;if($.hasCache(this))return this.multiply(x);if(u){let{k1neg:y,k1:w,k2neg:k,k2:m}=q(x),{p1:A,p2:S}=Ci(O,h,w,m);return G(u.beta,A,S,y,k)}else return $.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(O,this):$.unsafe(this,c).is0()}clearCofactor(){let{clearCofactor:x}=e;return s===wt?this:x?x(O,this):this.multiplyUnsafe(s)}isSmallOrder(){return this.multiplyUnsafe(s).is0()}toBytes(x=!0){return $t(x,"isCompressed"),this.assertValidity(),l(O,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(O,x)}static msm(x,u){return Ni(O,o,x,u)}static fromPrivateKey(x){return O.BASE.multiply(je(o,x))}}O.BASE=new O(i.Gx,i.Gy,n.ONE),O.ZERO=new O(n.ZERO,n.ONE,n.ZERO),O.Fp=n,O.Fn=o;let K=o.BITS,$=new _n(O,e.endo?Math.ceil(K/2):K);return O.BASE.precompute(8),O}function Mi(t){return Uint8Array.of(t?2:3)}function $i(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($i(t.Fp,r),{seed:Lr(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(De(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),Kt(r,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});let n=r.randomBytes||ot,o=r.hmac||((u,...h)=>wr(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 N(u,h){Cr(h);let y=l.signature,w=h==="compact"?y:h==="recovered"?y+1:void 0;return De(u,w,`${h} signature`)}class H{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){N(h,y);let w;if(y==="der"){let{r:S,s:R}=Te.toSig(De(h));return new H(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 H(s.fromBytes(m),s.fromBytes(A),w)}static fromHex(h,y){return this.fromBytes(rt(h),y)}addRecoveryBit(h){return new H(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*qi<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(Mi((m&1)===0),R)),M=s.inv(S),C=q(J("msgHash",h)),I=s.create(-C*M),D=s.create(k*M),z=t.BASE.multiplyUnsafe(I).add(T.multiplyUnsafe(D));if(z.is0())throw new Error("point at infinify");return z.assertValidity(),z}hasHighS(){return B(this.s)}toBytes(h=E){if(Cr(h),h==="der")return rt(Te.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 H.fromBytes(J("sig",h),"compact")}static fromDER(h){return H.fromBytes(J("sig",h),"der")}normalizeS(){return this.hasHighS()?new H(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 P=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(P(h))},Z=Ve(a);function Y(u){return yi("num < 2^"+a,u,Ue,Z),s.toBytes(u)}function G(u,h){return De(u,void 0,"message"),h?De(e(u),void 0,"prehashed message"):u}function O(u,h,y){if(["recovered","canonical"].some(I=>I in y))throw new Error("sign() legacy options not supported");let{lowS:w,prehash:k,extraEntropy:m}=Ur(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 I=m===!0?n(l.secretKey):m;R.push(J("extraEntropy",I))}let T=fe(...R),M=A;function C(I){let D=P(I);if(!s.isValidNot0(D))return;let z=s.inv(D),V=t.BASE.multiply(D).toAffine(),j=s.create(V.x);if(j===Ue)return;let Q=s.create(z*s.create(M+j*S));if(Q===Ue)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 H(j,Bt,St)}return{seed:T,k2sig:C}}function K(u,h,y={}){u=J("message",u);let{seed:w,k2sig:k}=O(u,h,y);return mi(e.outputLen,s.BYTES,o)(w,k)}function $(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 H(u.r,u.s);else if(y){try{h=H.fromBytes(J("sig",u),"der")}catch(k){if(!(k instanceof Te.Err))throw k}if(!h)try{h=H.fromBytes(J("sig",u),"compact")}catch{return!1}}return h||!1}function L(u,h,y,w={}){let{lowS:k,prehash:m,format:A}=Ur(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?$(u):H.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),I=s.inv(M),D=s.create(C*I),z=s.create(T*I),V=t.BASE.multiplyUnsafe(D).add(R.multiplyUnsafe(z));return V.is0()?!1:s.create(V.x)===T}catch{return!1}}function x(u,h,y={}){let{prehash:w}=Ur(y,b);return h=G(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:K,verify:L,recoverPublicKey:x,Signature:H,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 Di(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 Vi(t,e){let r=n=>Di({...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),Ki=BigInt(1),Hr=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,Hr,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,N=de(_,c,e)*E%e,H=de(N,r,e)*p%e,P=de(H,s,e)*b%e,q=de(P,n,e)*f%e,Z=de(q,Hr,e);if(!In.eql(In.sqr(Z),t))throw new Error("Cannot find square root");return Z}var In=Ke(Et.p,{sqrt:na}),zi=Vi({...Et,Fp:In,lowS:!0,endo:ea},yt),ji={};function Tn(t,...e){let r=ji[t];if(r===void 0){let n=yt(wn(t));r=fe(n,n),ji[t]=r}return yt(fe(r,...e))}var qr=t=>t.toBytes(!0).slice(1),vt=zi.Point,Mr=t=>t%Hr===ta;function Pr(t){let{Fn:e,BASE:r}=vt,n=je(e,t),o=r.multiply(n);return{scalar:Mr(o.y)?n:e.neg(n),bytes:qr(o)}}function Gi(t){let e=In;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);Mr(o)||(o=e.neg(o));let i=vt.fromAffine({x:t,y:o});return i.assertValidity(),i}var Zt=Ie;function Wi(...t){return vt.Fn.create(Zt(Tn("BIP0340/challenge",...t)))}function Zi(t){return Pr(t).bytes}function ra(t,e,r=ot(32)){let{Fn:n}=vt,o=J("message",t),{bytes:i,scalar:s}=Pr(e),c=J("auxRand",r,32),a=n.toBytes(s^Zt(Tn("BIP0340/aux",c))),f=Tn("BIP0340/nonce",a,i,o),{bytes:p,scalar:g}=Pr(f),d=Wi(p,i,o),l=new Uint8Array(64);if(l.set(p,0),l.set(n.toBytes(n.create(g+d*s)),32),!Yi(l,o,i))throw new Error("sign: Invalid signature produced");return l}function Yi(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=Gi(Zt(c)),f=Zt(i.subarray(0,32));if(!Vt(f,Ki,Et.p))return!1;let p=Zt(i.subarray(32,64));if(!Vt(p,Ki,Et.n))return!1;let g=Wi(n.toBytes(f),qr(a),s),d=o.multiplyUnsafe(p).add(a.multiplyUnsafe(n.neg(g))),{x:l,y:b}=d.toAffine();return!(d.is0()||!Mr(b)||l!==f)}catch{return!1}}var Ze=(()=>{let r=(o=ot(48))=>Rn(o,Et.n);zi.utils.randomSecretKey;function n(o){let i=r(o);return{secretKey:i,publicKey:Zi(i)}}return{keygen:n,getPublicKey:Zi,sign:ra,verify:Yi,Point:vt,utils:{randomSecretKey:r,randomPrivateKey:r,taggedHash:Tn,lift_x:Gi,pointToBytes:qr,numberToBytesBE:mt,bytesToNumberBE:Ie,mod:ue},lengths:{secretKey:32,publicKey:32,publicKeyHasPrefix:!1,signature:64,seed:48}}})();var $r=yt;var oa=new TextDecoder("utf-8"),ia=new TextEncoder,sa=1,ca=65535;function Dr(t,e){let r=an.getSharedSecret(t,ne("02"+e)).subarray(1,33);return dn(ae,r,ia.encode("nip44-v2"))}function aa(t,e){let r=hn(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 Vr(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 Ce(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=$r(n.encode(r));if(se(o)!==t.id.toLowerCase())return!1;try{let s=Ce(t.sig),c=Ce(t.id),a=Ce(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
2
|
<h2 style="margin:0 0 8px;font-size:1.3rem;">Verify your age with Signet</h2>
|
|
3
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
4
|
<div id="signet-qr" style="display:flex;justify-content:center;margin-bottom:24px;"></div>
|
|
5
5
|
<p style="margin:0 0 16px;color:${l};font-size:0.8rem;">Waiting for verification...</p>
|
|
6
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 ${
|
|
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 N=_.data;if(typeof N!="object"||N===null)return;let H=N;if(H.type!=="signet-verify-response"||H.requestId!==o||!H.credential||typeof H.credential!="object"||!Array.isArray(H.credential.tags))return;let P=H.credential,q=await ga(P),Z=Un(P.tags,"age-range"),Y=Un(P.tags,"tier"),G=Un(P.tags,"entity-type"),O=Un(P.tags,"expires"),K=Z?ba(Z,n.requiredAgeRange):!1,$=await ya(P.pubkey,n.verifierCheckUrl),L=$?.confirmed??null,x=$?.method??null,u=n.acceptUnconfirmed||L===!0;b.close(),b.remove(),f.remove(),B.close();let h=Y?parseInt(Y,10):null,y=O?parseInt(O,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:P.id,verifierPubkey:P.pubkey,verifierConfirmed:L,verifierMethod:x,issuedAt:P.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 Kr(t){let e=JSON.stringify([0,t.pubkey,t.created_at,t.kind,t.tags,t.content]),r=$r(new TextEncoder().encode(e));return se(r)}async function xa(t,e){try{let r=Dr(e,t.pubkey),n=Vr(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)||Kr({pubkey:i.pubkey,created_at:i.created_at,kind:13,tags:i.tags,content:i.content})!==i.id.toLowerCase())return null;let c=Ce(i.sig),a=Ce(i.id),f=Ce(i.pubkey);if(!Ze.verify(c,a,f))return null;let p=Dr(e,i.pubkey),g=Vr(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:Kr({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 jr(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 N=B.tags.find(u=>u[0]==="status");if(N?.[1]==="rejected"){p(()=>s(new Error("denied")));return}if(N?.[1]!=="approved"||Math.abs(Date.now()/1e3-B.created_at)>300)return;let P;try{let u=JSON.parse(B.content);if(typeof u!="object"||u===null)return;P=u}catch{return}if(P.type!=="signet-auth-response"||P.requestId!==n||typeof P.authEvent!="object"||P.authEvent===null)return;let q=P.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()||Kr({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=Ce(q.sig),h=Ce(q.id),y=Ce(q.pubkey);Y=Ze.verify(u,h,y)}catch{Y=!1}if(!Y)return;let G=q.tags,O=G.find(u=>Array.isArray(u)&&u[0]==="challenge");if(!O||typeof O[1]!="string"||O[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(P.displayName);p(()=>i({pubkey:L.pubkey,authEvent:L,credential:P.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:jr});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 Xi(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 Ji(){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 Qi(t){Ge(X.pendingRedirect,JSON.stringify(t))}function Fi(){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 es(){We(X.pendingRedirect)}function ts(t){let e="";for(let r=0;r<t.length;r++)e+=t[r].toString(16).padStart(2,"0");return e}function ns(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}var rs=/^[0-9a-f]{64}$/i,Ea=/^[0-9a-f]{128}$/i;function va(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 Cn(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()};Qi(e);let r=va(t);return window.location.href=r,new Promise(()=>{})}function Sa(){if(typeof window>"u")return;let t=new URL(window.location.href),e=["pubkey","npub","signature","eventId","error","warnings","fromNP","display_name","t","bunker"],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 os(){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=Fi(),s=N=>(es(),Sa(),N);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>Gr)return s({kind:"invalid",reason:"pending-stale"});if(!r||!rs.test(r))return s({kind:"invalid",reason:"pubkey-malformed"});if(!n||!Ea.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 N=Number(a);if(!Number.isFinite(N))return s({kind:"invalid",reason:"t-malformed"});c=N}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};l&&(E.displayName=l);let B=t.get("bunker"),_;return B&&B.length>=9&&B.length<=8192&&B.slice(0,9).toLowerCase()==="bunker://"&&(_=B),s(_?{kind:"session",session:E,bunkerUri:_}:{kind:"session",session:E})}function Zr(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Ba(){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 ka(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 Aa(t){try{t.dialog.close()}catch{}t.dialog.remove(),t.style.remove()}function ve(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 Ra(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 ${Zr(e)}</h2>
|
|
9
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
10
|
<div style="display:flex;flex-direction:column;">
|
|
11
|
-
${i?`<button data-choice="nip07" style="${
|
|
12
|
-
<button data-choice="redirect" style="${
|
|
13
|
-
<button data-choice="
|
|
11
|
+
${i?`<button data-choice="nip07" style="${ve(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="${ve(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};">Open Signet on this device</span></span></button>
|
|
13
|
+
<button data-choice="qr" style="${ve(n)}"><span style="font-size:1.2rem;">\u{1F4F1}</span><span><strong>Signet on another device</strong><br><span style="font-size:0.8rem;color:${o};">Scan QR with your phone</span></span></button>
|
|
14
|
+
<button data-choice="bunker" style="${ve(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
15
|
</div>
|
|
15
16
|
<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
|
|
17
|
+
`,new Promise(s=>{t.dialog.querySelectorAll("button[data-choice]").forEach(c=>{c.addEventListener("click",()=>{let a=c.dataset.choice;s(a)})})})}async function _a(t,e){let r=zt(e.theme),n=r?"#888":"#666",o=r?"#e0e0e0":"#1a1a2e";t.dialog.innerHTML=`
|
|
17
18
|
<h2 style="margin:0 0 8px;font-size:1.2rem;">Waiting for your extension</h2>
|
|
18
19
|
<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
20
|
<div style="display:flex;align-items:center;justify-content:center;gap:14px;margin:0 0 24px;color:${o};">
|
|
@@ -21,34 +22,34 @@
|
|
|
21
22
|
<span id="signet-login-nip07-elapsed" style="font-variant-numeric:tabular-nums;font-size:0.95rem;">Connecting\u2026</span>
|
|
22
23
|
</div>
|
|
23
24
|
<div style="display:flex;gap:8px;justify-content:space-between;">
|
|
24
|
-
<button data-action="back" style="${
|
|
25
|
-
<button data-action="cancel" style="${
|
|
25
|
+
<button data-action="back" style="${ve(r)}width:auto;flex:0 0 auto;padding:8px 16px;">\u2190 Back</button>
|
|
26
|
+
<button data-action="cancel" style="${ve(r)}width:auto;flex:0 0 auto;padding:8px 16px;">Cancel</button>
|
|
26
27
|
</div>
|
|
27
28
|
<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
|
|
29
|
+
`;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 La(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
30
|
<h2 style="margin:0 0 8px;font-size:1.2rem;">Sign in with Signet</h2>
|
|
30
31
|
<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
32
|
<div style="background:${r?"#0f0f1f":"#f5f5f8"};border-radius:8px;padding:16px;margin-bottom:16px;">
|
|
32
33
|
<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
34
|
QR placeholder<br><span style="font-size:0.7rem;">(bundle qr lib for production)</span>
|
|
34
35
|
</div>
|
|
35
|
-
<a href="${
|
|
36
|
+
<a href="${Zr(c)}" target="_blank" rel="noopener" style="display:block;color:#5b6dff;font-size:0.75rem;word-break:break-all;text-decoration:none;">${Zr(c.slice(0,80))}\u2026</a>
|
|
36
37
|
</div>
|
|
37
38
|
<p id="signet-login-status" style="margin:0 0 12px;color:${n};font-size:0.85rem;">Waiting for approval\u2026</p>
|
|
38
39
|
<div style="display:flex;gap:8px;justify-content:space-between;">
|
|
39
|
-
<button data-action="back" style="${
|
|
40
|
-
<button data-action="cancel" style="${
|
|
40
|
+
<button data-action="back" style="${ve(r)}width:auto;flex:0 0 auto;padding:8px 16px;">\u2190 Back</button>
|
|
41
|
+
<button data-action="cancel" style="${ve(r)}width:auto;flex:0 0 auto;padding:8px 16px;">Cancel</button>
|
|
41
42
|
</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)}),
|
|
43
|
+
`,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)}),jr({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 Oa(t,e){let r=zt(e.theme),n=r?"#888":"#666",o=r?"#0f0f1f":"#f5f5f8",i=r?"#e0e0e0":"#1a1a2e";return t.dialog.innerHTML=`
|
|
43
44
|
<h2 style="margin:0 0 8px;font-size:1.2rem;">Paste bunker URI</h2>
|
|
44
45
|
<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
46
|
<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
47
|
<p id="signet-login-bunker-status" style="margin:0 0 12px;color:${n};font-size:0.85rem;min-height:1.2em;"></p>
|
|
47
48
|
<div style="display:flex;gap:8px;justify-content:space-between;">
|
|
48
|
-
<button data-action="back" style="${
|
|
49
|
-
<button data-action="connect" style="${
|
|
49
|
+
<button data-action="back" style="${ve(r)}width:auto;flex:0 0 auto;padding:8px 16px;">\u2190 Back</button>
|
|
50
|
+
<button data-action="connect" style="${ve(r,!0)}width:auto;flex:1;padding:8px 16px;text-align:center;">Connect</button>
|
|
50
51
|
</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
|
|
52
|
+
`,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 Pt({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 Ia(t){let e=t.challenge??Ba();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 is(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=Ia(t),r=ka(e.theme);try{for(;;){let n=e.preferredMethod?e.preferredMethod:await Ra(r,e.appName,e.theme);if(n==="cancel")return null;if(n==="nip07"){let o=await _a(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")return await Cn({appName:e.appName,challenge:e.challenge,origin:e.origin,signetAppOrigin:e.signetAppOrigin,...e.redirectCallback!==void 0?{redirectCallback:e.redirectCallback}:{}}),null;if(n==="qr"){let o=await La(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 Oa(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{Aa(r)}}function ss(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}}async function cs(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 Cn({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 is(t);return e?(t.persist!==!1&&zr(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 as(t){let e=Ji();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=ns(e.bunkerClientSkHex),s=await Pt({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 fs=ss;async function ls(){let t=os();if(t.kind!=="session")return t;if(t.bunkerUri)try{let e=await Pt({uri:t.bunkerUri});if(e.pubkey.toLowerCase()===t.session.pubkey.toLowerCase()){let r={pubkey:t.session.pubkey,method:"bunker",signer:e,authEvent:t.session.authEvent};return t.session.displayName&&(r.displayName=t.session.displayName),zr(r),{kind:"session",session:r}}try{await e.close()}catch{}}catch{}return zr(t.session),t}async function us(t){if(t)try{await t.signer.close()}catch{}Ne()}function zr(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=ts(r.clientSecretKey))}t.expiresAt!==void 0&&(e.expiresAt=t.expiresAt),t.displayName!==void 0&&(e.displayName=t.displayName),Xi(e)}if(typeof window<"u"){let e=window.Signet??{};Object.assign(e,{login:cs,restoreSession:as,logout:us,handleCallback:fs,handleRedirectCallback:ls}),window.Signet=e}return ms(Ua);})();
|
|
52
53
|
/*! Bundled license information:
|
|
53
54
|
|
|
54
55
|
@noble/hashes/utils.js:
|
package/dist/signet-login.js
CHANGED
|
@@ -211,9 +211,47 @@ export const handleCallback = handlePopupCallback;
|
|
|
211
211
|
*/
|
|
212
212
|
export async function handleRedirectCallback() {
|
|
213
213
|
const result = consumeCallback();
|
|
214
|
-
if (result.kind
|
|
215
|
-
|
|
214
|
+
if (result.kind !== 'session')
|
|
215
|
+
return result;
|
|
216
|
+
// Optional redirect-bunker upgrade. signet-app appends a `bunker://` URI
|
|
217
|
+
// when its NIP-46 server is enabled and the user authorised the redirect
|
|
218
|
+
// login; this lets us swap the auth-only `EphemeralSigner` for a real
|
|
219
|
+
// signing `BunkerSigner` in the same round-trip. Best-effort — if the
|
|
220
|
+
// bunker connect fails (relay unreachable, secret expired, signet-app
|
|
221
|
+
// tab closed before the connect lands) we fall back to the plain
|
|
222
|
+
// ephemeral session so the consumer at least gets identity proof.
|
|
223
|
+
if (result.bunkerUri) {
|
|
224
|
+
try {
|
|
225
|
+
const bunkerSigner = await createBunkerSigner({ uri: result.bunkerUri });
|
|
226
|
+
// Sanity: the bunker we connected to must sign as the same pubkey
|
|
227
|
+
// the redirect callback authenticated. A mismatch here means the
|
|
228
|
+
// signet-app deployment is misconfigured (or someone tampered with
|
|
229
|
+
// the URL) — drop back to ephemeral rather than silently swapping
|
|
230
|
+
// identity under the consumer's feet.
|
|
231
|
+
if (bunkerSigner.pubkey.toLowerCase() === result.session.pubkey.toLowerCase()) {
|
|
232
|
+
const upgraded = {
|
|
233
|
+
pubkey: result.session.pubkey,
|
|
234
|
+
method: 'bunker',
|
|
235
|
+
signer: bunkerSigner,
|
|
236
|
+
authEvent: result.session.authEvent,
|
|
237
|
+
};
|
|
238
|
+
if (result.session.displayName)
|
|
239
|
+
upgraded.displayName = result.session.displayName;
|
|
240
|
+
persistSession(upgraded);
|
|
241
|
+
return { kind: 'session', session: upgraded };
|
|
242
|
+
}
|
|
243
|
+
// Pubkey mismatch — close the wayward signer to avoid leaking the
|
|
244
|
+
// relay subscription, then fall through to the ephemeral path.
|
|
245
|
+
try {
|
|
246
|
+
await bunkerSigner.close();
|
|
247
|
+
}
|
|
248
|
+
catch { /* ignore */ }
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// Connect failed — leave the ephemeral session intact.
|
|
252
|
+
}
|
|
216
253
|
}
|
|
254
|
+
persistSession(result.session);
|
|
217
255
|
return result;
|
|
218
256
|
}
|
|
219
257
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signet-login",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Sign in with Signet — drop-in login SDK for Nostr-aware websites. NIP-07, bunker URI, and Signet redirect/QR in one unified API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/signet-login.js",
|