window.nostr.js 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  a small `<script>` you can drop in any page that already uses [NIP-07](https://nips.nostr.com/7) and make it also work with [NIP-46](https://nips.nostr.com/46) automatically when the user doesn't have an extension installed.
4
4
 
5
+ It adds a small floating button on the side of the window that users can use to create Nostr accuonts or connect to their NIP-46 bunkers.
6
+
5
7
  ## How to use it
6
8
 
7
9
  Include `<script src="https://unpkg.com/window.nostr.js/dist/window.nostr.js"></script>` in your HTML and proceed to use [`window.nostr`](https://nips.nostr.com/7) normally.
10
+
11
+ ## Bookmarklet
12
+
13
+ If a website has opted to not include this, but you like it, you can still use it on the website. Just add this to your browser bookmarks and click on it to load the widget on any website:
14
+
15
+ ```
16
+ javascript:void((function(){var%20e=document.createElement('script');e.setAttribute('src','https://unpkg.com/window.nostr.js/dist/window.nostr.js');document.body.appendChild(e)})())
17
+ ```
18
+
19
+ ## Demo videos
20
+
21
+ https://github.com/fiatjaf/window.nostr.js/assets/1653275/eacb1302-bbfd-4d28-aec2-dbe231f92c53
22
+
23
+ https://github.com/fiatjaf/window.nostr.js/assets/1653275/8c2546f1-439a-4a1b-beb6-af540de37601
24
+
package/dist/index.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>dev</title>
7
- <script type="module" crossorigin src="/assets/index-Wl5-BfAR.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-B9QHMyIY.js"></script>
8
8
  </head>
9
9
  <body
10
10
  style="
@@ -1,2 +1,5 @@
1
- var wc=Object.defineProperty;var pc=(Ut,F,vt)=>F in Ut?wc(Ut,F,{enumerable:!0,configurable:!0,writable:!0,value:vt}):Ut[F]=vt;var y=(Ut,F,vt)=>(pc(Ut,typeof F!="symbol"?F+"":F,vt),vt);(function(){"use strict";var Dr,Wr;const Ut='.tw-absolute{position:absolute}.tw-right-0{right:0}.tw-right-0\\.5{right:.125rem}.tw-top-0{top:0}.tw-mx-2{margin-left:.5rem;margin-right:.5rem}.tw-my-2{margin-top:.5rem;margin-bottom:.5rem}.tw-mb-1{margin-bottom:.25rem}.tw-mb-2{margin-bottom:.5rem}.tw-mb-4{margin-bottom:1rem}.tw-mr-2{margin-right:.5rem}.tw-mt-4{margin-top:1rem}.tw-mt-6{margin-top:1.5rem}.tw-box-border{box-sizing:border-box}.tw-block{display:block}.tw-flex{display:flex}.tw-h-10{height:2.5rem}.tw-h-5{height:1.25rem}.tw-w-10{width:2.5rem}.tw-w-40{width:10rem}.tw-w-5{width:1.25rem}.tw-w-80{width:20rem}.tw-w-full{width:100%}@keyframes tw-moveIn{0%{transform:translateY(-10px)}to{transform:translateY(0)}}.tw-animate-fadein{animation:tw-fadeIn 1s ease-in-out,tw-moveIn 1s ease-in-out}@keyframes tw-fadeIn{0%{opacity:0}to{opacity:1}}.tw-animate-show{animation:tw-fadeIn .2s ease-in-out}.tw-cursor-pointer{cursor:pointer}.tw-items-center{align-items:center}.tw-justify-center{justify-content:center}.tw-gap-2{gap:.5rem}.tw-break-all{word-break:break-all}.tw-rounded{border-radius:.25rem}.tw-rounded-full{border-radius:9999px}.tw-rounded-md{border-radius:.375rem}.tw-border-0{border-width:0px}.tw-border-2{border-width:2px}.tw-border-solid{border-style:solid}.tw-border-none{border-style:none}.tw-border-transparent{border-color:transparent}.tw-bg-cyan-700{--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity))}.tw-bg-cyan-800{--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity))}.tw-bg-cyan-900{--tw-bg-opacity: 1;background-color:rgb(22 78 99 / var(--tw-bg-opacity))}.tw-bg-cyan-950{--tw-bg-opacity: 1;background-color:rgb(8 51 68 / var(--tw-bg-opacity))}.tw-bg-green-700{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity))}.tw-bg-green-800{--tw-bg-opacity: 1;background-color:rgb(22 101 52 / var(--tw-bg-opacity))}.tw-bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity))}.tw-bg-green-950{--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity))}.tw-bg-neutral-700{--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity))}.tw-bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.tw-bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity))}.tw-bg-neutral-950{--tw-bg-opacity: 1;background-color:rgb(10 10 10 / var(--tw-bg-opacity))}.tw-bg-orange-700{--tw-bg-opacity: 1;background-color:rgb(194 65 12 / var(--tw-bg-opacity))}.tw-bg-orange-800{--tw-bg-opacity: 1;background-color:rgb(154 52 18 / var(--tw-bg-opacity))}.tw-bg-orange-900{--tw-bg-opacity: 1;background-color:rgb(124 45 18 / var(--tw-bg-opacity))}.tw-bg-orange-950{--tw-bg-opacity: 1;background-color:rgb(67 20 7 / var(--tw-bg-opacity))}.tw-bg-purple-700{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity))}.tw-bg-purple-800{--tw-bg-opacity: 1;background-color:rgb(107 33 168 / var(--tw-bg-opacity))}.tw-bg-purple-900{--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}.tw-bg-purple-950{--tw-bg-opacity: 1;background-color:rgb(59 7 100 / var(--tw-bg-opacity))}.tw-bg-red-700{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity))}.tw-bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity))}.tw-bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.tw-bg-red-950{--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity))}.tw-bg-stone-700{--tw-bg-opacity: 1;background-color:rgb(68 64 60 / var(--tw-bg-opacity))}.tw-bg-stone-800{--tw-bg-opacity: 1;background-color:rgb(41 37 36 / var(--tw-bg-opacity))}.tw-bg-stone-900{--tw-bg-opacity: 1;background-color:rgb(28 25 23 / var(--tw-bg-opacity))}.tw-bg-stone-950{--tw-bg-opacity: 1;background-color:rgb(12 10 9 / var(--tw-bg-opacity))}.tw-bg-transparent{background-color:transparent}.tw-px-2{padding-left:.5rem;padding-right:.5rem}.tw-px-4{padding-left:1rem;padding-right:1rem}.tw-px-6{padding-left:1.5rem;padding-right:1.5rem}.tw-py-1{padding-top:.25rem;padding-bottom:.25rem}.tw-py-2{padding-top:.5rem;padding-bottom:.5rem}.tw-py-8{padding-top:2rem;padding-bottom:2rem}.tw-text-center{text-align:center}.tw-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.tw-text-2xl{font-size:1.5rem;line-height:2rem}.tw-text-3xl{font-size:1.875rem;line-height:2.25rem}.tw-text-lg{font-size:1.125rem;line-height:1.75rem}.tw-text-sm{font-size:.875rem;line-height:1.25rem}.tw-leading-3{line-height:.75rem}.tw-leading-4{line-height:1rem}.tw-text-cyan-950{--tw-text-opacity: 1;color:rgb(8 51 68 / var(--tw-text-opacity))}.tw-text-green-950{--tw-text-opacity: 1;color:rgb(5 46 22 / var(--tw-text-opacity))}.tw-text-neutral-950{--tw-text-opacity: 1;color:rgb(10 10 10 / var(--tw-text-opacity))}.tw-text-orange-950{--tw-text-opacity: 1;color:rgb(67 20 7 / var(--tw-text-opacity))}.tw-text-purple-950{--tw-text-opacity: 1;color:rgb(59 7 100 / var(--tw-text-opacity))}.tw-text-red-950{--tw-text-opacity: 1;color:rgb(69 10 10 / var(--tw-text-opacity))}.tw-text-stone-950{--tw-text-opacity: 1;color:rgb(12 10 9 / var(--tw-text-opacity))}.tw-text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tw-underline{text-decoration-line:underline}.tw-no-underline{text-decoration-line:none}.tw-decoration-2{text-decoration-thickness:2px}.tw-underline-offset-4{text-underline-offset:4px}.tw-shadow-\\[0_0px_10px_0px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow: 0 0px 10px 0px rgba(0,0,0,.3);--tw-shadow-colored: 0 0px 10px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.tw-shadow-\\[0_0px_30px_0px_rgba\\(0\\,0\\,0\\,0\\.6\\)\\]{--tw-shadow: 0 0px 30px 0px rgba(0,0,0,.6);--tw-shadow-colored: 0 0px 30px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.tw-outline-none{outline:2px solid transparent;outline-offset:2px}.tw-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.disabled\\:tw-cursor-default:disabled{cursor:default}.disabled\\:tw-bg-neutral-400:disabled{--tw-bg-opacity: 1;background-color:rgb(163 163 163 / var(--tw-bg-opacity))}.disabled\\:tw-text-neutral-200:disabled{--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity))}.tw-group:hover .group-hover\\:tw-underline{text-decoration-line:underline}';function F(){}function vt(t){return t()}function yn(){return Object.create(null)}function Kt(t){t.forEach(vt)}function mn(t){return typeof t=="function"}function Fr(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let ue;function fe(t,e){return t===e?!0:(ue||(ue=document.createElement("a")),ue.href=e,t===ue.href)}function Jr(t){return Object.keys(t).length===0}const Yr=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function N(t,e){t.appendChild(e)}function j(t,e,n){t.insertBefore(e,n||null)}function q(t){t.parentNode&&t.parentNode.removeChild(t)}function Qr(t,e){for(let n=0;n<t.length;n+=1)t[n]&&t[n].d(e)}function L(t){return document.createElement(t)}function tt(t){return document.createTextNode(t)}function D(){return tt(" ")}function ct(t,e,n,r){return t.addEventListener(e,n,r),()=>t.removeEventListener(e,n,r)}function $(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Xr(t){return Array.from(t.childNodes)}function de(t,e){e=""+e,t.data!==e&&(t.data=e)}function Mt(t,e){t.value=e??""}function xn(t,e,n){for(let r=0;r<t.options.length;r+=1){const o=t.options[r];if(o.__value===e){o.selected=!0;return}}(!n||e!==void 0)&&(t.selectedIndex=-1)}function to(t){const e=t.querySelector(":checked");return e&&e.__value}function En(t,e,n){t.classList.toggle(e,!!n)}let Xt;function te(t){Xt=t}function eo(){if(!Xt)throw new Error("Function called outside component initialization");return Xt}function no(t){eo().$$.on_mount.push(t)}const zt=[],he=[];let Vt=[];const vn=[],ro=Promise.resolve();let Te=!1;function oo(){Te||(Te=!0,ro.then(_n))}function we(t){Vt.push(t)}const Ie=new Set;let Dt=0;function _n(){if(Dt!==0)return;const t=Xt;do{try{for(;Dt<zt.length;){const e=zt[Dt];Dt++,te(e),so(e.$$)}}catch(e){throw zt.length=0,Dt=0,e}for(te(null),zt.length=0,Dt=0;he.length;)he.pop()();for(let e=0;e<Vt.length;e+=1){const n=Vt[e];Ie.has(n)||(Ie.add(n),n())}Vt.length=0}while(zt.length);for(;vn.length;)vn.pop()();Te=!1,Ie.clear(),te(t)}function so(t){if(t.fragment!==null){t.update(),Kt(t.before_update);const e=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,e),t.after_update.forEach(we)}}function io(t){const e=[],n=[];Vt.forEach(r=>t.indexOf(r)===-1?e.push(r):n.push(r)),n.forEach(r=>r()),Vt=e}const co=new Set;function lo(t,e){t&&t.i&&(co.delete(t),t.i(e))}function Sn(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function ao(t,e,n){const{fragment:r,after_update:o}=t.$$;r&&r.m(e,n),we(()=>{const s=t.$$.on_mount.map(vt).filter(mn);t.$$.on_destroy?t.$$.on_destroy.push(...s):Kt(s),t.$$.on_mount=[]}),o.forEach(we)}function uo(t,e){const n=t.$$;n.fragment!==null&&(io(n.after_update),Kt(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function fo(t,e){t.$$.dirty[0]===-1&&(zt.push(t),oo(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<<e%31}function ho(t,e,n,r,o,s,i=null,c=[-1]){const l=Xt;te(t);const a=t.$$={fragment:null,ctx:[],props:s,update:F,not_equal:o,bound:yn(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(l?l.$$.context:[])),callbacks:yn(),dirty:c,skip_bound:!1,root:e.target||l.$$.root};i&&i(a.root);let f=!1;if(a.ctx=n?n(t,e.props||{},(u,h,...w)=>{const g=w.length?w[0]:h;return a.ctx&&o(a.ctx[u],a.ctx[u]=g)&&(!a.skip_bound&&a.bound[u]&&a.bound[u](g),f&&fo(t,u)),h}):[],a.update(),f=!0,Kt(a.before_update),a.fragment=r?r(a.ctx):!1,e.target){if(e.hydrate){const u=Xr(e.target);a.fragment&&a.fragment.l(u),u.forEach(q)}else a.fragment&&a.fragment.c();e.intro&&lo(t.$$.fragment),ao(t,e.target,e.anchor),_n()}te(l)}class wo{constructor(){y(this,"$$");y(this,"$$set")}$destroy(){uo(this,1),this.$destroy=F}$on(e,n){if(!mn(n))return F;const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{const o=r.indexOf(n);o!==-1&&r.splice(o,1)}}$set(e){this.$$set&&!Jr(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const po="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(po);function go(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ne={exports:{}};function kn(t,e=100,n={}){if(typeof t!="function")throw new TypeError(`Expected the first parameter to be a function, got \`${typeof t}\`.`);if(e<0)throw new RangeError("`wait` must not be negative.");const{immediate:r}=typeof n=="boolean"?{immediate:n}:n;let o,s,i,c,l;function a(){const u=Date.now()-c;if(u<e&&u>=0)i=setTimeout(a,e-u);else if(i=void 0,!r){const h=o,w=s;o=void 0,s=void 0,l=t.apply(h,w)}}const f=function(...u){if(o&&this!==o)throw new Error("Debounced method called with different contexts.");o=this,s=u,c=Date.now();const h=r&&!i;if(i||(i=setTimeout(a,e)),h){const w=o,g=s;o=void 0,s=void 0,l=t.apply(w,g)}return l};return f.clear=()=>{i&&(clearTimeout(i),i=void 0)},f.flush=()=>{if(!i)return;const u=o,h=s;o=void 0,s=void 0,l=t.apply(u,h),clearTimeout(i),i=void 0},f}Ne.exports.debounce=kn,Ne.exports=kn;var bo=Ne.exports;const An=go(bo),Ue=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Bn=t=>t instanceof Uint8Array,Pe=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),at=(t,e)=>t<<32-e|t>>>e;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");const yo=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Y(t){if(!Bn(t))throw new Error("Uint8Array expected");let e="";for(let n=0;n<t.length;n++)e+=yo[t[n]];return e}function Le(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);const e=t.length;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);const n=new Uint8Array(e/2);for(let r=0;r<n.length;r++){const o=r*2,s=t.slice(o,o+2),i=Number.parseInt(s,16);if(Number.isNaN(i)||i<0)throw new Error("Invalid byte sequence");n[r]=i}return n}function mo(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function $n(t){if(typeof t=="string"&&(t=mo(t)),!Bn(t))throw new Error(`expected Uint8Array, got ${typeof t}`);return t}let xo=class{clone(){return this._cloneInto()}};function On(t){const e=r=>t().update($n(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Eo(t=32){if(Ue&&typeof Ue.getRandomValues=="function")return Ue.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}function Tn(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function In(t,...e){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function vo(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Tn(t.outputLen),Tn(t.blockLen)}function pe(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 _o(t,e){In(t);const n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const Ce=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Nn=t=>t instanceof Uint8Array,Re=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),ut=(t,e)=>t<<32-e|t>>>e;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function So(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function He(t){if(typeof t=="string"&&(t=So(t)),!Nn(t))throw new Error(`expected Uint8Array, got ${typeof t}`);return t}function ko(...t){const e=new Uint8Array(t.reduce((r,o)=>r+o.length,0));let n=0;return t.forEach(r=>{if(!Nn(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}class Un{clone(){return this._cloneInto()}}function Ao(t){const e=r=>t().update(He(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Pn(t=32){if(Ce&&typeof Ce.getRandomValues=="function")return Ce.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}function Bo(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const o=BigInt(32),s=BigInt(4294967295),i=Number(n>>o&s),c=Number(n&s),l=r?4:0,a=r?0:4;t.setUint32(e+l,i,r),t.setUint32(e+a,c,r)}let $o=class extends Un{constructor(e,n,r,o){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Re(this.buffer)}update(e){pe(this);const{view:n,buffer:r,blockLen:o}=this;e=He(e);const s=e.length;for(let i=0;i<s;){const c=Math.min(o-this.pos,s-i);if(c===o){const l=Re(e);for(;o<=s-i;i+=o)this.process(l,i);continue}r.set(e.subarray(i,i+c),this.pos),this.pos+=c,i+=c,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){pe(this),_o(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;Bo(r,o-8,BigInt(this.length*8),s),this.process(r,0);const c=Re(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const a=l/4,f=this.get();if(a>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<a;u++)c.setUint32(4*u,f[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:c}=this;return e.length=o,e.pos=c,e.finished=s,e.destroyed=i,o%n&&e.buffer.set(r),e}};const Oo=(t,e,n)=>t&e^~t&n,To=(t,e,n)=>t&e^t&n^e&n,Io=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),_t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),St=new Uint32Array(64);let No=class extends $o{constructor(){super(64,32,8,!1),this.A=_t[0]|0,this.B=_t[1]|0,this.C=_t[2]|0,this.D=_t[3]|0,this.E=_t[4]|0,this.F=_t[5]|0,this.G=_t[6]|0,this.H=_t[7]|0}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:c,H:l}=this;return[e,n,r,o,s,i,c,l]}set(e,n,r,o,s,i,c,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=c|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)St[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const h=St[u-15],w=St[u-2],g=ut(h,7)^ut(h,18)^h>>>3,d=ut(w,17)^ut(w,19)^w>>>10;St[u]=d+St[u-7]+g+St[u-16]|0}let{A:r,B:o,C:s,D:i,E:c,F:l,G:a,H:f}=this;for(let u=0;u<64;u++){const h=ut(c,6)^ut(c,11)^ut(c,25),w=f+h+Oo(c,l,a)+Io[u]+St[u]|0,d=(ut(r,2)^ut(r,13)^ut(r,22))+To(r,o,s)|0;f=a,a=l,l=c,c=i+w|0,i=s,s=o,o=r,r=w+d|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,c=c+this.E|0,l=l+this.F|0,a=a+this.G|0,f=f+this.H|0,this.set(r,o,s,i,c,l,a,f)}roundClean(){St.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const qe=Ao(()=>new No);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Ln=BigInt(0),ge=BigInt(1),Uo=BigInt(2),be=t=>t instanceof Uint8Array,Po=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Wt(t){if(!be(t))throw new Error("Uint8Array expected");let e="";for(let n=0;n<t.length;n++)e+=Po[t[n]];return e}function Cn(t){const e=t.toString(16);return e.length&1?`0${e}`:e}function je(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return BigInt(t===""?"0":`0x${t}`)}function Zt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);const e=t.length;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);const n=new Uint8Array(e/2);for(let r=0;r<n.length;r++){const o=r*2,s=t.slice(o,o+2),i=Number.parseInt(s,16);if(Number.isNaN(i)||i<0)throw new Error("Invalid byte sequence");n[r]=i}return n}function et(t){return je(Wt(t))}function Ke(t){if(!be(t))throw new Error("Uint8Array expected");return je(Wt(Uint8Array.from(t).reverse()))}function kt(t,e){return Zt(t.toString(16).padStart(e*2,"0"))}function Me(t,e){return kt(t,e).reverse()}function Lo(t){return Zt(Cn(t))}function J(t,e,n){let r;if(typeof e=="string")try{r=Zt(e)}catch(s){throw new Error(`${t} must be valid hex string, got "${e}". Cause: ${s}`)}else if(be(e))r=Uint8Array.from(e);else throw new Error(`${t} must be hex string or Uint8Array`);const o=r.length;if(typeof n=="number"&&o!==n)throw new Error(`${t} expected ${n} bytes, got ${o}`);return r}function Pt(...t){const e=new Uint8Array(t.reduce((r,o)=>r+o.length,0));let n=0;return t.forEach(r=>{if(!be(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}function Co(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}function Ro(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Ho(t){let e;for(e=0;t>Ln;t>>=ge,e+=1);return e}function qo(t,e){return t>>BigInt(e)&ge}const jo=(t,e,n)=>t|(n?ge:Ln)<<BigInt(e),ze=t=>(Uo<<BigInt(t-1))-ge,Ve=t=>new Uint8Array(t),Rn=t=>Uint8Array.from(t);function Hn(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=Ve(t),o=Ve(t),s=0;const i=()=>{r.fill(1),o.fill(0),s=0},c=(...u)=>n(o,r,...u),l=(u=Ve())=>{o=c(Rn([0]),u),r=c(),u.length!==0&&(o=c(Rn([1]),u),r=c())},a=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0;const h=[];for(;u<e;){r=c();const w=r.slice();h.push(w),u+=r.length}return Pt(...h)};return(u,h)=>{i(),l(u);let w;for(;!(w=h(a()));)l();return i(),w}}const Ko={bigint:t=>typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||t instanceof Uint8Array,isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function ee(t,e,n={}){const r=(o,s,i)=>{const c=Ko[s];if(typeof c!="function")throw new Error(`Invalid validator "${s}", expected function`);const l=t[o];if(!(i&&l===void 0)&&!c(l,t))throw new Error(`Invalid param ${String(o)}=${l} (${typeof l}), expected ${s}`)};for(const[o,s]of Object.entries(e))r(o,s,!1);for(const[o,s]of Object.entries(n))r(o,s,!0);return t}const Mo=Object.freeze(Object.defineProperty({__proto__:null,bitGet:qo,bitLen:Ho,bitMask:ze,bitSet:jo,bytesToHex:Wt,bytesToNumberBE:et,bytesToNumberLE:Ke,concatBytes:Pt,createHmacDrbg:Hn,ensureBytes:J,equalBytes:Co,hexToBytes:Zt,hexToNumber:je,numberToBytesBE:kt,numberToBytesLE:Me,numberToHexUnpadded:Cn,numberToVarBytesBE:Lo,utf8ToBytes:Ro,validateObject:ee},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const W=BigInt(0),z=BigInt(1),Lt=BigInt(2),zo=BigInt(3),De=BigInt(4),qn=BigInt(5),jn=BigInt(8);BigInt(9),BigInt(16);function Z(t,e){const n=t%e;return n>=W?n:e+n}function Vo(t,e,n){if(n<=W||e<W)throw new Error("Expected power/modulo > 0");if(n===z)return W;let r=z;for(;e>W;)e&z&&(r=r*t%n),t=t*t%n,e>>=z;return r}function ot(t,e,n){let r=t;for(;e-- >W;)r*=r,r%=n;return r}function We(t,e){if(t===W||e<=W)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let n=Z(t,e),r=e,o=W,s=z;for(;n!==W;){const c=r/n,l=r%n,a=o-s*c;r=n,n=l,o=s,s=a}if(r!==z)throw new Error("invert: does not exist");return Z(o,e)}function Do(t){const e=(t-z)/Lt;let n,r,o;for(n=t-z,r=0;n%Lt===W;n/=Lt,r++);for(o=Lt;o<t&&Vo(o,e,t)!==t-z;o++);if(r===1){const i=(t+z)/De;return function(l,a){const f=l.pow(a,i);if(!l.eql(l.sqr(f),a))throw new Error("Cannot find square root");return f}}const s=(n+z)/Lt;return function(c,l){if(c.pow(l,e)===c.neg(c.ONE))throw new Error("Cannot find square root");let a=r,f=c.pow(c.mul(c.ONE,o),n),u=c.pow(l,s),h=c.pow(l,n);for(;!c.eql(h,c.ONE);){if(c.eql(h,c.ZERO))return c.ZERO;let w=1;for(let d=c.sqr(h);w<a&&!c.eql(d,c.ONE);w++)d=c.sqr(d);const g=c.pow(f,z<<BigInt(a-w-1));f=c.sqr(g),u=c.mul(u,g),h=c.mul(h,f),a=w}return u}}function Wo(t){if(t%De===zo){const e=(t+z)/De;return function(r,o){const s=r.pow(o,e);if(!r.eql(r.sqr(s),o))throw new Error("Cannot find square root");return s}}if(t%jn===qn){const e=(t-qn)/jn;return function(r,o){const s=r.mul(o,Lt),i=r.pow(s,e),c=r.mul(o,i),l=r.mul(r.mul(c,Lt),i),a=r.mul(c,r.sub(l,r.ONE));if(!r.eql(r.sqr(a),o))throw new Error("Cannot find square root");return a}}return Do(t)}const Zo=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Go(t){const e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},n=Zo.reduce((r,o)=>(r[o]="function",r),e);return ee(t,n)}function Fo(t,e,n){if(n<W)throw new Error("Expected power > 0");if(n===W)return t.ONE;if(n===z)return e;let r=t.ONE,o=e;for(;n>W;)n&z&&(r=t.mul(r,o)),o=t.sqr(o),n>>=z;return r}function Jo(t,e){const n=new Array(e.length),r=e.reduce((s,i,c)=>t.is0(i)?s:(n[c]=s,t.mul(s,i)),t.ONE),o=t.inv(r);return e.reduceRight((s,i,c)=>t.is0(i)?s:(n[c]=t.mul(s,n[c]),t.mul(s,i)),o),n}function Kn(t,e){const n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function Yo(t,e,n=!1,r={}){if(t<=W)throw new Error(`Expected Field ORDER > 0, got ${t}`);const{nBitLength:o,nByteLength:s}=Kn(t,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");const i=Wo(t),c=Object.freeze({ORDER:t,BITS:o,BYTES:s,MASK:ze(o),ZERO:W,ONE:z,create:l=>Z(l,t),isValid:l=>{if(typeof l!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof l}`);return W<=l&&l<t},is0:l=>l===W,isOdd:l=>(l&z)===z,neg:l=>Z(-l,t),eql:(l,a)=>l===a,sqr:l=>Z(l*l,t),add:(l,a)=>Z(l+a,t),sub:(l,a)=>Z(l-a,t),mul:(l,a)=>Z(l*a,t),pow:(l,a)=>Fo(c,l,a),div:(l,a)=>Z(l*We(a,t),t),sqrN:l=>l*l,addN:(l,a)=>l+a,subN:(l,a)=>l-a,mulN:(l,a)=>l*a,inv:l=>We(l,t),sqrt:r.sqrt||(l=>i(c,l)),invertBatch:l=>Jo(c,l),cmov:(l,a,f)=>f?a:l,toBytes:l=>n?Me(l,s):kt(l,s),fromBytes:l=>{if(l.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${l.length}`);return n?Ke(l):et(l)}});return Object.freeze(c)}function Mn(t){if(typeof t!="bigint")throw new Error("field order must be bigint");const e=t.toString(2).length;return Math.ceil(e/8)}function zn(t){const e=Mn(t);return e+Math.ceil(e/2)}function Qo(t,e,n=!1){const r=t.length,o=Mn(e),s=zn(e);if(r<16||r<s||r>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${r}`);const i=n?et(t):Ke(t),c=Z(i,e-z)+z;return n?Me(c,o):kt(c,o)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Xo=BigInt(0),Ze=BigInt(1);function ts(t,e){const n=(o,s)=>{const i=s.negate();return o?i:s},r=o=>{const s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:n,unsafeLadder(o,s){let i=t.ZERO,c=o;for(;s>Xo;)s&Ze&&(i=i.add(c)),c=c.double(),s>>=Ze;return i},precomputeWindow(o,s){const{windows:i,windowSize:c}=r(s),l=[];let a=o,f=a;for(let u=0;u<i;u++){f=a,l.push(f);for(let h=1;h<c;h++)f=f.add(a),l.push(f);a=f.double()}return l},wNAF(o,s,i){const{windows:c,windowSize:l}=r(o);let a=t.ZERO,f=t.BASE;const u=BigInt(2**o-1),h=2**o,w=BigInt(o);for(let g=0;g<c;g++){const d=g*l;let p=Number(i&u);i>>=w,p>l&&(p-=h,i+=Ze);const b=d,m=d+Math.abs(p)-1,x=g%2!==0,O=p<0;p===0?f=f.add(n(x,s[b])):a=a.add(n(O,s[m]))}return{p:a,f}},wNAFCached(o,s,i,c){const l=o._WINDOW_SIZE||1;let a=s.get(o);return a||(a=this.precomputeWindow(o,l),l!==1&&s.set(o,c(a))),this.wNAF(l,a,i)}}}function Vn(t){return Go(t.Fp),ee(t,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Kn(t.n,t.nBitLength),...t,p:t.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function es(t){const e=Vn(t);ee(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:n,Fp:r,a:o}=e;if(n){if(!r.eql(o,r.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof n!="object"||typeof n.beta!="bigint"||typeof n.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}const{bytesToNumberBE:ns,hexToBytes:rs}=Mo,Ct={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(t){const{Err:e}=Ct;if(t.length<2||t[0]!==2)throw new e("Invalid signature integer tag");const n=t[1],r=t.subarray(2,n+2);if(!n||r.length!==n)throw new e("Invalid signature integer: wrong length");if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:ns(r),l:t.subarray(n+2)}},toSig(t){const{Err:e}=Ct,n=typeof t=="string"?rs(t):t;if(!(n instanceof Uint8Array))throw new Error("ui8a expected");let r=n.length;if(r<2||n[0]!=48)throw new e("Invalid signature tag");if(n[1]!==r-2)throw new e("Invalid signature: incorrect length");const{d:o,l:s}=Ct._parseInt(n.subarray(2)),{d:i,l:c}=Ct._parseInt(s);if(c.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(t){const e=a=>Number.parseInt(a[0],16)&8?"00"+a:a,n=a=>{const f=a.toString(16);return f.length&1?`0${f}`:f},r=e(n(t.s)),o=e(n(t.r)),s=r.length/2,i=o.length/2,c=n(s),l=n(i);return`30${n(i+s+4)}02${l}${o}02${c}${r}`}},gt=BigInt(0),st=BigInt(1);BigInt(2);const Dn=BigInt(3);BigInt(4);function os(t){const e=es(t),{Fp:n}=e,r=e.toBytes||((g,d,p)=>{const b=d.toAffine();return Pt(Uint8Array.from([4]),n.toBytes(b.x),n.toBytes(b.y))}),o=e.fromBytes||(g=>{const d=g.subarray(1),p=n.fromBytes(d.subarray(0,n.BYTES)),b=n.fromBytes(d.subarray(n.BYTES,2*n.BYTES));return{x:p,y:b}});function s(g){const{a:d,b:p}=e,b=n.sqr(g),m=n.mul(b,g);return n.add(n.add(m,n.mul(g,d)),p)}if(!n.eql(n.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(g){return typeof g=="bigint"&&gt<g&&g<e.n}function c(g){if(!i(g))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function l(g){const{allowedPrivateKeyLengths:d,nByteLength:p,wrapPrivateKey:b,n:m}=e;if(d&&typeof g!="bigint"){if(g instanceof Uint8Array&&(g=Wt(g)),typeof g!="string"||!d.includes(g.length))throw new Error("Invalid key");g=g.padStart(p*2,"0")}let x;try{x=typeof g=="bigint"?g:et(J("private key",g,p))}catch{throw new Error(`private key must be ${p} bytes, hex or bigint, not ${typeof g}`)}return b&&(x=Z(x,m)),c(x),x}const a=new Map;function f(g){if(!(g instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(d,p,b){if(this.px=d,this.py=p,this.pz=b,d==null||!n.isValid(d))throw new Error("x required");if(p==null||!n.isValid(p))throw new Error("y required");if(b==null||!n.isValid(b))throw new Error("z required")}static fromAffine(d){const{x:p,y:b}=d||{};if(!d||!n.isValid(p)||!n.isValid(b))throw new Error("invalid affine point");if(d instanceof u)throw new Error("projective point not allowed");const m=x=>n.eql(x,n.ZERO);return m(p)&&m(b)?u.ZERO:new u(p,b,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(d){const p=n.invertBatch(d.map(b=>b.pz));return d.map((b,m)=>b.toAffine(p[m])).map(u.fromAffine)}static fromHex(d){const p=u.fromAffine(o(J("pointHex",d)));return p.assertValidity(),p}static fromPrivateKey(d){return u.BASE.multiply(l(d))}_setWindowSize(d){this._WINDOW_SIZE=d,a.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:d,y:p}=this.toAffine();if(!n.isValid(d)||!n.isValid(p))throw new Error("bad point: x or y not FE");const b=n.sqr(p),m=s(d);if(!n.eql(b,m))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:d}=this.toAffine();if(n.isOdd)return!n.isOdd(d);throw new Error("Field doesn't support isOdd")}equals(d){f(d);const{px:p,py:b,pz:m}=this,{px:x,py:O,pz:k}=d,_=n.eql(n.mul(p,k),n.mul(x,m)),v=n.eql(n.mul(b,k),n.mul(O,m));return _&&v}negate(){return new u(this.px,n.neg(this.py),this.pz)}double(){const{a:d,b:p}=e,b=n.mul(p,Dn),{px:m,py:x,pz:O}=this;let k=n.ZERO,_=n.ZERO,v=n.ZERO,S=n.mul(m,m),U=n.mul(x,x),T=n.mul(O,O),B=n.mul(m,x);return B=n.add(B,B),v=n.mul(m,O),v=n.add(v,v),k=n.mul(d,v),_=n.mul(b,T),_=n.add(k,_),k=n.sub(U,_),_=n.add(U,_),_=n.mul(k,_),k=n.mul(B,k),v=n.mul(b,v),T=n.mul(d,T),B=n.sub(S,T),B=n.mul(d,B),B=n.add(B,v),v=n.add(S,S),S=n.add(v,S),S=n.add(S,T),S=n.mul(S,B),_=n.add(_,S),T=n.mul(x,O),T=n.add(T,T),S=n.mul(T,B),k=n.sub(k,S),v=n.mul(T,U),v=n.add(v,v),v=n.add(v,v),new u(k,_,v)}add(d){f(d);const{px:p,py:b,pz:m}=this,{px:x,py:O,pz:k}=d;let _=n.ZERO,v=n.ZERO,S=n.ZERO;const U=e.a,T=n.mul(e.b,Dn);let B=n.mul(p,x),R=n.mul(b,O),C=n.mul(m,k),rt=n.add(p,b),E=n.add(x,O);rt=n.mul(rt,E),E=n.add(B,R),rt=n.sub(rt,E),E=n.add(p,m);let A=n.add(x,k);return E=n.mul(E,A),A=n.add(B,C),E=n.sub(E,A),A=n.add(b,m),_=n.add(O,k),A=n.mul(A,_),_=n.add(R,C),A=n.sub(A,_),S=n.mul(U,E),_=n.mul(T,C),S=n.add(_,S),_=n.sub(R,S),S=n.add(R,S),v=n.mul(_,S),R=n.add(B,B),R=n.add(R,B),C=n.mul(U,C),E=n.mul(T,E),R=n.add(R,C),C=n.sub(B,C),C=n.mul(U,C),E=n.add(E,C),B=n.mul(R,E),v=n.add(v,B),B=n.mul(A,E),_=n.mul(rt,_),_=n.sub(_,B),B=n.mul(rt,R),S=n.mul(A,S),S=n.add(S,B),new u(_,v,S)}subtract(d){return this.add(d.negate())}is0(){return this.equals(u.ZERO)}wNAF(d){return w.wNAFCached(this,a,d,p=>{const b=n.invertBatch(p.map(m=>m.pz));return p.map((m,x)=>m.toAffine(b[x])).map(u.fromAffine)})}multiplyUnsafe(d){const p=u.ZERO;if(d===gt)return p;if(c(d),d===st)return this;const{endo:b}=e;if(!b)return w.unsafeLadder(this,d);let{k1neg:m,k1:x,k2neg:O,k2:k}=b.splitScalar(d),_=p,v=p,S=this;for(;x>gt||k>gt;)x&st&&(_=_.add(S)),k&st&&(v=v.add(S)),S=S.double(),x>>=st,k>>=st;return m&&(_=_.negate()),O&&(v=v.negate()),v=new u(n.mul(v.px,b.beta),v.py,v.pz),_.add(v)}multiply(d){c(d);let p=d,b,m;const{endo:x}=e;if(x){const{k1neg:O,k1:k,k2neg:_,k2:v}=x.splitScalar(p);let{p:S,f:U}=this.wNAF(k),{p:T,f:B}=this.wNAF(v);S=w.constTimeNegate(O,S),T=w.constTimeNegate(_,T),T=new u(n.mul(T.px,x.beta),T.py,T.pz),b=S.add(T),m=U.add(B)}else{const{p:O,f:k}=this.wNAF(p);b=O,m=k}return u.normalizeZ([b,m])[0]}multiplyAndAddUnsafe(d,p,b){const m=u.BASE,x=(k,_)=>_===gt||_===st||!k.equals(m)?k.multiplyUnsafe(_):k.multiply(_),O=x(this,p).add(x(d,b));return O.is0()?void 0:O}toAffine(d){const{px:p,py:b,pz:m}=this,x=this.is0();d==null&&(d=x?n.ONE:n.inv(m));const O=n.mul(p,d),k=n.mul(b,d),_=n.mul(m,d);if(x)return{x:n.ZERO,y:n.ZERO};if(!n.eql(_,n.ONE))throw new Error("invZ was invalid");return{x:O,y:k}}isTorsionFree(){const{h:d,isTorsionFree:p}=e;if(d===st)return!0;if(p)return p(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:d,clearCofactor:p}=e;return d===st?this:p?p(u,this):this.multiplyUnsafe(e.h)}toRawBytes(d=!0){return this.assertValidity(),r(u,this,d)}toHex(d=!0){return Wt(this.toRawBytes(d))}}u.BASE=new u(e.Gx,e.Gy,n.ONE),u.ZERO=new u(n.ZERO,n.ONE,n.ZERO);const h=e.nBitLength,w=ts(u,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:l,weierstrassEquation:s,isWithinCurveOrder:i}}function ss(t){const e=Vn(t);return ee(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function is(t){const e=ss(t),{Fp:n,n:r}=e,o=n.BYTES+1,s=2*n.BYTES+1;function i(E){return gt<E&&E<n.ORDER}function c(E){return Z(E,r)}function l(E){return We(E,r)}const{ProjectivePoint:a,normPrivateKeyToScalar:f,weierstrassEquation:u,isWithinCurveOrder:h}=os({...e,toBytes(E,A,P){const K=A.toAffine(),H=n.toBytes(K.x),V=Pt;return P?V(Uint8Array.from([A.hasEvenY()?2:3]),H):V(Uint8Array.from([4]),H,n.toBytes(K.y))},fromBytes(E){const A=E.length,P=E[0],K=E.subarray(1);if(A===o&&(P===2||P===3)){const H=et(K);if(!i(H))throw new Error("Point is not on curve");const V=u(H);let X=n.sqrt(V);const G=(X&st)===st;return(P&1)===1!==G&&(X=n.neg(X)),{x:H,y:X}}else if(A===s&&P===4){const H=n.fromBytes(K.subarray(0,n.BYTES)),V=n.fromBytes(K.subarray(n.BYTES,2*n.BYTES));return{x:H,y:V}}else throw new Error(`Point of length ${A} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),w=E=>Wt(kt(E,e.nByteLength));function g(E){const A=r>>st;return E>A}function d(E){return g(E)?c(-E):E}const p=(E,A,P)=>et(E.slice(A,P));class b{constructor(A,P,K){this.r=A,this.s=P,this.recovery=K,this.assertValidity()}static fromCompact(A){const P=e.nByteLength;return A=J("compactSignature",A,P*2),new b(p(A,0,P),p(A,P,2*P))}static fromDER(A){const{r:P,s:K}=Ct.toSig(J("DER",A));return new b(P,K)}assertValidity(){if(!h(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!h(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(A){return new b(this.r,this.s,A)}recoverPublicKey(A){const{r:P,s:K,recovery:H}=this,V=v(J("msgHash",A));if(H==null||![0,1,2,3].includes(H))throw new Error("recovery id invalid");const X=H===2||H===3?P+e.n:P;if(X>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");const G=H&1?"03":"02",ht=a.fromHex(G+w(X)),wt=l(X),It=c(-V*wt),jt=c(K*wt),pt=a.BASE.multiplyAndAddUnsafe(ht,It,jt);if(!pt)throw new Error("point at infinify");return pt.assertValidity(),pt}hasHighS(){return g(this.s)}normalizeS(){return this.hasHighS()?new b(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return Zt(this.toDERHex())}toDERHex(){return Ct.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Zt(this.toCompactHex())}toCompactHex(){return w(this.r)+w(this.s)}}const m={isValidPrivateKey(E){try{return f(E),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const E=zn(e.n);return Qo(e.randomBytes(E),e.n)},precompute(E=8,A=a.BASE){return A._setWindowSize(E),A.multiply(BigInt(3)),A}};function x(E,A=!0){return a.fromPrivateKey(E).toRawBytes(A)}function O(E){const A=E instanceof Uint8Array,P=typeof E=="string",K=(A||P)&&E.length;return A?K===o||K===s:P?K===2*o||K===2*s:E instanceof a}function k(E,A,P=!0){if(O(E))throw new Error("first arg must be private key");if(!O(A))throw new Error("second arg must be public key");return a.fromHex(A).multiply(f(E)).toRawBytes(P)}const _=e.bits2int||function(E){const A=et(E),P=E.length*8-e.nBitLength;return P>0?A>>BigInt(P):A},v=e.bits2int_modN||function(E){return c(_(E))},S=ze(e.nBitLength);function U(E){if(typeof E!="bigint")throw new Error("bigint expected");if(!(gt<=E&&E<S))throw new Error(`bigint expected < 2^${e.nBitLength}`);return kt(E,e.nByteLength)}function T(E,A,P=B){if(["recovered","canonical"].some(M=>M in P))throw new Error("sign() legacy options not supported");const{hash:K,randomBytes:H}=e;let{lowS:V,prehash:X,extraEntropy:G}=P;V==null&&(V=!0),E=J("msgHash",E),X&&(E=J("prehashed msgHash",K(E)));const ht=v(E),wt=f(A),It=[U(wt),U(ht)];if(G!=null){const M=G===!0?H(n.BYTES):G;It.push(J("extraEntropy",M))}const jt=Pt(...It),pt=ht;function I(M){const Et=_(M);if(!h(Et))return;const ae=l(Et),Nt=a.BASE.multiply(Et).toAffine(),lt=c(Nt.x);if(lt===gt)return;const Qt=c(ae*c(pt+lt*wt));if(Qt===gt)return;let Zr=(Nt.x===lt?0:2)|Number(Nt.y&st),Gr=Qt;return V&&g(Qt)&&(Gr=d(Qt),Zr^=1),new b(lt,Gr,Zr)}return{seed:jt,k2sig:I}}const B={lowS:e.lowS,prehash:!1},R={lowS:e.lowS,prehash:!1};function C(E,A,P=B){const{seed:K,k2sig:H}=T(E,A,P),V=e;return Hn(V.hash.outputLen,V.nByteLength,V.hmac)(K,H)}a.BASE._setWindowSize(8);function rt(E,A,P,K=R){var Nt;const H=E;if(A=J("msgHash",A),P=J("publicKey",P),"strict"in K)throw new Error("options.strict was renamed to lowS");const{lowS:V,prehash:X}=K;let G,ht;try{if(typeof H=="string"||H instanceof Uint8Array)try{G=b.fromDER(H)}catch(lt){if(!(lt instanceof Ct.Err))throw lt;G=b.fromCompact(H)}else if(typeof H=="object"&&typeof H.r=="bigint"&&typeof H.s=="bigint"){const{r:lt,s:Qt}=H;G=new b(lt,Qt)}else throw new Error("PARSE");ht=a.fromHex(P)}catch(lt){if(lt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(V&&G.hasHighS())return!1;X&&(A=e.hash(A));const{r:wt,s:It}=G,jt=v(A),pt=l(It),I=c(jt*pt),M=c(wt*pt),Et=(Nt=a.BASE.multiplyAndAddUnsafe(ht,I,M))==null?void 0:Nt.toAffine();return Et?c(Et.x)===wt:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:k,sign:C,verify:rt,ProjectivePoint:a,Signature:b,utils:m}}class Wn extends Un{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,vo(e);const r=He(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const o=this.blockLen,s=new Uint8Array(o);s.set(r.length>o?e.create().update(r).digest():r);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return pe(this),this.iHash.update(e),this}digestInto(e){pe(this),In(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:c}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=c,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const Zn=(t,e,n)=>new Wn(t,e).update(n).digest();Zn.create=(t,e)=>new Wn(t,e);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function cs(t){return{hash:t,hmac:(e,...n)=>Zn(t,e,ko(...n)),randomBytes:Pn}}function ls(t,e){const n=r=>is({...t,...cs(r)});return Object.freeze({...n(e),create:n})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ye=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),me=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),Gn=BigInt(1),xe=BigInt(2),Fn=(t,e)=>(t+e/xe)/e;function Jn(t){const e=ye,n=BigInt(3),r=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),c=BigInt(44),l=BigInt(88),a=t*t*t%e,f=a*a*t%e,u=ot(f,n,e)*f%e,h=ot(u,n,e)*f%e,w=ot(h,xe,e)*a%e,g=ot(w,o,e)*w%e,d=ot(g,s,e)*g%e,p=ot(d,c,e)*d%e,b=ot(p,l,e)*p%e,m=ot(b,c,e)*d%e,x=ot(m,n,e)*f%e,O=ot(x,i,e)*g%e,k=ot(O,r,e)*a%e,_=ot(k,xe,e);if(!Ge.eql(Ge.sqr(_),t))throw new Error("Cannot find square root");return _}const Ge=Yo(ye,void 0,void 0,{sqrt:Jn}),ne=ls({a:BigInt(0),b:BigInt(7),Fp:Ge,n:me,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:t=>{const e=me,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-Gn*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=n,i=BigInt("0x100000000000000000000000000000000"),c=Fn(s*t,e),l=Fn(-r*t,e);let a=Z(t-c*n-l*o,e),f=Z(-c*r-l*s,e);const u=a>i,h=f>i;if(u&&(a=e-a),h&&(f=e-f),a>i||f>i)throw new Error("splitScalar: Endomorphism failed, k="+t);return{k1neg:u,k1:a,k2neg:h,k2:f}}}},qe),Ee=BigInt(0),Yn=t=>typeof t=="bigint"&&Ee<t&&t<ye,as=t=>typeof t=="bigint"&&Ee<t&&t<me,Qn={};function ve(t,...e){let n=Qn[t];if(n===void 0){const r=qe(Uint8Array.from(t,o=>o.charCodeAt(0)));n=Pt(r,r),Qn[t]=n}return qe(Pt(n,...e))}const Fe=t=>t.toRawBytes(!0).slice(1),Je=t=>kt(t,32),Ye=t=>Z(t,ye),re=t=>Z(t,me),Qe=ne.ProjectivePoint,us=(t,e,n)=>Qe.BASE.multiplyAndAddUnsafe(t,e,n);function Xe(t){let e=ne.utils.normPrivateKeyToScalar(t),n=Qe.fromPrivateKey(e);return{scalar:n.hasEvenY()?e:re(-e),bytes:Fe(n)}}function Xn(t){if(!Yn(t))throw new Error("bad x: need 0 < x < p");const e=Ye(t*t),n=Ye(e*t+BigInt(7));let r=Jn(n);r%xe!==Ee&&(r=Ye(-r));const o=new Qe(t,r,Gn);return o.assertValidity(),o}function tr(...t){return re(et(ve("BIP0340/challenge",...t)))}function fs(t){return Xe(t).bytes}function ds(t,e,n=Pn(32)){const r=J("message",t),{bytes:o,scalar:s}=Xe(e),i=J("auxRand",n,32),c=Je(s^et(ve("BIP0340/aux",i))),l=ve("BIP0340/nonce",c,o,r),a=re(et(l));if(a===Ee)throw new Error("sign failed: k is zero");const{bytes:f,scalar:u}=Xe(a),h=tr(f,o,r),w=new Uint8Array(64);if(w.set(f,0),w.set(Je(re(u+h*s)),32),!er(w,r,o))throw new Error("sign: Invalid signature produced");return w}function er(t,e,n){const r=J("signature",t,64),o=J("message",e),s=J("publicKey",n,32);try{const i=Xn(et(s)),c=et(r.subarray(0,32));if(!Yn(c))return!1;const l=et(r.subarray(32,64));if(!as(l))return!1;const a=tr(Je(c),Fe(i),o),f=us(i,l,re(-a));return!(!f||!f.hasEvenY()||f.toAffine().x!==c)}catch{return!1}}const Q={getPublicKey:fs,sign:ds,verify:er,utils:{randomPrivateKey:ne.utils.randomPrivateKey,lift_x:Xn,pointToBytes:Fe,numberToBytesBE:kt,bytesToNumberBE:et,taggedHash:ve,mod:Z}};function tn(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function hs(t){if(typeof t!="boolean")throw new Error(`Expected boolean, not ${t}`)}function nr(t,...e){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function ws(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");tn(t.outputLen),tn(t.blockLen)}function ps(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 gs(t,e){nr(t);const n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const en={number:tn,bool:hs,bytes:nr,hash:ws,exists:ps,output:gs};function bs(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const o=BigInt(32),s=BigInt(4294967295),i=Number(n>>o&s),c=Number(n&s),l=r?4:0,a=r?0:4;t.setUint32(e+l,i,r),t.setUint32(e+a,c,r)}class ys extends xo{constructor(e,n,r,o){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Pe(this.buffer)}update(e){en.exists(this);const{view:n,buffer:r,blockLen:o}=this;e=$n(e);const s=e.length;for(let i=0;i<s;){const c=Math.min(o-this.pos,s-i);if(c===o){const l=Pe(e);for(;o<=s-i;i+=o)this.process(l,i);continue}r.set(e.subarray(i,i+c),this.pos),this.pos+=c,i+=c,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){en.exists(this),en.output(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;bs(r,o-8,BigInt(this.length*8),s),this.process(r,0);const c=Pe(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const a=l/4,f=this.get();if(a>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<a;u++)c.setUint32(4*u,f[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:c}=this;return e.length=o,e.pos=c,e.finished=s,e.destroyed=i,o%n&&e.buffer.set(r),e}}const ms=(t,e,n)=>t&e^~t&n,xs=(t,e,n)=>t&e^t&n^e&n,Es=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),At=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Bt=new Uint32Array(64);class rr extends ys{constructor(){super(64,32,8,!1),this.A=At[0]|0,this.B=At[1]|0,this.C=At[2]|0,this.D=At[3]|0,this.E=At[4]|0,this.F=At[5]|0,this.G=At[6]|0,this.H=At[7]|0}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:c,H:l}=this;return[e,n,r,o,s,i,c,l]}set(e,n,r,o,s,i,c,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=c|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)Bt[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const h=Bt[u-15],w=Bt[u-2],g=at(h,7)^at(h,18)^h>>>3,d=at(w,17)^at(w,19)^w>>>10;Bt[u]=d+Bt[u-7]+g+Bt[u-16]|0}let{A:r,B:o,C:s,D:i,E:c,F:l,G:a,H:f}=this;for(let u=0;u<64;u++){const h=at(c,6)^at(c,11)^at(c,25),w=f+h+ms(c,l,a)+Es[u]+Bt[u]|0,d=(at(r,2)^at(r,13)^at(r,22))+xs(r,o,s)|0;f=a,a=l,l=c,c=i+w|0,i=s,s=o,o=r,r=w+d|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,c=c+this.E|0,l=l+this.F|0,a=a+this.G|0,f=f+this.H|0,this.set(r,o,s,i,c,l,a,f)}roundClean(){Bt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class vs extends rr{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}}const nn=On(()=>new rr);On(()=>new vs);var Gt=Symbol("verified"),_s=t=>t instanceof Object;function Ss(t){if(!_s(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 n=t.tags[e];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}new TextDecoder("utf-8");var ks=new TextEncoder,As=class{generateSecretKey(){return Q.utils.randomPrivateKey()}getPublicKey(e){return Y(Q.getPublicKey(e))}finalizeEvent(e,n){const r=e;return r.pubkey=Y(Q.getPublicKey(n)),r.id=rn(r),r.sig=Y(Q.sign(rn(r),n)),r[Gt]=!0,r}verifyEvent(e){if(typeof e[Gt]=="boolean")return e[Gt];const n=rn(e);if(n!==e.id)return e[Gt]=!1,!1;try{const r=Q.verify(e.sig,n,e.pubkey);return e[Gt]=r,r}catch{return e[Gt]=!1,!1}}};function Bs(t){if(!Ss(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 rn(t){let e=nn(ks.encode(Bs(t)));return Y(e)}var _e=new As,$s=_e.generateSecretKey,or=_e.getPublicKey;_e.finalizeEvent,_e.verifyEvent;var Rt=Symbol("verified"),Os=t=>t instanceof Object;function Ts(t){if(!Os(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 n=t.tags[e];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}new TextDecoder("utf-8");var Is=new TextEncoder;function oe(t){t.indexOf("://")===-1&&(t="wss://"+t);let e=new URL(t);return e.pathname=e.pathname.replace(/\/+/g,"/"),e.pathname.endsWith("/")&&(e.pathname=e.pathname.slice(0,-1)),(e.port==="80"&&e.protocol==="ws:"||e.port==="443"&&e.protocol==="wss:")&&(e.port=""),e.searchParams.sort(),e.hash="",e.toString()}var Ns=class{constructor(e){y(this,"value");y(this,"next",null);y(this,"prev",null);this.value=e}},Us=class{constructor(){y(this,"first");y(this,"last");this.first=null,this.last=null}enqueue(e){const n=new Ns(e);return this.last?this.last===this.first?(this.last=n,this.last.prev=this.first,this.first.next=n):(n.prev=this.last,this.last.next=n,this.last=n):(this.first=n,this.last=n),!0}dequeue(){if(!this.first)return null;if(this.first===this.last){const n=this.first;return this.first=null,this.last=null,n.value}const e=this.first;return this.first=e.next,e.value}},Ps=class{generateSecretKey(){return Q.utils.randomPrivateKey()}getPublicKey(e){return Y(Q.getPublicKey(e))}finalizeEvent(e,n){const r=e;return r.pubkey=Y(Q.getPublicKey(n)),r.id=on(r),r.sig=Y(Q.sign(on(r),n)),r[Rt]=!0,r}verifyEvent(e){if(typeof e[Rt]=="boolean")return e[Rt];const n=on(e);if(n!==e.id)return e[Rt]=!1,!1;try{const r=Q.verify(e.sig,n,e.pubkey);return e[Rt]=r,r}catch{return e[Rt]=!1,!1}}};function Ls(t){if(!Ts(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 on(t){let e=nn(Is.encode(Ls(t)));return Y(e)}var Se=new Ps;Se.generateSecretKey,Se.getPublicKey,Se.finalizeEvent;var Cs=Se.verifyEvent,Rs=22242;function Hs(t,e){if(t.ids&&t.ids.indexOf(e.id)===-1&&!t.ids.some(n=>e.id.startsWith(n))||t.kinds&&t.kinds.indexOf(e.kind)===-1||t.authors&&t.authors.indexOf(e.pubkey)===-1&&!t.authors.some(n=>e.pubkey.startsWith(n)))return!1;for(let n in t)if(n[0]==="#"){let r=n.slice(1),o=t[`#${r}`];if(o&&!e.tags.find(([s,i])=>s===n.slice(1)&&o.indexOf(i)!==-1))return!1}return!(t.since&&e.created_at<t.since||t.until&&e.created_at>t.until)}function qs(t,e){for(let n=0;n<t.length;n++)if(Hs(t[n],e))return!0;return!1}function js(t,e){let n=e.length+3,r=t.indexOf(`"${e}":`)+n,o=t.slice(r).indexOf('"')+r+1;return t.slice(o,o+64)}function Ks(t){let e=t.slice(0,22).indexOf('"EVENT"');if(e===-1)return null;let n=t.slice(e+7+1).indexOf('"');if(n===-1)return null;let r=e+7+1+n,o=t.slice(r+1,80).indexOf('"');if(o===-1)return null;let s=r+1+o;return t.slice(r+1,s)}function Ms(t,e){return{kind:Rs,created_at:Math.floor(Date.now()/1e3),tags:[["relay",t],["challenge",e]],content:""}}async function zs(){return new Promise(t=>{const e=new MessageChannel,n=()=>{e.port1.removeEventListener("message",n),t()};e.port1.addEventListener("message",n),e.port2.postMessage(0),e.port1.start()})}var Vs=t=>(t[Rt]=!0,!0),sr;try{sr=WebSocket}catch{}var ir=class{constructor(e,n){y(this,"url");y(this,"_connected",!1);y(this,"onclose",null);y(this,"onnotice",e=>console.debug(`NOTICE from ${this.url}: ${e}`));y(this,"baseEoseTimeout",4400);y(this,"connectionTimeout",4400);y(this,"openSubs",new Map);y(this,"connectionTimeoutHandle");y(this,"connectionPromise");y(this,"openCountRequests",new Map);y(this,"openEventPublishes",new Map);y(this,"ws");y(this,"incomingMessageQueue",new Us);y(this,"queueRunning",!1);y(this,"challenge");y(this,"serial",0);y(this,"verifyEvent");this.url=oe(e),this.verifyEvent=n.verifyEvent}static async connect(e,n){const r=new ir(e,n);return await r.connect(),r}closeAllSubscriptions(e){for(let[n,r]of this.openSubs)r.close(e);this.openSubs.clear();for(let[n,r]of this.openEventPublishes)r.reject(new Error(e));this.openEventPublishes.clear();for(let[n,r]of this.openCountRequests)r.reject(new Error(e));this.openCountRequests.clear()}get connected(){return this._connected}async connect(){return this.connectionPromise?this.connectionPromise:(this.challenge=void 0,this.connectionPromise=new Promise((e,n)=>{this.connectionTimeoutHandle=setTimeout(()=>{var r;n("connection timed out"),this.connectionPromise=void 0,(r=this.onclose)==null||r.call(this),this.closeAllSubscriptions("relay connection timed out")},this.connectionTimeout);try{this.ws=new sr(this.url)}catch(r){n(r);return}this.ws.onopen=()=>{clearTimeout(this.connectionTimeoutHandle),this._connected=!0,e()},this.ws.onerror=r=>{var o;n(r.message),this._connected&&((o=this.onclose)==null||o.call(this),this.closeAllSubscriptions("relay connection errored"),this._connected=!1)},this.ws.onclose=async()=>{var r;this.connectionPromise=void 0,(r=this.onclose)==null||r.call(this),this.closeAllSubscriptions("relay connection closed"),this._connected=!1},this.ws.onmessage=this._onmessage.bind(this)}),this.connectionPromise)}async runQueue(){for(this.queueRunning=!0;this.handleNext()!==!1;)await zs();this.queueRunning=!1}handleNext(){var r,o;const e=this.incomingMessageQueue.dequeue();if(!e)return!1;const n=Ks(e);if(n){const s=this.openSubs.get(n);if(!s)return;const i=js(e,"id"),c=(r=s.alreadyHaveEvent)==null?void 0:r.call(s,i);if((o=s.receivedEvent)==null||o.call(s,this,i),c)return}try{let s=JSON.parse(e);switch(s[0]){case"EVENT":{const i=this.openSubs.get(s[1]),c=s[2];this.verifyEvent(c)&&qs(i.filters,c)&&i.onevent(c);return}case"COUNT":{const i=s[1],c=s[2],l=this.openCountRequests.get(i);l&&(l.resolve(c.count),this.openCountRequests.delete(i));return}case"EOSE":{const i=this.openSubs.get(s[1]);if(!i)return;i.receivedEose();return}case"OK":{const i=s[1],c=s[2],l=s[3],a=this.openEventPublishes.get(i);c?a.resolve(l):a.reject(new Error(l)),this.openEventPublishes.delete(i);return}case"CLOSED":{const i=s[1],c=this.openSubs.get(i);if(!c)return;c.closed=!0,c.close(s[2]);return}case"NOTICE":this.onnotice(s[1]);return;case"AUTH":{this.challenge=s[1];return}}}catch{return}}async send(e){if(!this.connectionPromise)throw new Error("sending on closed connection");this.connectionPromise.then(()=>{var n;(n=this.ws)==null||n.send(e)})}async auth(e){if(!this.challenge)throw new Error("can't perform auth, no challenge was received");const n=await e(Ms(this.url,this.challenge)),r=new Promise((o,s)=>{this.openEventPublishes.set(n.id,{resolve:o,reject:s})});return this.send('["AUTH",'+JSON.stringify(n)+"]"),r}async publish(e){const n=new Promise((r,o)=>{this.openEventPublishes.set(e.id,{resolve:r,reject:o})});return this.send('["EVENT",'+JSON.stringify(e)+"]"),n}async count(e,n){this.serial++;const r=(n==null?void 0:n.id)||"count:"+this.serial,o=new Promise((s,i)=>{this.openCountRequests.set(r,{resolve:s,reject:i})});return this.send('["COUNT","'+r+'",'+JSON.stringify(e)+"]"),o}subscribe(e,n){const r=this.prepareSubscription(e,n);return r.fire(),r}prepareSubscription(e,n){this.serial++;const r=n.id||"sub:"+this.serial,o=new Ds(this,r,e,n);return this.openSubs.set(r,o),o}close(){var e;this.closeAllSubscriptions("relay connection closed by us"),this._connected=!1,(e=this.ws)==null||e.close()}_onmessage(e){this.incomingMessageQueue.enqueue(e.data),this.queueRunning||this.runQueue()}},Ds=class{constructor(e,n,r,o){y(this,"relay");y(this,"id");y(this,"closed",!1);y(this,"eosed",!1);y(this,"filters");y(this,"alreadyHaveEvent");y(this,"receivedEvent");y(this,"onevent");y(this,"oneose");y(this,"onclose");y(this,"eoseTimeout");y(this,"eoseTimeoutHandle");this.relay=e,this.filters=r,this.id=n,this.alreadyHaveEvent=o.alreadyHaveEvent,this.receivedEvent=o.receivedEvent,this.eoseTimeout=o.eoseTimeout||e.baseEoseTimeout,this.oneose=o.oneose,this.onclose=o.onclose,this.onevent=o.onevent||(s=>{console.warn(`onevent() callback not defined for subscription '${this.id}' in relay ${this.relay.url}. event received:`,s)})}fire(){this.relay.send('["REQ","'+this.id+'",'+JSON.stringify(this.filters).substring(1)),this.eoseTimeoutHandle=setTimeout(this.receivedEose.bind(this),this.eoseTimeout)}receivedEose(){var e;this.eosed||(clearTimeout(this.eoseTimeoutHandle),this.eosed=!0,(e=this.oneose)==null||e.call(this))}close(e="closed by caller"){var n;this.closed||(this.relay.send('["CLOSE",'+JSON.stringify(this.id)+"]"),this.closed=!0),this.relay.openSubs.delete(this.id),(n=this.onclose)==null||n.call(this,e)}},Ws=class{constructor(e){y(this,"relays",new Map);y(this,"seenOn",new Map);y(this,"trackRelays",!1);y(this,"verifyEvent");y(this,"trustedRelayURLs",new Set);this.verifyEvent=e.verifyEvent}async ensureRelay(e,n){e=oe(e);let r=this.relays.get(e);return r||(r=new ir(e,{verifyEvent:this.trustedRelayURLs.has(e)?Vs:this.verifyEvent}),n!=null&&n.connectionTimeout&&(r.connectionTimeout=n.connectionTimeout),this.relays.set(e,r)),await r.connect(),r}close(e){e.map(oe).forEach(n=>{var r;(r=this.relays.get(n))==null||r.close()})}subscribeMany(e,n,r){this.trackRelays&&(r.receivedEvent=(h,w)=>{let g=this.seenOn.get(w);g||(g=new Set,this.seenOn.set(w,g)),g.add(h)});const o=new Set,s=[],i=[];let c=h=>{var w;i[h]=!0,i.filter(g=>g).length===e.length&&((w=r.oneose)==null||w.call(r),c=()=>{})};const l=[];let a=(h,w)=>{var g;c(h),l[h]=w,l.filter(d=>d).length===e.length&&((g=r.onclose)==null||g.call(r,l),a=()=>{})};const f=h=>{var g;if((g=r.alreadyHaveEvent)!=null&&g.call(r,h))return!0;const w=o.has(h);return o.add(h),w},u=Promise.all(e.map(oe).map(async(h,w,g)=>{if(g.indexOf(h)!==w){a(w,"duplicate url");return}let d;try{d=await this.ensureRelay(h,{connectionTimeout:r.maxWait?Math.max(r.maxWait*.8,r.maxWait-1e3):void 0})}catch(b){a(w,(b==null?void 0:b.message)||String(b));return}let p=d.subscribe(n,{...r,oneose:()=>c(w),onclose:b=>a(w,b),alreadyHaveEvent:f,eoseTimeout:r.maxWait});s.push(p)}));return{async close(){await u,s.forEach(h=>{h.close()})}}}subscribeManyEose(e,n,r){const o=this.subscribeMany(e,n,{...r,oneose(){o.close()}});return o}async querySync(e,n,r){return new Promise(async o=>{const s=[];this.subscribeManyEose(e,[n],{...r,onevent(i){s.push(i)},onclose(i){o(s)}})})}async get(e,n,r){n.limit=1;const o=await this.querySync(e,n,r);return o.sort((s,i)=>i.created_at-s.created_at),o[0]||null}publish(e,n){return e.map(oe).map(async(r,o,s)=>s.indexOf(r)!==o?Promise.reject("duplicate url"):(await this.ensureRelay(r)).publish(n))}},Zs=class extends Ws{constructor(){super({verifyEvent:Cs})}};function cr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Ht(t,...e){if(!cr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function ke(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 lr(t,e){Ht(t);const n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */const nt=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Gs=t=>new DataView(t.buffer,t.byteOffset,t.byteLength);if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function Fs(t){if(typeof t!="string")throw new Error(`string expected, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function se(t){if(typeof t=="string")t=Fs(t);else if(cr(t))t=t.slice();else throw new Error(`Uint8Array expected, got ${typeof t}`);return t}const Js=(t,e)=>(Object.assign(e,t),e),bt=16,sn=new Uint8Array(16),ft=nt(sn),Ys=225,Qs=(t,e,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:e<<31|n>>>1,s1:t<<31|e>>>1,s0:t>>>1^Ys<<24&-(o&1)}},it=t=>(t>>>0&255)<<24|(t>>>8&255)<<16|(t>>>16&255)<<8|t>>>24&255|0;function Xs(t){t.reverse();const e=t[15]&1;let n=0;for(let r=0;r<t.length;r++){const o=t[r];t[r]=o>>>1|n,n=(o&1)<<7}return t[0]^=-e&225,t}const ti=t=>t>64*1024?8:t>1024?4:2;class ar{constructor(e,n){this.blockLen=bt,this.outputLen=bt,this.s0=0,this.s1=0,this.s2=0,this.s3=0,this.finished=!1,e=se(e),Ht(e,16);const r=Gs(e);let o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),c=r.getUint32(12,!1);const l=[];for(let g=0;g<128;g++)l.push({s0:it(o),s1:it(s),s2:it(i),s3:it(c)}),{s0:o,s1:s,s2:i,s3:c}=Qs(o,s,i,c);const a=ti(n||1024);if(![1,2,4,8].includes(a))throw new Error(`ghash: wrong window size=${a}, should be 2, 4 or 8`);this.W=a;const u=128/a,h=this.windowSize=2**a,w=[];for(let g=0;g<u;g++)for(let d=0;d<h;d++){let p=0,b=0,m=0,x=0;for(let O=0;O<a;O++){if(!(d>>>a-O-1&1))continue;const{s0:_,s1:v,s2:S,s3:U}=l[a*g+O];p^=_,b^=v,m^=S,x^=U}w.push({s0:p,s1:b,s2:m,s3:x})}this.t=w}_updateBlock(e,n,r,o){e^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:s,t:i,windowSize:c}=this;let l=0,a=0,f=0,u=0;const h=(1<<s)-1;let w=0;for(const g of[e,n,r,o])for(let d=0;d<4;d++){const p=g>>>8*d&255;for(let b=8/s-1;b>=0;b--){const m=p>>>s*b&h,{s0:x,s1:O,s2:k,s3:_}=i[w*c+m];l^=x,a^=O,f^=k,u^=_,w+=1}}this.s0=l,this.s1=a,this.s2=f,this.s3=u}update(e){e=se(e),ke(this);const n=nt(e),r=Math.floor(e.length/bt),o=e.length%bt;for(let s=0;s<r;s++)this._updateBlock(n[s*4+0],n[s*4+1],n[s*4+2],n[s*4+3]);return o&&(sn.set(e.subarray(r*bt)),this._updateBlock(ft[0],ft[1],ft[2],ft[3]),ft.fill(0)),this}destroy(){const{t:e}=this;for(const n of e)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(e){ke(this),lr(e,this),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=nt(e);return i[0]=n,i[1]=r,i[2]=o,i[3]=s,e}digest(){const e=new Uint8Array(bt);return this.digestInto(e),this.destroy(),e}}class ei extends ar{constructor(e,n){e=se(e);const r=Xs(e.slice());super(r,n),r.fill(0)}update(e){e=se(e),ke(this);const n=nt(e),r=e.length%bt,o=Math.floor(e.length/bt);for(let s=0;s<o;s++)this._updateBlock(it(n[s*4+3]),it(n[s*4+2]),it(n[s*4+1]),it(n[s*4+0]));return r&&(sn.set(e.subarray(o*bt)),this._updateBlock(it(ft[3]),it(ft[2]),it(ft[1]),it(ft[0])),ft.fill(0)),this}digestInto(e){ke(this),lr(e,this),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=nt(e);return i[0]=n,i[1]=r,i[2]=o,i[3]=s,e.reverse()}}function ur(t){const e=(r,o)=>t(o,r.length).update(se(r)).digest(),n=t(new Uint8Array(16),0);return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=(r,o)=>t(r,o),e}ur((t,e)=>new ar(t,e)),ur((t,e)=>new ei(t,e));const $t=16,ni=283;function cn(t){return t<<1^ni&-(t>>7)}function Ft(t,e){let n=0;for(;e>0;e>>=1)n^=t&-(e&1),t=cn(t);return n}const ln=(()=>{let t=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=cn(r))t[n]=r;const e=new Uint8Array(256);e[0]=99;for(let n=0;n<255;n++){let r=t[255-n];r|=r<<8,e[t[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return e})(),ri=ln.map((t,e)=>ln.indexOf(e)),oi=t=>t<<24|t>>>8,an=t=>t<<8|t>>>24;function fr(t,e){if(t.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((a,f)=>e(t[f])),r=n.map(an),o=r.map(an),s=o.map(an),i=new Uint32Array(256*256),c=new Uint32Array(256*256),l=new Uint16Array(256*256);for(let a=0;a<256;a++)for(let f=0;f<256;f++){const u=a*256+f;i[u]=n[a]^r[f],c[u]=o[a]^s[f],l[u]=t[a]<<8|t[f]}return{sbox:t,sbox2:l,T0:n,T1:r,T2:o,T3:s,T01:i,T23:c}}const un=fr(ln,t=>Ft(t,3)<<24|t<<16|t<<8|Ft(t,2)),dr=fr(ri,t=>Ft(t,11)<<24|Ft(t,13)<<16|Ft(t,9)<<8|Ft(t,14)),si=(()=>{const t=new Uint8Array(16);for(let e=0,n=1;e<16;e++,n=cn(n))t[e]=n;return t})();function hr(t){Ht(t);const e=t.length;if(![16,24,32].includes(e))throw new Error(`aes: wrong key size: should be 16, 24 or 32, got: ${e}`);const{sbox2:n}=un,r=nt(t),o=r.length,s=c=>dt(n,c,c,c,c),i=new Uint32Array(e+28);i.set(r);for(let c=o;c<i.length;c++){let l=i[c-1];c%o===0?l=s(oi(l))^si[c/o-1]:o>6&&c%o===4&&(l=s(l)),i[c]=i[c-o]^l}return i}function ii(t){const e=hr(t),n=e.slice(),r=e.length,{sbox2:o}=un,{T0:s,T1:i,T2:c,T3:l}=dr;for(let a=0;a<r;a+=4)for(let f=0;f<4;f++)n[a+f]=e[r-a-4+f];e.fill(0);for(let a=4;a<r-4;a++){const f=n[a],u=dt(o,f,f,f,f);n[a]=s[u&255]^i[u>>>8&255]^c[u>>>16&255]^l[u>>>24]}return n}function Ot(t,e,n,r,o,s){return t[n<<8&65280|r>>>8&255]^e[o>>>8&65280|s>>>24&255]}function dt(t,e,n,r,o){return t[e&255|n&65280]|t[r>>>16&255|o>>>16&65280]<<16}function wr(t,e,n,r,o){const{sbox2:s,T01:i,T23:c}=un;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const a=t.length/4-2;for(let g=0;g<a;g++){const d=t[l++]^Ot(i,c,e,n,r,o),p=t[l++]^Ot(i,c,n,r,o,e),b=t[l++]^Ot(i,c,r,o,e,n),m=t[l++]^Ot(i,c,o,e,n,r);e=d,n=p,r=b,o=m}const f=t[l++]^dt(s,e,n,r,o),u=t[l++]^dt(s,n,r,o,e),h=t[l++]^dt(s,r,o,e,n),w=t[l++]^dt(s,o,e,n,r);return{s0:f,s1:u,s2:h,s3:w}}function ci(t,e,n,r,o){const{sbox2:s,T01:i,T23:c}=dr;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const a=t.length/4-2;for(let g=0;g<a;g++){const d=t[l++]^Ot(i,c,e,o,r,n),p=t[l++]^Ot(i,c,n,e,o,r),b=t[l++]^Ot(i,c,r,n,e,o),m=t[l++]^Ot(i,c,o,r,n,e);e=d,n=p,r=b,o=m}const f=t[l++]^dt(s,e,o,r,n),u=t[l++]^dt(s,n,e,o,r),h=t[l++]^dt(s,r,n,e,o),w=t[l++]^dt(s,o,r,n,e);return{s0:f,s1:u,s2:h,s3:w}}function pr(t,e){if(!e)return new Uint8Array(t);if(Ht(e),e.length<t)throw new Error(`aes: wrong destination length, expected at least ${t}, got: ${e.length}`);return e}function li(t){if(Ht(t),t.length%$t!==0)throw new Error(`aes/(cbc-ecb).decrypt ciphertext should consist of blocks with size ${$t}`)}function ai(t,e,n){let r=t.length;const o=r%$t;if(!e&&o!==0)throw new Error("aec/(cbc-ecb): unpadded plaintext with disabled padding");const s=nt(t);if(e){let l=$t-o;l||(l=$t),r=r+l}const i=pr(r,n),c=nt(i);return{b:s,o:c,out:i}}function ui(t,e){if(!e)return t;const n=t.length;if(!n)throw new Error("aes/pcks5: empty ciphertext not allowed");const r=t[n-1];if(r<=0||r>16)throw new Error(`aes/pcks5: wrong padding byte: ${r}`);const o=t.subarray(0,-r);for(let s=0;s<r;s++)if(t[n-s-1]!==r)throw new Error("aes/pcks5: wrong padding");return o}function fi(t){const e=new Uint8Array(16),n=nt(e);e.set(t);const r=$t-t.length;for(let o=$t-r;o<$t;o++)e[o]=r;return n}const gr=Js({blockSize:16,nonceLength:16},function(e,n,r={}){Ht(e),Ht(n,16);const o=!r.disablePadding;return{encrypt:(s,i)=>{const c=hr(e),{b:l,o:a,out:f}=ai(s,o,i),u=nt(n);let h=u[0],w=u[1],g=u[2],d=u[3],p=0;for(;p+4<=l.length;)h^=l[p+0],w^=l[p+1],g^=l[p+2],d^=l[p+3],{s0:h,s1:w,s2:g,s3:d}=wr(c,h,w,g,d),a[p++]=h,a[p++]=w,a[p++]=g,a[p++]=d;if(o){const b=fi(s.subarray(p*4));h^=b[0],w^=b[1],g^=b[2],d^=b[3],{s0:h,s1:w,s2:g,s3:d}=wr(c,h,w,g,d),a[p++]=h,a[p++]=w,a[p++]=g,a[p++]=d}return c.fill(0),f},decrypt:(s,i)=>{li(s);const c=ii(e),l=nt(n),a=pr(s.length,i),f=nt(s),u=nt(a);let h=l[0],w=l[1],g=l[2],d=l[3];for(let p=0;p+4<=f.length;){const b=h,m=w,x=g,O=d;h=f[p+0],w=f[p+1],g=f[p+2],d=f[p+3];const{s0:k,s1:_,s2:v,s3:S}=ci(c,h,w,g,d);u[p++]=k^b,u[p++]=_^m,u[p++]=v^x,u[p++]=S^O}return c.fill(0),ui(a,o)}}});/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Jt(t){if(!Number.isSafeInteger(t))throw new Error(`Wrong integer: ${t}`)}function yt(...t){const e=(o,s)=>i=>o(s(i)),n=Array.from(t).reverse().reduce((o,s)=>o?e(o,s.encode):s.encode,void 0),r=t.reduce((o,s)=>o?e(o,s.decode):s.decode,void 0);return{encode:n,decode:r}}function mt(t){return{encode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return e.map(n=>{if(Jt(n),n<0||n>=t.length)throw new Error(`Digit index outside alphabet: ${n} (alphabet: ${t.length})`);return t[n]})},decode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="string")throw new Error("alphabet.decode input should be array of strings");return e.map(n=>{if(typeof n!="string")throw new Error(`alphabet.decode: not string element=${n}`);const r=t.indexOf(n);if(r===-1)throw new Error(`Unknown letter: "${n}". Allowed: ${t}`);return r})}}}function xt(t=""){if(typeof t!="string")throw new Error("join separator should be string");return{encode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="string")throw new Error("join.encode input should be array of strings");for(let n of e)if(typeof n!="string")throw new Error(`join.encode: non-string input=${n}`);return e.join(t)},decode:e=>{if(typeof e!="string")throw new Error("join.decode input should be string");return e.split(t)}}}function Ae(t,e="="){if(Jt(t),typeof e!="string")throw new Error("padding chr should be string");return{encode(n){if(!Array.isArray(n)||n.length&&typeof n[0]!="string")throw new Error("padding.encode input should be array of strings");for(let r of n)if(typeof r!="string")throw new Error(`padding.encode: non-string input=${r}`);for(;n.length*t%8;)n.push(e);return n},decode(n){if(!Array.isArray(n)||n.length&&typeof n[0]!="string")throw new Error("padding.encode input should be array of strings");for(let o of n)if(typeof o!="string")throw new Error(`padding.decode: non-string input=${o}`);let r=n.length;if(r*t%8)throw new Error("Invalid padding: string should have whole number of bytes");for(;r>0&&n[r-1]===e;r--)if(!((r-1)*t%8))throw new Error("Invalid padding: string has too much padding");return n.slice(0,r)}}}function br(t){if(typeof t!="function")throw new Error("normalize fn should be function");return{encode:e=>e,decode:e=>t(e)}}function yr(t,e,n){if(e<2)throw new Error(`convertRadix: wrong from=${e}, base cannot be less than 2`);if(n<2)throw new Error(`convertRadix: wrong to=${n}, base cannot be less than 2`);if(!Array.isArray(t))throw new Error("convertRadix: data should be array");if(!t.length)return[];let r=0;const o=[],s=Array.from(t);for(s.forEach(i=>{if(Jt(i),i<0||i>=e)throw new Error(`Wrong integer: ${i}`)});;){let i=0,c=!0;for(let l=r;l<s.length;l++){const a=s[l],f=e*i+a;if(!Number.isSafeInteger(f)||e*i/e!==i||f-a!==e*i)throw new Error("convertRadix: carry overflow");if(i=f%n,s[l]=Math.floor(f/n),!Number.isSafeInteger(s[l])||s[l]*n+i!==f)throw new Error("convertRadix: carry overflow");if(c)s[l]?c=!1:r=l;else continue}if(o.push(i),c)break}for(let i=0;i<t.length-1&&t[i]===0;i++)o.push(0);return o.reverse()}const mr=(t,e)=>e?mr(e,t%e):t,Be=(t,e)=>t+(e-mr(t,e));function fn(t,e,n,r){if(!Array.isArray(t))throw new Error("convertRadix2: data should be array");if(e<=0||e>32)throw new Error(`convertRadix2: wrong from=${e}`);if(n<=0||n>32)throw new Error(`convertRadix2: wrong to=${n}`);if(Be(e,n)>32)throw new Error(`convertRadix2: carry overflow from=${e} to=${n} carryBits=${Be(e,n)}`);let o=0,s=0;const i=2**n-1,c=[];for(const l of t){if(Jt(l),l>=2**e)throw new Error(`convertRadix2: invalid data word=${l} from=${e}`);if(o=o<<e|l,s+e>32)throw new Error(`convertRadix2: carry overflow pos=${s} from=${e}`);for(s+=e;s>=n;s-=n)c.push((o>>s-n&i)>>>0);o&=2**s-1}if(o=o<<n-s&i,!r&&s>=e)throw new Error("Excess padding");if(!r&&o)throw new Error(`Non-zero padding: ${o}`);return r&&s>0&&c.push(o>>>0),c}function di(t){return Jt(t),{encode:e=>{if(!(e instanceof Uint8Array))throw new Error("radix.encode input should be Uint8Array");return yr(Array.from(e),2**8,t)},decode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="number")throw new Error("radix.decode input should be array of strings");return Uint8Array.from(yr(e,t,2**8))}}}function Tt(t,e=!1){if(Jt(t),t<=0||t>32)throw new Error("radix2: bits should be in (0..32]");if(Be(8,t)>32||Be(t,8)>32)throw new Error("radix2: carry overflow");return{encode:n=>{if(!(n instanceof Uint8Array))throw new Error("radix2.encode input should be Uint8Array");return fn(Array.from(n),8,t,!e)},decode:n=>{if(!Array.isArray(n)||n.length&&typeof n[0]!="number")throw new Error("radix2.decode input should be array of strings");return Uint8Array.from(fn(n,t,8,e))}}}function xr(t){if(typeof t!="function")throw new Error("unsafeWrapper fn should be function");return function(...e){try{return t.apply(null,e)}catch{}}}const hi=yt(Tt(4),mt("0123456789ABCDEF"),xt("")),wi=yt(Tt(5),mt("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),Ae(5),xt(""));yt(Tt(5),mt("0123456789ABCDEFGHIJKLMNOPQRSTUV"),Ae(5),xt("")),yt(Tt(5),mt("0123456789ABCDEFGHJKMNPQRSTVWXYZ"),xt(""),br(t=>t.toUpperCase().replace(/O/g,"0").replace(/[IL]/g,"1")));const ie=yt(Tt(6),mt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Ae(6),xt("")),pi=yt(Tt(6),mt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),Ae(6),xt("")),dn=t=>yt(di(58),mt(t),xt("")),hn=dn("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");dn("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"),dn("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");const Er=[0,2,3,5,6,7,9,10,11],gi={encode(t){let e="";for(let n=0;n<t.length;n+=8){const r=t.subarray(n,n+8);e+=hn.encode(r).padStart(Er[r.length],"1")}return e},decode(t){let e=[];for(let n=0;n<t.length;n+=11){const r=t.slice(n,n+11),o=Er.indexOf(r.length),s=hn.decode(r);for(let i=0;i<s.length-o;i++)if(s[i]!==0)throw new Error("base58xmr: wrong padding");e=e.concat(Array.from(s.slice(s.length-o)))}return Uint8Array.from(e)}},wn=yt(mt("qpzry9x8gf2tvdw0s3jn54khce6mua7l"),xt("")),vr=[996825010,642813549,513874426,1027748829,705979059];function ce(t){const e=t>>25;let n=(t&33554431)<<5;for(let r=0;r<vr.length;r++)(e>>r&1)===1&&(n^=vr[r]);return n}function _r(t,e,n=1){const r=t.length;let o=1;for(let s=0;s<r;s++){const i=t.charCodeAt(s);if(i<33||i>126)throw new Error(`Invalid prefix (${t})`);o=ce(o)^i>>5}o=ce(o);for(let s=0;s<r;s++)o=ce(o)^t.charCodeAt(s)&31;for(let s of e)o=ce(o)^s;for(let s=0;s<6;s++)o=ce(o);return o^=n,wn.encode(fn([o%2**30],30,5,!1))}function Sr(t){const e=t==="bech32"?1:734539939,n=Tt(5),r=n.decode,o=n.encode,s=xr(r);function i(f,u,h=90){if(typeof f!="string")throw new Error(`bech32.encode prefix should be string, not ${typeof f}`);if(!Array.isArray(u)||u.length&&typeof u[0]!="number")throw new Error(`bech32.encode words should be array of numbers, not ${typeof u}`);const w=f.length+7+u.length;if(h!==!1&&w>h)throw new TypeError(`Length ${w} exceeds limit ${h}`);return f=f.toLowerCase(),`${f}1${wn.encode(u)}${_r(f,u,e)}`}function c(f,u=90){if(typeof f!="string")throw new Error(`bech32.decode input should be string, not ${typeof f}`);if(f.length<8||u!==!1&&f.length>u)throw new TypeError(`Wrong string length: ${f.length} (${f}). Expected (8..${u})`);const h=f.toLowerCase();if(f!==h&&f!==f.toUpperCase())throw new Error("String must be lowercase or uppercase");f=h;const w=f.lastIndexOf("1");if(w===0||w===-1)throw new Error('Letter "1" must be present between prefix and data only');const g=f.slice(0,w),d=f.slice(w+1);if(d.length<6)throw new Error("Data must be at least 6 characters long");const p=wn.decode(d).slice(0,-6),b=_r(g,p,e);if(!d.endsWith(b))throw new Error(`Invalid checksum in ${f}: expected "${b}"`);return{prefix:g,words:p}}const l=xr(c);function a(f){const{prefix:u,words:h}=c(f,!1);return{prefix:u,words:h,bytes:r(h)}}return{encode:i,decode:c,decodeToBytes:a,decodeUnsafe:l,fromWords:r,fromWordsUnsafe:s,toWords:o}}const kr=Sr("bech32");Sr("bech32m");const bi={encode:t=>new TextDecoder().decode(t),decode:t=>new TextEncoder().encode(t)},yi=yt(Tt(4),mt("0123456789abcdef"),xt(""),br(t=>{if(typeof t!="string"||t.length%2)throw new TypeError(`hex.decode: expected string, got ${typeof t} with length ${t.length}`);return t.toLowerCase()}));`${Object.keys({utf8:bi,hex:yi,base16:hi,base32:wi,base64:ie,base64url:pi,base58:hn,base58xmr:gi}).join(", ")}`;var qt=Symbol("verified"),mi=t=>t instanceof Object;function xi(t){if(!mi(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 n=t.tags[e];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}var Ei=new TextDecoder("utf-8"),Ar=new TextEncoder;function le(t){t.indexOf("://")===-1&&(t="wss://"+t);let e=new URL(t);return e.pathname=e.pathname.replace(/\/+/g,"/"),e.pathname.endsWith("/")&&(e.pathname=e.pathname.slice(0,-1)),(e.port==="80"&&e.protocol==="ws:"||e.port==="443"&&e.protocol==="wss:")&&(e.port=""),e.searchParams.sort(),e.hash="",e.toString()}var vi=class{constructor(t){y(this,"value");y(this,"next",null);y(this,"prev",null);this.value=t}},_i=class{constructor(){y(this,"first");y(this,"last");this.first=null,this.last=null}enqueue(t){const e=new vi(t);return this.last?this.last===this.first?(this.last=e,this.last.prev=this.first,this.first.next=e):(e.prev=this.last,this.last.next=e,this.last=e):(this.first=e,this.last=e),!0}dequeue(){if(!this.first)return null;if(this.first===this.last){const e=this.first;return this.first=null,this.last=null,e.value}const t=this.first;return this.first=t.next,t.value}},Si=class{generateSecretKey(){return Q.utils.randomPrivateKey()}getPublicKey(t){return Y(Q.getPublicKey(t))}finalizeEvent(t,e){const n=t;return n.pubkey=Y(Q.getPublicKey(e)),n.id=pn(n),n.sig=Y(Q.sign(pn(n),e)),n[qt]=!0,n}verifyEvent(t){if(typeof t[qt]=="boolean")return t[qt];const e=pn(t);if(e!==t.id)return t[qt]=!1,!1;try{const n=Q.verify(t.sig,e,t.pubkey);return t[qt]=n,n}catch{return t[qt]=!1,!1}}};function ki(t){if(!xi(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 pn(t){let e=nn(Ar.encode(ki(t)));return Y(e)}var $e=new Si,Ai=$e.generateSecretKey,Br=$e.getPublicKey,Bi=$e.finalizeEvent,$r=$e.verifyEvent;async function $i(t,e,n){const r=t instanceof Uint8Array?Y(t):t,o=ne.getSharedSecret(r,"02"+e),s=Or(o);let i=Uint8Array.from(Eo(16)),c=Ar.encode(n),l=gr(s,i).encrypt(c),a=ie.encode(new Uint8Array(l)),f=ie.encode(new Uint8Array(i.buffer));return`${a}?iv=${f}`}async function Oi(t,e,n){const r=t instanceof Uint8Array?Y(t):t;let[o,s]=n.split("?iv="),i=ne.getSharedSecret(r,"02"+e),c=Or(i),l=ie.decode(s),a=ie.decode(o),f=gr(c,l).decrypt(a);return Ei.decode(f)}function Or(t){return t.slice(1,33)}var Ti=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,Ii;try{Ii=fetch}catch{}var Ni=22242,gn=24133,Ui=31990;function Pi(t,e){if(t.ids&&t.ids.indexOf(e.id)===-1&&!t.ids.some(n=>e.id.startsWith(n))||t.kinds&&t.kinds.indexOf(e.kind)===-1||t.authors&&t.authors.indexOf(e.pubkey)===-1&&!t.authors.some(n=>e.pubkey.startsWith(n)))return!1;for(let n in t)if(n[0]==="#"){let r=n.slice(1),o=t[`#${r}`];if(o&&!e.tags.find(([s,i])=>s===n.slice(1)&&o.indexOf(i)!==-1))return!1}return!(t.since&&e.created_at<t.since||t.until&&e.created_at>t.until)}function Li(t,e){for(let n=0;n<t.length;n++)if(Pi(t[n],e))return!0;return!1}function Ci(t,e){let n=e.length+3,r=t.indexOf(`"${e}":`)+n,o=t.slice(r).indexOf('"')+r+1;return t.slice(o,o+64)}function Ri(t){let e=t.slice(0,22).indexOf('"EVENT"');if(e===-1)return null;let n=t.slice(e+7+1).indexOf('"');if(n===-1)return null;let r=e+7+1+n,o=t.slice(r+1,80).indexOf('"');if(o===-1)return null;let s=r+1+o;return t.slice(r+1,s)}function Hi(t,e){return{kind:Ni,created_at:Math.floor(Date.now()/1e3),tags:[["relay",t],["challenge",e]],content:""}}async function qi(){return new Promise(t=>{const e=new MessageChannel,n=()=>{e.port1.removeEventListener("message",n),t()};e.port1.addEventListener("message",n),e.port2.postMessage(0),e.port1.start()})}var ji=t=>(t[qt]=!0,!0),Tr;try{Tr=WebSocket}catch{}var Ir=class{constructor(t,e){y(this,"url");y(this,"_connected",!1);y(this,"onclose",null);y(this,"onnotice",t=>console.debug(`NOTICE from ${this.url}: ${t}`));y(this,"baseEoseTimeout",4400);y(this,"connectionTimeout",4400);y(this,"openSubs",new Map);y(this,"connectionTimeoutHandle");y(this,"connectionPromise");y(this,"openCountRequests",new Map);y(this,"openEventPublishes",new Map);y(this,"ws");y(this,"incomingMessageQueue",new _i);y(this,"queueRunning",!1);y(this,"challenge");y(this,"serial",0);y(this,"verifyEvent");this.url=le(t),this.verifyEvent=e.verifyEvent}static async connect(t,e){const n=new Ir(t,e);return await n.connect(),n}closeAllSubscriptions(t){for(let[e,n]of this.openSubs)n.close(t);this.openSubs.clear();for(let[e,n]of this.openEventPublishes)n.reject(new Error(t));this.openEventPublishes.clear();for(let[e,n]of this.openCountRequests)n.reject(new Error(t));this.openCountRequests.clear()}get connected(){return this._connected}async connect(){return this.connectionPromise?this.connectionPromise:(this.challenge=void 0,this.connectionPromise=new Promise((t,e)=>{this.connectionTimeoutHandle=setTimeout(()=>{var n;e("connection timed out"),this.connectionPromise=void 0,(n=this.onclose)==null||n.call(this),this.closeAllSubscriptions("relay connection timed out")},this.connectionTimeout);try{this.ws=new Tr(this.url)}catch(n){e(n);return}this.ws.onopen=()=>{clearTimeout(this.connectionTimeoutHandle),this._connected=!0,t()},this.ws.onerror=n=>{var r;e(n.message),this._connected&&((r=this.onclose)==null||r.call(this),this.closeAllSubscriptions("relay connection errored"),this._connected=!1)},this.ws.onclose=async()=>{var n;this.connectionPromise=void 0,(n=this.onclose)==null||n.call(this),this.closeAllSubscriptions("relay connection closed"),this._connected=!1},this.ws.onmessage=this._onmessage.bind(this)}),this.connectionPromise)}async runQueue(){for(this.queueRunning=!0;this.handleNext()!==!1;)await qi();this.queueRunning=!1}handleNext(){var n,r;const t=this.incomingMessageQueue.dequeue();if(!t)return!1;const e=Ri(t);if(e){const o=this.openSubs.get(e);if(!o)return;const s=Ci(t,"id"),i=(n=o.alreadyHaveEvent)==null?void 0:n.call(o,s);if((r=o.receivedEvent)==null||r.call(o,this,s),i)return}try{let o=JSON.parse(t);switch(o[0]){case"EVENT":{const s=this.openSubs.get(o[1]),i=o[2];this.verifyEvent(i)&&Li(s.filters,i)&&s.onevent(i);return}case"COUNT":{const s=o[1],i=o[2],c=this.openCountRequests.get(s);c&&(c.resolve(i.count),this.openCountRequests.delete(s));return}case"EOSE":{const s=this.openSubs.get(o[1]);if(!s)return;s.receivedEose();return}case"OK":{const s=o[1],i=o[2],c=o[3],l=this.openEventPublishes.get(s);i?l.resolve(c):l.reject(new Error(c)),this.openEventPublishes.delete(s);return}case"CLOSED":{const s=o[1],i=this.openSubs.get(s);if(!i)return;i.closed=!0,i.close(o[2]);return}case"NOTICE":this.onnotice(o[1]);return;case"AUTH":{this.challenge=o[1];return}}}catch{return}}async send(t){if(!this.connectionPromise)throw new Error("sending on closed connection");this.connectionPromise.then(()=>{var e;(e=this.ws)==null||e.send(t)})}async auth(t){if(!this.challenge)throw new Error("can't perform auth, no challenge was received");const e=await t(Hi(this.url,this.challenge)),n=new Promise((r,o)=>{this.openEventPublishes.set(e.id,{resolve:r,reject:o})});return this.send('["AUTH",'+JSON.stringify(e)+"]"),n}async publish(t){const e=new Promise((n,r)=>{this.openEventPublishes.set(t.id,{resolve:n,reject:r})});return this.send('["EVENT",'+JSON.stringify(t)+"]"),e}async count(t,e){this.serial++;const n=(e==null?void 0:e.id)||"count:"+this.serial,r=new Promise((o,s)=>{this.openCountRequests.set(n,{resolve:o,reject:s})});return this.send('["COUNT","'+n+'",'+JSON.stringify(t)+"]"),r}subscribe(t,e){const n=this.prepareSubscription(t,e);return n.fire(),n}prepareSubscription(t,e){this.serial++;const n=e.id||"sub:"+this.serial,r=new Ki(this,n,t,e);return this.openSubs.set(n,r),r}close(){var t;this.closeAllSubscriptions("relay connection closed by us"),this._connected=!1,(t=this.ws)==null||t.close()}_onmessage(t){this.incomingMessageQueue.enqueue(t.data),this.queueRunning||this.runQueue()}},Ki=class{constructor(t,e,n,r){y(this,"relay");y(this,"id");y(this,"closed",!1);y(this,"eosed",!1);y(this,"filters");y(this,"alreadyHaveEvent");y(this,"receivedEvent");y(this,"onevent");y(this,"oneose");y(this,"onclose");y(this,"eoseTimeout");y(this,"eoseTimeoutHandle");this.relay=t,this.filters=n,this.id=e,this.alreadyHaveEvent=r.alreadyHaveEvent,this.receivedEvent=r.receivedEvent,this.eoseTimeout=r.eoseTimeout||t.baseEoseTimeout,this.oneose=r.oneose,this.onclose=r.onclose,this.onevent=r.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(){var t;this.eosed||(clearTimeout(this.eoseTimeoutHandle),this.eosed=!0,(t=this.oneose)==null||t.call(this))}close(t="closed by caller"){var e;this.closed||(this.relay.send('["CLOSE",'+JSON.stringify(this.id)+"]"),this.closed=!0),this.relay.openSubs.delete(this.id),(e=this.onclose)==null||e.call(this,t)}},Mi=class{constructor(t){y(this,"relays",new Map);y(this,"seenOn",new Map);y(this,"trackRelays",!1);y(this,"verifyEvent");y(this,"trustedRelayURLs",new Set);this.verifyEvent=t.verifyEvent}async ensureRelay(t,e){t=le(t);let n=this.relays.get(t);return n||(n=new Ir(t,{verifyEvent:this.trustedRelayURLs.has(t)?ji:this.verifyEvent}),e!=null&&e.connectionTimeout&&(n.connectionTimeout=e.connectionTimeout),this.relays.set(t,n)),await n.connect(),n}close(t){t.map(le).forEach(e=>{var n;(n=this.relays.get(e))==null||n.close()})}subscribeMany(t,e,n){this.trackRelays&&(n.receivedEvent=(u,h)=>{let w=this.seenOn.get(h);w||(w=new Set,this.seenOn.set(h,w)),w.add(u)});const r=new Set,o=[],s=[];let i=u=>{var h;s[u]=!0,s.filter(w=>w).length===t.length&&((h=n.oneose)==null||h.call(n),i=()=>{})};const c=[];let l=(u,h)=>{var w;i(u),c[u]=h,c.filter(g=>g).length===t.length&&((w=n.onclose)==null||w.call(n,c),l=()=>{})};const a=u=>{var w;if((w=n.alreadyHaveEvent)!=null&&w.call(n,u))return!0;const h=r.has(u);return r.add(u),h},f=Promise.all(t.map(le).map(async(u,h,w)=>{if(w.indexOf(u)!==h){l(h,"duplicate url");return}let g;try{g=await this.ensureRelay(u,{connectionTimeout:n.maxWait?Math.max(n.maxWait*.8,n.maxWait-1e3):void 0})}catch(p){l(h,(p==null?void 0:p.message)||String(p));return}let d=g.subscribe(e,{...n,oneose:()=>i(h),onclose:p=>l(h,p),alreadyHaveEvent:a,eoseTimeout:n.maxWait});o.push(d)}));return{async close(){await f,o.forEach(u=>{u.close()})}}}subscribeManyEose(t,e,n){const r=this.subscribeMany(t,e,{...n,oneose(){r.close()}});return r}async querySync(t,e,n){return new Promise(async r=>{const o=[];this.subscribeManyEose(t,[e],{...n,onevent(s){o.push(s)},onclose(s){r(o)}})})}async get(t,e,n){e.limit=1;const r=await this.querySync(t,e,n);return r.sort((o,s)=>s.created_at-o.created_at),r[0]||null}publish(t,e){return t.map(le).map(async(n,r,o)=>o.indexOf(n)!==r?Promise.reject("duplicate url"):(await this.ensureRelay(n)).publish(e))}},zi=class extends Mi{constructor(){super({verifyEvent:$r})}},Nr;try{Nr=fetch}catch{}var Ur=/^bunker:\/\/([0-9a-f]{64})\??([?\/\w:.=&%]*)$/,Vi=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;async function Di(t){let e=t.match(Ur);if(e)try{const n=e[1],r=new URLSearchParams(e[2]);return{pubkey:n,relays:r.getAll("relay"),secret:r.get("secret")}}catch{}return Pr(t)}async function Pr(t){const e=t.match(Ti);if(!e)return null;const[n,r="_",o]=e;try{const s=`https://${o}/.well-known/nostr.json?name=${r}`,i=await(await Nr(s,{redirect:"error"})).json();let c=i.names[r],l=i.nip46[c]||[];return{pubkey:c,relays:l,secret:null}}catch{return null}}var bn=class{constructor(t,e,n={}){y(this,"pool");y(this,"subCloser");y(this,"isOpen");y(this,"serial");y(this,"idPrefix");y(this,"listeners");y(this,"waitingForAuth");y(this,"secretKey");y(this,"bp");if(e.relays.length===0)throw new Error("no relays are specified for this bunker");this.pool=n.pool||new zi,this.secretKey=t,this.bp=e,this.isOpen=!1,this.idPrefix=Math.random().toString(36).substring(7),this.serial=0,this.listeners={},this.waitingForAuth={};const r=this.listeners,o=this.waitingForAuth;this.subCloser=this.pool.subscribeMany(this.bp.relays,[{kinds:[gn],"#p":[Br(this.secretKey)]}],{async onevent(s){const{id:i,result:c,error:l}=JSON.parse(await Oi(t,s.pubkey,s.content));if(c==="auth_url"&&o[i]){delete r[i],n.onauth?n.onauth(l):console.warn(`nostr-tools/nip46: remote signer ${e.pubkey} tried to send an "auth_url"='${l}' but there was no onauth() callback configured.`);return}let a=r[i];a&&(l?a.reject(l):c&&a.resolve(c),delete r[i])}}),this.isOpen=!0}async close(){this.isOpen=!1,this.subCloser.close()}async sendRequest(t,e){return new Promise(async(n,r)=>{try{if(!this.isOpen)throw new Error("this signer is not open anymore, create a new one");this.serial++;const o=`${this.idPrefix}-${this.serial}`,s=await $i(this.secretKey,this.bp.pubkey,JSON.stringify({id:o,method:t,params:e})),i=Bi({kind:gn,tags:[["p",this.bp.pubkey]],content:s,created_at:Math.floor(Date.now()/1e3)},this.secretKey);this.listeners[o]={resolve:n,reject:r},this.waitingForAuth[o]=!0,await Promise.any(this.pool.publish(this.bp.relays,i))}catch(o){r(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",[Br(this.secretKey),this.bp.secret||""])}async getPublicKey(){return this.bp.pubkey}async getRelays(){return JSON.parse(await this.sendRequest("get_relays",[]))}async signEvent(t){let e=await this.sendRequest("sign_event",[JSON.stringify(t)]),n=JSON.parse(e);if(n.pubkey===this.bp.pubkey&&$r(n))return n;throw new Error(`event returned from bunker is improperly signed: ${JSON.stringify(n)}`)}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 nip44GetKey(t){let e=await this.sendRequest("nip44_get_key",[t]);return Le(e)}async nip44Encrypt(t,e){return await this.sendRequest("nip44_encrypt",[t,e])}async nip44Decrypt(t,e){return await this.sendRequest("nip44_encrypt",[t,e])}};async function Wi(t,e,n,r,o){if(o&&!Vi.test(o))throw new Error("Invalid email");let s=Ai(),i=new bn(s,t.bunkerPointer,e),c=await i.sendRequest("create_account",[n,r,o||""]);return i.bp.pubkey=c,await i.connect(),i}async function Zi(t,e){const n=await t.querySync(e,{kinds:[Ui],"#k":[gn.toString()]});return(await Promise.all(n.map(async o=>{try{const s=JSON.parse(o.content),i=await Pr(s.nip05);if(i&&i.pubkey===o.pubkey&&i.relays.length)return{bunkerPointer:i,nip05:s.nip05,domain:s.nip05.split("@")[1],name:s.name||s.display_name,picture:s.picture,about:s.about,website:s.website,local:!1}}catch{return}}))).filter(o=>o!==void 0)}var Lr=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,Cr;try{Cr=fetch}catch{}async function Gi(t){var s;const e=t.match(Lr);if(!e)return null;const[n,r="_",o]=e;try{const i=`https://${o}/.well-known/nostr.json?name=${r}`,c=await(await Cr(i,{redirect:"error"})).json();let l=c.names[r];return l?{pubkey:l,relays:(s=c.relays)==null?void 0:s[l]}:null}catch{return null}}new TextDecoder("utf-8"),new TextEncoder;var Fi=5e3;function Ji(t){return Qi("npub",Le(t))}function Yi(t,e){let n=kr.toWords(e);return kr.encode(t,n,Fi)}function Qi(t,e){return Yi(t,e)}const{window:Xi}=Yr;function Rr(t,e,n){const r=t.slice();return r[41]=e[n],r}function tc(t){let e,n,r,o,s,i,c,l;function a(h,w){if(h[8])return oc;if(!h[9])return rc;if(h[9])return nc}let f=a(t),u=f&&f(t);return{c(){e=L("div"),n=L("button"),r=tt("⤫"),s=D(),u&&u.c(),$(n,"class",o="tw-absolute tw-top-0 tw-right-0.5 tw-bg-transparent tw-border-none tw-cursor-pointer tw-text-"+t[0]+"-950 tw-text-3xl"),$(e,"class",i="tw-w-80 tw-px-6 tw-py-8 tw-bg-"+t[0]+"-700 tw-rounded-md tw-shadow-[0_0px_30px_0px_rgba(0,0,0,0.6)] tw-transition-all tw-animate-show")},m(h,w){j(h,e,w),N(e,n),N(n,r),N(e,s),u&&u.m(e,null),c||(l=ct(n,"click",t[14]),c=!0)},p(h,w){w[0]&1&&o!==(o="tw-absolute tw-top-0 tw-right-0.5 tw-bg-transparent tw-border-none tw-cursor-pointer tw-text-"+h[0]+"-950 tw-text-3xl")&&$(n,"class",o),f===(f=a(h))&&u?u.p(h,w):(u&&u.d(1),u=f&&f(h),u&&(u.c(),u.m(e,null))),w[0]&1&&i!==(i="tw-w-80 tw-px-6 tw-py-8 tw-bg-"+h[0]+"-700 tw-rounded-md tw-shadow-[0_0px_30px_0px_rgba(0,0,0,0.6)] tw-transition-all tw-animate-show")&&$(e,"class",i)},d(h){h&&q(e),u&&u.d(),c=!1,l()}}}function ec(t){let e,n;function r(i,c){return i[7]?cc:i[9]?sc:ic}let o=r(t),s=o(t);return{c(){e=L("div"),s.c(),$(e,"class",n="tw-px-4 tw-py-2 tw-bg-"+t[0]+"-700 hover:tw-bg-"+t[0]+"-800 tw-rounded tw-cursor-pointer tw-shadow-[0_0px_10px_0px_rgba(0,0,0,0.3)]")},m(i,c){j(i,e,c),s.m(e,null)},p(i,c){o===(o=r(i))&&s?s.p(i,c):(s.d(1),s=o(i),s&&(s.c(),s.m(e,null))),c[0]&1&&n!==(n="tw-px-4 tw-py-2 tw-bg-"+i[0]+"-700 hover:tw-bg-"+i[0]+"-800 tw-rounded tw-cursor-pointer tw-shadow-[0_0px_10px_0px_rgba(0,0,0,0.3)]")&&$(e,"class",n)},d(i){i&&q(e),s.d()}}}function nc(t){let e,n,r,o,s,i,c=t[9].npub+"",l,a,f,u,h,w,g,d,p,b,m,x=or(t[6])+"",O,k,_,v=(t[9].picture||t[9].name)&&Hr(t);return{c(){e=L("div"),n=L("div"),n.textContent="You are connected to Nostr as",r=D(),o=L("a"),v&&v.c(),s=D(),i=L("div"),l=tt(c),f=D(),u=L("button"),h=tt("Disconnect"),g=D(),d=L("div"),p=tt("This webpage is using the public key:"),b=L("br"),m=D(),O=tt(x),$(n,"class","tw-text-sm tw-mb-4"),$(i,"class","tw-block tw-break-all"),$(o,"target","_blank"),$(o,"href",a="https://nosta.me/"+t[9].npub),$(o,"class","tw-text-white tw-no-underline tw-group"),$(e,"class","tw-text-center"),$(u,"class",w="tw-block tw-w-full tw-my-2 tw-mt-6 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+t[0]+"-900 hover:tw-bg-"+t[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white"),$(d,"class","tw-block tw-break-all tw-mt-6 tw-text-center tw-text-sm")},m(S,U){j(S,e,U),N(e,n),N(e,r),N(e,o),v&&v.m(o,null),N(o,s),N(o,i),N(i,l),j(S,f,U),j(S,u,U),N(u,h),j(S,g,U),j(S,d,U),N(d,p),N(d,b),N(d,m),N(d,O),k||(_=ct(u,"click",t[16]),k=!0)},p(S,U){S[9].picture||S[9].name?v?v.p(S,U):(v=Hr(S),v.c(),v.m(o,s)):v&&(v.d(1),v=null),U[0]&512&&c!==(c=S[9].npub+"")&&de(l,c),U[0]&512&&a!==(a="https://nosta.me/"+S[9].npub)&&$(o,"href",a),U[0]&1&&w!==(w="tw-block tw-w-full tw-my-2 tw-mt-6 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+S[0]+"-900 hover:tw-bg-"+S[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white")&&$(u,"class",w),U[0]&64&&x!==(x=or(S[6])+"")&&de(O,x)},d(S){S&&(q(e),q(f),q(u),q(g),q(d)),v&&v.d(),k=!1,_()}}}function rc(t){let e,n,r,o,s,i,c,l,a,f,u,h,w,g,d,p,b;return{c(){e=L("div"),e.textContent="How do you want to connect to Nostr?",n=D(),r=L("form"),o=L("input"),s=D(),i=L("button"),c=tt("Connect »"),f=D(),u=L("div"),h=tt("Do you need a Nostr account?"),w=L("br"),g=D(),d=L("button"),d.textContent="Sign up now",$(e,"class","tw-text-lg tw-text-center"),$(o,"class","tw-box-border tw-w-full tw-px-2 tw-py-1 tw-rounded tw-text-lg tw-border-none tw-outline-none"),$(o,"placeholder","user@provider or bunker://..."),o.autofocus=!0,$(i,"class",l="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+t[0]+"-900 hover:tw-bg-"+t[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default"),i.disabled=a=!t[12],$(r,"class","flex tw-mt-4 tw-mb-1"),$(d,"class","tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"),$(u,"class","tw-mt-6 tw-text-center tw-text-sm tw-leading-3")},m(m,x){j(m,e,x),j(m,n,x),j(m,r,x),N(r,o),t[25](o),Mt(o,t[1]),N(r,s),N(r,i),N(i,c),j(m,f,x),j(m,u,x),N(u,h),N(u,w),N(u,g),N(u,d),o.focus(),p||(b=[ct(o,"input",t[26]),ct(r,"submit",t[15]),ct(d,"click",t[17])],p=!0)},p(m,x){x[0]&2&&o.value!==m[1]&&Mt(o,m[1]),x[0]&1&&l!==(l="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+m[0]+"-900 hover:tw-bg-"+m[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default")&&$(i,"class",l),x[0]&4096&&a!==(a=!m[12])&&(i.disabled=a)},d(m){m&&(q(e),q(n),q(r),q(f),q(u)),t[25](null),p=!1,Kt(b)}}}function oc(t){let e,n,r,o,s,i,c,l,a,f,u,h,w,g,d,p,b,m,x,O,k,_,v,S,U=Sn(t[10]),T=[];for(let B=0;B<U.length;B+=1)T[B]=Kr(Rr(t,U,B));return{c(){e=L("div"),e.textContent="Create a Nostr account",n=D(),r=L("form"),o=L("div"),s=L("input"),i=D(),c=L("div"),c.textContent="@",l=D(),a=L("select");for(let B=0;B<T.length;B+=1)T[B].c();f=D(),u=L("div"),u.textContent=`A window from the selected provider will pop up to finalize the
2
- creation; if it doesn't display check if the browser is blocking it`,h=D(),w=L("button"),g=tt("Create »"),b=D(),m=L("div"),x=tt("Do you already have a Nostr address?"),O=L("br"),k=D(),_=L("button"),_.textContent="Login now",$(e,"class","tw-text-lg tw-text-center"),$(s,"class","tw-box-border tw-w-40 tw-px-2 tw-py-1 tw-rounded tw-text-lg tw-border-none tw-outline-none"),$(s,"placeholder","bob"),s.autofocus=!0,$(c,"class","tw-mx-2 tw-text-2xl"),$(a,"class","tw-w-full tw-box-border tw-px-2 tw-py-1 tw-rounded tw-text-lg tw-border-none tw-outline-none"),t[5]===void 0&&we(()=>t[24].call(a)),$(o,"class","tw-flex items-center"),$(u,"class","tw-text-sm tw-text-center tw-mt-4 tw-leading-4"),$(w,"class",d="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+t[0]+"-900 hover:tw-bg-"+t[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default"),w.disabled=p=!t[5]||!t[4],$(r,"class","tw-mt-4 tw-mb-1"),$(_,"class","tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"),$(m,"class","tw-mt-6 tw-text-center tw-text-sm tw-leading-3")},m(B,R){j(B,e,R),j(B,n,R),j(B,r,R),N(r,o),N(o,s),t[22](s),Mt(s,t[4]),N(o,i),N(o,c),N(o,l),N(o,a);for(let C=0;C<T.length;C+=1)T[C]&&T[C].m(a,null);xn(a,t[5],!0),N(r,f),N(r,u),N(r,h),N(r,w),N(w,g),j(B,b,R),j(B,m,R),N(m,x),N(m,O),N(m,k),N(m,_),s.focus(),v||(S=[ct(s,"input",t[23]),ct(s,"input",t[20]),ct(a,"change",t[24]),ct(r,"submit",t[19]),ct(_,"click",t[18])],v=!0)},p(B,R){if(R[0]&16&&s.value!==B[4]&&Mt(s,B[4]),R[0]&1024){U=Sn(B[10]);let C;for(C=0;C<U.length;C+=1){const rt=Rr(B,U,C);T[C]?T[C].p(rt,R):(T[C]=Kr(rt),T[C].c(),T[C].m(a,null))}for(;C<T.length;C+=1)T[C].d(1);T.length=U.length}R[0]&1056&&xn(a,B[5]),R[0]&1&&d!==(d="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+B[0]+"-900 hover:tw-bg-"+B[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default")&&$(w,"class",d),R[0]&1072&&p!==(p=!B[5]||!B[4])&&(w.disabled=p)},d(B){B&&(q(e),q(n),q(r),q(b),q(m)),t[22](null),Qr(T,B),v=!1,Kt(S)}}}function Hr(t){let e,n,r=t[9].picture&&qr(t),o=t[9].name&&jr(t);return{c(){e=L("div"),r&&r.c(),n=D(),o&&o.c(),$(e,"class","tw-flex tw-items-center tw-justify-center tw-gap-2 tw-mb-2")},m(s,i){j(s,e,i),r&&r.m(e,null),N(e,n),o&&o.m(e,null)},p(s,i){s[9].picture?r?r.p(s,i):(r=qr(s),r.c(),r.m(e,n)):r&&(r.d(1),r=null),s[9].name?o?o.p(s,i):(o=jr(s),o.c(),o.m(e,null)):o&&(o.d(1),o=null)},d(s){s&&q(e),r&&r.d(),o&&o.d()}}}function qr(t){let e,n,r;return{c(){e=L("img"),fe(e.src,n=t[9].picture)||$(e,"src",n),$(e,"alt",""),$(e,"class",r="tw-w-10 tw-h-10 tw-rounded-full tw-border-solid tw-border-2 tw-border-transparent group-hover:tw-border-"+t[0]+"-100")},m(o,s){j(o,e,s)},p(o,s){s[0]&512&&!fe(e.src,n=o[9].picture)&&$(e,"src",n),s[0]&1&&r!==(r="tw-w-10 tw-h-10 tw-rounded-full tw-border-solid tw-border-2 tw-border-transparent group-hover:tw-border-"+o[0]+"-100")&&$(e,"class",r)},d(o){o&&q(e)}}}function jr(t){let e,n=t[9].name+"",r;return{c(){e=L("div"),r=tt(n),$(e,"class","tw-text-3xl group-hover:tw-underline tw-decoration-2 tw-underline-offset-4")},m(o,s){j(o,e,s),N(e,r)},p(o,s){s[0]&512&&n!==(n=o[9].name+"")&&de(r,n)},d(o){o&&q(e)}}}function Kr(t){let e,n,r;return{c(){e=L("option"),$(e,"label",n=t[41].domain),e.__value=r=t[41],Mt(e,e.__value),$(e,"class","tw-px-2 tw-py-1 tw-text-lg")},m(o,s){j(o,e,s)},p(o,s){s[0]&1024&&n!==(n=o[41].domain)&&$(e,"label",n),s[0]&1024&&r!==(r=o[41])&&(e.__value=r,Mt(e,e.__value))},d(o){o&&q(e)}}}function sc(t){let e,n,r=(t[9].name||t[9].npub.slice(0,7)+"…"+t[9].npub.slice(-4))+"",o;function s(l,a){return l[9].picture?ac:lc}let i=s(t),c=i(t);return{c(){e=L("div"),c.c(),n=D(),o=tt(r),$(e,"class","tw-flex tw-items-center")},m(l,a){j(l,e,a),c.m(e,null),N(e,n),N(e,o)},p(l,a){i===(i=s(l))&&c?c.p(l,a):(c.d(1),c=i(l),c&&(c.c(),c.m(e,n))),a[0]&512&&r!==(r=(l[9].name||l[9].npub.slice(0,7)+"…"+l[9].npub.slice(-4))+"")&&de(o,r)},d(l){l&&q(e),c.d()}}}function ic(t){let e;return{c(){e=tt("Login with Nostr")},m(n,r){j(n,e,r)},p:F,d(n){n&&q(e)}}}function cc(t){let e;return{c(){e=L("div"),e.textContent="Connecting to bunker..."},m(n,r){j(n,e,r)},p:F,d(n){n&&q(e)}}}function lc(t){let e;return{c(){e=tt("☉")},m(n,r){j(n,e,r)},p:F,d(n){n&&q(e)}}}function ac(t){let e,n;return{c(){e=L("img"),fe(e.src,n=t[9].picture)||$(e,"src",n),$(e,"alt",""),$(e,"class","tw-w-5 tw-h-5 tw-rounded-full tw-mr-2")},m(r,o){j(r,e,o)},p(r,o){o[0]&512&&!fe(e.src,n=r[9].picture)&&$(e,"src",n)},d(r){r&&q(e)}}}function uc(t){let e,n,r;function o(c,l){return c[11]?tc:ec}let s=o(t),i=s(t);return{c(){e=L("div"),i.c(),$(e,"class","tw-text-white tw-font-sans"),En(e,"tw-cursor-pointer",!t[9]&&!t[11])},m(c,l){j(c,e,l),i.m(e,null),n||(r=ct(Xi,"click",t[13]),n=!0)},p(c,l){s===(s=o(c))&&i?i.p(c,l):(i.d(1),i=s(c),i&&(i.c(),i.m(e,null))),l[0]&2560&&En(e,"tw-cursor-pointer",!c[9]&&!c[11])},i:F,o:F,d(c){c&&q(e),i.d(),n=!1,r()}}}function fc(t,e,n){let r,o,{accent:s}=e;const i=window,c=new Zs;let l,a,f,u,h,w;const g=localStorage.getItem("nip46ClientSecretKey");g?w=Le(g):(w=$s(),localStorage.setItem("nip46ClientSecretKey",Y(w)));let d="closed",p,b,m,x,O,k,_,v=[];const S=An(()=>{switch(d){case"justopened":n(21,d="opened");break;case"justclosed":n(21,d="closed");break}},500);function U(){n(21,d="justopened"),S()}function T(){n(21,d="justclosed"),S()}R();let B={isWnj:!0,async getPublicKey(){return!x&&!k&&U(),(await m).bp.pubkey},async signEvent(I){return!x&&!k&&U(),(await m).signEvent(I)},async getRelays(){return!x&&!k&&U(),(await m).getRelays()},nip04:{async encrypt(I,M){return!x&&!k&&U(),(await m).nip04Encrypt(I,M)},async decrypt(I,M){return!x&&!k&&U(),(await m).nip04Decrypt(I,M)}}};function R(){T(),p=null,m=new Promise(I=>{b=I}),n(7,x=!1),n(8,O=!1),n(9,k=null),_=null}const C={pool:c,onauth(I){window.open(I,"window.nostr","width=600,height=800,popup=yes")}};no(()=>{let I=localStorage.getItem("nip46BunkerPointer");if(I&&(p=JSON.parse(I),n(7,x=!0),G(new bn(w,p,C))),i.nostr&&!i.nostr.isWnj){i.destroyWnj();return}else Object.defineProperty(window,"nostr",{get(){return B},set(M){B=M,M.isWnj||i.destroyWnj()},configurable:!0});return()=>{_&&_.close()}});function rt(I){d==="justopened"||d==="justclosed"||(I.composedPath().find(M=>M.id==="wnj")?U():T())}function E(I){T(),n(8,O=!1),I.stopPropagation()}async function A(I){if(I.preventDefault(),p=await Di(l.value),!p){l.setCustomValidity('invalid NIP-05 "name@domain.com" address or bunker:// URI');return}l.setCustomValidity(""),G(new bn(w,p,C))}async function P(I){I.preventDefault(),localStorage.removeItem("nip46BunkerPointer"),i.isWnj&&delete i.nostr,R()}async function K(I){I.preventDefault(),n(8,O=!0),v.length===0&&(n(10,v=await Zi(c,["wss://relay.nostr.band"])),n(5,h=v[0]))}function H(I){n(8,O=!1)}async function V(I){if(I.preventDefault(),!h)return;let M=await Wi(h,C,f.value,h.domain);U(),n(8,O=!1),G(M)}const X=An(async()=>{h&&f.value.length>0&&(await Gi(f.value+"@"+h.domain)?f.setCustomValidity(`'${f.value}' is already taken.`):f.setCustomValidity(""))},500);async function G(I){await I.connect(),n(9,k={pubkey:I.bp.pubkey,npub:Ji(I.bp.pubkey),event:null}),n(7,x=!1),localStorage.setItem("nip46BunkerPointer",JSON.stringify(p)),_=c.subscribeMany(["wss://purplepag.es","wss://relay.snort.social","wss://relay.nos.social"],[{kinds:[0],authors:[I.bp.pubkey]}],{onevent(M){var Et;if(!((((Et=k.event)==null?void 0:Et.created_at)||0)>=M.created_at))try{let{name:ae,picture:Nt}=JSON.parse(M.content);n(9,k.event=M,k),n(9,k.name=ae,k),n(9,k.picture=Nt,k)}catch{}}}),T(),b(I)}function ht(I){he[I?"unshift":"push"](()=>{f=I,n(3,f)})}function wt(){u=this.value,n(4,u)}function It(){h=to(this),n(5,h),n(10,v)}function jt(I){he[I?"unshift":"push"](()=>{l=I,n(2,l)})}function pt(){a=this.value,n(1,a)}return t.$$set=I=>{"accent"in I&&n(0,s=I.accent)},t.$$.update=()=>{t.$$.dirty[0]&2&&n(12,r=a&&(a.match(Ur)||a.match(Lr))),t.$$.dirty[0]&2097152&&n(11,o=d==="justopened"||d==="opened")},[s,a,l,f,u,h,w,x,O,k,v,o,r,rt,E,A,P,K,H,V,X,d,ht,wt,It,jt,pt]}class dc extends wo{constructor(e){super(),ho(this,e,fc,uc,Fr,{accent:0},null,[-1,-1])}}const Mr=window,Yt=document.createElement("div");Yt.style.position="fixed",Yt.style.right="1.5rem",((Dr=Mr.wnjParams)==null?void 0:Dr.position)==="bottom"?Yt.style.bottom="1.5rem":Yt.style.top="1.5rem",document.body.appendChild(Yt);const Oe=document.createElement("div");Oe.id="wnj",Oe.classList.add("tw-animate-fadein");const zr=document.createElement("style");zr.innerHTML=Ut;const Vr=Yt.attachShadow({mode:"open"});Vr.appendChild(Oe),Vr.appendChild(zr);const hc=new dc({target:Oe,props:{accent:((Wr=Mr.wnjParams)==null?void 0:Wr.accent)||"cyan"}});window.destroyWnj=()=>{hc.$destroy()}})();
1
+ var Yc=Object.defineProperty;var Jc=(jt,R,kt)=>R in jt?Yc(jt,R,{enumerable:!0,configurable:!0,writable:!0,value:kt}):jt[R]=kt;var m=(jt,R,kt)=>(Jc(jt,typeof R!="symbol"?R+"":R,kt),kt);(function(){"use strict";var yo,mo;const jt='.tw-absolute{position:absolute}.tw-right-0{right:0}.tw-right-0\\.5{right:.125rem}.tw-top-0{top:0}.tw-mx-2{margin-left:.5rem;margin-right:.5rem}.tw-my-2{margin-top:.5rem;margin-bottom:.5rem}.tw-mb-1{margin-bottom:.25rem}.tw-mb-2{margin-bottom:.5rem}.tw-mb-4{margin-bottom:1rem}.tw-ml-2{margin-left:.5rem}.tw-mr-2{margin-right:.5rem}.tw-mt-4{margin-top:1rem}.tw-mt-6{margin-top:1.5rem}.tw-box-border{box-sizing:border-box}.tw-block{display:block}.tw-flex{display:flex}.tw-h-10{height:2.5rem}.tw-h-5{height:1.25rem}.tw-w-10{width:2.5rem}.tw-w-40{width:10rem}.tw-w-5{width:1.25rem}.tw-w-full{width:100%}@keyframes tw-moveIn{0%{transform:translateY(-10px)}to{transform:translateY(0)}}.tw-animate-fadein{animation:tw-fadeIn 1s ease-in-out,tw-moveIn 1s ease-in-out}@keyframes tw-fadeIn{0%{opacity:0}to{opacity:1}}.tw-animate-show{animation:tw-fadeIn .2s ease-in-out}@keyframes tw-spin{to{transform:rotate(360deg)}}.tw-animate-spin{animation:tw-spin 1s linear infinite}.tw-cursor-grabbing{cursor:grabbing}.tw-cursor-pointer{cursor:pointer}.tw-items-center{align-items:center}.tw-justify-center{justify-content:center}.tw-gap-2{gap:.5rem}.tw-break-all{word-break:break-all}.tw-rounded{border-radius:.25rem}.tw-rounded-full{border-radius:9999px}.tw-rounded-md{border-radius:.375rem}.tw-border-0{border-width:0px}.tw-border-2{border-width:2px}.tw-border-solid{border-style:solid}.tw-border-none{border-style:none}.tw-border-transparent{border-color:transparent}.tw-bg-cyan-700{--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity))}.tw-bg-cyan-800{--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity))}.tw-bg-cyan-900{--tw-bg-opacity: 1;background-color:rgb(22 78 99 / var(--tw-bg-opacity))}.tw-bg-cyan-950{--tw-bg-opacity: 1;background-color:rgb(8 51 68 / var(--tw-bg-opacity))}.tw-bg-green-700{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity))}.tw-bg-green-800{--tw-bg-opacity: 1;background-color:rgb(22 101 52 / var(--tw-bg-opacity))}.tw-bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity))}.tw-bg-green-950{--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity))}.tw-bg-neutral-700{--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity))}.tw-bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.tw-bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity))}.tw-bg-neutral-950{--tw-bg-opacity: 1;background-color:rgb(10 10 10 / var(--tw-bg-opacity))}.tw-bg-orange-700{--tw-bg-opacity: 1;background-color:rgb(194 65 12 / var(--tw-bg-opacity))}.tw-bg-orange-800{--tw-bg-opacity: 1;background-color:rgb(154 52 18 / var(--tw-bg-opacity))}.tw-bg-orange-900{--tw-bg-opacity: 1;background-color:rgb(124 45 18 / var(--tw-bg-opacity))}.tw-bg-orange-950{--tw-bg-opacity: 1;background-color:rgb(67 20 7 / var(--tw-bg-opacity))}.tw-bg-purple-700{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity))}.tw-bg-purple-800{--tw-bg-opacity: 1;background-color:rgb(107 33 168 / var(--tw-bg-opacity))}.tw-bg-purple-900{--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}.tw-bg-purple-950{--tw-bg-opacity: 1;background-color:rgb(59 7 100 / var(--tw-bg-opacity))}.tw-bg-red-700{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity))}.tw-bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity))}.tw-bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.tw-bg-red-950{--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity))}.tw-bg-stone-700{--tw-bg-opacity: 1;background-color:rgb(68 64 60 / var(--tw-bg-opacity))}.tw-bg-stone-800{--tw-bg-opacity: 1;background-color:rgb(41 37 36 / var(--tw-bg-opacity))}.tw-bg-stone-900{--tw-bg-opacity: 1;background-color:rgb(28 25 23 / var(--tw-bg-opacity))}.tw-bg-stone-950{--tw-bg-opacity: 1;background-color:rgb(12 10 9 / var(--tw-bg-opacity))}.tw-bg-transparent{background-color:transparent}.tw-px-2{padding-left:.5rem;padding-right:.5rem}.tw-px-4{padding-left:1rem;padding-right:1rem}.tw-px-6{padding-left:1.5rem;padding-right:1.5rem}.tw-py-1{padding-top:.25rem;padding-bottom:.25rem}.tw-py-2{padding-top:.5rem;padding-bottom:.5rem}.tw-py-8{padding-top:2rem;padding-bottom:2rem}.tw-text-center{text-align:center}.tw-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.tw-text-2xl{font-size:1.5rem;line-height:2rem}.tw-text-3xl{font-size:1.875rem;line-height:2.25rem}.tw-text-lg{font-size:1.125rem;line-height:1.75rem}.tw-text-sm{font-size:.875rem;line-height:1.25rem}.tw-leading-3{line-height:.75rem}.tw-leading-4{line-height:1rem}.tw-text-cyan-950{--tw-text-opacity: 1;color:rgb(8 51 68 / var(--tw-text-opacity))}.tw-text-green-950{--tw-text-opacity: 1;color:rgb(5 46 22 / var(--tw-text-opacity))}.tw-text-neutral-950{--tw-text-opacity: 1;color:rgb(10 10 10 / var(--tw-text-opacity))}.tw-text-orange-950{--tw-text-opacity: 1;color:rgb(67 20 7 / var(--tw-text-opacity))}.tw-text-purple-950{--tw-text-opacity: 1;color:rgb(59 7 100 / var(--tw-text-opacity))}.tw-text-red-950{--tw-text-opacity: 1;color:rgb(69 10 10 / var(--tw-text-opacity))}.tw-text-stone-950{--tw-text-opacity: 1;color:rgb(12 10 9 / var(--tw-text-opacity))}.tw-text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tw-underline{text-decoration-line:underline}.tw-no-underline{text-decoration-line:none}.tw-decoration-2{text-decoration-thickness:2px}.tw-underline-offset-4{text-underline-offset:4px}.tw-opacity-25{opacity:.25}.tw-opacity-75{opacity:.75}.tw-shadow-\\[0_0px_10px_0px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow: 0 0px 10px 0px rgba(0,0,0,.3);--tw-shadow-colored: 0 0px 10px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.tw-shadow-\\[0_0px_30px_0px_rgba\\(0\\,0\\,0\\,0\\.6\\)\\]{--tw-shadow: 0 0px 30px 0px rgba(0,0,0,.6);--tw-shadow-colored: 0 0px 30px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.tw-outline-none{outline:2px solid transparent;outline-offset:2px}.tw-outline-dashed{outline-style:dashed}.tw-outline-1{outline-width:1px}.tw-outline-offset-4{outline-offset:4px}.tw-outline-cyan-500{outline-color:#06b6d4}.tw-outline-green-500{outline-color:#22c55e}.tw-outline-neutral-500{outline-color:#737373}.tw-outline-orange-500{outline-color:#f97316}.tw-outline-purple-500{outline-color:#a855f7}.tw-outline-red-500{outline-color:#ef4444}.tw-outline-stone-500{outline-color:#78716c}.tw-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.tw-duration-200{transition-duration:.2s}.disabled\\:tw-cursor-default:disabled{cursor:default}.disabled\\:tw-bg-neutral-400:disabled{--tw-bg-opacity: 1;background-color:rgb(163 163 163 / var(--tw-bg-opacity))}.disabled\\:tw-text-neutral-200:disabled{--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity))}.tw-group:hover .group-hover\\:tw-underline{text-decoration-line:underline}@media (min-width: 640px){.sm\\:tw-w-80{width:20rem}}';function R(){}function kt(t){return t()}function qn(){return Object.create(null)}function At(t){t.forEach(kt)}function jn(t){return typeof t=="function"}function je(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let ge;function be(t,e){return t===e?!0:(ge||(ge=document.createElement("a")),ge.href=e,t===ge.href)}function vo(t){return Object.keys(t).length===0}function _o(t,...e){if(t==null){for(const r of e)r(void 0);return R}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function So(t,e,n){t.$$.on_destroy.push(_o(e,n))}const ko=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function U(t,e){t.appendChild(e)}function j(t,e,n){t.insertBefore(e,n||null)}function H(t){t.parentNode&&t.parentNode.removeChild(t)}function Ao(t,e){for(let n=0;n<t.length;n+=1)t[n]&&t[n].d(e)}function L(t){return document.createElement(t)}function Me(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function Z(t){return document.createTextNode(t)}function V(){return Z(" ")}function Bo(){return Z("")}function et(t,e,n,r){return t.addEventListener(e,n,r),()=>t.removeEventListener(e,n,r)}function _(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Oo(t){return Array.from(t.childNodes)}function ye(t,e){e=""+e,t.data!==e&&(t.data=e)}function Gt(t,e){t.value=e??""}function Mn(t,e,n){for(let r=0;r<t.options.length;r+=1){const o=t.options[r];if(o.__value===e){o.selected=!0;return}}(!n||e!==void 0)&&(t.selectedIndex=-1)}function Io(t){const e=t.querySelector(":checked");return e&&e.__value}function zn(t,e,n){t.classList.toggle(e,!!n)}let oe;function ie(t){oe=t}function To(){if(!oe)throw new Error("Function called outside component initialization");return oe}function No(t){To().$$.on_mount.push(t)}const Ft=[],se=[];let Yt=[];const Kn=[],Po=Promise.resolve();let ze=!1;function Uo(){ze||(ze=!0,Po.then(Dn))}function me(t){Yt.push(t)}const Ke=new Set;let Jt=0;function Dn(){if(Jt!==0)return;const t=oe;do{try{for(;Jt<Ft.length;){const e=Ft[Jt];Jt++,ie(e),$o(e.$$)}}catch(e){throw Ft.length=0,Jt=0,e}for(ie(null),Ft.length=0,Jt=0;se.length;)se.pop()();for(let e=0;e<Yt.length;e+=1){const n=Yt[e];Ke.has(n)||(Ke.add(n),n())}Yt.length=0}while(Ft.length);for(;Kn.length;)Kn.pop()();ze=!1,Ke.clear(),ie(t)}function $o(t){if(t.fragment!==null){t.update(),At(t.before_update);const e=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,e),t.after_update.forEach(me)}}function Co(t){const e=[],n=[];Yt.forEach(r=>t.indexOf(r)===-1?e.push(r):n.push(r)),n.forEach(r=>r()),Yt=e}const Ee=new Set;let Mt;function xe(){Mt={r:0,c:[],p:Mt}}function ve(){Mt.r||At(Mt.c),Mt=Mt.p}function ut(t,e){t&&t.i&&(Ee.delete(t),t.i(e))}function wt(t,e,n,r){if(t&&t.o){if(Ee.has(t))return;Ee.add(t),Mt.c.push(()=>{Ee.delete(t),r&&(n&&t.d(1),r())}),t.o(e)}else r&&r()}function Vn(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function Wn(t){t&&t.c()}function De(t,e,n){const{fragment:r,after_update:o}=t.$$;r&&r.m(e,n),me(()=>{const i=t.$$.on_mount.map(kt).filter(jn);t.$$.on_destroy?t.$$.on_destroy.push(...i):At(i),t.$$.on_mount=[]}),o.forEach(me)}function Ve(t,e){const n=t.$$;n.fragment!==null&&(Co(n.after_update),At(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Lo(t,e){t.$$.dirty[0]===-1&&(Ft.push(t),Uo(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<<e%31}function Zn(t,e,n,r,o,i,s=null,c=[-1]){const l=oe;ie(t);const a=t.$$={fragment:null,ctx:[],props:i,update:R,not_equal:o,bound:qn(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(l?l.$$.context:[])),callbacks:qn(),dirty:c,skip_bound:!1,root:e.target||l.$$.root};s&&s(a.root);let f=!1;if(a.ctx=n?n(t,e.props||{},(u,w,...h)=>{const g=h.length?h[0]:w;return a.ctx&&o(a.ctx[u],a.ctx[u]=g)&&(!a.skip_bound&&a.bound[u]&&a.bound[u](g),f&&Lo(t,u)),w}):[],a.update(),f=!0,At(a.before_update),a.fragment=r?r(a.ctx):!1,e.target){if(e.hydrate){const u=Oo(e.target);a.fragment&&a.fragment.l(u),u.forEach(H)}else a.fragment&&a.fragment.c();e.intro&&ut(t.$$.fragment),De(t,e.target,e.anchor),Dn()}ie(l)}class Gn{constructor(){m(this,"$$");m(this,"$$set")}$destroy(){Ve(this,1),this.$destroy=R}$on(e,n){if(!jn(n))return R;const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{const o=r.indexOf(n);o!==-1&&r.splice(o,1)}}$set(e){this.$$set&&!vo(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Ro="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Ro);function Ho(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var We={exports:{}};function Fn(t,e=100,n={}){if(typeof t!="function")throw new TypeError(`Expected the first parameter to be a function, got \`${typeof t}\`.`);if(e<0)throw new RangeError("`wait` must not be negative.");const{immediate:r}=typeof n=="boolean"?{immediate:n}:n;let o,i,s,c,l;function a(){const u=Date.now()-c;if(u<e&&u>=0)s=setTimeout(a,e-u);else if(s=void 0,!r){const w=o,h=i;o=void 0,i=void 0,l=t.apply(w,h)}}const f=function(...u){if(o&&this!==o)throw new Error("Debounced method called with different contexts.");o=this,i=u,c=Date.now();const w=r&&!s;if(s||(s=setTimeout(a,e)),w){const h=o,g=i;o=void 0,i=void 0,l=t.apply(h,g)}return l};return f.clear=()=>{s&&(clearTimeout(s),s=void 0)},f.flush=()=>{if(!s)return;const u=o,w=i;o=void 0,i=void 0,l=t.apply(u,w),clearTimeout(s),s=void 0},f}We.exports.debounce=Fn,We.exports=Fn;var qo=We.exports;const Yn=Ho(qo),Ze=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Jn=t=>t instanceof Uint8Array,Ge=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),pt=(t,e)=>t<<32-e|t>>>e;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");const jo=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function nt(t){if(!Jn(t))throw new Error("Uint8Array expected");let e="";for(let n=0;n<t.length;n++)e+=jo[t[n]];return e}function Fe(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);const e=t.length;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);const n=new Uint8Array(e/2);for(let r=0;r<n.length;r++){const o=r*2,i=t.slice(o,o+2),s=Number.parseInt(i,16);if(Number.isNaN(s)||s<0)throw new Error("Invalid byte sequence");n[r]=s}return n}function Mo(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Qn(t){if(typeof t=="string"&&(t=Mo(t)),!Jn(t))throw new Error(`expected Uint8Array, got ${typeof t}`);return t}let zo=class{clone(){return this._cloneInto()}};function Xn(t){const e=r=>t().update(Qn(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function Ko(t=32){if(Ze&&typeof Ze.getRandomValues=="function")return Ze.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}function tr(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function er(t,...e){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function Do(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");tr(t.outputLen),tr(t.blockLen)}function _e(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 Vo(t,e){er(t);const n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const Ye=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const nr=t=>t instanceof Uint8Array,Je=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),gt=(t,e)=>t<<32-e|t>>>e;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function Wo(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Qe(t){if(typeof t=="string"&&(t=Wo(t)),!nr(t))throw new Error(`expected Uint8Array, got ${typeof t}`);return t}function Zo(...t){const e=new Uint8Array(t.reduce((r,o)=>r+o.length,0));let n=0;return t.forEach(r=>{if(!nr(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}class rr{clone(){return this._cloneInto()}}function Go(t){const e=r=>t().update(Qe(r)).digest(),n=t();return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=()=>t(),e}function or(t=32){if(Ye&&typeof Ye.getRandomValues=="function")return Ye.getRandomValues(new Uint8Array(t));throw new Error("crypto.getRandomValues must be defined")}function Fo(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const o=BigInt(32),i=BigInt(4294967295),s=Number(n>>o&i),c=Number(n&i),l=r?4:0,a=r?0:4;t.setUint32(e+l,s,r),t.setUint32(e+a,c,r)}let Yo=class extends rr{constructor(e,n,r,o){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Je(this.buffer)}update(e){_e(this);const{view:n,buffer:r,blockLen:o}=this;e=Qe(e);const i=e.length;for(let s=0;s<i;){const c=Math.min(o-this.pos,i-s);if(c===o){const l=Je(e);for(;o<=i-s;s+=o)this.process(l,s);continue}r.set(e.subarray(s,s+c),this.pos),this.pos+=c,s+=c,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){_e(this),Vo(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:i}=this;let{pos:s}=this;n[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(r,0),s=0);for(let u=s;u<o;u++)n[u]=0;Fo(r,o-8,BigInt(this.length*8),i),this.process(r,0);const c=Je(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const a=l/4,f=this.get();if(a>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<a;u++)c.setUint32(4*u,f[u],i)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:i,destroyed:s,pos:c}=this;return e.length=o,e.pos=c,e.finished=i,e.destroyed=s,o%n&&e.buffer.set(r),e}};const Jo=(t,e,n)=>t&e^~t&n,Qo=(t,e,n)=>t&e^t&n^e&n,Xo=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Bt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ot=new Uint32Array(64);let ti=class extends Yo{constructor(){super(64,32,8,!1),this.A=Bt[0]|0,this.B=Bt[1]|0,this.C=Bt[2]|0,this.D=Bt[3]|0,this.E=Bt[4]|0,this.F=Bt[5]|0,this.G=Bt[6]|0,this.H=Bt[7]|0}get(){const{A:e,B:n,C:r,D:o,E:i,F:s,G:c,H:l}=this;return[e,n,r,o,i,s,c,l]}set(e,n,r,o,i,s,c,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=c|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)Ot[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const w=Ot[u-15],h=Ot[u-2],g=gt(w,7)^gt(w,18)^w>>>3,d=gt(h,17)^gt(h,19)^h>>>10;Ot[u]=d+Ot[u-7]+g+Ot[u-16]|0}let{A:r,B:o,C:i,D:s,E:c,F:l,G:a,H:f}=this;for(let u=0;u<64;u++){const w=gt(c,6)^gt(c,11)^gt(c,25),h=f+w+Jo(c,l,a)+Xo[u]+Ot[u]|0,d=(gt(r,2)^gt(r,13)^gt(r,22))+Qo(r,o,i)|0;f=a,a=l,l=c,c=s+h|0,s=i,i=o,o=r,r=h+d|0}r=r+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,c=c+this.E|0,l=l+this.F|0,a=a+this.G|0,f=f+this.H|0,this.set(r,o,i,s,c,l,a,f)}roundClean(){Ot.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const Xe=Go(()=>new ti);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ir=BigInt(0),Se=BigInt(1),ei=BigInt(2),ke=t=>t instanceof Uint8Array,ni=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Qt(t){if(!ke(t))throw new Error("Uint8Array expected");let e="";for(let n=0;n<t.length;n++)e+=ni[t[n]];return e}function sr(t){const e=t.toString(16);return e.length&1?`0${e}`:e}function tn(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);return BigInt(t===""?"0":`0x${t}`)}function Xt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);const e=t.length;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);const n=new Uint8Array(e/2);for(let r=0;r<n.length;r++){const o=r*2,i=t.slice(o,o+2),s=Number.parseInt(i,16);if(Number.isNaN(s)||s<0)throw new Error("Invalid byte sequence");n[r]=s}return n}function ot(t){return tn(Qt(t))}function en(t){if(!ke(t))throw new Error("Uint8Array expected");return tn(Qt(Uint8Array.from(t).reverse()))}function It(t,e){return Xt(t.toString(16).padStart(e*2,"0"))}function nn(t,e){return It(t,e).reverse()}function ri(t){return Xt(sr(t))}function J(t,e,n){let r;if(typeof e=="string")try{r=Xt(e)}catch(i){throw new Error(`${t} must be valid hex string, got "${e}". Cause: ${i}`)}else if(ke(e))r=Uint8Array.from(e);else throw new Error(`${t} must be hex string or Uint8Array`);const o=r.length;if(typeof n=="number"&&o!==n)throw new Error(`${t} expected ${n} bytes, got ${o}`);return r}function zt(...t){const e=new Uint8Array(t.reduce((r,o)=>r+o.length,0));let n=0;return t.forEach(r=>{if(!ke(r))throw new Error("Uint8Array expected");e.set(r,n),n+=r.length}),e}function oi(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}function ii(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function si(t){let e;for(e=0;t>ir;t>>=Se,e+=1);return e}function ci(t,e){return t>>BigInt(e)&Se}const li=(t,e,n)=>t|(n?Se:ir)<<BigInt(e),rn=t=>(ei<<BigInt(t-1))-Se,on=t=>new Uint8Array(t),cr=t=>Uint8Array.from(t);function lr(t,e,n){if(typeof t!="number"||t<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=on(t),o=on(t),i=0;const s=()=>{r.fill(1),o.fill(0),i=0},c=(...u)=>n(o,r,...u),l=(u=on())=>{o=c(cr([0]),u),r=c(),u.length!==0&&(o=c(cr([1]),u),r=c())},a=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let u=0;const w=[];for(;u<e;){r=c();const h=r.slice();w.push(h),u+=r.length}return zt(...w)};return(u,w)=>{s(),l(u);let h;for(;!(h=w(a()));)l();return s(),h}}const ai={bigint:t=>typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||t instanceof Uint8Array,isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function ce(t,e,n={}){const r=(o,i,s)=>{const c=ai[i];if(typeof c!="function")throw new Error(`Invalid validator "${i}", expected function`);const l=t[o];if(!(s&&l===void 0)&&!c(l,t))throw new Error(`Invalid param ${String(o)}=${l} (${typeof l}), expected ${i}`)};for(const[o,i]of Object.entries(e))r(o,i,!1);for(const[o,i]of Object.entries(n))r(o,i,!0);return t}const ui=Object.freeze(Object.defineProperty({__proto__:null,bitGet:ci,bitLen:si,bitMask:rn,bitSet:li,bytesToHex:Qt,bytesToNumberBE:ot,bytesToNumberLE:en,concatBytes:zt,createHmacDrbg:lr,ensureBytes:J,equalBytes:oi,hexToBytes:Xt,hexToNumber:tn,numberToBytesBE:It,numberToBytesLE:nn,numberToHexUnpadded:sr,numberToVarBytesBE:ri,utf8ToBytes:ii,validateObject:ce},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const G=BigInt(0),K=BigInt(1),Kt=BigInt(2),fi=BigInt(3),sn=BigInt(4),ar=BigInt(5),ur=BigInt(8);BigInt(9),BigInt(16);function F(t,e){const n=t%e;return n>=G?n:e+n}function di(t,e,n){if(n<=G||e<G)throw new Error("Expected power/modulo > 0");if(n===K)return G;let r=K;for(;e>G;)e&K&&(r=r*t%n),t=t*t%n,e>>=K;return r}function ct(t,e,n){let r=t;for(;e-- >G;)r*=r,r%=n;return r}function cn(t,e){if(t===G||e<=G)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let n=F(t,e),r=e,o=G,i=K;for(;n!==G;){const c=r/n,l=r%n,a=o-i*c;r=n,n=l,o=i,i=a}if(r!==K)throw new Error("invert: does not exist");return F(o,e)}function hi(t){const e=(t-K)/Kt;let n,r,o;for(n=t-K,r=0;n%Kt===G;n/=Kt,r++);for(o=Kt;o<t&&di(o,e,t)!==t-K;o++);if(r===1){const s=(t+K)/sn;return function(l,a){const f=l.pow(a,s);if(!l.eql(l.sqr(f),a))throw new Error("Cannot find square root");return f}}const i=(n+K)/Kt;return function(c,l){if(c.pow(l,e)===c.neg(c.ONE))throw new Error("Cannot find square root");let a=r,f=c.pow(c.mul(c.ONE,o),n),u=c.pow(l,i),w=c.pow(l,n);for(;!c.eql(w,c.ONE);){if(c.eql(w,c.ZERO))return c.ZERO;let h=1;for(let d=c.sqr(w);h<a&&!c.eql(d,c.ONE);h++)d=c.sqr(d);const g=c.pow(f,K<<BigInt(a-h-1));f=c.sqr(g),u=c.mul(u,g),w=c.mul(w,f),a=h}return u}}function wi(t){if(t%sn===fi){const e=(t+K)/sn;return function(r,o){const i=r.pow(o,e);if(!r.eql(r.sqr(i),o))throw new Error("Cannot find square root");return i}}if(t%ur===ar){const e=(t-ar)/ur;return function(r,o){const i=r.mul(o,Kt),s=r.pow(i,e),c=r.mul(o,s),l=r.mul(r.mul(c,Kt),s),a=r.mul(c,r.sub(l,r.ONE));if(!r.eql(r.sqr(a),o))throw new Error("Cannot find square root");return a}}return hi(t)}const pi=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function gi(t){const e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},n=pi.reduce((r,o)=>(r[o]="function",r),e);return ce(t,n)}function bi(t,e,n){if(n<G)throw new Error("Expected power > 0");if(n===G)return t.ONE;if(n===K)return e;let r=t.ONE,o=e;for(;n>G;)n&K&&(r=t.mul(r,o)),o=t.sqr(o),n>>=K;return r}function yi(t,e){const n=new Array(e.length),r=e.reduce((i,s,c)=>t.is0(s)?i:(n[c]=i,t.mul(i,s)),t.ONE),o=t.inv(r);return e.reduceRight((i,s,c)=>t.is0(s)?i:(n[c]=t.mul(i,n[c]),t.mul(i,s)),o),n}function fr(t,e){const n=e!==void 0?e:t.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function mi(t,e,n=!1,r={}){if(t<=G)throw new Error(`Expected Field ORDER > 0, got ${t}`);const{nBitLength:o,nByteLength:i}=fr(t,e);if(i>2048)throw new Error("Field lengths over 2048 bytes are not supported");const s=wi(t),c=Object.freeze({ORDER:t,BITS:o,BYTES:i,MASK:rn(o),ZERO:G,ONE:K,create:l=>F(l,t),isValid:l=>{if(typeof l!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof l}`);return G<=l&&l<t},is0:l=>l===G,isOdd:l=>(l&K)===K,neg:l=>F(-l,t),eql:(l,a)=>l===a,sqr:l=>F(l*l,t),add:(l,a)=>F(l+a,t),sub:(l,a)=>F(l-a,t),mul:(l,a)=>F(l*a,t),pow:(l,a)=>bi(c,l,a),div:(l,a)=>F(l*cn(a,t),t),sqrN:l=>l*l,addN:(l,a)=>l+a,subN:(l,a)=>l-a,mulN:(l,a)=>l*a,inv:l=>cn(l,t),sqrt:r.sqrt||(l=>s(c,l)),invertBatch:l=>yi(c,l),cmov:(l,a,f)=>f?a:l,toBytes:l=>n?nn(l,i):It(l,i),fromBytes:l=>{if(l.length!==i)throw new Error(`Fp.fromBytes: expected ${i}, got ${l.length}`);return n?en(l):ot(l)}});return Object.freeze(c)}function dr(t){if(typeof t!="bigint")throw new Error("field order must be bigint");const e=t.toString(2).length;return Math.ceil(e/8)}function hr(t){const e=dr(t);return e+Math.ceil(e/2)}function Ei(t,e,n=!1){const r=t.length,o=dr(e),i=hr(e);if(r<16||r<i||r>1024)throw new Error(`expected ${i}-1024 bytes of input, got ${r}`);const s=n?ot(t):en(t),c=F(s,e-K)+K;return n?nn(c,o):It(c,o)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const xi=BigInt(0),ln=BigInt(1);function vi(t,e){const n=(o,i)=>{const s=i.negate();return o?s:i},r=o=>{const i=Math.ceil(e/o)+1,s=2**(o-1);return{windows:i,windowSize:s}};return{constTimeNegate:n,unsafeLadder(o,i){let s=t.ZERO,c=o;for(;i>xi;)i&ln&&(s=s.add(c)),c=c.double(),i>>=ln;return s},precomputeWindow(o,i){const{windows:s,windowSize:c}=r(i),l=[];let a=o,f=a;for(let u=0;u<s;u++){f=a,l.push(f);for(let w=1;w<c;w++)f=f.add(a),l.push(f);a=f.double()}return l},wNAF(o,i,s){const{windows:c,windowSize:l}=r(o);let a=t.ZERO,f=t.BASE;const u=BigInt(2**o-1),w=2**o,h=BigInt(o);for(let g=0;g<c;g++){const d=g*l;let p=Number(s&u);s>>=h,p>l&&(p-=w,s+=ln);const b=d,v=d+Math.abs(p)-1,S=g%2!==0,A=p<0;p===0?f=f.add(n(S,i[b])):a=a.add(n(A,i[v]))}return{p:a,f}},wNAFCached(o,i,s,c){const l=o._WINDOW_SIZE||1;let a=i.get(o);return a||(a=this.precomputeWindow(o,l),l!==1&&i.set(o,c(a))),this.wNAF(l,a,s)}}}function wr(t){return gi(t.Fp),ce(t,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...fr(t.n,t.nBitLength),...t,p:t.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function _i(t){const e=wr(t);ce(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:n,Fp:r,a:o}=e;if(n){if(!r.eql(o,r.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof n!="object"||typeof n.beta!="bigint"||typeof n.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}const{bytesToNumberBE:Si,hexToBytes:ki}=ui,Dt={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(t){const{Err:e}=Dt;if(t.length<2||t[0]!==2)throw new e("Invalid signature integer tag");const n=t[1],r=t.subarray(2,n+2);if(!n||r.length!==n)throw new e("Invalid signature integer: wrong length");if(r[0]&128)throw new e("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:Si(r),l:t.subarray(n+2)}},toSig(t){const{Err:e}=Dt,n=typeof t=="string"?ki(t):t;if(!(n instanceof Uint8Array))throw new Error("ui8a expected");let r=n.length;if(r<2||n[0]!=48)throw new e("Invalid signature tag");if(n[1]!==r-2)throw new e("Invalid signature: incorrect length");const{d:o,l:i}=Dt._parseInt(n.subarray(2)),{d:s,l:c}=Dt._parseInt(i);if(c.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s}},hexFromSig(t){const e=a=>Number.parseInt(a[0],16)&8?"00"+a:a,n=a=>{const f=a.toString(16);return f.length&1?`0${f}`:f},r=e(n(t.s)),o=e(n(t.r)),i=r.length/2,s=o.length/2,c=n(i),l=n(s);return`30${n(s+i+4)}02${l}${o}02${c}${r}`}},mt=BigInt(0),lt=BigInt(1);BigInt(2);const pr=BigInt(3);BigInt(4);function Ai(t){const e=_i(t),{Fp:n}=e,r=e.toBytes||((g,d,p)=>{const b=d.toAffine();return zt(Uint8Array.from([4]),n.toBytes(b.x),n.toBytes(b.y))}),o=e.fromBytes||(g=>{const d=g.subarray(1),p=n.fromBytes(d.subarray(0,n.BYTES)),b=n.fromBytes(d.subarray(n.BYTES,2*n.BYTES));return{x:p,y:b}});function i(g){const{a:d,b:p}=e,b=n.sqr(g),v=n.mul(b,g);return n.add(n.add(v,n.mul(g,d)),p)}if(!n.eql(n.sqr(e.Gy),i(e.Gx)))throw new Error("bad generator point: equation left != right");function s(g){return typeof g=="bigint"&&mt<g&&g<e.n}function c(g){if(!s(g))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function l(g){const{allowedPrivateKeyLengths:d,nByteLength:p,wrapPrivateKey:b,n:v}=e;if(d&&typeof g!="bigint"){if(g instanceof Uint8Array&&(g=Qt(g)),typeof g!="string"||!d.includes(g.length))throw new Error("Invalid key");g=g.padStart(p*2,"0")}let S;try{S=typeof g=="bigint"?g:ot(J("private key",g,p))}catch{throw new Error(`private key must be ${p} bytes, hex or bigint, not ${typeof g}`)}return b&&(S=F(S,v)),c(S),S}const a=new Map;function f(g){if(!(g instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(d,p,b){if(this.px=d,this.py=p,this.pz=b,d==null||!n.isValid(d))throw new Error("x required");if(p==null||!n.isValid(p))throw new Error("y required");if(b==null||!n.isValid(b))throw new Error("z required")}static fromAffine(d){const{x:p,y:b}=d||{};if(!d||!n.isValid(p)||!n.isValid(b))throw new Error("invalid affine point");if(d instanceof u)throw new Error("projective point not allowed");const v=S=>n.eql(S,n.ZERO);return v(p)&&v(b)?u.ZERO:new u(p,b,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(d){const p=n.invertBatch(d.map(b=>b.pz));return d.map((b,v)=>b.toAffine(p[v])).map(u.fromAffine)}static fromHex(d){const p=u.fromAffine(o(J("pointHex",d)));return p.assertValidity(),p}static fromPrivateKey(d){return u.BASE.multiply(l(d))}_setWindowSize(d){this._WINDOW_SIZE=d,a.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:d,y:p}=this.toAffine();if(!n.isValid(d)||!n.isValid(p))throw new Error("bad point: x or y not FE");const b=n.sqr(p),v=i(d);if(!n.eql(b,v))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){const{y:d}=this.toAffine();if(n.isOdd)return!n.isOdd(d);throw new Error("Field doesn't support isOdd")}equals(d){f(d);const{px:p,py:b,pz:v}=this,{px:S,py:A,pz:B}=d,y=n.eql(n.mul(p,B),n.mul(S,v)),E=n.eql(n.mul(b,B),n.mul(A,v));return y&&E}negate(){return new u(this.px,n.neg(this.py),this.pz)}double(){const{a:d,b:p}=e,b=n.mul(p,pr),{px:v,py:S,pz:A}=this;let B=n.ZERO,y=n.ZERO,E=n.ZERO,k=n.mul(v,v),C=n.mul(S,S),N=n.mul(A,A),I=n.mul(v,S);return I=n.add(I,I),E=n.mul(v,A),E=n.add(E,E),B=n.mul(d,E),y=n.mul(b,N),y=n.add(B,y),B=n.sub(C,y),y=n.add(C,y),y=n.mul(B,y),B=n.mul(I,B),E=n.mul(b,E),N=n.mul(d,N),I=n.sub(k,N),I=n.mul(d,I),I=n.add(I,E),E=n.add(k,k),k=n.add(E,k),k=n.add(k,N),k=n.mul(k,I),y=n.add(y,k),N=n.mul(S,A),N=n.add(N,N),k=n.mul(N,I),B=n.sub(B,k),E=n.mul(N,C),E=n.add(E,E),E=n.add(E,E),new u(B,y,E)}add(d){f(d);const{px:p,py:b,pz:v}=this,{px:S,py:A,pz:B}=d;let y=n.ZERO,E=n.ZERO,k=n.ZERO;const C=e.a,N=n.mul(e.b,pr);let I=n.mul(p,S),q=n.mul(b,A),P=n.mul(v,B),Q=n.add(p,b),x=n.add(S,A);Q=n.mul(Q,x),x=n.add(I,q),Q=n.sub(Q,x),x=n.add(p,v);let O=n.add(S,B);return x=n.mul(x,O),O=n.add(I,P),x=n.sub(x,O),O=n.add(b,v),y=n.add(A,B),O=n.mul(O,y),y=n.add(q,P),O=n.sub(O,y),k=n.mul(C,x),y=n.mul(N,P),k=n.add(y,k),y=n.sub(q,k),k=n.add(q,k),E=n.mul(y,k),q=n.add(I,I),q=n.add(q,I),P=n.mul(C,P),x=n.mul(N,x),q=n.add(q,P),P=n.sub(I,P),P=n.mul(C,P),x=n.add(x,P),I=n.mul(q,x),E=n.add(E,I),I=n.mul(O,x),y=n.mul(Q,y),y=n.sub(y,I),I=n.mul(Q,q),k=n.mul(O,k),k=n.add(k,I),new u(y,E,k)}subtract(d){return this.add(d.negate())}is0(){return this.equals(u.ZERO)}wNAF(d){return h.wNAFCached(this,a,d,p=>{const b=n.invertBatch(p.map(v=>v.pz));return p.map((v,S)=>v.toAffine(b[S])).map(u.fromAffine)})}multiplyUnsafe(d){const p=u.ZERO;if(d===mt)return p;if(c(d),d===lt)return this;const{endo:b}=e;if(!b)return h.unsafeLadder(this,d);let{k1neg:v,k1:S,k2neg:A,k2:B}=b.splitScalar(d),y=p,E=p,k=this;for(;S>mt||B>mt;)S&lt&&(y=y.add(k)),B&lt&&(E=E.add(k)),k=k.double(),S>>=lt,B>>=lt;return v&&(y=y.negate()),A&&(E=E.negate()),E=new u(n.mul(E.px,b.beta),E.py,E.pz),y.add(E)}multiply(d){c(d);let p=d,b,v;const{endo:S}=e;if(S){const{k1neg:A,k1:B,k2neg:y,k2:E}=S.splitScalar(p);let{p:k,f:C}=this.wNAF(B),{p:N,f:I}=this.wNAF(E);k=h.constTimeNegate(A,k),N=h.constTimeNegate(y,N),N=new u(n.mul(N.px,S.beta),N.py,N.pz),b=k.add(N),v=C.add(I)}else{const{p:A,f:B}=this.wNAF(p);b=A,v=B}return u.normalizeZ([b,v])[0]}multiplyAndAddUnsafe(d,p,b){const v=u.BASE,S=(B,y)=>y===mt||y===lt||!B.equals(v)?B.multiplyUnsafe(y):B.multiply(y),A=S(this,p).add(S(d,b));return A.is0()?void 0:A}toAffine(d){const{px:p,py:b,pz:v}=this,S=this.is0();d==null&&(d=S?n.ONE:n.inv(v));const A=n.mul(p,d),B=n.mul(b,d),y=n.mul(v,d);if(S)return{x:n.ZERO,y:n.ZERO};if(!n.eql(y,n.ONE))throw new Error("invZ was invalid");return{x:A,y:B}}isTorsionFree(){const{h:d,isTorsionFree:p}=e;if(d===lt)return!0;if(p)return p(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:d,clearCofactor:p}=e;return d===lt?this:p?p(u,this):this.multiplyUnsafe(e.h)}toRawBytes(d=!0){return this.assertValidity(),r(u,this,d)}toHex(d=!0){return Qt(this.toRawBytes(d))}}u.BASE=new u(e.Gx,e.Gy,n.ONE),u.ZERO=new u(n.ZERO,n.ONE,n.ZERO);const w=e.nBitLength,h=vi(u,e.endo?Math.ceil(w/2):w);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:l,weierstrassEquation:i,isWithinCurveOrder:s}}function Bi(t){const e=wr(t);return ce(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function Oi(t){const e=Bi(t),{Fp:n,n:r}=e,o=n.BYTES+1,i=2*n.BYTES+1;function s(x){return mt<x&&x<n.ORDER}function c(x){return F(x,r)}function l(x){return cn(x,r)}const{ProjectivePoint:a,normPrivateKeyToScalar:f,weierstrassEquation:u,isWithinCurveOrder:w}=Ai({...e,toBytes(x,O,$){const M=O.toAffine(),z=n.toBytes(M.x),D=zt;return $?D(Uint8Array.from([O.hasEvenY()?2:3]),z):D(Uint8Array.from([4]),z,n.toBytes(M.y))},fromBytes(x){const O=x.length,$=x[0],M=x.subarray(1);if(O===o&&($===2||$===3)){const z=ot(M);if(!s(z))throw new Error("Point is not on curve");const D=u(z);let X=n.sqrt(D);const Y=(X&lt)===lt;return($&1)===1!==Y&&(X=n.neg(X)),{x:z,y:X}}else if(O===i&&$===4){const z=n.fromBytes(M.subarray(0,n.BYTES)),D=n.fromBytes(M.subarray(n.BYTES,2*n.BYTES));return{x:z,y:D}}else throw new Error(`Point of length ${O} was invalid. Expected ${o} compressed bytes or ${i} uncompressed bytes`)}}),h=x=>Qt(It(x,e.nByteLength));function g(x){const O=r>>lt;return x>O}function d(x){return g(x)?c(-x):x}const p=(x,O,$)=>ot(x.slice(O,$));class b{constructor(O,$,M){this.r=O,this.s=$,this.recovery=M,this.assertValidity()}static fromCompact(O){const $=e.nByteLength;return O=J("compactSignature",O,$*2),new b(p(O,0,$),p(O,$,2*$))}static fromDER(O){const{r:$,s:M}=Dt.toSig(J("DER",O));return new b($,M)}assertValidity(){if(!w(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!w(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(O){return new b(this.r,this.s,O)}recoverPublicKey(O){const{r:$,s:M,recovery:z}=this,D=E(J("msgHash",O));if(z==null||![0,1,2,3].includes(z))throw new Error("recovery id invalid");const X=z===2||z===3?$+e.n:$;if(X>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");const Y=z&1?"03":"02",ft=a.fromHex(Y+h(X)),tt=l(X),dt=c(-D*tt),Lt=c(M*tt),ht=a.BASE.multiplyAndAddUnsafe(ft,dt,Lt);if(!ht)throw new Error("point at infinify");return ht.assertValidity(),ht}hasHighS(){return g(this.s)}normalizeS(){return this.hasHighS()?new b(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return Xt(this.toDERHex())}toDERHex(){return Dt.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Xt(this.toCompactHex())}toCompactHex(){return h(this.r)+h(this.s)}}const v={isValidPrivateKey(x){try{return f(x),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const x=hr(e.n);return Ei(e.randomBytes(x),e.n)},precompute(x=8,O=a.BASE){return O._setWindowSize(x),O.multiply(BigInt(3)),O}};function S(x,O=!0){return a.fromPrivateKey(x).toRawBytes(O)}function A(x){const O=x instanceof Uint8Array,$=typeof x=="string",M=(O||$)&&x.length;return O?M===o||M===i:$?M===2*o||M===2*i:x instanceof a}function B(x,O,$=!0){if(A(x))throw new Error("first arg must be private key");if(!A(O))throw new Error("second arg must be public key");return a.fromHex(O).multiply(f(x)).toRawBytes($)}const y=e.bits2int||function(x){const O=ot(x),$=x.length*8-e.nBitLength;return $>0?O>>BigInt($):O},E=e.bits2int_modN||function(x){return c(y(x))},k=rn(e.nBitLength);function C(x){if(typeof x!="bigint")throw new Error("bigint expected");if(!(mt<=x&&x<k))throw new Error(`bigint expected < 2^${e.nBitLength}`);return It(x,e.nByteLength)}function N(x,O,$=I){if(["recovered","canonical"].some(St=>St in $))throw new Error("sign() legacy options not supported");const{hash:M,randomBytes:z}=e;let{lowS:D,prehash:X,extraEntropy:Y}=$;D==null&&(D=!0),x=J("msgHash",x),X&&(x=J("prehashed msgHash",M(x)));const ft=E(x),tt=f(O),dt=[C(tt),C(ft)];if(Y!=null){const St=Y===!0?z(n.BYTES):Y;dt.push(J("extraEntropy",St))}const Lt=zt(...dt),ht=ft;function pe(St){const Rt=y(St);if(!w(Rt))return;const Re=l(Rt),Ht=a.BASE.multiply(Rt).toAffine(),st=c(Ht.x);if(st===mt)return;const qt=c(Re*c(ht+st*tt));if(qt===mt)return;let He=(Ht.x===st?0:2)|Number(Ht.y&lt),qe=qt;return D&&g(qt)&&(qe=d(qt),He^=1),new b(st,qe,He)}return{seed:Lt,k2sig:pe}}const I={lowS:e.lowS,prehash:!1},q={lowS:e.lowS,prehash:!1};function P(x,O,$=I){const{seed:M,k2sig:z}=N(x,O,$),D=e;return lr(D.hash.outputLen,D.nByteLength,D.hmac)(M,z)}a.BASE._setWindowSize(8);function Q(x,O,$,M=q){var Ht;const z=x;if(O=J("msgHash",O),$=J("publicKey",$),"strict"in M)throw new Error("options.strict was renamed to lowS");const{lowS:D,prehash:X}=M;let Y,ft;try{if(typeof z=="string"||z instanceof Uint8Array)try{Y=b.fromDER(z)}catch(st){if(!(st instanceof Dt.Err))throw st;Y=b.fromCompact(z)}else if(typeof z=="object"&&typeof z.r=="bigint"&&typeof z.s=="bigint"){const{r:st,s:qt}=z;Y=new b(st,qt)}else throw new Error("PARSE");ft=a.fromHex($)}catch(st){if(st.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(D&&Y.hasHighS())return!1;X&&(O=e.hash(O));const{r:tt,s:dt}=Y,Lt=E(O),ht=l(dt),pe=c(Lt*ht),St=c(tt*ht),Rt=(Ht=a.BASE.multiplyAndAddUnsafe(ft,pe,St))==null?void 0:Ht.toAffine();return Rt?c(Rt.x)===tt:!1}return{CURVE:e,getPublicKey:S,getSharedSecret:B,sign:P,verify:Q,ProjectivePoint:a,Signature:b,utils:v}}class gr extends rr{constructor(e,n){super(),this.finished=!1,this.destroyed=!1,Do(e);const r=Qe(n);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const o=this.blockLen,i=new Uint8Array(o);i.set(r.length>o?e.create().update(r).digest():r);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),i.fill(0)}update(e){return _e(this),this.iHash.update(e),this}digestInto(e){_e(this),er(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,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=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const br=(t,e,n)=>new gr(t,e).update(n).digest();br.create=(t,e)=>new gr(t,e);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Ii(t){return{hash:t,hmac:(e,...n)=>br(t,e,Zo(...n)),randomBytes:or}}function Ti(t,e){const n=r=>Oi({...t,...Ii(r)});return Object.freeze({...n(e),create:n})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Ae=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Be=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),yr=BigInt(1),Oe=BigInt(2),mr=(t,e)=>(t+e/Oe)/e;function Er(t){const e=Ae,n=BigInt(3),r=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),c=BigInt(44),l=BigInt(88),a=t*t*t%e,f=a*a*t%e,u=ct(f,n,e)*f%e,w=ct(u,n,e)*f%e,h=ct(w,Oe,e)*a%e,g=ct(h,o,e)*h%e,d=ct(g,i,e)*g%e,p=ct(d,c,e)*d%e,b=ct(p,l,e)*p%e,v=ct(b,c,e)*d%e,S=ct(v,n,e)*f%e,A=ct(S,s,e)*g%e,B=ct(A,r,e)*a%e,y=ct(B,Oe,e);if(!an.eql(an.sqr(y),t))throw new Error("Cannot find square root");return y}const an=mi(Ae,void 0,void 0,{sqrt:Er}),le=Ti({a:BigInt(0),b:BigInt(7),Fp:an,n:Be,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:t=>{const e=Be,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-yr*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=n,s=BigInt("0x100000000000000000000000000000000"),c=mr(i*t,e),l=mr(-r*t,e);let a=F(t-c*n-l*o,e),f=F(-c*r-l*i,e);const u=a>s,w=f>s;if(u&&(a=e-a),w&&(f=e-f),a>s||f>s)throw new Error("splitScalar: Endomorphism failed, k="+t);return{k1neg:u,k1:a,k2neg:w,k2:f}}}},Xe),Ie=BigInt(0),xr=t=>typeof t=="bigint"&&Ie<t&&t<Ae,Ni=t=>typeof t=="bigint"&&Ie<t&&t<Be,vr={};function Te(t,...e){let n=vr[t];if(n===void 0){const r=Xe(Uint8Array.from(t,o=>o.charCodeAt(0)));n=zt(r,r),vr[t]=n}return Xe(zt(n,...e))}const un=t=>t.toRawBytes(!0).slice(1),fn=t=>It(t,32),dn=t=>F(t,Ae),ae=t=>F(t,Be),hn=le.ProjectivePoint,Pi=(t,e,n)=>hn.BASE.multiplyAndAddUnsafe(t,e,n);function wn(t){let e=le.utils.normPrivateKeyToScalar(t),n=hn.fromPrivateKey(e);return{scalar:n.hasEvenY()?e:ae(-e),bytes:un(n)}}function _r(t){if(!xr(t))throw new Error("bad x: need 0 < x < p");const e=dn(t*t),n=dn(e*t+BigInt(7));let r=Er(n);r%Oe!==Ie&&(r=dn(-r));const o=new hn(t,r,yr);return o.assertValidity(),o}function Sr(...t){return ae(ot(Te("BIP0340/challenge",...t)))}function Ui(t){return wn(t).bytes}function $i(t,e,n=or(32)){const r=J("message",t),{bytes:o,scalar:i}=wn(e),s=J("auxRand",n,32),c=fn(i^ot(Te("BIP0340/aux",s))),l=Te("BIP0340/nonce",c,o,r),a=ae(ot(l));if(a===Ie)throw new Error("sign failed: k is zero");const{bytes:f,scalar:u}=wn(a),w=Sr(f,o,r),h=new Uint8Array(64);if(h.set(f,0),h.set(fn(ae(u+w*i)),32),!kr(h,r,o))throw new Error("sign: Invalid signature produced");return h}function kr(t,e,n){const r=J("signature",t,64),o=J("message",e),i=J("publicKey",n,32);try{const s=_r(ot(i)),c=ot(r.subarray(0,32));if(!xr(c))return!1;const l=ot(r.subarray(32,64));if(!Ni(l))return!1;const a=Sr(fn(c),un(s),o),f=Pi(s,l,ae(-a));return!(!f||!f.hasEvenY()||f.toAffine().x!==c)}catch{return!1}}const rt={getPublicKey:Ui,sign:$i,verify:kr,utils:{randomPrivateKey:le.utils.randomPrivateKey,lift_x:_r,pointToBytes:un,numberToBytesBE:It,bytesToNumberBE:ot,taggedHash:Te,mod:F}};function pn(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`Wrong positive integer: ${t}`)}function Ci(t){if(typeof t!="boolean")throw new Error(`Expected boolean, not ${t}`)}function Ar(t,...e){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");if(e.length>0&&!e.includes(t.length))throw new Error(`Expected Uint8Array of length ${e}, not of length=${t.length}`)}function Li(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");pn(t.outputLen),pn(t.blockLen)}function Ri(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 Hi(t,e){Ar(t);const n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const gn={number:pn,bool:Ci,bytes:Ar,hash:Li,exists:Ri,output:Hi};function qi(t,e,n,r){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,n,r);const o=BigInt(32),i=BigInt(4294967295),s=Number(n>>o&i),c=Number(n&i),l=r?4:0,a=r?0:4;t.setUint32(e+l,s,r),t.setUint32(e+a,c,r)}class ji extends zo{constructor(e,n,r,o){super(),this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Ge(this.buffer)}update(e){gn.exists(this);const{view:n,buffer:r,blockLen:o}=this;e=Qn(e);const i=e.length;for(let s=0;s<i;){const c=Math.min(o-this.pos,i-s);if(c===o){const l=Ge(e);for(;o<=i-s;s+=o)this.process(l,s);continue}r.set(e.subarray(s,s+c),this.pos),this.pos+=c,s+=c,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gn.exists(this),gn.output(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:i}=this;let{pos:s}=this;n[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(r,0),s=0);for(let u=s;u<o;u++)n[u]=0;qi(r,o-8,BigInt(this.length*8),i),this.process(r,0);const c=Ge(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const a=l/4,f=this.get();if(a>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<a;u++)c.setUint32(4*u,f[u],i)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:i,destroyed:s,pos:c}=this;return e.length=o,e.pos=c,e.finished=i,e.destroyed=s,o%n&&e.buffer.set(r),e}}const Mi=(t,e,n)=>t&e^~t&n,zi=(t,e,n)=>t&e^t&n^e&n,Ki=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Tt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Nt=new Uint32Array(64);class Br extends ji{constructor(){super(64,32,8,!1),this.A=Tt[0]|0,this.B=Tt[1]|0,this.C=Tt[2]|0,this.D=Tt[3]|0,this.E=Tt[4]|0,this.F=Tt[5]|0,this.G=Tt[6]|0,this.H=Tt[7]|0}get(){const{A:e,B:n,C:r,D:o,E:i,F:s,G:c,H:l}=this;return[e,n,r,o,i,s,c,l]}set(e,n,r,o,i,s,c,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=c|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)Nt[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const w=Nt[u-15],h=Nt[u-2],g=pt(w,7)^pt(w,18)^w>>>3,d=pt(h,17)^pt(h,19)^h>>>10;Nt[u]=d+Nt[u-7]+g+Nt[u-16]|0}let{A:r,B:o,C:i,D:s,E:c,F:l,G:a,H:f}=this;for(let u=0;u<64;u++){const w=pt(c,6)^pt(c,11)^pt(c,25),h=f+w+Mi(c,l,a)+Ki[u]+Nt[u]|0,d=(pt(r,2)^pt(r,13)^pt(r,22))+zi(r,o,i)|0;f=a,a=l,l=c,c=s+h|0,s=i,i=o,o=r,r=h+d|0}r=r+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,c=c+this.E|0,l=l+this.F|0,a=a+this.G|0,f=f+this.H|0,this.set(r,o,i,s,c,l,a,f)}roundClean(){Nt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class Di extends Br{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}}const bn=Xn(()=>new Br);Xn(()=>new Di);var te=Symbol("verified"),Vi=t=>t instanceof Object;function Wi(t){if(!Vi(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 n=t.tags[e];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}new TextDecoder("utf-8");var Zi=new TextEncoder,Gi=class{generateSecretKey(){return rt.utils.randomPrivateKey()}getPublicKey(e){return nt(rt.getPublicKey(e))}finalizeEvent(e,n){const r=e;return r.pubkey=nt(rt.getPublicKey(n)),r.id=yn(r),r.sig=nt(rt.sign(yn(r),n)),r[te]=!0,r}verifyEvent(e){if(typeof e[te]=="boolean")return e[te];const n=yn(e);if(n!==e.id)return e[te]=!1,!1;try{const r=rt.verify(e.sig,n,e.pubkey);return e[te]=r,r}catch{return e[te]=!1,!1}}};function Fi(t){if(!Wi(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 yn(t){let e=bn(Zi.encode(Fi(t)));return nt(e)}var Ne=new Gi,Yi=Ne.generateSecretKey,Or=Ne.getPublicKey;Ne.finalizeEvent,Ne.verifyEvent;var Vt=Symbol("verified"),Ji=t=>t instanceof Object;function Qi(t){if(!Ji(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 n=t.tags[e];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}new TextDecoder("utf-8");var Xi=new TextEncoder;function ue(t){t.indexOf("://")===-1&&(t="wss://"+t);let e=new URL(t);return e.pathname=e.pathname.replace(/\/+/g,"/"),e.pathname.endsWith("/")&&(e.pathname=e.pathname.slice(0,-1)),(e.port==="80"&&e.protocol==="ws:"||e.port==="443"&&e.protocol==="wss:")&&(e.port=""),e.searchParams.sort(),e.hash="",e.toString()}var ts=class{constructor(e){m(this,"value");m(this,"next",null);m(this,"prev",null);this.value=e}},es=class{constructor(){m(this,"first");m(this,"last");this.first=null,this.last=null}enqueue(e){const n=new ts(e);return this.last?this.last===this.first?(this.last=n,this.last.prev=this.first,this.first.next=n):(n.prev=this.last,this.last.next=n,this.last=n):(this.first=n,this.last=n),!0}dequeue(){if(!this.first)return null;if(this.first===this.last){const n=this.first;return this.first=null,this.last=null,n.value}const e=this.first;return this.first=e.next,e.value}},ns=class{generateSecretKey(){return rt.utils.randomPrivateKey()}getPublicKey(e){return nt(rt.getPublicKey(e))}finalizeEvent(e,n){const r=e;return r.pubkey=nt(rt.getPublicKey(n)),r.id=mn(r),r.sig=nt(rt.sign(mn(r),n)),r[Vt]=!0,r}verifyEvent(e){if(typeof e[Vt]=="boolean")return e[Vt];const n=mn(e);if(n!==e.id)return e[Vt]=!1,!1;try{const r=rt.verify(e.sig,n,e.pubkey);return e[Vt]=r,r}catch{return e[Vt]=!1,!1}}};function rs(t){if(!Qi(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 mn(t){let e=bn(Xi.encode(rs(t)));return nt(e)}var Pe=new ns;Pe.generateSecretKey,Pe.getPublicKey,Pe.finalizeEvent;var os=Pe.verifyEvent,is=22242;function ss(t,e){if(t.ids&&t.ids.indexOf(e.id)===-1&&!t.ids.some(n=>e.id.startsWith(n))||t.kinds&&t.kinds.indexOf(e.kind)===-1||t.authors&&t.authors.indexOf(e.pubkey)===-1&&!t.authors.some(n=>e.pubkey.startsWith(n)))return!1;for(let n in t)if(n[0]==="#"){let r=n.slice(1),o=t[`#${r}`];if(o&&!e.tags.find(([i,s])=>i===n.slice(1)&&o.indexOf(s)!==-1))return!1}return!(t.since&&e.created_at<t.since||t.until&&e.created_at>t.until)}function cs(t,e){for(let n=0;n<t.length;n++)if(ss(t[n],e))return!0;return!1}function ls(t,e){let n=e.length+3,r=t.indexOf(`"${e}":`)+n,o=t.slice(r).indexOf('"')+r+1;return t.slice(o,o+64)}function as(t){let e=t.slice(0,22).indexOf('"EVENT"');if(e===-1)return null;let n=t.slice(e+7+1).indexOf('"');if(n===-1)return null;let r=e+7+1+n,o=t.slice(r+1,80).indexOf('"');if(o===-1)return null;let i=r+1+o;return t.slice(r+1,i)}function us(t,e){return{kind:is,created_at:Math.floor(Date.now()/1e3),tags:[["relay",t],["challenge",e]],content:""}}async function fs(){return new Promise(t=>{const e=new MessageChannel,n=()=>{e.port1.removeEventListener("message",n),t()};e.port1.addEventListener("message",n),e.port2.postMessage(0),e.port1.start()})}var ds=t=>(t[Vt]=!0,!0),Ir;try{Ir=WebSocket}catch{}var Tr=class{constructor(e,n){m(this,"url");m(this,"_connected",!1);m(this,"onclose",null);m(this,"onnotice",e=>console.debug(`NOTICE from ${this.url}: ${e}`));m(this,"baseEoseTimeout",4400);m(this,"connectionTimeout",4400);m(this,"openSubs",new Map);m(this,"connectionTimeoutHandle");m(this,"connectionPromise");m(this,"openCountRequests",new Map);m(this,"openEventPublishes",new Map);m(this,"ws");m(this,"incomingMessageQueue",new es);m(this,"queueRunning",!1);m(this,"challenge");m(this,"serial",0);m(this,"verifyEvent");this.url=ue(e),this.verifyEvent=n.verifyEvent}static async connect(e,n){const r=new Tr(e,n);return await r.connect(),r}closeAllSubscriptions(e){for(let[n,r]of this.openSubs)r.close(e);this.openSubs.clear();for(let[n,r]of this.openEventPublishes)r.reject(new Error(e));this.openEventPublishes.clear();for(let[n,r]of this.openCountRequests)r.reject(new Error(e));this.openCountRequests.clear()}get connected(){return this._connected}async connect(){return this.connectionPromise?this.connectionPromise:(this.challenge=void 0,this.connectionPromise=new Promise((e,n)=>{this.connectionTimeoutHandle=setTimeout(()=>{var r;n("connection timed out"),this.connectionPromise=void 0,(r=this.onclose)==null||r.call(this),this.closeAllSubscriptions("relay connection timed out")},this.connectionTimeout);try{this.ws=new Ir(this.url)}catch(r){n(r);return}this.ws.onopen=()=>{clearTimeout(this.connectionTimeoutHandle),this._connected=!0,e()},this.ws.onerror=r=>{var o;n(r.message),this._connected&&((o=this.onclose)==null||o.call(this),this.closeAllSubscriptions("relay connection errored"),this._connected=!1)},this.ws.onclose=async()=>{var r;this.connectionPromise=void 0,(r=this.onclose)==null||r.call(this),this.closeAllSubscriptions("relay connection closed"),this._connected=!1},this.ws.onmessage=this._onmessage.bind(this)}),this.connectionPromise)}async runQueue(){for(this.queueRunning=!0;this.handleNext()!==!1;)await fs();this.queueRunning=!1}handleNext(){var r,o;const e=this.incomingMessageQueue.dequeue();if(!e)return!1;const n=as(e);if(n){const i=this.openSubs.get(n);if(!i)return;const s=ls(e,"id"),c=(r=i.alreadyHaveEvent)==null?void 0:r.call(i,s);if((o=i.receivedEvent)==null||o.call(i,this,s),c)return}try{let i=JSON.parse(e);switch(i[0]){case"EVENT":{const s=this.openSubs.get(i[1]),c=i[2];this.verifyEvent(c)&&cs(s.filters,c)&&s.onevent(c);return}case"COUNT":{const s=i[1],c=i[2],l=this.openCountRequests.get(s);l&&(l.resolve(c.count),this.openCountRequests.delete(s));return}case"EOSE":{const s=this.openSubs.get(i[1]);if(!s)return;s.receivedEose();return}case"OK":{const s=i[1],c=i[2],l=i[3],a=this.openEventPublishes.get(s);c?a.resolve(l):a.reject(new Error(l)),this.openEventPublishes.delete(s);return}case"CLOSED":{const s=i[1],c=this.openSubs.get(s);if(!c)return;c.closed=!0,c.close(i[2]);return}case"NOTICE":this.onnotice(i[1]);return;case"AUTH":{this.challenge=i[1];return}}}catch{return}}async send(e){if(!this.connectionPromise)throw new Error("sending on closed connection");this.connectionPromise.then(()=>{var n;(n=this.ws)==null||n.send(e)})}async auth(e){if(!this.challenge)throw new Error("can't perform auth, no challenge was received");const n=await e(us(this.url,this.challenge)),r=new Promise((o,i)=>{this.openEventPublishes.set(n.id,{resolve:o,reject:i})});return this.send('["AUTH",'+JSON.stringify(n)+"]"),r}async publish(e){const n=new Promise((r,o)=>{this.openEventPublishes.set(e.id,{resolve:r,reject:o})});return this.send('["EVENT",'+JSON.stringify(e)+"]"),n}async count(e,n){this.serial++;const r=(n==null?void 0:n.id)||"count:"+this.serial,o=new Promise((i,s)=>{this.openCountRequests.set(r,{resolve:i,reject:s})});return this.send('["COUNT","'+r+'",'+JSON.stringify(e)+"]"),o}subscribe(e,n){const r=this.prepareSubscription(e,n);return r.fire(),r}prepareSubscription(e,n){this.serial++;const r=n.id||"sub:"+this.serial,o=new hs(this,r,e,n);return this.openSubs.set(r,o),o}close(){var e;this.closeAllSubscriptions("relay connection closed by us"),this._connected=!1,(e=this.ws)==null||e.close()}_onmessage(e){this.incomingMessageQueue.enqueue(e.data),this.queueRunning||this.runQueue()}},hs=class{constructor(e,n,r,o){m(this,"relay");m(this,"id");m(this,"closed",!1);m(this,"eosed",!1);m(this,"filters");m(this,"alreadyHaveEvent");m(this,"receivedEvent");m(this,"onevent");m(this,"oneose");m(this,"onclose");m(this,"eoseTimeout");m(this,"eoseTimeoutHandle");this.relay=e,this.filters=r,this.id=n,this.alreadyHaveEvent=o.alreadyHaveEvent,this.receivedEvent=o.receivedEvent,this.eoseTimeout=o.eoseTimeout||e.baseEoseTimeout,this.oneose=o.oneose,this.onclose=o.onclose,this.onevent=o.onevent||(i=>{console.warn(`onevent() callback not defined for subscription '${this.id}' in relay ${this.relay.url}. event received:`,i)})}fire(){this.relay.send('["REQ","'+this.id+'",'+JSON.stringify(this.filters).substring(1)),this.eoseTimeoutHandle=setTimeout(this.receivedEose.bind(this),this.eoseTimeout)}receivedEose(){var e;this.eosed||(clearTimeout(this.eoseTimeoutHandle),this.eosed=!0,(e=this.oneose)==null||e.call(this))}close(e="closed by caller"){var n;this.closed||(this.relay.send('["CLOSE",'+JSON.stringify(this.id)+"]"),this.closed=!0),this.relay.openSubs.delete(this.id),(n=this.onclose)==null||n.call(this,e)}},ws=class{constructor(e){m(this,"relays",new Map);m(this,"seenOn",new Map);m(this,"trackRelays",!1);m(this,"verifyEvent");m(this,"trustedRelayURLs",new Set);this.verifyEvent=e.verifyEvent}async ensureRelay(e,n){e=ue(e);let r=this.relays.get(e);return r||(r=new Tr(e,{verifyEvent:this.trustedRelayURLs.has(e)?ds:this.verifyEvent}),n!=null&&n.connectionTimeout&&(r.connectionTimeout=n.connectionTimeout),this.relays.set(e,r)),await r.connect(),r}close(e){e.map(ue).forEach(n=>{var r;(r=this.relays.get(n))==null||r.close()})}subscribeMany(e,n,r){this.trackRelays&&(r.receivedEvent=(w,h)=>{let g=this.seenOn.get(h);g||(g=new Set,this.seenOn.set(h,g)),g.add(w)});const o=new Set,i=[],s=[];let c=w=>{var h;s[w]=!0,s.filter(g=>g).length===e.length&&((h=r.oneose)==null||h.call(r),c=()=>{})};const l=[];let a=(w,h)=>{var g;c(w),l[w]=h,l.filter(d=>d).length===e.length&&((g=r.onclose)==null||g.call(r,l),a=()=>{})};const f=w=>{var g;if((g=r.alreadyHaveEvent)!=null&&g.call(r,w))return!0;const h=o.has(w);return o.add(w),h},u=Promise.all(e.map(ue).map(async(w,h,g)=>{if(g.indexOf(w)!==h){a(h,"duplicate url");return}let d;try{d=await this.ensureRelay(w,{connectionTimeout:r.maxWait?Math.max(r.maxWait*.8,r.maxWait-1e3):void 0})}catch(b){a(h,(b==null?void 0:b.message)||String(b));return}let p=d.subscribe(n,{...r,oneose:()=>c(h),onclose:b=>a(h,b),alreadyHaveEvent:f,eoseTimeout:r.maxWait});i.push(p)}));return{async close(){await u,i.forEach(w=>{w.close()})}}}subscribeManyEose(e,n,r){const o=this.subscribeMany(e,n,{...r,oneose(){o.close()}});return o}async querySync(e,n,r){return new Promise(async o=>{const i=[];this.subscribeManyEose(e,[n],{...r,onevent(s){i.push(s)},onclose(s){o(i)}})})}async get(e,n,r){n.limit=1;const o=await this.querySync(e,n,r);return o.sort((i,s)=>s.created_at-i.created_at),o[0]||null}publish(e,n){return e.map(ue).map(async(r,o,i)=>i.indexOf(r)!==o?Promise.reject("duplicate url"):(await this.ensureRelay(r)).publish(n))}},ps=class extends ws{constructor(){super({verifyEvent:os})}};function Nr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Wt(t,...e){if(!Nr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function Ue(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 Pr(t,e){Wt(t);const n=e.outputLen;if(t.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */const it=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),gs=t=>new DataView(t.buffer,t.byteOffset,t.byteLength);if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function bs(t){if(typeof t!="string")throw new Error(`string expected, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function fe(t){if(typeof t=="string")t=bs(t);else if(Nr(t))t=t.slice();else throw new Error(`Uint8Array expected, got ${typeof t}`);return t}const ys=(t,e)=>(Object.assign(e,t),e),Et=16,En=new Uint8Array(16),bt=it(En),ms=225,Es=(t,e,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:e<<31|n>>>1,s1:t<<31|e>>>1,s0:t>>>1^ms<<24&-(o&1)}},at=t=>(t>>>0&255)<<24|(t>>>8&255)<<16|(t>>>16&255)<<8|t>>>24&255|0;function xs(t){t.reverse();const e=t[15]&1;let n=0;for(let r=0;r<t.length;r++){const o=t[r];t[r]=o>>>1|n,n=(o&1)<<7}return t[0]^=-e&225,t}const vs=t=>t>64*1024?8:t>1024?4:2;class Ur{constructor(e,n){this.blockLen=Et,this.outputLen=Et,this.s0=0,this.s1=0,this.s2=0,this.s3=0,this.finished=!1,e=fe(e),Wt(e,16);const r=gs(e);let o=r.getUint32(0,!1),i=r.getUint32(4,!1),s=r.getUint32(8,!1),c=r.getUint32(12,!1);const l=[];for(let g=0;g<128;g++)l.push({s0:at(o),s1:at(i),s2:at(s),s3:at(c)}),{s0:o,s1:i,s2:s,s3:c}=Es(o,i,s,c);const a=vs(n||1024);if(![1,2,4,8].includes(a))throw new Error(`ghash: wrong window size=${a}, should be 2, 4 or 8`);this.W=a;const u=128/a,w=this.windowSize=2**a,h=[];for(let g=0;g<u;g++)for(let d=0;d<w;d++){let p=0,b=0,v=0,S=0;for(let A=0;A<a;A++){if(!(d>>>a-A-1&1))continue;const{s0:y,s1:E,s2:k,s3:C}=l[a*g+A];p^=y,b^=E,v^=k,S^=C}h.push({s0:p,s1:b,s2:v,s3:S})}this.t=h}_updateBlock(e,n,r,o){e^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:i,t:s,windowSize:c}=this;let l=0,a=0,f=0,u=0;const w=(1<<i)-1;let h=0;for(const g of[e,n,r,o])for(let d=0;d<4;d++){const p=g>>>8*d&255;for(let b=8/i-1;b>=0;b--){const v=p>>>i*b&w,{s0:S,s1:A,s2:B,s3:y}=s[h*c+v];l^=S,a^=A,f^=B,u^=y,h+=1}}this.s0=l,this.s1=a,this.s2=f,this.s3=u}update(e){e=fe(e),Ue(this);const n=it(e),r=Math.floor(e.length/Et),o=e.length%Et;for(let i=0;i<r;i++)this._updateBlock(n[i*4+0],n[i*4+1],n[i*4+2],n[i*4+3]);return o&&(En.set(e.subarray(r*Et)),this._updateBlock(bt[0],bt[1],bt[2],bt[3]),bt.fill(0)),this}destroy(){const{t:e}=this;for(const n of e)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(e){Ue(this),Pr(e,this),this.finished=!0;const{s0:n,s1:r,s2:o,s3:i}=this,s=it(e);return s[0]=n,s[1]=r,s[2]=o,s[3]=i,e}digest(){const e=new Uint8Array(Et);return this.digestInto(e),this.destroy(),e}}class _s extends Ur{constructor(e,n){e=fe(e);const r=xs(e.slice());super(r,n),r.fill(0)}update(e){e=fe(e),Ue(this);const n=it(e),r=e.length%Et,o=Math.floor(e.length/Et);for(let i=0;i<o;i++)this._updateBlock(at(n[i*4+3]),at(n[i*4+2]),at(n[i*4+1]),at(n[i*4+0]));return r&&(En.set(e.subarray(o*Et)),this._updateBlock(at(bt[3]),at(bt[2]),at(bt[1]),at(bt[0])),bt.fill(0)),this}digestInto(e){Ue(this),Pr(e,this),this.finished=!0;const{s0:n,s1:r,s2:o,s3:i}=this,s=it(e);return s[0]=n,s[1]=r,s[2]=o,s[3]=i,e.reverse()}}function $r(t){const e=(r,o)=>t(o,r.length).update(fe(r)).digest(),n=t(new Uint8Array(16),0);return e.outputLen=n.outputLen,e.blockLen=n.blockLen,e.create=(r,o)=>t(r,o),e}$r((t,e)=>new Ur(t,e)),$r((t,e)=>new _s(t,e));const Pt=16,Ss=283;function xn(t){return t<<1^Ss&-(t>>7)}function ee(t,e){let n=0;for(;e>0;e>>=1)n^=t&-(e&1),t=xn(t);return n}const vn=(()=>{let t=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=xn(r))t[n]=r;const e=new Uint8Array(256);e[0]=99;for(let n=0;n<255;n++){let r=t[255-n];r|=r<<8,e[t[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return e})(),ks=vn.map((t,e)=>vn.indexOf(e)),As=t=>t<<24|t>>>8,_n=t=>t<<8|t>>>24;function Cr(t,e){if(t.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((a,f)=>e(t[f])),r=n.map(_n),o=r.map(_n),i=o.map(_n),s=new Uint32Array(256*256),c=new Uint32Array(256*256),l=new Uint16Array(256*256);for(let a=0;a<256;a++)for(let f=0;f<256;f++){const u=a*256+f;s[u]=n[a]^r[f],c[u]=o[a]^i[f],l[u]=t[a]<<8|t[f]}return{sbox:t,sbox2:l,T0:n,T1:r,T2:o,T3:i,T01:s,T23:c}}const Sn=Cr(vn,t=>ee(t,3)<<24|t<<16|t<<8|ee(t,2)),Lr=Cr(ks,t=>ee(t,11)<<24|ee(t,13)<<16|ee(t,9)<<8|ee(t,14)),Bs=(()=>{const t=new Uint8Array(16);for(let e=0,n=1;e<16;e++,n=xn(n))t[e]=n;return t})();function Rr(t){Wt(t);const e=t.length;if(![16,24,32].includes(e))throw new Error(`aes: wrong key size: should be 16, 24 or 32, got: ${e}`);const{sbox2:n}=Sn,r=it(t),o=r.length,i=c=>yt(n,c,c,c,c),s=new Uint32Array(e+28);s.set(r);for(let c=o;c<s.length;c++){let l=s[c-1];c%o===0?l=i(As(l))^Bs[c/o-1]:o>6&&c%o===4&&(l=i(l)),s[c]=s[c-o]^l}return s}function Os(t){const e=Rr(t),n=e.slice(),r=e.length,{sbox2:o}=Sn,{T0:i,T1:s,T2:c,T3:l}=Lr;for(let a=0;a<r;a+=4)for(let f=0;f<4;f++)n[a+f]=e[r-a-4+f];e.fill(0);for(let a=4;a<r-4;a++){const f=n[a],u=yt(o,f,f,f,f);n[a]=i[u&255]^s[u>>>8&255]^c[u>>>16&255]^l[u>>>24]}return n}function Ut(t,e,n,r,o,i){return t[n<<8&65280|r>>>8&255]^e[o>>>8&65280|i>>>24&255]}function yt(t,e,n,r,o){return t[e&255|n&65280]|t[r>>>16&255|o>>>16&65280]<<16}function Hr(t,e,n,r,o){const{sbox2:i,T01:s,T23:c}=Sn;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const a=t.length/4-2;for(let g=0;g<a;g++){const d=t[l++]^Ut(s,c,e,n,r,o),p=t[l++]^Ut(s,c,n,r,o,e),b=t[l++]^Ut(s,c,r,o,e,n),v=t[l++]^Ut(s,c,o,e,n,r);e=d,n=p,r=b,o=v}const f=t[l++]^yt(i,e,n,r,o),u=t[l++]^yt(i,n,r,o,e),w=t[l++]^yt(i,r,o,e,n),h=t[l++]^yt(i,o,e,n,r);return{s0:f,s1:u,s2:w,s3:h}}function Is(t,e,n,r,o){const{sbox2:i,T01:s,T23:c}=Lr;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const a=t.length/4-2;for(let g=0;g<a;g++){const d=t[l++]^Ut(s,c,e,o,r,n),p=t[l++]^Ut(s,c,n,e,o,r),b=t[l++]^Ut(s,c,r,n,e,o),v=t[l++]^Ut(s,c,o,r,n,e);e=d,n=p,r=b,o=v}const f=t[l++]^yt(i,e,o,r,n),u=t[l++]^yt(i,n,e,o,r),w=t[l++]^yt(i,r,n,e,o),h=t[l++]^yt(i,o,r,n,e);return{s0:f,s1:u,s2:w,s3:h}}function qr(t,e){if(!e)return new Uint8Array(t);if(Wt(e),e.length<t)throw new Error(`aes: wrong destination length, expected at least ${t}, got: ${e.length}`);return e}function Ts(t){if(Wt(t),t.length%Pt!==0)throw new Error(`aes/(cbc-ecb).decrypt ciphertext should consist of blocks with size ${Pt}`)}function Ns(t,e,n){let r=t.length;const o=r%Pt;if(!e&&o!==0)throw new Error("aec/(cbc-ecb): unpadded plaintext with disabled padding");const i=it(t);if(e){let l=Pt-o;l||(l=Pt),r=r+l}const s=qr(r,n),c=it(s);return{b:i,o:c,out:s}}function Ps(t,e){if(!e)return t;const n=t.length;if(!n)throw new Error("aes/pcks5: empty ciphertext not allowed");const r=t[n-1];if(r<=0||r>16)throw new Error(`aes/pcks5: wrong padding byte: ${r}`);const o=t.subarray(0,-r);for(let i=0;i<r;i++)if(t[n-i-1]!==r)throw new Error("aes/pcks5: wrong padding");return o}function Us(t){const e=new Uint8Array(16),n=it(e);e.set(t);const r=Pt-t.length;for(let o=Pt-r;o<Pt;o++)e[o]=r;return n}const jr=ys({blockSize:16,nonceLength:16},function(e,n,r={}){Wt(e),Wt(n,16);const o=!r.disablePadding;return{encrypt:(i,s)=>{const c=Rr(e),{b:l,o:a,out:f}=Ns(i,o,s),u=it(n);let w=u[0],h=u[1],g=u[2],d=u[3],p=0;for(;p+4<=l.length;)w^=l[p+0],h^=l[p+1],g^=l[p+2],d^=l[p+3],{s0:w,s1:h,s2:g,s3:d}=Hr(c,w,h,g,d),a[p++]=w,a[p++]=h,a[p++]=g,a[p++]=d;if(o){const b=Us(i.subarray(p*4));w^=b[0],h^=b[1],g^=b[2],d^=b[3],{s0:w,s1:h,s2:g,s3:d}=Hr(c,w,h,g,d),a[p++]=w,a[p++]=h,a[p++]=g,a[p++]=d}return c.fill(0),f},decrypt:(i,s)=>{Ts(i);const c=Os(e),l=it(n),a=qr(i.length,s),f=it(i),u=it(a);let w=l[0],h=l[1],g=l[2],d=l[3];for(let p=0;p+4<=f.length;){const b=w,v=h,S=g,A=d;w=f[p+0],h=f[p+1],g=f[p+2],d=f[p+3];const{s0:B,s1:y,s2:E,s3:k}=Is(c,w,h,g,d);u[p++]=B^b,u[p++]=y^v,u[p++]=E^S,u[p++]=k^A}return c.fill(0),Ps(a,o)}}});/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */function ne(t){if(!Number.isSafeInteger(t))throw new Error(`Wrong integer: ${t}`)}function xt(...t){const e=(o,i)=>s=>o(i(s)),n=Array.from(t).reverse().reduce((o,i)=>o?e(o,i.encode):i.encode,void 0),r=t.reduce((o,i)=>o?e(o,i.decode):i.decode,void 0);return{encode:n,decode:r}}function vt(t){return{encode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return e.map(n=>{if(ne(n),n<0||n>=t.length)throw new Error(`Digit index outside alphabet: ${n} (alphabet: ${t.length})`);return t[n]})},decode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="string")throw new Error("alphabet.decode input should be array of strings");return e.map(n=>{if(typeof n!="string")throw new Error(`alphabet.decode: not string element=${n}`);const r=t.indexOf(n);if(r===-1)throw new Error(`Unknown letter: "${n}". Allowed: ${t}`);return r})}}}function _t(t=""){if(typeof t!="string")throw new Error("join separator should be string");return{encode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="string")throw new Error("join.encode input should be array of strings");for(let n of e)if(typeof n!="string")throw new Error(`join.encode: non-string input=${n}`);return e.join(t)},decode:e=>{if(typeof e!="string")throw new Error("join.decode input should be string");return e.split(t)}}}function $e(t,e="="){if(ne(t),typeof e!="string")throw new Error("padding chr should be string");return{encode(n){if(!Array.isArray(n)||n.length&&typeof n[0]!="string")throw new Error("padding.encode input should be array of strings");for(let r of n)if(typeof r!="string")throw new Error(`padding.encode: non-string input=${r}`);for(;n.length*t%8;)n.push(e);return n},decode(n){if(!Array.isArray(n)||n.length&&typeof n[0]!="string")throw new Error("padding.encode input should be array of strings");for(let o of n)if(typeof o!="string")throw new Error(`padding.decode: non-string input=${o}`);let r=n.length;if(r*t%8)throw new Error("Invalid padding: string should have whole number of bytes");for(;r>0&&n[r-1]===e;r--)if(!((r-1)*t%8))throw new Error("Invalid padding: string has too much padding");return n.slice(0,r)}}}function Mr(t){if(typeof t!="function")throw new Error("normalize fn should be function");return{encode:e=>e,decode:e=>t(e)}}function zr(t,e,n){if(e<2)throw new Error(`convertRadix: wrong from=${e}, base cannot be less than 2`);if(n<2)throw new Error(`convertRadix: wrong to=${n}, base cannot be less than 2`);if(!Array.isArray(t))throw new Error("convertRadix: data should be array");if(!t.length)return[];let r=0;const o=[],i=Array.from(t);for(i.forEach(s=>{if(ne(s),s<0||s>=e)throw new Error(`Wrong integer: ${s}`)});;){let s=0,c=!0;for(let l=r;l<i.length;l++){const a=i[l],f=e*s+a;if(!Number.isSafeInteger(f)||e*s/e!==s||f-a!==e*s)throw new Error("convertRadix: carry overflow");if(s=f%n,i[l]=Math.floor(f/n),!Number.isSafeInteger(i[l])||i[l]*n+s!==f)throw new Error("convertRadix: carry overflow");if(c)i[l]?c=!1:r=l;else continue}if(o.push(s),c)break}for(let s=0;s<t.length-1&&t[s]===0;s++)o.push(0);return o.reverse()}const Kr=(t,e)=>e?Kr(e,t%e):t,Ce=(t,e)=>t+(e-Kr(t,e));function kn(t,e,n,r){if(!Array.isArray(t))throw new Error("convertRadix2: data should be array");if(e<=0||e>32)throw new Error(`convertRadix2: wrong from=${e}`);if(n<=0||n>32)throw new Error(`convertRadix2: wrong to=${n}`);if(Ce(e,n)>32)throw new Error(`convertRadix2: carry overflow from=${e} to=${n} carryBits=${Ce(e,n)}`);let o=0,i=0;const s=2**n-1,c=[];for(const l of t){if(ne(l),l>=2**e)throw new Error(`convertRadix2: invalid data word=${l} from=${e}`);if(o=o<<e|l,i+e>32)throw new Error(`convertRadix2: carry overflow pos=${i} from=${e}`);for(i+=e;i>=n;i-=n)c.push((o>>i-n&s)>>>0);o&=2**i-1}if(o=o<<n-i&s,!r&&i>=e)throw new Error("Excess padding");if(!r&&o)throw new Error(`Non-zero padding: ${o}`);return r&&i>0&&c.push(o>>>0),c}function $s(t){return ne(t),{encode:e=>{if(!(e instanceof Uint8Array))throw new Error("radix.encode input should be Uint8Array");return zr(Array.from(e),2**8,t)},decode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="number")throw new Error("radix.decode input should be array of strings");return Uint8Array.from(zr(e,t,2**8))}}}function $t(t,e=!1){if(ne(t),t<=0||t>32)throw new Error("radix2: bits should be in (0..32]");if(Ce(8,t)>32||Ce(t,8)>32)throw new Error("radix2: carry overflow");return{encode:n=>{if(!(n instanceof Uint8Array))throw new Error("radix2.encode input should be Uint8Array");return kn(Array.from(n),8,t,!e)},decode:n=>{if(!Array.isArray(n)||n.length&&typeof n[0]!="number")throw new Error("radix2.decode input should be array of strings");return Uint8Array.from(kn(n,t,8,e))}}}function Dr(t){if(typeof t!="function")throw new Error("unsafeWrapper fn should be function");return function(...e){try{return t.apply(null,e)}catch{}}}const Cs=xt($t(4),vt("0123456789ABCDEF"),_t("")),Ls=xt($t(5),vt("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),$e(5),_t(""));xt($t(5),vt("0123456789ABCDEFGHIJKLMNOPQRSTUV"),$e(5),_t("")),xt($t(5),vt("0123456789ABCDEFGHJKMNPQRSTVWXYZ"),_t(""),Mr(t=>t.toUpperCase().replace(/O/g,"0").replace(/[IL]/g,"1")));const de=xt($t(6),vt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),$e(6),_t("")),Rs=xt($t(6),vt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),$e(6),_t("")),An=t=>xt($s(58),vt(t),_t("")),Bn=An("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");An("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"),An("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");const Vr=[0,2,3,5,6,7,9,10,11],Hs={encode(t){let e="";for(let n=0;n<t.length;n+=8){const r=t.subarray(n,n+8);e+=Bn.encode(r).padStart(Vr[r.length],"1")}return e},decode(t){let e=[];for(let n=0;n<t.length;n+=11){const r=t.slice(n,n+11),o=Vr.indexOf(r.length),i=Bn.decode(r);for(let s=0;s<i.length-o;s++)if(i[s]!==0)throw new Error("base58xmr: wrong padding");e=e.concat(Array.from(i.slice(i.length-o)))}return Uint8Array.from(e)}},On=xt(vt("qpzry9x8gf2tvdw0s3jn54khce6mua7l"),_t("")),Wr=[996825010,642813549,513874426,1027748829,705979059];function he(t){const e=t>>25;let n=(t&33554431)<<5;for(let r=0;r<Wr.length;r++)(e>>r&1)===1&&(n^=Wr[r]);return n}function Zr(t,e,n=1){const r=t.length;let o=1;for(let i=0;i<r;i++){const s=t.charCodeAt(i);if(s<33||s>126)throw new Error(`Invalid prefix (${t})`);o=he(o)^s>>5}o=he(o);for(let i=0;i<r;i++)o=he(o)^t.charCodeAt(i)&31;for(let i of e)o=he(o)^i;for(let i=0;i<6;i++)o=he(o);return o^=n,On.encode(kn([o%2**30],30,5,!1))}function Gr(t){const e=t==="bech32"?1:734539939,n=$t(5),r=n.decode,o=n.encode,i=Dr(r);function s(f,u,w=90){if(typeof f!="string")throw new Error(`bech32.encode prefix should be string, not ${typeof f}`);if(!Array.isArray(u)||u.length&&typeof u[0]!="number")throw new Error(`bech32.encode words should be array of numbers, not ${typeof u}`);const h=f.length+7+u.length;if(w!==!1&&h>w)throw new TypeError(`Length ${h} exceeds limit ${w}`);return f=f.toLowerCase(),`${f}1${On.encode(u)}${Zr(f,u,e)}`}function c(f,u=90){if(typeof f!="string")throw new Error(`bech32.decode input should be string, not ${typeof f}`);if(f.length<8||u!==!1&&f.length>u)throw new TypeError(`Wrong string length: ${f.length} (${f}). Expected (8..${u})`);const w=f.toLowerCase();if(f!==w&&f!==f.toUpperCase())throw new Error("String must be lowercase or uppercase");f=w;const h=f.lastIndexOf("1");if(h===0||h===-1)throw new Error('Letter "1" must be present between prefix and data only');const g=f.slice(0,h),d=f.slice(h+1);if(d.length<6)throw new Error("Data must be at least 6 characters long");const p=On.decode(d).slice(0,-6),b=Zr(g,p,e);if(!d.endsWith(b))throw new Error(`Invalid checksum in ${f}: expected "${b}"`);return{prefix:g,words:p}}const l=Dr(c);function a(f){const{prefix:u,words:w}=c(f,!1);return{prefix:u,words:w,bytes:r(w)}}return{encode:s,decode:c,decodeToBytes:a,decodeUnsafe:l,fromWords:r,fromWordsUnsafe:i,toWords:o}}const Fr=Gr("bech32");Gr("bech32m");const qs={encode:t=>new TextDecoder().decode(t),decode:t=>new TextEncoder().encode(t)},js=xt($t(4),vt("0123456789abcdef"),_t(""),Mr(t=>{if(typeof t!="string"||t.length%2)throw new TypeError(`hex.decode: expected string, got ${typeof t} with length ${t.length}`);return t.toLowerCase()}));`${Object.keys({utf8:qs,hex:js,base16:Cs,base32:Ls,base64:de,base64url:Rs,base58:Bn,base58xmr:Hs}).join(", ")}`;var Zt=Symbol("verified"),Ms=t=>t instanceof Object;function zs(t){if(!Ms(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 n=t.tags[e];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}var Ks=new TextDecoder("utf-8"),Yr=new TextEncoder;function we(t){t.indexOf("://")===-1&&(t="wss://"+t);let e=new URL(t);return e.pathname=e.pathname.replace(/\/+/g,"/"),e.pathname.endsWith("/")&&(e.pathname=e.pathname.slice(0,-1)),(e.port==="80"&&e.protocol==="ws:"||e.port==="443"&&e.protocol==="wss:")&&(e.port=""),e.searchParams.sort(),e.hash="",e.toString()}var Ds=class{constructor(t){m(this,"value");m(this,"next",null);m(this,"prev",null);this.value=t}},Vs=class{constructor(){m(this,"first");m(this,"last");this.first=null,this.last=null}enqueue(t){const e=new Ds(t);return this.last?this.last===this.first?(this.last=e,this.last.prev=this.first,this.first.next=e):(e.prev=this.last,this.last.next=e,this.last=e):(this.first=e,this.last=e),!0}dequeue(){if(!this.first)return null;if(this.first===this.last){const e=this.first;return this.first=null,this.last=null,e.value}const t=this.first;return this.first=t.next,t.value}},Ws=class{generateSecretKey(){return rt.utils.randomPrivateKey()}getPublicKey(t){return nt(rt.getPublicKey(t))}finalizeEvent(t,e){const n=t;return n.pubkey=nt(rt.getPublicKey(e)),n.id=In(n),n.sig=nt(rt.sign(In(n),e)),n[Zt]=!0,n}verifyEvent(t){if(typeof t[Zt]=="boolean")return t[Zt];const e=In(t);if(e!==t.id)return t[Zt]=!1,!1;try{const n=rt.verify(t.sig,e,t.pubkey);return t[Zt]=n,n}catch{return t[Zt]=!1,!1}}};function Zs(t){if(!zs(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 In(t){let e=bn(Yr.encode(Zs(t)));return nt(e)}var Le=new Ws,Gs=Le.generateSecretKey,Jr=Le.getPublicKey,Fs=Le.finalizeEvent,Qr=Le.verifyEvent;async function Ys(t,e,n){const r=t instanceof Uint8Array?nt(t):t,o=le.getSharedSecret(r,"02"+e),i=Xr(o);let s=Uint8Array.from(Ko(16)),c=Yr.encode(n),l=jr(i,s).encrypt(c),a=de.encode(new Uint8Array(l)),f=de.encode(new Uint8Array(s.buffer));return`${a}?iv=${f}`}async function Js(t,e,n){const r=t instanceof Uint8Array?nt(t):t;let[o,i]=n.split("?iv="),s=le.getSharedSecret(r,"02"+e),c=Xr(s),l=de.decode(i),a=de.decode(o),f=jr(c,l).decrypt(a);return Ks.decode(f)}function Xr(t){return t.slice(1,33)}var Qs=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,Xs;try{Xs=fetch}catch{}var tc=22242,Tn=24133,ec=31990;function nc(t,e){if(t.ids&&t.ids.indexOf(e.id)===-1&&!t.ids.some(n=>e.id.startsWith(n))||t.kinds&&t.kinds.indexOf(e.kind)===-1||t.authors&&t.authors.indexOf(e.pubkey)===-1&&!t.authors.some(n=>e.pubkey.startsWith(n)))return!1;for(let n in t)if(n[0]==="#"){let r=n.slice(1),o=t[`#${r}`];if(o&&!e.tags.find(([i,s])=>i===n.slice(1)&&o.indexOf(s)!==-1))return!1}return!(t.since&&e.created_at<t.since||t.until&&e.created_at>t.until)}function rc(t,e){for(let n=0;n<t.length;n++)if(nc(t[n],e))return!0;return!1}function oc(t,e){let n=e.length+3,r=t.indexOf(`"${e}":`)+n,o=t.slice(r).indexOf('"')+r+1;return t.slice(o,o+64)}function ic(t){let e=t.slice(0,22).indexOf('"EVENT"');if(e===-1)return null;let n=t.slice(e+7+1).indexOf('"');if(n===-1)return null;let r=e+7+1+n,o=t.slice(r+1,80).indexOf('"');if(o===-1)return null;let i=r+1+o;return t.slice(r+1,i)}function sc(t,e){return{kind:tc,created_at:Math.floor(Date.now()/1e3),tags:[["relay",t],["challenge",e]],content:""}}async function cc(){return new Promise(t=>{const e=new MessageChannel,n=()=>{e.port1.removeEventListener("message",n),t()};e.port1.addEventListener("message",n),e.port2.postMessage(0),e.port1.start()})}var lc=t=>(t[Zt]=!0,!0),to;try{to=WebSocket}catch{}var eo=class{constructor(t,e){m(this,"url");m(this,"_connected",!1);m(this,"onclose",null);m(this,"onnotice",t=>console.debug(`NOTICE from ${this.url}: ${t}`));m(this,"baseEoseTimeout",4400);m(this,"connectionTimeout",4400);m(this,"openSubs",new Map);m(this,"connectionTimeoutHandle");m(this,"connectionPromise");m(this,"openCountRequests",new Map);m(this,"openEventPublishes",new Map);m(this,"ws");m(this,"incomingMessageQueue",new Vs);m(this,"queueRunning",!1);m(this,"challenge");m(this,"serial",0);m(this,"verifyEvent");this.url=we(t),this.verifyEvent=e.verifyEvent}static async connect(t,e){const n=new eo(t,e);return await n.connect(),n}closeAllSubscriptions(t){for(let[e,n]of this.openSubs)n.close(t);this.openSubs.clear();for(let[e,n]of this.openEventPublishes)n.reject(new Error(t));this.openEventPublishes.clear();for(let[e,n]of this.openCountRequests)n.reject(new Error(t));this.openCountRequests.clear()}get connected(){return this._connected}async connect(){return this.connectionPromise?this.connectionPromise:(this.challenge=void 0,this.connectionPromise=new Promise((t,e)=>{this.connectionTimeoutHandle=setTimeout(()=>{var n;e("connection timed out"),this.connectionPromise=void 0,(n=this.onclose)==null||n.call(this),this.closeAllSubscriptions("relay connection timed out")},this.connectionTimeout);try{this.ws=new to(this.url)}catch(n){e(n);return}this.ws.onopen=()=>{clearTimeout(this.connectionTimeoutHandle),this._connected=!0,t()},this.ws.onerror=n=>{var r;e(n.message),this._connected&&((r=this.onclose)==null||r.call(this),this.closeAllSubscriptions("relay connection errored"),this._connected=!1)},this.ws.onclose=async()=>{var n;this.connectionPromise=void 0,(n=this.onclose)==null||n.call(this),this.closeAllSubscriptions("relay connection closed"),this._connected=!1},this.ws.onmessage=this._onmessage.bind(this)}),this.connectionPromise)}async runQueue(){for(this.queueRunning=!0;this.handleNext()!==!1;)await cc();this.queueRunning=!1}handleNext(){var n,r;const t=this.incomingMessageQueue.dequeue();if(!t)return!1;const e=ic(t);if(e){const o=this.openSubs.get(e);if(!o)return;const i=oc(t,"id"),s=(n=o.alreadyHaveEvent)==null?void 0:n.call(o,i);if((r=o.receivedEvent)==null||r.call(o,this,i),s)return}try{let o=JSON.parse(t);switch(o[0]){case"EVENT":{const i=this.openSubs.get(o[1]),s=o[2];this.verifyEvent(s)&&rc(i.filters,s)&&i.onevent(s);return}case"COUNT":{const i=o[1],s=o[2],c=this.openCountRequests.get(i);c&&(c.resolve(s.count),this.openCountRequests.delete(i));return}case"EOSE":{const i=this.openSubs.get(o[1]);if(!i)return;i.receivedEose();return}case"OK":{const i=o[1],s=o[2],c=o[3],l=this.openEventPublishes.get(i);s?l.resolve(c):l.reject(new Error(c)),this.openEventPublishes.delete(i);return}case"CLOSED":{const i=o[1],s=this.openSubs.get(i);if(!s)return;s.closed=!0,s.close(o[2]);return}case"NOTICE":this.onnotice(o[1]);return;case"AUTH":{this.challenge=o[1];return}}}catch{return}}async send(t){if(!this.connectionPromise)throw new Error("sending on closed connection");this.connectionPromise.then(()=>{var e;(e=this.ws)==null||e.send(t)})}async auth(t){if(!this.challenge)throw new Error("can't perform auth, no challenge was received");const e=await t(sc(this.url,this.challenge)),n=new Promise((r,o)=>{this.openEventPublishes.set(e.id,{resolve:r,reject:o})});return this.send('["AUTH",'+JSON.stringify(e)+"]"),n}async publish(t){const e=new Promise((n,r)=>{this.openEventPublishes.set(t.id,{resolve:n,reject:r})});return this.send('["EVENT",'+JSON.stringify(t)+"]"),e}async count(t,e){this.serial++;const n=(e==null?void 0:e.id)||"count:"+this.serial,r=new Promise((o,i)=>{this.openCountRequests.set(n,{resolve:o,reject:i})});return this.send('["COUNT","'+n+'",'+JSON.stringify(t)+"]"),r}subscribe(t,e){const n=this.prepareSubscription(t,e);return n.fire(),n}prepareSubscription(t,e){this.serial++;const n=e.id||"sub:"+this.serial,r=new ac(this,n,t,e);return this.openSubs.set(n,r),r}close(){var t;this.closeAllSubscriptions("relay connection closed by us"),this._connected=!1,(t=this.ws)==null||t.close()}_onmessage(t){this.incomingMessageQueue.enqueue(t.data),this.queueRunning||this.runQueue()}},ac=class{constructor(t,e,n,r){m(this,"relay");m(this,"id");m(this,"closed",!1);m(this,"eosed",!1);m(this,"filters");m(this,"alreadyHaveEvent");m(this,"receivedEvent");m(this,"onevent");m(this,"oneose");m(this,"onclose");m(this,"eoseTimeout");m(this,"eoseTimeoutHandle");this.relay=t,this.filters=n,this.id=e,this.alreadyHaveEvent=r.alreadyHaveEvent,this.receivedEvent=r.receivedEvent,this.eoseTimeout=r.eoseTimeout||t.baseEoseTimeout,this.oneose=r.oneose,this.onclose=r.onclose,this.onevent=r.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(){var t;this.eosed||(clearTimeout(this.eoseTimeoutHandle),this.eosed=!0,(t=this.oneose)==null||t.call(this))}close(t="closed by caller"){var e;this.closed||(this.relay.send('["CLOSE",'+JSON.stringify(this.id)+"]"),this.closed=!0),this.relay.openSubs.delete(this.id),(e=this.onclose)==null||e.call(this,t)}},uc=class{constructor(t){m(this,"relays",new Map);m(this,"seenOn",new Map);m(this,"trackRelays",!1);m(this,"verifyEvent");m(this,"trustedRelayURLs",new Set);this.verifyEvent=t.verifyEvent}async ensureRelay(t,e){t=we(t);let n=this.relays.get(t);return n||(n=new eo(t,{verifyEvent:this.trustedRelayURLs.has(t)?lc:this.verifyEvent}),e!=null&&e.connectionTimeout&&(n.connectionTimeout=e.connectionTimeout),this.relays.set(t,n)),await n.connect(),n}close(t){t.map(we).forEach(e=>{var n;(n=this.relays.get(e))==null||n.close()})}subscribeMany(t,e,n){this.trackRelays&&(n.receivedEvent=(u,w)=>{let h=this.seenOn.get(w);h||(h=new Set,this.seenOn.set(w,h)),h.add(u)});const r=new Set,o=[],i=[];let s=u=>{var w;i[u]=!0,i.filter(h=>h).length===t.length&&((w=n.oneose)==null||w.call(n),s=()=>{})};const c=[];let l=(u,w)=>{var h;s(u),c[u]=w,c.filter(g=>g).length===t.length&&((h=n.onclose)==null||h.call(n,c),l=()=>{})};const a=u=>{var h;if((h=n.alreadyHaveEvent)!=null&&h.call(n,u))return!0;const w=r.has(u);return r.add(u),w},f=Promise.all(t.map(we).map(async(u,w,h)=>{if(h.indexOf(u)!==w){l(w,"duplicate url");return}let g;try{g=await this.ensureRelay(u,{connectionTimeout:n.maxWait?Math.max(n.maxWait*.8,n.maxWait-1e3):void 0})}catch(p){l(w,(p==null?void 0:p.message)||String(p));return}let d=g.subscribe(e,{...n,oneose:()=>s(w),onclose:p=>l(w,p),alreadyHaveEvent:a,eoseTimeout:n.maxWait});o.push(d)}));return{async close(){await f,o.forEach(u=>{u.close()})}}}subscribeManyEose(t,e,n){const r=this.subscribeMany(t,e,{...n,oneose(){r.close()}});return r}async querySync(t,e,n){return new Promise(async r=>{const o=[];this.subscribeManyEose(t,[e],{...n,onevent(i){o.push(i)},onclose(i){r(o)}})})}async get(t,e,n){e.limit=1;const r=await this.querySync(t,e,n);return r.sort((o,i)=>i.created_at-o.created_at),r[0]||null}publish(t,e){return t.map(we).map(async(n,r,o)=>o.indexOf(n)!==r?Promise.reject("duplicate url"):(await this.ensureRelay(n)).publish(e))}},fc=class extends uc{constructor(){super({verifyEvent:Qr})}},no;try{no=fetch}catch{}var ro=/^bunker:\/\/([0-9a-f]{64})\??([?\/\w:.=&%]*)$/,dc=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;async function hc(t){let e=t.match(ro);if(e)try{const n=e[1],r=new URLSearchParams(e[2]);return{pubkey:n,relays:r.getAll("relay"),secret:r.get("secret")}}catch{}return oo(t)}async function oo(t){const e=t.match(Qs);if(!e)return null;const[n,r="_",o]=e;try{const i=`https://${o}/.well-known/nostr.json?name=${r}`,s=await(await no(i,{redirect:"error"})).json();let c=s.names[r],l=s.nip46[c]||[];return{pubkey:c,relays:l,secret:null}}catch{return null}}var Nn=class{constructor(t,e,n={}){m(this,"pool");m(this,"subCloser");m(this,"isOpen");m(this,"serial");m(this,"idPrefix");m(this,"listeners");m(this,"waitingForAuth");m(this,"secretKey");m(this,"bp");if(e.relays.length===0)throw new Error("no relays are specified for this bunker");this.pool=n.pool||new fc,this.secretKey=t,this.bp=e,this.isOpen=!1,this.idPrefix=Math.random().toString(36).substring(7),this.serial=0,this.listeners={},this.waitingForAuth={};const r=this.listeners,o=this.waitingForAuth;this.subCloser=this.pool.subscribeMany(this.bp.relays,[{kinds:[Tn],"#p":[Jr(this.secretKey)]}],{async onevent(i){const{id:s,result:c,error:l}=JSON.parse(await Js(t,i.pubkey,i.content));if(c==="auth_url"&&o[s]){delete o[s],n.onauth?n.onauth(l):console.warn(`nostr-tools/nip46: remote signer ${e.pubkey} tried to send an "auth_url"='${l}' but there was no onauth() callback configured.`);return}let a=r[s];a&&(l?a.reject(l):c&&a.resolve(c),delete r[s])}}),this.isOpen=!0}async close(){this.isOpen=!1,this.subCloser.close()}async sendRequest(t,e){return new Promise(async(n,r)=>{try{if(!this.isOpen)throw new Error("this signer is not open anymore, create a new one");this.serial++;const o=`${this.idPrefix}-${this.serial}`,i=await Ys(this.secretKey,this.bp.pubkey,JSON.stringify({id:o,method:t,params:e})),s=Fs({kind:Tn,tags:[["p",this.bp.pubkey]],content:i,created_at:Math.floor(Date.now()/1e3)},this.secretKey);this.listeners[o]={resolve:n,reject:r},this.waitingForAuth[o]=!0,await Promise.any(this.pool.publish(this.bp.relays,s))}catch(o){r(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",[Jr(this.secretKey),this.bp.secret||""])}async getPublicKey(){return this.bp.pubkey}async getRelays(){return JSON.parse(await this.sendRequest("get_relays",[]))}async signEvent(t){let e=await this.sendRequest("sign_event",[JSON.stringify(t)]),n=JSON.parse(e);if(n.pubkey===this.bp.pubkey&&Qr(n))return n;throw new Error(`event returned from bunker is improperly signed: ${JSON.stringify(n)}`)}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 nip44GetKey(t){let e=await this.sendRequest("nip44_get_key",[t]);return Fe(e)}async nip44Encrypt(t,e){return await this.sendRequest("nip44_encrypt",[t,e])}async nip44Decrypt(t,e){return await this.sendRequest("nip44_encrypt",[t,e])}};async function wc(t,e,n,r,o){if(o&&!dc.test(o))throw new Error("Invalid email");let i=Gs(),s=new Nn(i,t.bunkerPointer,e),c=await s.sendRequest("create_account",[n,r,o||""]);return s.bp.pubkey=c,await s.connect(),s}async function pc(t,e){const n=await t.querySync(e,{kinds:[ec],"#k":[Tn.toString()]});return n.sort((o,i)=>i.created_at-o.created_at),(await Promise.all(n.map(async(o,i)=>{try{const s=JSON.parse(o.content);try{if(n.findIndex(l=>JSON.parse(l.content).nip05===s.nip05)!==i)return}catch{}const c=await oo(s.nip05);if(c&&c.pubkey===o.pubkey&&c.relays.length)return{bunkerPointer:c,nip05:s.nip05,domain:s.nip05.split("@")[1],name:s.name||s.display_name,picture:s.picture,about:s.about,website:s.website,local:!1}}catch{return}}))).filter(o=>o!==void 0)}var io=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,so;try{so=fetch}catch{}async function gc(t){var i;const e=t.match(io);if(!e)return null;const[n,r="_",o]=e;try{const s=`https://${o}/.well-known/nostr.json?name=${r}`,c=await(await so(s,{redirect:"error"})).json();let l=c.names[r];return l?{pubkey:l,relays:(i=c.relays)==null?void 0:i[l]}:null}catch{return null}}new TextDecoder("utf-8"),new TextEncoder;var bc=5e3;function yc(t){return Ec("npub",Fe(t))}function mc(t,e){let n=Fr.toWords(e);return Fr.encode(t,n,bc)}function Ec(t,e){return mc(t,e)}const re=[];function xc(t,e=R){let n;const r=new Set;function o(c){if(je(t,c)&&(t=c,n)){const l=!re.length;for(const a of r)a[1](),re.push(a,t);if(l){for(let a=0;a<re.length;a+=2)re[a][0](re[a+1]);re.length=0}}}function i(c){o(c(t))}function s(c,l=R){const a=[c,l];return r.add(a),r.size===1&&(n=e(o,i)||R),c(t),()=>{r.delete(a),r.size===0&&n&&(n(),n=null)}}return{set:o,update:i,subscribe:s}}const vc=t=>{const{subscribe:e,set:n}=xc(void 0,()=>{let r=window.matchMedia(t);n(r.matches);const o=()=>n(r.matches);return"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),()=>{"removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o)}});return{subscribe:e}};function _c(t){let e,n,r;return{c(){e=Me("svg"),n=Me("circle"),r=Me("path"),_(n,"class","tw-opacity-25"),_(n,"cx","12"),_(n,"cy","12"),_(n,"r","10"),_(n,"stroke","currentColor"),_(n,"stroke-width","4"),_(r,"class","tw-opacity-75"),_(r,"fill","currentColor"),_(r,"d","M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"),_(e,"class","tw-animate-spin tw-ml-2 tw-h-5 tw-w-5 tw-text-white"),_(e,"xmlns","http://www.w3.org/2000/svg"),_(e,"fill","none"),_(e,"viewBox","0 0 24 24")},m(o,i){j(o,e,i),U(e,n),U(e,r)},p:R,i:R,o:R,d(o){o&&H(e)}}}class co extends Gn{constructor(e){super(),Zn(this,e,null,_c,je,{})}}const{window:Pn}=ko;function lo(t,e,n){const r=t.slice();return r[61]=e[n],r}function Sc(t){let e,n,r,o,i,s,c,l,a,f,u;const w=[Oc,Bc,Ac],h=[];function g(d,p){return d[12]?0:d[13]?d[13]?2:-1:1}return~(s=g(t))&&(c=h[s]=w[s](t)),{c(){e=L("div"),n=L("button"),r=Z("⤫"),i=V(),c&&c.c(),_(n,"class",o="tw-absolute tw-top-0 tw-right-0.5 tw-bg-transparent tw-border-none tw-cursor-pointer tw-text-"+t[0]+"-950 tw-text-3xl"),_(e,"class",l="sm:tw-w-80 tw-px-6 tw-py-8 tw-bg-"+t[0]+"-700 tw-rounded-md tw-shadow-[0_0px_30px_0px_rgba(0,0,0,0.6)] tw-transition-all tw-animate-show "+t[19])},m(d,p){j(d,e,p),U(e,n),U(n,r),U(e,i),~s&&h[s].m(e,null),a=!0,f||(u=et(n,"click",t[22]),f=!0)},p(d,p){(!a||p[0]&1&&o!==(o="tw-absolute tw-top-0 tw-right-0.5 tw-bg-transparent tw-border-none tw-cursor-pointer tw-text-"+d[0]+"-950 tw-text-3xl"))&&_(n,"class",o);let b=s;s=g(d),s===b?~s&&h[s].p(d,p):(c&&(xe(),wt(h[b],1,1,()=>{h[b]=null}),ve()),~s?(c=h[s],c?c.p(d,p):(c=h[s]=w[s](d),c.c()),ut(c,1),c.m(e,null)):c=null),(!a||p[0]&524289&&l!==(l="sm:tw-w-80 tw-px-6 tw-py-8 tw-bg-"+d[0]+"-700 tw-rounded-md tw-shadow-[0_0px_30px_0px_rgba(0,0,0,0.6)] tw-transition-all tw-animate-show "+d[19]))&&_(e,"class",l)},i(d){a||(ut(c),a=!0)},o(d){wt(c),a=!1},d(d){d&&H(e),~s&&h[s].d(),f=!1,u()}}}function kc(t){let e,n,r,o,i;const s=[Uc,Pc,Nc],c=[];function l(a,f){return a[10]?0:a[13]?2:1}return n=l(t),r=c[n]=s[n](t),{c(){e=L("div"),r.c(),_(e,"class",o="tw-px-4 tw-py-2 tw-bg-"+t[0]+"-700 hover:tw-bg-"+t[0]+"-800 tw-rounded tw-shadow-[0_0px_10px_0px_rgba(0,0,0,0.3)] tw-transition-all tw-duration-200 "+t[19])},m(a,f){j(a,e,f),c[n].m(e,null),i=!0},p(a,f){let u=n;n=l(a),n===u?c[n].p(a,f):(xe(),wt(c[u],1,1,()=>{c[u]=null}),ve(),r=c[n],r?r.p(a,f):(r=c[n]=s[n](a),r.c()),ut(r,1),r.m(e,null)),(!i||f[0]&524289&&o!==(o="tw-px-4 tw-py-2 tw-bg-"+a[0]+"-700 hover:tw-bg-"+a[0]+"-800 tw-rounded tw-shadow-[0_0px_10px_0px_rgba(0,0,0,0.3)] tw-transition-all tw-duration-200 "+a[19]))&&_(e,"class",o)},i(a){i||(ut(r),i=!0)},o(a){wt(r),i=!1},d(a){a&&H(e),c[n].d()}}}function Ac(t){let e,n,r,o,i,s,c=t[13].npub+"",l,a,f,u,w,h,g,d,p,b,v,S=Or(t[9])+"",A,B,y,E=(t[13].picture||t[13].name)&&ao(t);return{c(){e=L("div"),n=L("div"),n.textContent="You are connected to Nostr as",r=V(),o=L("a"),E&&E.c(),i=V(),s=L("div"),l=Z(c),f=V(),u=L("button"),w=Z("Disconnect"),g=V(),d=L("div"),p=Z("This webpage is using the public key:"),b=L("br"),v=V(),A=Z(S),_(n,"class","tw-text-sm tw-mb-4"),_(s,"class","tw-block tw-break-all"),_(o,"target","_blank"),_(o,"href",a="https://nosta.me/"+t[13].npub),_(o,"class","tw-text-white tw-no-underline tw-group"),_(e,"class","tw-text-center"),_(u,"class",h="tw-block tw-w-full tw-my-2 tw-mt-6 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+t[0]+"-900 hover:tw-bg-"+t[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white"),_(d,"class","tw-block tw-break-all tw-mt-6 tw-text-center tw-text-sm")},m(k,C){j(k,e,C),U(e,n),U(e,r),U(e,o),E&&E.m(o,null),U(o,i),U(o,s),U(s,l),j(k,f,C),j(k,u,C),U(u,w),j(k,g,C),j(k,d,C),U(d,p),U(d,b),U(d,v),U(d,A),B||(y=et(u,"click",t[24]),B=!0)},p(k,C){k[13].picture||k[13].name?E?E.p(k,C):(E=ao(k),E.c(),E.m(o,i)):E&&(E.d(1),E=null),C[0]&8192&&c!==(c=k[13].npub+"")&&ye(l,c),C[0]&8192&&a!==(a="https://nosta.me/"+k[13].npub)&&_(o,"href",a),C[0]&1&&h!==(h="tw-block tw-w-full tw-my-2 tw-mt-6 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+k[0]+"-900 hover:tw-bg-"+k[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white")&&_(u,"class",h),C[0]&512&&S!==(S=Or(k[9])+"")&&ye(A,S)},i:R,o:R,d(k){k&&(H(e),H(f),H(u),H(g),H(d)),E&&E.d(),B=!1,y()}}}function Bc(t){let e,n,r,o,i,s,c,l,a,f,u,w,h,g,d,p;const b=[Tc,Ic],v=[];function S(y,E){return y[10]?0:1}c=S(t),l=v[c]=b[c](t);let A=t[10]&&t[11]&&ho(t),B=!t[10]&&wo(t);return{c(){e=L("div"),e.textContent="How do you want to connect to Nostr?",n=V(),r=L("form"),o=L("input"),i=V(),s=L("button"),l.c(),u=V(),A&&A.c(),w=V(),B&&B.c(),h=Bo(),_(e,"class","tw-text-lg tw-text-center"),_(o,"class","tw-box-border tw-w-full tw-px-2 tw-py-1 tw-rounded tw-text-lg tw-border-none tw-outline-none"),_(o,"placeholder","user@provider or bunker://..."),o.autofocus=!0,o.disabled=t[10],_(s,"class",a="tw-flex tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+t[0]+"-900 hover:tw-bg-"+t[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default tw-items-center tw-justify-center"),s.disabled=f=!t[18]||t[10],_(r,"class","flex tw-mt-4 tw-mb-1")},m(y,E){j(y,e,E),j(y,n,E),j(y,r,E),U(r,o),t[39](o),Gt(o,t[2]),U(r,i),U(r,s),v[c].m(s,null),U(r,u),A&&A.m(r,null),j(y,w,E),B&&B.m(y,E),j(y,h,E),g=!0,o.focus(),d||(p=[et(o,"input",t[40]),et(r,"submit",t[23])],d=!0)},p(y,E){(!g||E[0]&1024)&&(o.disabled=y[10]),E[0]&4&&o.value!==y[2]&&Gt(o,y[2]);let k=c;c=S(y),c!==k&&(xe(),wt(v[k],1,1,()=>{v[k]=null}),ve(),l=v[c],l||(l=v[c]=b[c](y),l.c()),ut(l,1),l.m(s,null)),(!g||E[0]&1&&a!==(a="tw-flex tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+y[0]+"-900 hover:tw-bg-"+y[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default tw-items-center tw-justify-center"))&&_(s,"class",a),(!g||E[0]&263168&&f!==(f=!y[18]||y[10]))&&(s.disabled=f),y[10]&&y[11]?A?A.p(y,E):(A=ho(y),A.c(),A.m(r,null)):A&&(A.d(1),A=null),y[10]?B&&(B.d(1),B=null):B?B.p(y,E):(B=wo(y),B.c(),B.m(h.parentNode,h))},i(y){g||(ut(l),g=!0)},o(y){wt(l),g=!1},d(y){y&&(H(e),H(n),H(r),H(w),H(h)),t[39](null),v[c].d(),A&&A.d(),B&&B.d(y),d=!1,At(p)}}}function Oc(t){let e,n,r,o,i,s,c,l,a,f,u,w,h,g,d,p,b,v,S,A,B,y,E,k,C=Vn(t[14]),N=[];for(let I=0;I<C.length;I+=1)N[I]=po(lo(t,C,I));return{c(){e=L("div"),e.textContent="Create a Nostr account",n=V(),r=L("form"),o=L("div"),i=L("input"),s=V(),c=L("div"),c.textContent="@",l=V(),a=L("select");for(let I=0;I<N.length;I+=1)N[I].c();f=V(),u=L("div"),u.textContent=`A window from the selected provider will pop up to finalize the
2
+ creation; if it doesn't display check if the browser is blocking it`,w=V(),h=L("button"),g=Z("Create »"),b=V(),v=L("div"),S=Z("Do you already have a Nostr address?"),A=L("br"),B=V(),y=L("button"),y.textContent="Login now",_(e,"class","tw-text-lg tw-text-center"),_(i,"class","tw-box-border tw-w-40 tw-px-2 tw-py-1 tw-rounded tw-text-lg tw-border-none tw-outline-none"),_(i,"placeholder","bob"),i.autofocus=!0,_(c,"class","tw-mx-2 tw-text-2xl"),_(a,"class","tw-w-full tw-box-border tw-px-2 tw-py-1 tw-rounded tw-text-lg tw-border-none tw-outline-none"),t[8]===void 0&&me(()=>t[38].call(a)),_(o,"class","tw-flex items-center"),_(u,"class","tw-text-sm tw-text-center tw-mt-4 tw-leading-4"),_(h,"class",d="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+t[0]+"-900 hover:tw-bg-"+t[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default"),h.disabled=p=!t[8]||!t[7],_(r,"class","tw-mt-4 tw-mb-1"),_(y,"class","tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"),_(v,"class","tw-mt-6 tw-text-center tw-text-sm tw-leading-3")},m(I,q){j(I,e,q),j(I,n,q),j(I,r,q),U(r,o),U(o,i),t[36](i),Gt(i,t[7]),U(o,s),U(o,c),U(o,l),U(o,a);for(let P=0;P<N.length;P+=1)N[P]&&N[P].m(a,null);Mn(a,t[8],!0),U(r,f),U(r,u),U(r,w),U(r,h),U(h,g),j(I,b,q),j(I,v,q),U(v,S),U(v,A),U(v,B),U(v,y),i.focus(),E||(k=[et(i,"input",t[37]),et(i,"input",t[28]),et(a,"change",t[38]),et(r,"submit",t[27]),et(y,"click",t[26])],E=!0)},p(I,q){if(q[0]&128&&i.value!==I[7]&&Gt(i,I[7]),q[0]&16384){C=Vn(I[14]);let P;for(P=0;P<C.length;P+=1){const Q=lo(I,C,P);N[P]?N[P].p(Q,q):(N[P]=po(Q),N[P].c(),N[P].m(a,null))}for(;P<N.length;P+=1)N[P].d(1);N.length=C.length}q[0]&16640&&Mn(a,I[8]),q[0]&1&&d!==(d="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-"+I[0]+"-900 hover:tw-bg-"+I[0]+"-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default")&&_(h,"class",d),q[0]&16768&&p!==(p=!I[8]||!I[7])&&(h.disabled=p)},i:R,o:R,d(I){I&&(H(e),H(n),H(r),H(b),H(v)),t[36](null),Ao(N,I),E=!1,At(k)}}}function ao(t){let e,n,r=t[13].picture&&uo(t),o=t[13].name&&fo(t);return{c(){e=L("div"),r&&r.c(),n=V(),o&&o.c(),_(e,"class","tw-flex tw-items-center tw-justify-center tw-gap-2 tw-mb-2")},m(i,s){j(i,e,s),r&&r.m(e,null),U(e,n),o&&o.m(e,null)},p(i,s){i[13].picture?r?r.p(i,s):(r=uo(i),r.c(),r.m(e,n)):r&&(r.d(1),r=null),i[13].name?o?o.p(i,s):(o=fo(i),o.c(),o.m(e,null)):o&&(o.d(1),o=null)},d(i){i&&H(e),r&&r.d(),o&&o.d()}}}function uo(t){let e,n,r;return{c(){e=L("img"),be(e.src,n=t[13].picture)||_(e,"src",n),_(e,"alt",""),_(e,"class",r="tw-w-10 tw-h-10 tw-rounded-full tw-border-solid tw-border-2 tw-border-transparent group-hover:tw-border-"+t[0]+"-100")},m(o,i){j(o,e,i)},p(o,i){i[0]&8192&&!be(e.src,n=o[13].picture)&&_(e,"src",n),i[0]&1&&r!==(r="tw-w-10 tw-h-10 tw-rounded-full tw-border-solid tw-border-2 tw-border-transparent group-hover:tw-border-"+o[0]+"-100")&&_(e,"class",r)},d(o){o&&H(e)}}}function fo(t){let e,n=t[13].name+"",r;return{c(){e=L("div"),r=Z(n),_(e,"class","tw-text-3xl group-hover:tw-underline tw-decoration-2 tw-underline-offset-4")},m(o,i){j(o,e,i),U(e,r)},p(o,i){i[0]&8192&&n!==(n=o[13].name+"")&&ye(r,n)},d(o){o&&H(e)}}}function Ic(t){let e;return{c(){e=Z("Connect »")},m(n,r){j(n,e,r)},i:R,o:R,d(n){n&&H(e)}}}function Tc(t){let e,n,r;return n=new co({}),{c(){e=Z(`Connecting to bunker
3
+ `),Wn(n.$$.fragment)},m(o,i){j(o,e,i),De(n,o,i),r=!0},i(o){r||(ut(n.$$.fragment,o),r=!0)},o(o){wt(n.$$.fragment,o),r=!1},d(o){o&&H(e),Ve(n,o)}}}function ho(t){let e,n,r,o,i;return{c(){e=L("div"),n=Z(`Waiting too much?
4
+ `),r=L("button"),r.textContent="Cancel the connection",_(r,"class","tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"),_(e,"class","tw-mt-6 tw-text-center tw-text-sm tw-leading-3")},m(s,c){j(s,e,c),U(e,n),U(e,r),o||(i=et(r,"click",t[29]),o=!0)},p:R,d(s){s&&H(e),o=!1,i()}}}function wo(t){let e,n,r,o,i,s,c;return{c(){e=L("div"),n=Z("Do you need a Nostr account?"),r=L("br"),o=V(),i=L("button"),i.textContent="Sign up now",_(i,"class","tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"),_(e,"class","tw-mt-6 tw-text-center tw-text-sm tw-leading-3")},m(l,a){j(l,e,a),U(e,n),U(e,r),U(e,o),U(e,i),s||(c=et(i,"click",t[25]),s=!0)},p:R,d(l){l&&H(e),s=!1,c()}}}function po(t){let e,n,r;return{c(){e=L("option"),_(e,"label",n=t[61].domain),e.__value=r=t[61],Gt(e,e.__value),_(e,"class","tw-px-2 tw-py-1 tw-text-lg")},m(o,i){j(o,e,i)},p(o,i){i[0]&16384&&n!==(n=o[61].domain)&&_(e,"label",n),i[0]&16384&&r!==(r=o[61])&&(e.__value=r,Gt(e,e.__value))},d(o){o&&H(e)}}}function Nc(t){let e,n,r=(t[13].name||t[13].npub.slice(0,7)+"…"+t[13].npub.slice(-4))+"",o;function i(l,a){return l[13].picture?Cc:$c}let s=i(t),c=s(t);return{c(){e=L("div"),c.c(),n=V(),o=Z(r),_(e,"class","tw-flex tw-items-center")},m(l,a){j(l,e,a),c.m(e,null),U(e,n),U(e,o)},p(l,a){s===(s=i(l))&&c?c.p(l,a):(c.d(1),c=s(l),c&&(c.c(),c.m(e,n))),a[0]&8192&&r!==(r=(l[13].name||l[13].npub.slice(0,7)+"…"+l[13].npub.slice(-4))+"")&&ye(o,r)},i:R,o:R,d(l){l&&H(e),c.d()}}}function Pc(t){let e;return{c(){e=Z("Connect with Nostr")},m(n,r){j(n,e,r)},p:R,i:R,o:R,d(n){n&&H(e)}}}function Uc(t){let e,n,r,o;return r=new co({}),{c(){e=L("div"),n=Z(`Connecting to bunker
5
+ `),Wn(r.$$.fragment),_(e,"class","tw-flex tw-items-center")},m(i,s){j(i,e,s),U(e,n),De(r,e,null),o=!0},p:R,i(i){o||(ut(r.$$.fragment,i),o=!0)},o(i){wt(r.$$.fragment,i),o=!1},d(i){i&&H(e),Ve(r)}}}function $c(t){let e;return{c(){e=Z("☉")},m(n,r){j(n,e,r)},p:R,d(n){n&&H(e)}}}function Cc(t){let e,n;return{c(){e=L("img"),be(e.src,n=t[13].picture)||_(e,"src",n),_(e,"alt",""),_(e,"class","tw-w-5 tw-h-5 tw-rounded-full tw-mr-2")},m(r,o){j(r,e,o)},p(r,o){o[0]&8192&&!be(e.src,n=r[13].picture)&&_(e,"src",n)},d(r){r&&H(e)}}}function Lc(t){let e,n,r,o,i,s,c;const l=[kc,Sc],a=[];function f(u,w){return u[17]?1:0}return n=f(t),r=a[n]=l[n](t),{c(){e=L("div"),r.c(),_(e,"class","tw-text-white tw-font-sans draggable tw-animate-fadein"),_(e,"style",o="position: fixed; "+(t[17]&&t[3]?"width: 100%;":"")+"; right: "+(t[17]&&t[3]?"0":t[1])+"px; user-select: none; "+(t[17]&&t[3]?"bottom: 0px":t[16]+":"+t[15]+"px")),zn(e,"tw-cursor-pointer",!t[13]&&!t[17])},m(u,w){j(u,e,w),a[n].m(e,null),t[41](e),i=!0,s||(c=[et(Pn,"click",t[21]),et(Pn,"mouseup",t[32]),et(Pn,"mousemove",t[31]),et(e,"mousedown",t[30])],s=!0)},p(u,w){let h=n;n=f(u),n===h?a[n].p(u,w):(xe(),wt(a[h],1,1,()=>{a[h]=null}),ve(),r=a[n],r?r.p(u,w):(r=a[n]=l[n](u),r.c()),ut(r,1),r.m(e,null)),(!i||w[0]&229386&&o!==(o="position: fixed; "+(u[17]&&u[3]?"width: 100%;":"")+"; right: "+(u[17]&&u[3]?"0":u[1])+"px; user-select: none; "+(u[17]&&u[3]?"bottom: 0px":u[16]+":"+u[15]+"px")))&&_(e,"style",o),(!i||w[0]&139264)&&zn(e,"tw-cursor-pointer",!u[13]&&!u[17])},i(u){i||(ut(r),i=!0)},o(u){wt(r),i=!1},d(u){u&&H(e),a[n].d(),t[41](null),s=!1,At(c)}}}const Ct=20;function Rc(t,e,n){let r,o,i,s,c,l;const a=vc("only screen and (max-width: 640px)");So(t,a,T=>n(3,l=T));let f,{accent:u}=e,{position:w="top"}=e;const h=window,g=new ps;let d,p,b,v,S,A;const B=localStorage.getItem("wnj:clientSecret");B?A=Fe(B):(A=Yi(),localStorage.setItem("wnj:clientSecret",nt(A)));let y="closed",E,k,C,N,I=!1,q,P,Q,x=[],{right:O=20}=e,$=!1,M=!1,z,D,X;const Y={pool:g,onauth(T){window.open(T,"window.nostr","width=600,height=800,popup=yes")}},ft=Yn(()=>{switch(y){case"justopened":n(34,y="opened");break;case"justclosed":n(34,y="closed");break}},500);function tt(){n(34,y="justopened"),ft()}function dt(){n(34,y="justclosed"),ft()}ht();let Lt={isWnj:!0,async getPublicKey(){return!N&&!P&&tt(),(await C).bp.pubkey},async signEvent(T){return!N&&!P&&tt(),(await C).signEvent(T)},async getRelays(){return!N&&!P&&tt(),(await C).getRelays()},nip04:{async encrypt(T,W){return!N&&!P&&tt(),(await C).nip04Encrypt(T,W)},async decrypt(T,W){return!N&&!P&&tt(),(await C).nip04Decrypt(T,W)}}};function ht(){dt(),E=null,C=new Promise(T=>{k=T}),n(10,N=!1),n(12,q=!1),n(13,P=null),Q=null}No(()=>{let T=localStorage.getItem("wnj:bunkerPointer");if(T&&(E=JSON.parse(T),Ln(new Nn(A,E,Y))),h.nostr&&!h.nostr.isWnj){h.destroyWnj();return}else Object.defineProperty(window,"nostr",{get(){return Lt},set(W){Lt=W,W.isWnj||h.destroyWnj()},configurable:!0});return()=>{Q&&Q.close()}});function pe(T){Math.abs(o-D)>6||Date.now()-X>600||y==="justopened"||y==="justclosed"||(T.composedPath().find(W=>W.id==="wnj")?tt():dt())}function St(T){dt(),n(12,q=!1),T.stopPropagation()}async function Rt(T){if(T.preventDefault(),E=await hc(d.value),!E){d.setCustomValidity('invalid NIP-05 "name@domain.com" address or bunker:// URI');return}d.setCustomValidity(""),Ln(new Nn(A,E,Y))}async function Re(T){T.preventDefault(),localStorage.removeItem("wnj:bunkerPointer"),h.isWnj&&delete h.nostr,ht()}async function Ht(T){T.preventDefault(),n(12,q=!0),x.length===0&&(n(14,x=await pc(g,["wss://relay.nostr.band","wss://nos.lol","wss://nostr-pub.wellorder.net"])),n(8,S=x[0]))}function st(T){n(12,q=!1)}async function qt(T){if(T.preventDefault(),!S)return;let W=await wc(S,Y,b.value,S.domain);tt(),n(12,q=!1),Ln(W)}const He=Yn(async()=>{S&&b.value.length>0&&(await gc(b.value+"@"+S.domain)?b.setCustomValidity(`'${b.value}' is already taken.`):b.setCustomValidity(""))},500);function qe(){n(11,I=!1),n(10,N=!1)}async function Ln(T){let W;function Rn(){n(11,I=!0),n(17,i=!0),clearTimeout(W)}n(10,N=!0),W=setTimeout(Rn,5e3),await T.connect(),clearTimeout(W),E=T.bp,n(13,P={pubkey:T.bp.pubkey,npub:yc(T.bp.pubkey),event:null}),localStorage.setItem("wnj:bunkerPointer",JSON.stringify(E)),Q=g.subscribeMany(["wss://purplepag.es","wss://relay.snort.social","wss://relay.nos.social"],[{kinds:[0],authors:[T.bp.pubkey]}],{onevent(Hn){var Eo;if(!((((Eo=P.event)==null?void 0:Eo.created_at)||0)>=Hn.created_at))try{let{name:xo,picture:Fc}=JSON.parse(Hn.content);n(13,P.event=Hn,P),n(13,P.name=xo,P),n(13,P.picture=Fc,P)}catch{}}}),n(10,N=!1),n(11,I=!1),dt(),k(T)}function jc(T){if(i)return;$=!0;const W=f.getBoundingClientRect();z=T.clientY-W.top,D=o,X=Date.now()}function Mc(T){$&&(r==="top"?n(15,o=T.clientY):n(15,o=window.innerHeight-T.clientY),n(15,o-=z),n(35,M=!0),o<Ct&&n(15,o=Ct),o>window.innerHeight-Ct&&n(15,o=window.innerHeight-Ct))}function zc(){if($=!1,setTimeout(()=>{n(35,M=!1)},10),M){const T=f.getBoundingClientRect(),W=window.innerHeight,Rn=W/2;T.top<Rn?(n(16,r="top"),n(15,o=T.top)):(n(16,r="bottom"),n(15,o=W-T.bottom)),o<Ct&&n(15,o=Ct),localStorage.setItem("wnj:origin",r),localStorage.setItem("wnj:ypos",o.toString())}}function Kc(T){se[T?"unshift":"push"](()=>{b=T,n(6,b)})}function Dc(){v=this.value,n(7,v)}function Vc(){S=Io(this),n(8,S),n(14,x)}function Wc(T){se[T?"unshift":"push"](()=>{d=T,n(5,d)})}function Zc(){p=this.value,n(2,p)}function Gc(T){se[T?"unshift":"push"](()=>{f=T,n(4,f)})}return t.$$set=T=>{"accent"in T&&n(0,u=T.accent),"position"in T&&n(33,w=T.position),"right"in T&&n(1,O=T.right)},t.$$.update=()=>{t.$$.dirty[0]&8|t.$$.dirty[1]&4&&n(16,r=l?"bottom":localStorage.getItem("wnj:origin")||w),t.$$.dirty[0]&8&&n(15,o=l?Ct:parseInt(localStorage.getItem("wnj:ypos")||"0")||Ct),t.$$.dirty[1]&8&&n(17,i=y==="justopened"||y==="opened"),t.$$.dirty[0]&1|t.$$.dirty[1]&16&&n(19,s=M?"tw-cursor-grabbing tw-outline-dashed tw-outline-"+u+"-500 tw-outline-1 tw-outline-offset-4":"tw-outline-none"),t.$$.dirty[0]&4&&n(18,c=p&&(p.match(ro)||p.match(io)))},[u,O,p,l,f,d,b,v,S,A,N,I,q,P,x,o,r,i,c,s,a,pe,St,Rt,Re,Ht,st,qt,He,qe,jc,Mc,zc,w,y,M,Kc,Dc,Vc,Wc,Zc,Gc]}class Hc extends Gn{constructor(e){super(),Zn(this,e,Rc,Lc,je,{accent:0,position:33,right:1},null,[-1,-1,-1])}}const Un=window;Un.destroyWnj=()=>{setTimeout(()=>{qc.$destroy()},1)};const $n=document.createElement("div");$n.style.zIndex="90000",document.body.appendChild($n);const Cn=document.createElement("div");Cn.id="wnj";const go=document.createElement("style");go.innerHTML=jt;const bo=$n.attachShadow({mode:"open"});bo.appendChild(Cn),bo.appendChild(go);const qc=new Hc({target:Cn,props:{accent:((yo=Un.wnjParams)==null?void 0:yo.accent)||"cyan",position:((mo=Un.wnjParams)==null?void 0:mo.position)==="bottom"?"bottom":"top"}})})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "window.nostr.js",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "main": "dist/window.nostr.js",
6
6
  "devDependencies": {
@@ -23,6 +23,6 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "debounce": "^2.0.0",
26
- "nostr-tools": "^2.3.0"
26
+ "nostr-tools": "2.3.1"
27
27
  }
28
28
  }
package/src/App.svelte CHANGED
@@ -13,7 +13,7 @@
13
13
  type BunkerSignerParams,
14
14
  createAccount,
15
15
  parseBunkerInput,
16
- fetchCustodialBunkers,
16
+ fetchBunkerProviders,
17
17
  type BunkerPointer,
18
18
  type BunkerProfile,
19
19
  BUNKER_REGEX
@@ -21,8 +21,18 @@
21
21
  import {NIP05_REGEX, queryProfile} from 'nostr-tools/nip05'
22
22
  import {npubEncode} from 'nostr-tools/nip19'
23
23
  import {onMount} from 'svelte'
24
+ import mediaQueryStore from './mediaQueryStore.js'
25
+ import Spinner from './Spinner.svelte'
24
26
 
27
+ const mobileMode = mediaQueryStore('only screen and (max-width: 640px)')
28
+
29
+ let myself: HTMLDivElement
25
30
  export let accent: string
31
+ export let position: 'top' | 'bottom' = 'top'
32
+ $: origin = $mobileMode
33
+ ? 'bottom'
34
+ : (localStorage.getItem('wnj:origin') as 'top' | 'bottom' | null) ||
35
+ position
26
36
 
27
37
  const win = window as any
28
38
  const pool = new SimplePool()
@@ -32,12 +42,12 @@
32
42
  let nameInputValue: string
33
43
  let chosenProvider: BunkerProfile | undefined
34
44
  let clientSecret: Uint8Array
35
- const local = localStorage.getItem('nip46ClientSecretKey')
45
+ const local = localStorage.getItem('wnj:clientSecret')
36
46
  if (local) {
37
47
  clientSecret = hexToBytes(local)
38
48
  } else {
39
49
  clientSecret = generateSecretKey()
40
- localStorage.setItem('nip46ClientSecretKey', bytesToHex(clientSecret))
50
+ localStorage.setItem('wnj:clientSecret', bytesToHex(clientSecret))
41
51
  }
42
52
 
43
53
  let state: 'opened' | 'closed' | 'justopened' | 'justclosed' = 'closed'
@@ -45,6 +55,8 @@
45
55
  let resolveBunker: (_: BunkerSigner) => void
46
56
  let bunker: Promise<BunkerSigner>
47
57
  let connecting: boolean
58
+ let longConnecting = false
59
+ let cancelConnection = false
48
60
  let creating: boolean
49
61
  let connected: null | {
50
62
  pubkey: string
@@ -56,11 +68,37 @@
56
68
  let metadataSub: SubCloser | null
57
69
  let providers: BunkerProfile[] = []
58
70
 
71
+ const BASE_YPOS = 20
72
+ export let right = 20
73
+ $: ypos = $mobileMode
74
+ ? BASE_YPOS
75
+ : parseInt(localStorage.getItem('wnj:ypos') || '0') || BASE_YPOS
76
+ let dragStarted = false
77
+ let hasMoved = false
78
+ let insidePosition: number
79
+ let yposStart: number
80
+ let clickStart: number
81
+
82
+ $: opened = state === 'justopened' || state === 'opened'
83
+
84
+ $: movingStyle = hasMoved
85
+ ? 'tw-cursor-grabbing tw-outline-dashed tw-outline-' +
86
+ accent +
87
+ '-500 tw-outline-1 tw-outline-offset-4'
88
+ : 'tw-outline-none'
89
+
59
90
  $: bunkerInputValueIsGood =
60
91
  bunkerInputValue &&
61
92
  (bunkerInputValue.match(BUNKER_REGEX) ||
62
93
  bunkerInputValue.match(NIP05_REGEX))
63
94
 
95
+ const bunkerSignerParams: BunkerSignerParams = {
96
+ pool,
97
+ onauth(url: string) {
98
+ window.open(url, 'window.nostr', `width=600,height=800,popup=yes`)
99
+ }
100
+ }
101
+
64
102
  const delayedUpdateState = debounce(() => {
65
103
  switch (state) {
66
104
  case 'justopened':
@@ -82,8 +120,6 @@
82
120
  delayedUpdateState()
83
121
  }
84
122
 
85
- $: opened = state === 'justopened' || state === 'opened'
86
-
87
123
  reset()
88
124
 
89
125
  let windowNostr = {
@@ -126,18 +162,10 @@
126
162
  metadataSub = null
127
163
  }
128
164
 
129
- const bunkerSignerParams: BunkerSignerParams = {
130
- pool,
131
- onauth(url: string) {
132
- window.open(url, 'window.nostr', `width=600,height=800,popup=yes`)
133
- }
134
- }
135
-
136
165
  onMount(() => {
137
- let data = localStorage.getItem('nip46BunkerPointer')
166
+ let data = localStorage.getItem('wnj:bunkerPointer')
138
167
  if (data) {
139
168
  bunkerPointer = JSON.parse(data)
140
- connecting = true
141
169
  connect(
142
170
  new BunkerSigner(clientSecret, bunkerPointer!, bunkerSignerParams)
143
171
  )
@@ -173,6 +201,10 @@
173
201
  })
174
202
 
175
203
  function handleClick(ev: MouseEvent) {
204
+ if (Math.abs(ypos - yposStart) > 6 || Date.now() - clickStart > 600) {
205
+ return
206
+ }
207
+
176
208
  if (state === 'justopened' || state === 'justclosed') return
177
209
 
178
210
  if (ev.composedPath().find((el: any) => el.id === 'wnj')) open()
@@ -201,7 +233,7 @@
201
233
 
202
234
  async function handleDisconnect(ev: MouseEvent) {
203
235
  ev.preventDefault()
204
- localStorage.removeItem('nip46BunkerPointer')
236
+ localStorage.removeItem('wnj:bunkerPointer')
205
237
  if (win.isWnj) delete win.nostr
206
238
  reset()
207
239
  }
@@ -210,7 +242,11 @@
210
242
  ev.preventDefault()
211
243
  creating = true
212
244
  if (providers.length === 0) {
213
- providers = await fetchCustodialBunkers(pool, ['wss://relay.nostr.band'])
245
+ providers = await fetchBunkerProviders(pool, [
246
+ 'wss://relay.nostr.band',
247
+ 'wss://nos.lol',
248
+ 'wss://nostr-pub.wellorder.net'
249
+ ])
214
250
  chosenProvider = providers[0]
215
251
  }
216
252
  }
@@ -246,18 +282,38 @@
246
282
  }
247
283
  }, 500)
248
284
 
285
+ function handleAbortConnection() {
286
+ longConnecting = false
287
+ connecting = false
288
+ cancelConnection = true
289
+ // TODO: Effectively abort the connection
290
+ }
291
+
249
292
  async function connect(bunker: BunkerSigner) {
293
+ let connectionTimeout: number
294
+
295
+ function allowCancel() {
296
+ longConnecting = true
297
+ opened = true
298
+ clearTimeout(connectionTimeout)
299
+ }
300
+
301
+ connecting = true
302
+ connectionTimeout = setTimeout(allowCancel, 5000)
303
+
250
304
  await bunker.connect()
251
305
 
306
+ clearTimeout(connectionTimeout)
307
+ bunkerPointer = bunker.bp
308
+
252
309
  // set this so the floating thing will update
253
310
  connected = {
254
311
  pubkey: bunker.bp.pubkey,
255
312
  npub: npubEncode(bunker.bp.pubkey),
256
313
  event: null
257
314
  }
258
- connecting = false
259
315
 
260
- localStorage.setItem('nip46BunkerPointer', JSON.stringify(bunkerPointer))
316
+ localStorage.setItem('wnj:bunkerPointer', JSON.stringify(bunkerPointer))
261
317
 
262
318
  // load metadata
263
319
  metadataSub = pool.subscribeMany(
@@ -281,28 +337,104 @@
281
337
  }
282
338
  }
283
339
  )
284
-
340
+ connecting = false
341
+ longConnecting = false
285
342
  close()
286
343
  resolveBunker(bunker)
287
344
  }
345
+
346
+ function handleMouseDown(ev: MouseEvent) {
347
+ if (opened) return
348
+ dragStarted = true
349
+ const rect = myself.getBoundingClientRect()
350
+ insidePosition = ev.clientY - rect.top
351
+ yposStart = ypos
352
+ clickStart = Date.now()
353
+ }
354
+
355
+ function handleMouseMove(ev: MouseEvent) {
356
+ if (!dragStarted) return
357
+
358
+ if (origin === 'top') {
359
+ ypos = ev.clientY
360
+ } else {
361
+ ypos = window.innerHeight - ev.clientY
362
+ }
363
+ ypos -= insidePosition
364
+
365
+ hasMoved = true
366
+
367
+ // do not let the widget go outside the view
368
+ if (ypos < BASE_YPOS) {
369
+ ypos = BASE_YPOS
370
+ }
371
+ if (ypos > window.innerHeight - BASE_YPOS) {
372
+ ypos = window.innerHeight - BASE_YPOS
373
+ }
374
+ }
375
+
376
+ function handleMouseUp() {
377
+ dragStarted = false
378
+
379
+ setTimeout(() => {
380
+ hasMoved = false
381
+ }, 10)
382
+
383
+ if (hasMoved) {
384
+ const rect = myself.getBoundingClientRect()
385
+ const viewportHeight = window.innerHeight
386
+ const viewportMidpoint = viewportHeight / 2
387
+ if (rect.top < viewportMidpoint) {
388
+ origin = 'top'
389
+ ypos = rect.top
390
+ } else {
391
+ origin = 'bottom'
392
+ ypos = viewportHeight - rect.bottom
393
+ }
394
+
395
+ if (ypos < BASE_YPOS) {
396
+ ypos = BASE_YPOS
397
+ }
398
+
399
+ localStorage.setItem('wnj:origin', origin)
400
+ localStorage.setItem('wnj:ypos', ypos.toString())
401
+ }
402
+ }
288
403
  </script>
289
404
 
290
- <svelte:window on:click={handleClick} />
405
+ <svelte:window
406
+ on:click={handleClick}
407
+ on:mouseup={handleMouseUp}
408
+ on:mousemove={handleMouseMove}
409
+ />
291
410
 
411
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
292
412
  <div
293
- class="tw-text-white tw-font-sans"
413
+ class="tw-text-white tw-font-sans draggable tw-animate-fadein"
294
414
  class:tw-cursor-pointer={!connected && !opened}
415
+ style="position: fixed; {opened && $mobileMode
416
+ ? 'width: 100%;'
417
+ : ''}; right: {opened && $mobileMode
418
+ ? '0'
419
+ : right}px; user-select: none; {opened && $mobileMode
420
+ ? 'bottom: 0px'
421
+ : origin + ':' + ypos + 'px'}"
422
+ on:mousedown={handleMouseDown}
423
+ bind:this={myself}
295
424
  >
296
425
  <!-- Close status ################### -->
297
426
  {#if !opened}
298
427
  <div
299
- class="tw-px-4 tw-py-2 tw-bg-{accent}-700 hover:tw-bg-{accent}-800 tw-rounded tw-cursor-pointer tw-shadow-[0_0px_10px_0px_rgba(0,0,0,0.3)]"
428
+ class="tw-px-4 tw-py-2 tw-bg-{accent}-700 hover:tw-bg-{accent}-800 tw-rounded tw-shadow-[0_0px_10px_0px_rgba(0,0,0,0.3)] tw-transition-all tw-duration-200 {movingStyle}"
300
429
  >
301
430
  <!-- Connecting view ################### -->
302
431
  {#if connecting}
303
- <div>Connecting to bunker...</div>
432
+ <div class="tw-flex tw-items-center">
433
+ Connecting to bunker
434
+ <Spinner />
435
+ </div>
304
436
  {:else if !connected}
305
- Login with Nostr
437
+ Connect with Nostr
306
438
  {:else}
307
439
  <div class="tw-flex tw-items-center">
308
440
  {#if connected.picture}
@@ -323,7 +455,7 @@
323
455
  <!-- Open status ################### -->
324
456
  {:else}
325
457
  <div
326
- class="tw-w-80 tw-px-6 tw-py-8 tw-bg-{accent}-700 tw-rounded-md tw-shadow-[0_0px_30px_0px_rgba(0,0,0,0.6)] tw-transition-all tw-animate-show"
458
+ class="sm:tw-w-80 tw-px-6 tw-py-8 tw-bg-{accent}-700 tw-rounded-md tw-shadow-[0_0px_30px_0px_rgba(0,0,0,0.6)] tw-transition-all tw-animate-show {movingStyle}"
327
459
  >
328
460
  <button
329
461
  on:click={handleCloseModal}
@@ -390,21 +522,38 @@
390
522
  bind:this={bunkerInput}
391
523
  bind:value={bunkerInputValue}
392
524
  autofocus
525
+ disabled={connecting}
393
526
  />
394
527
  <button
395
- class="tw-block tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-{accent}-900 hover:tw-bg-{accent}-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default"
396
- disabled={!bunkerInputValueIsGood}
528
+ class="tw-flex tw-w-full tw-mt-4 tw-px-2 tw-py-1 tw-text-lg tw-rounded tw-border-0 tw-bg-{accent}-900 hover:tw-bg-{accent}-950 tw-hover:bg-indigo-900 tw-cursor-pointer tw-text-white disabled:tw-bg-neutral-400 disabled:tw-text-neutral-200 disabled:tw-cursor-default tw-items-center tw-justify-center"
529
+ disabled={!bunkerInputValueIsGood || connecting}
397
530
  >
398
- Connect »
531
+ {#if connecting}
532
+ Connecting to bunker
533
+ <Spinner />
534
+ {:else}
535
+ Connect »
536
+ {/if}
399
537
  </button>
538
+ {#if connecting && longConnecting}
539
+ <div class="tw-mt-6 tw-text-center tw-text-sm tw-leading-3">
540
+ Waiting too much?
541
+ <button
542
+ class="tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"
543
+ on:click={handleAbortConnection}>Cancel the connection</button
544
+ >
545
+ </div>
546
+ {/if}
400
547
  </form>
401
- <div class="tw-mt-6 tw-text-center tw-text-sm tw-leading-3">
402
- Do you need a Nostr account?<br />
403
- <button
404
- class="tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"
405
- on:click={handleOpenCreate}>Sign up now</button
406
- >
407
- </div>
548
+ {#if !connecting}
549
+ <div class="tw-mt-6 tw-text-center tw-text-sm tw-leading-3">
550
+ Do you need a Nostr account?<br />
551
+ <button
552
+ class="tw-border-0 tw-bg-transparent tw-text-white tw-cursor-pointer tw-underline tw-text-sm"
553
+ on:click={handleOpenCreate}>Sign up now</button
554
+ >
555
+ </div>
556
+ {/if}
408
557
 
409
558
  <!-- Connected view ################### -->
410
559
  {:else if connected}
@@ -452,11 +601,11 @@
452
601
  </div>
453
602
 
454
603
  <!-- hack to preload tailwind colors:
455
- tw-bg-cyan-700 tw-bg-cyan-800 tw-bg-cyan-900 tw-bg-cyan-950 tw-text-cyan-950
456
- tw-bg-green-700 tw-bg-green-800 tw-bg-green-900 tw-bg-green-950 tw-text-green-950
457
- tw-bg-purple-700 tw-bg-purple-800 tw-bg-purple-900 tw-bg-purple-950 tw-text-purple-950
458
- tw-bg-red-700 tw-bg-red-800 tw-bg-red-900 tw-bg-red-950 tw-text-red-950
459
- tw-bg-orange-700 tw-bg-orange-800 tw-bg-orange-900 tw-bg-orange-950 tw-text-orange-950
460
- tw-bg-neutral-700 tw-bg-neutral-800 tw-bg-neutral-900 tw-bg-neutral-950 tw-text-neutral-950
461
- tw-bg-stone-700 tw-bg-stone-800 tw-bg-stone-900 tw-bg-stone-950 tw-text-stone-950
604
+ tw-bg-cyan-700 tw-bg-cyan-800 tw-bg-cyan-900 tw-bg-cyan-950 tw-text-cyan-950 tw-outline-cyan-500
605
+ tw-bg-green-700 tw-bg-green-800 tw-bg-green-900 tw-bg-green-950 tw-text-green-950 tw-outline-green-500
606
+ tw-bg-purple-700 tw-bg-purple-800 tw-bg-purple-900 tw-bg-purple-950 tw-text-purple-950 tw-outline-purple-500
607
+ tw-bg-red-700 tw-bg-red-800 tw-bg-red-900 tw-bg-red-950 tw-text-red-950 tw-outline-red-500
608
+ tw-bg-orange-700 tw-bg-orange-800 tw-bg-orange-900 tw-bg-orange-950 tw-text-orange-950 tw-outline-orange-500
609
+ tw-bg-neutral-700 tw-bg-neutral-800 tw-bg-neutral-900 tw-bg-neutral-950 tw-text-neutral-950 tw-outline-neutral-500
610
+ tw-bg-stone-700 tw-bg-stone-800 tw-bg-stone-900 tw-bg-stone-950 tw-text-stone-950 tw-outline-stone-500
462
611
  -->
@@ -0,0 +1,20 @@
1
+ <svg
2
+ class="tw-animate-spin tw-ml-2 tw-h-5 tw-w-5 tw-text-white"
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ fill="none"
5
+ viewBox="0 0 24 24"
6
+ >
7
+ <circle
8
+ class="tw-opacity-25"
9
+ cx="12"
10
+ cy="12"
11
+ r="10"
12
+ stroke="currentColor"
13
+ stroke-width="4"
14
+ ></circle>
15
+ <path
16
+ class="tw-opacity-75"
17
+ fill="currentColor"
18
+ d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
19
+ ></path>
20
+ </svg>
package/src/main.ts CHANGED
@@ -12,19 +12,18 @@ import App from './App.svelte'
12
12
 
13
13
  const win = window as any
14
14
 
15
- const base = document.createElement('div')
16
- base.style.position = 'fixed'
17
- base.style.right = '1.5rem'
18
- if (win.wnjParams?.position === 'bottom') {
19
- base.style.bottom = '1.5rem'
20
- } else {
21
- base.style.top = '1.5rem'
15
+ win.destroyWnj = () => {
16
+ setTimeout(() => {
17
+ app.$destroy()
18
+ }, 1)
22
19
  }
20
+
21
+ const base = document.createElement('div')
22
+ base.style.zIndex = '90000'
23
23
  document.body.appendChild(base)
24
24
 
25
25
  const mountPoint = document.createElement('div')
26
26
  mountPoint.id = 'wnj'
27
- mountPoint.classList.add('tw-animate-fadein')
28
27
 
29
28
  const style = document.createElement('style')
30
29
  style.innerHTML = styles
@@ -36,13 +35,9 @@ shadowRoot.appendChild(style)
36
35
  const app = new App({
37
36
  target: mountPoint,
38
37
  props: {
39
- accent: win.wnjParams?.accent || 'cyan'
38
+ accent: win.wnjParams?.accent || 'cyan',
39
+ position: win.wnjParams?.position === 'bottom' ? 'bottom' : 'top'
40
40
  }
41
41
  })
42
42
 
43
43
  export default app
44
-
45
- // ~
46
- ;(window as any).destroyWnj = () => {
47
- app.$destroy()
48
- }
@@ -0,0 +1,33 @@
1
+ import {writable} from 'svelte/store'
2
+
3
+ /**
4
+ * Svelte Media Query Store
5
+ * @param mediaQueryString { string }
6
+ */
7
+ export default mediaQueryString => {
8
+ const {subscribe, set} = writable(undefined, () => {
9
+ // Start observing media query
10
+ let mql = window.matchMedia(mediaQueryString)
11
+
12
+ // Set first media query result to the store
13
+ set(mql.matches)
14
+
15
+ // Called when media query state changes
16
+ const onchange = () => set(mql.matches)
17
+
18
+ // Listen for changes (need to support old `addListener` interface)
19
+ 'addEventListener' in mql
20
+ ? mql.addEventListener('change', onchange)
21
+ : mql.addListener(onchange)
22
+
23
+ // when no more listeners
24
+ return () => {
25
+ // stop listening (need to support old `removeListener` interface)
26
+ 'removeEventListener' in mql
27
+ ? mql.removeEventListener('change', onchange)
28
+ : mql.removeListener(onchange)
29
+ }
30
+ })
31
+
32
+ return {subscribe}
33
+ }