nostr-double-ratchet 0.0.18 → 0.0.20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Invite.d.ts","sourceRoot":"","sources":["../src/Invite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACvI,OAAO,EAAqB,cAAc,EAAE,WAAW,EAAsB,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/H,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;;;;GASG;AACH,qBAAa,MAAM;IAEJ,yBAAyB,EAAE,MAAM;IACjC,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,0BAA0B,CAAC,EAAE,UAAU;IACvC,KAAK,CAAC,EAAE,MAAM;IACd,OAAO,CAAC,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM,EAAE;gBANhB,yBAAyB,EAAE,MAAM,EACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,0BAA0B,CAAC,EAAE,UAAU,YAAA,EACvC,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,MAAM,GAAE,MAAM,EAAO;IAGhC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAiB3E,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA2BnC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAaxC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IA4B9C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAwBzG;;OAEG;IACH,SAAS,IAAI,MAAM;IAYnB;;OAEG;IACH,MAAM,CAAC,IAAI,SAAoB;IAW/B,QAAQ,IAAI,aAAa;IAUzB;;;;;;;;;;;;;;OAcG;IACG,MAAM,CACR,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,UAAU,GAAG,eAAe,GACxC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC;IAsCtD,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;CAiDzJ"}
1
+ {"version":3,"file":"Invite.d.ts","sourceRoot":"","sources":["../src/Invite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACvI,OAAO,EAAqB,cAAc,EAAE,WAAW,EAAsB,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/H,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;;;;GASG;AACH,qBAAa,MAAM;IAEJ,yBAAyB,EAAE,MAAM;IACjC,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,0BAA0B,CAAC,EAAE,UAAU;IACvC,KAAK,CAAC,EAAE,MAAM;IACd,OAAO,CAAC,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM,EAAE;gBANhB,yBAAyB,EAAE,MAAM,EACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,0BAA0B,CAAC,EAAE,UAAU,YAAA,EACvC,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,MAAM,GAAE,MAAM,EAAO;IAGhC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAiB3E,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA2BnC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAaxC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IA4B9C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAwBzG;;OAEG;IACH,SAAS,IAAI,MAAM;IAYnB;;OAEG;IACH,MAAM,CAAC,IAAI,SAAoB;IAW/B,QAAQ,IAAI,aAAa;IAezB;;;;;;;;;;;;;;OAcG;IACG,MAAM,CACR,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,UAAU,GAAG,eAAe,GACxC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC;IAsCtD,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;CAiDzJ"}
package/dist/Session.d.ts CHANGED
@@ -27,9 +27,10 @@ export declare class Session {
27
27
  */
28
28
  static init(nostrSubscribe: NostrSubscribe, theirNextNostrPublicKey: string, ourCurrentPrivateKey: Uint8Array, isInitiator: boolean, sharedSecret: Uint8Array, name?: string): Session;
29
29
  /**
30
- * Sends a text message through the encrypted session
30
+ * Sends a text message through the encrypted session.
31
+ * Sent in a Nostr event with the kind CHAT_MESSAGE_KIND.
31
32
  * @param text The plaintext message to send
32
- * @returns A verified Nostr event containing the encrypted message
33
+ * @returns A verified Nostr event containing the encrypted message. You need to publish this event to the Nostr network.
33
34
  * @throws Error if we are not the initiator and trying to send the first message
34
35
  */
35
36
  send(text: string): {
@@ -40,7 +41,7 @@ export declare class Session {
40
41
  * Send a partial Nostr event through the encrypted session.
41
42
  * In addition to chat messages, it could be files, webrtc negotiation or many other types of messages.
42
43
  * @param event Partial Nostr event to send. Must be unsigned. Id and will be generated if not provided.
43
- * @returns A verified Nostr event containing the encrypted message
44
+ * @returns A verified Nostr event containing the encrypted message. You need to publish this event to the Nostr network.
44
45
  * @throws Error if we are not the initiator and trying to send the first message
45
46
  */
46
47
  sendEvent(event: Partial<UnsignedEvent>): {
@@ -1 +1 @@
1
- {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AAE/I,OAAO,EACL,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,aAAa,EAEb,KAAK,EAEN,MAAM,SAAS,CAAC;AAQjB;;;;;GAKG;AACH,qBAAa,OAAO;IAQN,OAAO,CAAC,cAAc;IAAyB,KAAK,EAAE,YAAY;IAP9E,OAAO,CAAC,gBAAgB,CAAC,CAAc;IACvC,OAAO,CAAC,oBAAoB,CAAC,CAAc;IAC3C,OAAO,CAAC,qBAAqB,CAAoC;IACjE,OAAO,CAAC,6BAA6B,CAAK;IACnC,IAAI,EAAE,MAAM,CAAC;gBAGA,cAAc,EAAE,cAAc,EAAS,KAAK,EAAE,YAAY;IAI9E;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IA6BtL;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAO7D;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAyCnF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO7C;;OAEG;IACH,KAAK;IAML,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,sBAAsB;CAkB/B"}
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AAE/I,OAAO,EACL,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,aAAa,EAEb,KAAK,EAEN,MAAM,SAAS,CAAC;AAQjB;;;;;GAKG;AACH,qBAAa,OAAO;IAQN,OAAO,CAAC,cAAc;IAAyB,KAAK,EAAE,YAAY;IAP9E,OAAO,CAAC,gBAAgB,CAAC,CAAc;IACvC,OAAO,CAAC,oBAAoB,CAAC,CAAc;IAC3C,OAAO,CAAC,qBAAqB,CAAoC;IACjE,OAAO,CAAC,6BAA6B,CAAK;IACnC,IAAI,EAAE,MAAM,CAAC;gBAGA,cAAc,EAAE,cAAc,EAAS,KAAK,EAAE,YAAY;IAI9E;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IA6BtL;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAO7D;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,KAAK,CAAA;KAAC;IAyCnF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO7C;;OAEG;IACH,KAAK;IAML,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,sBAAsB;CAkB/B"}
@@ -3715,9 +3715,10 @@ class st {
3715
3715
  return o && (b.name = o), b;
3716
3716
  }
3717
3717
  /**
3718
- * Sends a text message through the encrypted session
3718
+ * Sends a text message through the encrypted session.
3719
+ * Sent in a Nostr event with the kind CHAT_MESSAGE_KIND.
3719
3720
  * @param text The plaintext message to send
3720
- * @returns A verified Nostr event containing the encrypted message
3721
+ * @returns A verified Nostr event containing the encrypted message. You need to publish this event to the Nostr network.
3721
3722
  * @throws Error if we are not the initiator and trying to send the first message
3722
3723
  */
3723
3724
  send(t) {
@@ -3730,7 +3731,7 @@ class st {
3730
3731
  * Send a partial Nostr event through the encrypted session.
3731
3732
  * In addition to chat messages, it could be files, webrtc negotiation or many other types of messages.
3732
3733
  * @param event Partial Nostr event to send. Must be unsigned. Id and will be generated if not provided.
3733
- * @returns A verified Nostr event containing the encrypted message
3734
+ * @returns A verified Nostr event containing the encrypted message. You need to publish this event to the Nostr network.
3734
3735
  * @throws Error if we are not the initiator and trying to send the first message
3735
3736
  */
3736
3737
  sendEvent(t) {
@@ -3974,7 +3975,7 @@ class Pe {
3974
3975
  kinds: [jn],
3975
3976
  authors: [t],
3976
3977
  limit: 1,
3977
- "#d": ["nostr-double-ratchet/invite"]
3978
+ "#d": ["double-ratchet/invites/public"]
3978
3979
  };
3979
3980
  let s = 0;
3980
3981
  return n(i, (c) => {
@@ -4020,7 +4021,12 @@ class Pe {
4020
4021
  pubkey: this.inviter,
4021
4022
  content: "",
4022
4023
  created_at: Math.floor(Date.now() / 1e3),
4023
- tags: [["ephemeralKey", this.inviterEphemeralPublicKey], ["sharedSecret", this.sharedSecret], ["d", "nostr-double-ratchet/invite"]]
4024
+ tags: [
4025
+ ["ephemeralKey", this.inviterEphemeralPublicKey],
4026
+ ["sharedSecret", this.sharedSecret],
4027
+ ["d", "double-ratchet/invites/public"],
4028
+ ["l", "double-ratchet/invites"]
4029
+ ]
4024
4030
  };
4025
4031
  }
4026
4032
  /**
@@ -1 +1 @@
1
- (function(H,J){typeof exports=="object"&&typeof module<"u"?J(exports):typeof define=="function"&&define.amd?define(["exports"],J):(H=typeof globalThis<"u"?globalThis:H||self,J(H["nostr-double-ratchet"]={}))})(this,function(H){"use strict";var Yc=Object.defineProperty;var Xc=(H,J,ke)=>J in H?Yc(H,J,{enumerable:!0,configurable:!0,writable:!0,value:ke}):H[J]=ke;var ie=(H,J,ke)=>Xc(H,typeof J!="symbol"?J+"":J,ke);function J(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function ke(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function Ei(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");J(e.outputLen),J(e.blockLen)}function nt(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function mi(e,t){ke(e);const n=t.outputLen;if(e.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const At=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Cn=e=>e instanceof Uint8Array,Kt=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),se=(e,t)=>e<<32-t|e>>>t;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function xi(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Ct(e){if(typeof e=="string"&&(e=xi(e)),!Cn(e))throw new Error(`expected Uint8Array, got ${typeof e}`);return e}function Si(...e){const t=new Uint8Array(e.reduce((r,i)=>r+i.length,0));let n=0;return e.forEach(r=>{if(!Cn(r))throw new Error("Uint8Array expected");t.set(r,n),n+=r.length}),t}let Bn=class{clone(){return this._cloneInto()}};function Ni(e){const t=r=>e().update(Ct(r)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function kn(e=32){if(At&&typeof At.getRandomValues=="function")return At.getRandomValues(new Uint8Array(e));throw new Error("crypto.getRandomValues must be defined")}function Ai(e,t,n,r){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,n,r);const i=BigInt(32),s=BigInt(4294967295),o=Number(n>>i&s),c=Number(n&s),a=r?4:0,l=r?0:4;e.setUint32(t+a,o,r),e.setUint32(t+l,c,r)}let Ki=class extends Bn{constructor(t,n,r,i){super(),this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Kt(this.buffer)}update(t){nt(this);const{view:n,buffer:r,blockLen:i}=this;t=Ct(t);const s=t.length;for(let o=0;o<s;){const c=Math.min(i-this.pos,s-o);if(c===i){const a=Kt(t);for(;i<=s-o;o+=i)this.process(a,o);continue}r.set(t.subarray(o,o+c),this.pos),this.pos+=c,o+=c,this.pos===i&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){nt(this),mi(t,this),this.finished=!0;const{buffer:n,view:r,blockLen:i,isLE:s}=this;let{pos:o}=this;n[o++]=128,this.buffer.subarray(o).fill(0),this.padOffset>i-o&&(this.process(r,0),o=0);for(let u=o;u<i;u++)n[u]=0;Ai(r,i-8,BigInt(this.length*8),s),this.process(r,0);const c=Kt(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const l=a/4,f=this.get();if(l>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)c.setUint32(4*u,f[u],s)}digest(){const{buffer:t,outputLen:n}=this;this.digestInto(t);const r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:n,buffer:r,length:i,finished:s,destroyed:o,pos:c}=this;return t.length=i,t.pos=c,t.finished=s,t.destroyed=o,i%n&&t.buffer.set(r),t}};const Ci=(e,t,n)=>e&t^~e&n,Bi=(e,t,n)=>e&t^e&n^t&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]),be=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ve=new Uint32Array(64);let _i=class extends Ki{constructor(){super(64,32,8,!1),this.A=be[0]|0,this.B=be[1]|0,this.C=be[2]|0,this.D=be[3]|0,this.E=be[4]|0,this.F=be[5]|0,this.G=be[6]|0,this.H=be[7]|0}get(){const{A:t,B:n,C:r,D:i,E:s,F:o,G:c,H:a}=this;return[t,n,r,i,s,o,c,a]}set(t,n,r,i,s,o,c,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=c|0,this.H=a|0}process(t,n){for(let u=0;u<16;u++,n+=4)ve[u]=t.getUint32(n,!1);for(let u=16;u<64;u++){const g=ve[u-15],b=ve[u-2],p=se(g,7)^se(g,18)^g>>>3,h=se(b,17)^se(b,19)^b>>>10;ve[u]=h+ve[u-7]+p+ve[u-16]|0}let{A:r,B:i,C:s,D:o,E:c,F:a,G:l,H:f}=this;for(let u=0;u<64;u++){const g=se(c,6)^se(c,11)^se(c,25),b=f+g+Ci(c,a,l)+ki[u]+ve[u]|0,h=(se(r,2)^se(r,13)^se(r,22))+Bi(r,i,s)|0;f=l,l=a,a=c,c=o+b|0,o=s,s=i,i=r,r=b+h|0}r=r+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,c=c+this.E|0,a=a+this.F|0,l=l+this.G|0,f=f+this.H|0,this.set(r,i,s,o,c,a,l,f)}roundClean(){ve.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const Bt=Ni(()=>new _i);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _n=BigInt(0),rt=BigInt(1),Ii=BigInt(2),it=e=>e instanceof Uint8Array,Ui=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Oe(e){if(!it(e))throw new Error("Uint8Array expected");let t="";for(let n=0;n<e.length;n++)t+=Ui[e[n]];return t}function In(e){const t=e.toString(16);return t.length&1?`0${t}`:t}function kt(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return BigInt(e===""?"0":`0x${e}`)}function Pe(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);const t=e.length;if(t%2)throw new Error("padded hex string expected, got unpadded hex of length "+t);const n=new Uint8Array(t/2);for(let r=0;r<n.length;r++){const i=r*2,s=e.slice(i,i+2),o=Number.parseInt(s,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");n[r]=o}return n}function Y(e){return kt(Oe(e))}function _t(e){if(!it(e))throw new Error("Uint8Array expected");return kt(Oe(Uint8Array.from(e).reverse()))}function Ee(e,t){return Pe(e.toString(16).padStart(t*2,"0"))}function It(e,t){return Ee(e,t).reverse()}function Li(e){return Pe(In(e))}function Z(e,t,n){let r;if(typeof t=="string")try{r=Pe(t)}catch(s){throw new Error(`${e} must be valid hex string, got "${t}". Cause: ${s}`)}else if(it(t))r=Uint8Array.from(t);else throw new Error(`${e} must be hex string or Uint8Array`);const i=r.length;if(typeof n=="number"&&i!==n)throw new Error(`${e} expected ${n} bytes, got ${i}`);return r}function _e(...e){const t=new Uint8Array(e.reduce((r,i)=>r+i.length,0));let n=0;return e.forEach(r=>{if(!it(r))throw new Error("Uint8Array expected");t.set(r,n),n+=r.length}),t}function $i(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Ti(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Ri(e){let t;for(t=0;e>_n;e>>=rt,t+=1);return t}function Mi(e,t){return e>>BigInt(t)&rt}const Oi=(e,t,n)=>e|(n?rt:_n)<<BigInt(t),Ut=e=>(Ii<<BigInt(e-1))-rt,Lt=e=>new Uint8Array(e),Un=e=>Uint8Array.from(e);function Ln(e,t,n){if(typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=Lt(e),i=Lt(e),s=0;const o=()=>{r.fill(1),i.fill(0),s=0},c=(...u)=>n(i,r,...u),a=(u=Lt())=>{i=c(Un([0]),u),r=c(),u.length!==0&&(i=c(Un([1]),u),r=c())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0;const g=[];for(;u<t;){r=c();const b=r.slice();g.push(b),u+=r.length}return _e(...g)};return(u,g)=>{o(),a(u);let b;for(;!(b=g(l()));)a();return o(),b}}const Pi={bigint:e=>typeof e=="bigint",function:e=>typeof e=="function",boolean:e=>typeof e=="boolean",string:e=>typeof e=="string",stringOrUint8Array:e=>typeof e=="string"||e instanceof Uint8Array,isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>typeof e=="function"&&Number.isSafeInteger(e.outputLen)};function Fe(e,t,n={}){const r=(i,s,o)=>{const c=Pi[s];if(typeof c!="function")throw new Error(`Invalid validator "${s}", expected function`);const a=e[i];if(!(o&&a===void 0)&&!c(a,e))throw new Error(`Invalid param ${String(i)}=${a} (${typeof a}), expected ${s}`)};for(const[i,s]of Object.entries(t))r(i,s,!1);for(const[i,s]of Object.entries(n))r(i,s,!0);return e}const Hi=Object.freeze(Object.defineProperty({__proto__:null,bitGet:Mi,bitLen:Ri,bitMask:Ut,bitSet:Oi,bytesToHex:Oe,bytesToNumberBE:Y,bytesToNumberLE:_t,concatBytes:_e,createHmacDrbg:Ln,ensureBytes:Z,equalBytes:$i,hexToBytes:Pe,hexToNumber:kt,numberToBytesBE:Ee,numberToBytesLE:It,numberToHexUnpadded:In,numberToVarBytesBE:Li,utf8ToBytes:Ti,validateObject:Fe},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const V=BigInt(0),z=BigInt(1),Ie=BigInt(2),qi=BigInt(3),$t=BigInt(4),$n=BigInt(5),Tn=BigInt(8);BigInt(9),BigInt(16);function W(e,t){const n=e%t;return n>=V?n:t+n}function Di(e,t,n){if(n<=V||t<V)throw new Error("Expected power/modulo > 0");if(n===z)return V;let r=z;for(;t>V;)t&z&&(r=r*e%n),e=e*e%n,t>>=z;return r}function X(e,t,n){let r=e;for(;t-- >V;)r*=r,r%=n;return r}function Tt(e,t){if(e===V||t<=V)throw new Error(`invert: expected positive integers, got n=${e} mod=${t}`);let n=W(e,t),r=t,i=V,s=z;for(;n!==V;){const c=r/n,a=r%n,l=i-s*c;r=n,n=a,i=s,s=l}if(r!==z)throw new Error("invert: does not exist");return W(i,t)}function ji(e){const t=(e-z)/Ie;let n,r,i;for(n=e-z,r=0;n%Ie===V;n/=Ie,r++);for(i=Ie;i<e&&Di(i,t,e)!==e-z;i++);if(r===1){const o=(e+z)/$t;return function(a,l){const f=a.pow(l,o);if(!a.eql(a.sqr(f),l))throw new Error("Cannot find square root");return f}}const s=(n+z)/Ie;return function(c,a){if(c.pow(a,t)===c.neg(c.ONE))throw new Error("Cannot find square root");let l=r,f=c.pow(c.mul(c.ONE,i),n),u=c.pow(a,s),g=c.pow(a,n);for(;!c.eql(g,c.ONE);){if(c.eql(g,c.ZERO))return c.ZERO;let b=1;for(let h=c.sqr(g);b<l&&!c.eql(h,c.ONE);b++)h=c.sqr(h);const p=c.pow(f,z<<BigInt(l-b-1));f=c.sqr(p),u=c.mul(u,p),g=c.mul(g,f),l=b}return u}}function zi(e){if(e%$t===qi){const t=(e+z)/$t;return function(r,i){const s=r.pow(i,t);if(!r.eql(r.sqr(s),i))throw new Error("Cannot find square root");return s}}if(e%Tn===$n){const t=(e-$n)/Tn;return function(r,i){const s=r.mul(i,Ie),o=r.pow(s,t),c=r.mul(i,o),a=r.mul(r.mul(c,Ie),o),l=r.mul(c,r.sub(a,r.ONE));if(!r.eql(r.sqr(l),i))throw new Error("Cannot find square root");return l}}return ji(e)}const Vi=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Wi(e){const t={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},n=Vi.reduce((r,i)=>(r[i]="function",r),t);return Fe(e,n)}function Zi(e,t,n){if(n<V)throw new Error("Expected power > 0");if(n===V)return e.ONE;if(n===z)return t;let r=e.ONE,i=t;for(;n>V;)n&z&&(r=e.mul(r,i)),i=e.sqr(i),n>>=z;return r}function Gi(e,t){const n=new Array(t.length),r=t.reduce((s,o,c)=>e.is0(o)?s:(n[c]=s,e.mul(s,o)),e.ONE),i=e.inv(r);return t.reduceRight((s,o,c)=>e.is0(o)?s:(n[c]=e.mul(s,n[c]),e.mul(s,o)),i),n}function Rn(e,t){const n=t!==void 0?t:e.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function Fi(e,t,n=!1,r={}){if(e<=V)throw new Error(`Expected Field ORDER > 0, got ${e}`);const{nBitLength:i,nByteLength:s}=Rn(e,t);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");const o=zi(e),c=Object.freeze({ORDER:e,BITS:i,BYTES:s,MASK:Ut(i),ZERO:V,ONE:z,create:a=>W(a,e),isValid:a=>{if(typeof a!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof a}`);return V<=a&&a<e},is0:a=>a===V,isOdd:a=>(a&z)===z,neg:a=>W(-a,e),eql:(a,l)=>a===l,sqr:a=>W(a*a,e),add:(a,l)=>W(a+l,e),sub:(a,l)=>W(a-l,e),mul:(a,l)=>W(a*l,e),pow:(a,l)=>Zi(c,a,l),div:(a,l)=>W(a*Tt(l,e),e),sqrN:a=>a*a,addN:(a,l)=>a+l,subN:(a,l)=>a-l,mulN:(a,l)=>a*l,inv:a=>Tt(a,e),sqrt:r.sqrt||(a=>o(c,a)),invertBatch:a=>Gi(c,a),cmov:(a,l,f)=>f?l:a,toBytes:a=>n?It(a,s):Ee(a,s),fromBytes:a=>{if(a.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${a.length}`);return n?_t(a):Y(a)}});return Object.freeze(c)}function Mn(e){if(typeof e!="bigint")throw new Error("field order must be bigint");const t=e.toString(2).length;return Math.ceil(t/8)}function On(e){const t=Mn(e);return t+Math.ceil(t/2)}function Ji(e,t,n=!1){const r=e.length,i=Mn(t),s=On(t);if(r<16||r<s||r>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${r}`);const o=n?Y(e):_t(e),c=W(o,t-z)+z;return n?It(c,i):Ee(c,i)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Yi=BigInt(0),Rt=BigInt(1);function Xi(e,t){const n=(i,s)=>{const o=s.negate();return i?o:s},r=i=>{const s=Math.ceil(t/i)+1,o=2**(i-1);return{windows:s,windowSize:o}};return{constTimeNegate:n,unsafeLadder(i,s){let o=e.ZERO,c=i;for(;s>Yi;)s&Rt&&(o=o.add(c)),c=c.double(),s>>=Rt;return o},precomputeWindow(i,s){const{windows:o,windowSize:c}=r(s),a=[];let l=i,f=l;for(let u=0;u<o;u++){f=l,a.push(f);for(let g=1;g<c;g++)f=f.add(l),a.push(f);l=f.double()}return a},wNAF(i,s,o){const{windows:c,windowSize:a}=r(i);let l=e.ZERO,f=e.BASE;const u=BigInt(2**i-1),g=2**i,b=BigInt(i);for(let p=0;p<c;p++){const h=p*a;let d=Number(o&u);o>>=b,d>a&&(d-=g,o+=Rt);const y=h,m=h+Math.abs(d)-1,A=p%2!==0,I=d<0;d===0?f=f.add(n(A,s[y])):l=l.add(n(I,s[m]))}return{p:l,f}},wNAFCached(i,s,o,c){const a=i._WINDOW_SIZE||1;let l=s.get(i);return l||(l=this.precomputeWindow(i,a),a!==1&&s.set(i,c(l))),this.wNAF(a,l,o)}}}function Pn(e){return Wi(e.Fp),Fe(e,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Rn(e.n,e.nBitLength),...e,p:e.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Qi(e){const t=Pn(e);Fe(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:n,Fp:r,a:i}=t;if(n){if(!r.eql(i,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({...t})}const{bytesToNumberBE:es,hexToBytes:ts}=Hi,Ue={Err:class extends Error{constructor(t=""){super(t)}},_parseInt(e){const{Err:t}=Ue;if(e.length<2||e[0]!==2)throw new t("Invalid signature integer tag");const n=e[1],r=e.subarray(2,n+2);if(!n||r.length!==n)throw new t("Invalid signature integer: wrong length");if(r[0]&128)throw new t("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new t("Invalid signature integer: unnecessary leading zero");return{d:es(r),l:e.subarray(n+2)}},toSig(e){const{Err:t}=Ue,n=typeof e=="string"?ts(e):e;if(!(n instanceof Uint8Array))throw new Error("ui8a expected");let r=n.length;if(r<2||n[0]!=48)throw new t("Invalid signature tag");if(n[1]!==r-2)throw new t("Invalid signature: incorrect length");const{d:i,l:s}=Ue._parseInt(n.subarray(2)),{d:o,l:c}=Ue._parseInt(s);if(c.length)throw new t("Invalid signature: left bytes after parsing");return{r:i,s:o}},hexFromSig(e){const t=l=>Number.parseInt(l[0],16)&8?"00"+l:l,n=l=>{const f=l.toString(16);return f.length&1?`0${f}`:f},r=t(n(e.s)),i=t(n(e.r)),s=r.length/2,o=i.length/2,c=n(s),a=n(o);return`30${n(o+s+4)}02${a}${i}02${c}${r}`}},ue=BigInt(0),Q=BigInt(1);BigInt(2);const Hn=BigInt(3);BigInt(4);function ns(e){const t=Qi(e),{Fp:n}=t,r=t.toBytes||((p,h,d)=>{const y=h.toAffine();return _e(Uint8Array.from([4]),n.toBytes(y.x),n.toBytes(y.y))}),i=t.fromBytes||(p=>{const h=p.subarray(1),d=n.fromBytes(h.subarray(0,n.BYTES)),y=n.fromBytes(h.subarray(n.BYTES,2*n.BYTES));return{x:d,y}});function s(p){const{a:h,b:d}=t,y=n.sqr(p),m=n.mul(y,p);return n.add(n.add(m,n.mul(p,h)),d)}if(!n.eql(n.sqr(t.Gy),s(t.Gx)))throw new Error("bad generator point: equation left != right");function o(p){return typeof p=="bigint"&&ue<p&&p<t.n}function c(p){if(!o(p))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function a(p){const{allowedPrivateKeyLengths:h,nByteLength:d,wrapPrivateKey:y,n:m}=t;if(h&&typeof p!="bigint"){if(p instanceof Uint8Array&&(p=Oe(p)),typeof p!="string"||!h.includes(p.length))throw new Error("Invalid key");p=p.padStart(d*2,"0")}let A;try{A=typeof p=="bigint"?p:Y(Z("private key",p,d))}catch{throw new Error(`private key must be ${d} bytes, hex or bigint, not ${typeof p}`)}return y&&(A=W(A,m)),c(A),A}const l=new Map;function f(p){if(!(p instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(h,d,y){if(this.px=h,this.py=d,this.pz=y,h==null||!n.isValid(h))throw new Error("x required");if(d==null||!n.isValid(d))throw new Error("y required");if(y==null||!n.isValid(y))throw new Error("z required")}static fromAffine(h){const{x:d,y}=h||{};if(!h||!n.isValid(d)||!n.isValid(y))throw new Error("invalid affine point");if(h instanceof u)throw new Error("projective point not allowed");const m=A=>n.eql(A,n.ZERO);return m(d)&&m(y)?u.ZERO:new u(d,y,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(h){const d=n.invertBatch(h.map(y=>y.pz));return h.map((y,m)=>y.toAffine(d[m])).map(u.fromAffine)}static fromHex(h){const d=u.fromAffine(i(Z("pointHex",h)));return d.assertValidity(),d}static fromPrivateKey(h){return u.BASE.multiply(a(h))}_setWindowSize(h){this._WINDOW_SIZE=h,l.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:h,y:d}=this.toAffine();if(!n.isValid(h)||!n.isValid(d))throw new Error("bad point: x or y not FE");const y=n.sqr(d),m=s(h);if(!n.eql(y,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:h}=this.toAffine();if(n.isOdd)return!n.isOdd(h);throw new Error("Field doesn't support isOdd")}equals(h){f(h);const{px:d,py:y,pz:m}=this,{px:A,py:I,pz:B}=h,E=n.eql(n.mul(d,B),n.mul(A,m)),x=n.eql(n.mul(y,B),n.mul(I,m));return E&&x}negate(){return new u(this.px,n.neg(this.py),this.pz)}double(){const{a:h,b:d}=t,y=n.mul(d,Hn),{px:m,py:A,pz:I}=this;let B=n.ZERO,E=n.ZERO,x=n.ZERO,S=n.mul(m,m),P=n.mul(A,A),_=n.mul(I,I),K=n.mul(m,A);return K=n.add(K,K),x=n.mul(m,I),x=n.add(x,x),B=n.mul(h,x),E=n.mul(y,_),E=n.add(B,E),B=n.sub(P,E),E=n.add(P,E),E=n.mul(B,E),B=n.mul(K,B),x=n.mul(y,x),_=n.mul(h,_),K=n.sub(S,_),K=n.mul(h,K),K=n.add(K,x),x=n.add(S,S),S=n.add(x,S),S=n.add(S,_),S=n.mul(S,K),E=n.add(E,S),_=n.mul(A,I),_=n.add(_,_),S=n.mul(_,K),B=n.sub(B,S),x=n.mul(_,P),x=n.add(x,x),x=n.add(x,x),new u(B,E,x)}add(h){f(h);const{px:d,py:y,pz:m}=this,{px:A,py:I,pz:B}=h;let E=n.ZERO,x=n.ZERO,S=n.ZERO;const P=t.a,_=n.mul(t.b,Hn);let K=n.mul(d,A),R=n.mul(y,I),M=n.mul(m,B),j=n.add(d,y),w=n.add(A,I);j=n.mul(j,w),w=n.add(K,R),j=n.sub(j,w),w=n.add(d,m);let v=n.add(A,B);return w=n.mul(w,v),v=n.add(K,M),w=n.sub(w,v),v=n.add(y,m),E=n.add(I,B),v=n.mul(v,E),E=n.add(R,M),v=n.sub(v,E),S=n.mul(P,w),E=n.mul(_,M),S=n.add(E,S),E=n.sub(R,S),S=n.add(R,S),x=n.mul(E,S),R=n.add(K,K),R=n.add(R,K),M=n.mul(P,M),w=n.mul(_,w),R=n.add(R,M),M=n.sub(K,M),M=n.mul(P,M),w=n.add(w,M),K=n.mul(R,w),x=n.add(x,K),K=n.mul(v,w),E=n.mul(j,E),E=n.sub(E,K),K=n.mul(j,R),S=n.mul(v,S),S=n.add(S,K),new u(E,x,S)}subtract(h){return this.add(h.negate())}is0(){return this.equals(u.ZERO)}wNAF(h){return b.wNAFCached(this,l,h,d=>{const y=n.invertBatch(d.map(m=>m.pz));return d.map((m,A)=>m.toAffine(y[A])).map(u.fromAffine)})}multiplyUnsafe(h){const d=u.ZERO;if(h===ue)return d;if(c(h),h===Q)return this;const{endo:y}=t;if(!y)return b.unsafeLadder(this,h);let{k1neg:m,k1:A,k2neg:I,k2:B}=y.splitScalar(h),E=d,x=d,S=this;for(;A>ue||B>ue;)A&Q&&(E=E.add(S)),B&Q&&(x=x.add(S)),S=S.double(),A>>=Q,B>>=Q;return m&&(E=E.negate()),I&&(x=x.negate()),x=new u(n.mul(x.px,y.beta),x.py,x.pz),E.add(x)}multiply(h){c(h);let d=h,y,m;const{endo:A}=t;if(A){const{k1neg:I,k1:B,k2neg:E,k2:x}=A.splitScalar(d);let{p:S,f:P}=this.wNAF(B),{p:_,f:K}=this.wNAF(x);S=b.constTimeNegate(I,S),_=b.constTimeNegate(E,_),_=new u(n.mul(_.px,A.beta),_.py,_.pz),y=S.add(_),m=P.add(K)}else{const{p:I,f:B}=this.wNAF(d);y=I,m=B}return u.normalizeZ([y,m])[0]}multiplyAndAddUnsafe(h,d,y){const m=u.BASE,A=(B,E)=>E===ue||E===Q||!B.equals(m)?B.multiplyUnsafe(E):B.multiply(E),I=A(this,d).add(A(h,y));return I.is0()?void 0:I}toAffine(h){const{px:d,py:y,pz:m}=this,A=this.is0();h==null&&(h=A?n.ONE:n.inv(m));const I=n.mul(d,h),B=n.mul(y,h),E=n.mul(m,h);if(A)return{x:n.ZERO,y:n.ZERO};if(!n.eql(E,n.ONE))throw new Error("invZ was invalid");return{x:I,y:B}}isTorsionFree(){const{h,isTorsionFree:d}=t;if(h===Q)return!0;if(d)return d(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h,clearCofactor:d}=t;return h===Q?this:d?d(u,this):this.multiplyUnsafe(t.h)}toRawBytes(h=!0){return this.assertValidity(),r(u,this,h)}toHex(h=!0){return Oe(this.toRawBytes(h))}}u.BASE=new u(t.Gx,t.Gy,n.ONE),u.ZERO=new u(n.ZERO,n.ONE,n.ZERO);const g=t.nBitLength,b=Xi(u,t.endo?Math.ceil(g/2):g);return{CURVE:t,ProjectivePoint:u,normPrivateKeyToScalar:a,weierstrassEquation:s,isWithinCurveOrder:o}}function rs(e){const t=Pn(e);return Fe(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function is(e){const t=rs(e),{Fp:n,n:r}=t,i=n.BYTES+1,s=2*n.BYTES+1;function o(w){return ue<w&&w<n.ORDER}function c(w){return W(w,r)}function a(w){return Tt(w,r)}const{ProjectivePoint:l,normPrivateKeyToScalar:f,weierstrassEquation:u,isWithinCurveOrder:g}=ns({...t,toBytes(w,v,N){const k=v.toAffine(),C=n.toBytes(k.x),L=_e;return N?L(Uint8Array.from([v.hasEvenY()?2:3]),C):L(Uint8Array.from([4]),C,n.toBytes(k.y))},fromBytes(w){const v=w.length,N=w[0],k=w.subarray(1);if(v===i&&(N===2||N===3)){const C=Y(k);if(!o(C))throw new Error("Point is not on curve");const L=u(C);let O=n.sqrt(L);const $=(O&Q)===Q;return(N&1)===1!==$&&(O=n.neg(O)),{x:C,y:O}}else if(v===s&&N===4){const C=n.fromBytes(k.subarray(0,n.BYTES)),L=n.fromBytes(k.subarray(n.BYTES,2*n.BYTES));return{x:C,y:L}}else throw new Error(`Point of length ${v} was invalid. Expected ${i} compressed bytes or ${s} uncompressed bytes`)}}),b=w=>Oe(Ee(w,t.nByteLength));function p(w){const v=r>>Q;return w>v}function h(w){return p(w)?c(-w):w}const d=(w,v,N)=>Y(w.slice(v,N));class y{constructor(v,N,k){this.r=v,this.s=N,this.recovery=k,this.assertValidity()}static fromCompact(v){const N=t.nByteLength;return v=Z("compactSignature",v,N*2),new y(d(v,0,N),d(v,N,2*N))}static fromDER(v){const{r:N,s:k}=Ue.toSig(Z("DER",v));return new y(N,k)}assertValidity(){if(!g(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!g(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(v){return new y(this.r,this.s,v)}recoverPublicKey(v){const{r:N,s:k,recovery:C}=this,L=x(Z("msgHash",v));if(C==null||![0,1,2,3].includes(C))throw new Error("recovery id invalid");const O=C===2||C===3?N+t.n:N;if(O>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");const $=C&1?"03":"02",ne=l.fromHex($+b(O)),Ce=a(O),Ve=c(-L*Ce),tt=c(k*Ce),Be=l.BASE.multiplyAndAddUnsafe(ne,Ve,tt);if(!Be)throw new Error("point at infinify");return Be.assertValidity(),Be}hasHighS(){return p(this.s)}normalizeS(){return this.hasHighS()?new y(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return Pe(this.toDERHex())}toDERHex(){return Ue.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Pe(this.toCompactHex())}toCompactHex(){return b(this.r)+b(this.s)}}const m={isValidPrivateKey(w){try{return f(w),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const w=On(t.n);return Ji(t.randomBytes(w),t.n)},precompute(w=8,v=l.BASE){return v._setWindowSize(w),v.multiply(BigInt(3)),v}};function A(w,v=!0){return l.fromPrivateKey(w).toRawBytes(v)}function I(w){const v=w instanceof Uint8Array,N=typeof w=="string",k=(v||N)&&w.length;return v?k===i||k===s:N?k===2*i||k===2*s:w instanceof l}function B(w,v,N=!0){if(I(w))throw new Error("first arg must be private key");if(!I(v))throw new Error("second arg must be public key");return l.fromHex(v).multiply(f(w)).toRawBytes(N)}const E=t.bits2int||function(w){const v=Y(w),N=w.length*8-t.nBitLength;return N>0?v>>BigInt(N):v},x=t.bits2int_modN||function(w){return c(E(w))},S=Ut(t.nBitLength);function P(w){if(typeof w!="bigint")throw new Error("bigint expected");if(!(ue<=w&&w<S))throw new Error(`bigint expected < 2^${t.nBitLength}`);return Ee(w,t.nByteLength)}function _(w,v,N=K){if(["recovered","canonical"].some(Me=>Me in N))throw new Error("sign() legacy options not supported");const{hash:k,randomBytes:C}=t;let{lowS:L,prehash:O,extraEntropy:$}=N;L==null&&(L=!0),w=Z("msgHash",w),O&&(w=Z("prehashed msgHash",k(w)));const ne=x(w),Ce=f(v),Ve=[P(Ce),P(ne)];if($!=null){const Me=$===!0?C(n.BYTES):$;Ve.push(Z("extraEntropy",Me))}const tt=_e(...Ve),Be=ne;function Kn(Me){const We=E(Me);if(!g(We))return;const wi=a(We),Ze=l.BASE.multiply(We).toAffine(),re=c(Ze.x);if(re===ue)return;const Ge=c(wi*c(Be+re*Ce));if(Ge===ue)return;let bi=(Ze.x===re?0:2)|Number(Ze.y&Q),vi=Ge;return L&&p(Ge)&&(vi=h(Ge),bi^=1),new y(re,vi,bi)}return{seed:tt,k2sig:Kn}}const K={lowS:t.lowS,prehash:!1},R={lowS:t.lowS,prehash:!1};function M(w,v,N=K){const{seed:k,k2sig:C}=_(w,v,N),L=t;return Ln(L.hash.outputLen,L.nByteLength,L.hmac)(k,C)}l.BASE._setWindowSize(8);function j(w,v,N,k=R){var Ze;const C=w;if(v=Z("msgHash",v),N=Z("publicKey",N),"strict"in k)throw new Error("options.strict was renamed to lowS");const{lowS:L,prehash:O}=k;let $,ne;try{if(typeof C=="string"||C instanceof Uint8Array)try{$=y.fromDER(C)}catch(re){if(!(re instanceof Ue.Err))throw re;$=y.fromCompact(C)}else if(typeof C=="object"&&typeof C.r=="bigint"&&typeof C.s=="bigint"){const{r:re,s:Ge}=C;$=new y(re,Ge)}else throw new Error("PARSE");ne=l.fromHex(N)}catch(re){if(re.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(L&&$.hasHighS())return!1;O&&(v=t.hash(v));const{r:Ce,s:Ve}=$,tt=x(v),Be=a(Ve),Kn=c(tt*Be),Me=c(Ce*Be),We=(Ze=l.BASE.multiplyAndAddUnsafe(ne,Kn,Me))==null?void 0:Ze.toAffine();return We?c(We.x)===Ce:!1}return{CURVE:t,getPublicKey:A,getSharedSecret:B,sign:M,verify:j,ProjectivePoint:l,Signature:y,utils:m}}let qn=class extends Bn{constructor(t,n){super(),this.finished=!1,this.destroyed=!1,Ei(t);const r=Ct(n);if(this.iHash=t.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 i=this.blockLen,s=new Uint8Array(i);s.set(r.length>i?t.create().update(r).digest():r);for(let o=0;o<s.length;o++)s[o]^=54;this.iHash.update(s),this.oHash=t.create();for(let o=0;o<s.length;o++)s[o]^=106;this.oHash.update(s),s.fill(0)}update(t){return nt(this),this.iHash.update(t),this}digestInto(t){nt(this),ke(t,this.outputLen),this.finished=!0,this.iHash.digestInto(t),this.oHash.update(t),this.oHash.digestInto(t),this.destroy()}digest(){const t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||(t=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:i,destroyed:s,blockLen:o,outputLen:c}=this;return t=t,t.finished=i,t.destroyed=s,t.blockLen=o,t.outputLen=c,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}};const Dn=(e,t,n)=>new qn(e,t).update(n).digest();Dn.create=(e,t)=>new qn(e,t);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function ss(e){return{hash:e,hmac:(t,...n)=>Dn(e,t,Si(...n)),randomBytes:kn}}function os(e,t){const n=r=>is({...e,...ss(r)});return Object.freeze({...n(t),create:n})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const st=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),ot=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),jn=BigInt(1),at=BigInt(2),zn=(e,t)=>(e+t/at)/t;function Vn(e){const t=st,n=BigInt(3),r=BigInt(6),i=BigInt(11),s=BigInt(22),o=BigInt(23),c=BigInt(44),a=BigInt(88),l=e*e*e%t,f=l*l*e%t,u=X(f,n,t)*f%t,g=X(u,n,t)*f%t,b=X(g,at,t)*l%t,p=X(b,i,t)*b%t,h=X(p,s,t)*p%t,d=X(h,c,t)*h%t,y=X(d,a,t)*d%t,m=X(y,c,t)*h%t,A=X(m,n,t)*f%t,I=X(A,o,t)*p%t,B=X(I,r,t)*l%t,E=X(B,at,t);if(!Mt.eql(Mt.sqr(E),e))throw new Error("Cannot find square root");return E}const Mt=Fi(st,void 0,void 0,{sqrt:Vn}),Le=os({a:BigInt(0),b:BigInt(7),Fp:Mt,n:ot,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{const t=ot,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-jn*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=n,o=BigInt("0x100000000000000000000000000000000"),c=zn(s*e,t),a=zn(-r*e,t);let l=W(e-c*n-a*i,t),f=W(-c*r-a*s,t);const u=l>o,g=f>o;if(u&&(l=t-l),g&&(f=t-f),l>o||f>o)throw new Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:u,k1:l,k2neg:g,k2:f}}}},Bt),ct=BigInt(0),Wn=e=>typeof e=="bigint"&&ct<e&&e<st,as=e=>typeof e=="bigint"&&ct<e&&e<ot,Zn={};function ut(e,...t){let n=Zn[e];if(n===void 0){const r=Bt(Uint8Array.from(e,i=>i.charCodeAt(0)));n=_e(r,r),Zn[e]=n}return Bt(_e(n,...t))}const Ot=e=>e.toRawBytes(!0).slice(1),Pt=e=>Ee(e,32),Ht=e=>W(e,st),Je=e=>W(e,ot),qt=Le.ProjectivePoint,cs=(e,t,n)=>qt.BASE.multiplyAndAddUnsafe(e,t,n);function Dt(e){let t=Le.utils.normPrivateKeyToScalar(e),n=qt.fromPrivateKey(t);return{scalar:n.hasEvenY()?t:Je(-t),bytes:Ot(n)}}function Gn(e){if(!Wn(e))throw new Error("bad x: need 0 < x < p");const t=Ht(e*e),n=Ht(t*e+BigInt(7));let r=Vn(n);r%at!==ct&&(r=Ht(-r));const i=new qt(e,r,jn);return i.assertValidity(),i}function Fn(...e){return Je(Y(ut("BIP0340/challenge",...e)))}function us(e){return Dt(e).bytes}function ls(e,t,n=kn(32)){const r=Z("message",e),{bytes:i,scalar:s}=Dt(t),o=Z("auxRand",n,32),c=Pt(s^Y(ut("BIP0340/aux",o))),a=ut("BIP0340/nonce",c,i,r),l=Je(Y(a));if(l===ct)throw new Error("sign failed: k is zero");const{bytes:f,scalar:u}=Dt(l),g=Fn(f,i,r),b=new Uint8Array(64);if(b.set(f,0),b.set(Pt(Je(u+g*s)),32),!Jn(b,r,i))throw new Error("sign: Invalid signature produced");return b}function Jn(e,t,n){const r=Z("signature",e,64),i=Z("message",t),s=Z("publicKey",n,32);try{const o=Gn(Y(s)),c=Y(r.subarray(0,32));if(!Wn(c))return!1;const a=Y(r.subarray(32,64));if(!as(a))return!1;const l=Fn(Pt(c),Ot(o),i),f=cs(o,a,Je(-l));return!(!f||!f.hasEvenY()||f.toAffine().x!==c)}catch{return!1}}const Ye={getPublicKey:us,sign:ls,verify:Jn,utils:{randomPrivateKey:Le.utils.randomPrivateKey,lift_x:Gn,pointToBytes:Ot,numberToBytesBE:Ee,bytesToNumberBE:Y,taggedHash:ut,mod:W}},jt=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const zt=e=>e instanceof Uint8Array,Vt=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),oe=(e,t)=>e<<32-t|e>>>t;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");const fs=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function T(e){if(!zt(e))throw new Error("Uint8Array expected");let t="";for(let n=0;n<e.length;n++)t+=fs[e[n]];return t}function F(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);const t=e.length;if(t%2)throw new Error("padded hex string expected, got unpadded hex of length "+t);const n=new Uint8Array(t/2);for(let r=0;r<n.length;r++){const i=r*2,s=e.slice(i,i+2),o=Number.parseInt(s,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");n[r]=o}return n}function hs(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Xe(e){if(typeof e=="string"&&(e=hs(e)),!zt(e))throw new Error(`expected Uint8Array, got ${typeof e}`);return e}function lt(...e){const t=new Uint8Array(e.reduce((r,i)=>r+i.length,0));let n=0;return e.forEach(r=>{if(!zt(r))throw new Error("Uint8Array expected");t.set(r,n),n+=r.length}),t}class Yn{clone(){return this._cloneInto()}}function Xn(e){const t=r=>e().update(Xe(r)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function Qn(e=32){if(jt&&typeof jt.getRandomValues=="function")return jt.getRandomValues(new Uint8Array(e));throw new Error("crypto.getRandomValues must be defined")}function Wt(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function ds(e){if(typeof e!="boolean")throw new Error(`Expected boolean, not ${e}`)}function er(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function ps(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Wt(e.outputLen),Wt(e.blockLen)}function ys(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function gs(e,t){er(e);const n=t.outputLen;if(e.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const ae={number:Wt,bool:ds,bytes:er,hash:ps,exists:ys,output:gs};function ws(e,t,n,r){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,n,r);const i=BigInt(32),s=BigInt(4294967295),o=Number(n>>i&s),c=Number(n&s),a=r?4:0,l=r?0:4;e.setUint32(t+a,o,r),e.setUint32(t+l,c,r)}class bs extends Yn{constructor(t,n,r,i){super(),this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Vt(this.buffer)}update(t){ae.exists(this);const{view:n,buffer:r,blockLen:i}=this;t=Xe(t);const s=t.length;for(let o=0;o<s;){const c=Math.min(i-this.pos,s-o);if(c===i){const a=Vt(t);for(;i<=s-o;o+=i)this.process(a,o);continue}r.set(t.subarray(o,o+c),this.pos),this.pos+=c,o+=c,this.pos===i&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){ae.exists(this),ae.output(t,this),this.finished=!0;const{buffer:n,view:r,blockLen:i,isLE:s}=this;let{pos:o}=this;n[o++]=128,this.buffer.subarray(o).fill(0),this.padOffset>i-o&&(this.process(r,0),o=0);for(let u=o;u<i;u++)n[u]=0;ws(r,i-8,BigInt(this.length*8),s),this.process(r,0);const c=Vt(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const l=a/4,f=this.get();if(l>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)c.setUint32(4*u,f[u],s)}digest(){const{buffer:t,outputLen:n}=this;this.digestInto(t);const r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:n,buffer:r,length:i,finished:s,destroyed:o,pos:c}=this;return t.length=i,t.pos=c,t.finished=s,t.destroyed=o,i%n&&t.buffer.set(r),t}}const vs=(e,t,n)=>e&t^~e&n,Es=(e,t,n)=>e&t^e&n^t&n,ms=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]),me=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),xe=new Uint32Array(64);class tr extends bs{constructor(){super(64,32,8,!1),this.A=me[0]|0,this.B=me[1]|0,this.C=me[2]|0,this.D=me[3]|0,this.E=me[4]|0,this.F=me[5]|0,this.G=me[6]|0,this.H=me[7]|0}get(){const{A:t,B:n,C:r,D:i,E:s,F:o,G:c,H:a}=this;return[t,n,r,i,s,o,c,a]}set(t,n,r,i,s,o,c,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=c|0,this.H=a|0}process(t,n){for(let u=0;u<16;u++,n+=4)xe[u]=t.getUint32(n,!1);for(let u=16;u<64;u++){const g=xe[u-15],b=xe[u-2],p=oe(g,7)^oe(g,18)^g>>>3,h=oe(b,17)^oe(b,19)^b>>>10;xe[u]=h+xe[u-7]+p+xe[u-16]|0}let{A:r,B:i,C:s,D:o,E:c,F:a,G:l,H:f}=this;for(let u=0;u<64;u++){const g=oe(c,6)^oe(c,11)^oe(c,25),b=f+g+vs(c,a,l)+ms[u]+xe[u]|0,h=(oe(r,2)^oe(r,13)^oe(r,22))+Es(r,i,s)|0;f=l,l=a,a=c,c=o+b|0,o=s,s=i,i=r,r=b+h|0}r=r+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,c=c+this.E|0,a=a+this.F|0,l=l+this.G|0,f=f+this.H|0,this.set(r,i,s,o,c,a,l,f)}roundClean(){xe.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class xs extends tr{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 le=Xn(()=>new tr);Xn(()=>new xs);/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */function He(e){if(!Number.isSafeInteger(e))throw new Error(`Wrong integer: ${e}`)}function fe(...e){const t=(i,s)=>o=>i(s(o)),n=Array.from(e).reverse().reduce((i,s)=>i?t(i,s.encode):s.encode,void 0),r=e.reduce((i,s)=>i?t(i,s.decode):s.decode,void 0);return{encode:n,decode:r}}function he(e){return{encode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return t.map(n=>{if(He(n),n<0||n>=e.length)throw new Error(`Digit index outside alphabet: ${n} (alphabet: ${e.length})`);return e[n]})},decode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="string")throw new Error("alphabet.decode input should be array of strings");return t.map(n=>{if(typeof n!="string")throw new Error(`alphabet.decode: not string element=${n}`);const r=e.indexOf(n);if(r===-1)throw new Error(`Unknown letter: "${n}". Allowed: ${e}`);return r})}}}function de(e=""){if(typeof e!="string")throw new Error("join separator should be string");return{encode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="string")throw new Error("join.encode input should be array of strings");for(let n of t)if(typeof n!="string")throw new Error(`join.encode: non-string input=${n}`);return t.join(e)},decode:t=>{if(typeof t!="string")throw new Error("join.decode input should be string");return t.split(e)}}}function ft(e,t="="){if(He(e),typeof t!="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*e%8;)n.push(t);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 i of n)if(typeof i!="string")throw new Error(`padding.decode: non-string input=${i}`);let r=n.length;if(r*e%8)throw new Error("Invalid padding: string should have whole number of bytes");for(;r>0&&n[r-1]===t;r--)if(!((r-1)*e%8))throw new Error("Invalid padding: string has too much padding");return n.slice(0,r)}}}function nr(e){if(typeof e!="function")throw new Error("normalize fn should be function");return{encode:t=>t,decode:t=>e(t)}}function rr(e,t,n){if(t<2)throw new Error(`convertRadix: wrong from=${t}, 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(e))throw new Error("convertRadix: data should be array");if(!e.length)return[];let r=0;const i=[],s=Array.from(e);for(s.forEach(o=>{if(He(o),o<0||o>=t)throw new Error(`Wrong integer: ${o}`)});;){let o=0,c=!0;for(let a=r;a<s.length;a++){const l=s[a],f=t*o+l;if(!Number.isSafeInteger(f)||t*o/t!==o||f-l!==t*o)throw new Error("convertRadix: carry overflow");if(o=f%n,s[a]=Math.floor(f/n),!Number.isSafeInteger(s[a])||s[a]*n+o!==f)throw new Error("convertRadix: carry overflow");if(c)s[a]?c=!1:r=a;else continue}if(i.push(o),c)break}for(let o=0;o<e.length-1&&e[o]===0;o++)i.push(0);return i.reverse()}const ir=(e,t)=>t?ir(t,e%t):e,ht=(e,t)=>e+(t-ir(e,t));function Zt(e,t,n,r){if(!Array.isArray(e))throw new Error("convertRadix2: data should be array");if(t<=0||t>32)throw new Error(`convertRadix2: wrong from=${t}`);if(n<=0||n>32)throw new Error(`convertRadix2: wrong to=${n}`);if(ht(t,n)>32)throw new Error(`convertRadix2: carry overflow from=${t} to=${n} carryBits=${ht(t,n)}`);let i=0,s=0;const o=2**n-1,c=[];for(const a of e){if(He(a),a>=2**t)throw new Error(`convertRadix2: invalid data word=${a} from=${t}`);if(i=i<<t|a,s+t>32)throw new Error(`convertRadix2: carry overflow pos=${s} from=${t}`);for(s+=t;s>=n;s-=n)c.push((i>>s-n&o)>>>0);i&=2**s-1}if(i=i<<n-s&o,!r&&s>=t)throw new Error("Excess padding");if(!r&&i)throw new Error(`Non-zero padding: ${i}`);return r&&s>0&&c.push(i>>>0),c}function Ss(e){return He(e),{encode:t=>{if(!(t instanceof Uint8Array))throw new Error("radix.encode input should be Uint8Array");return rr(Array.from(t),2**8,e)},decode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="number")throw new Error("radix.decode input should be array of strings");return Uint8Array.from(rr(t,e,2**8))}}}function Se(e,t=!1){if(He(e),e<=0||e>32)throw new Error("radix2: bits should be in (0..32]");if(ht(8,e)>32||ht(e,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 Zt(Array.from(n),8,e,!t)},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(Zt(n,e,8,t))}}}function sr(e){if(typeof e!="function")throw new Error("unsafeWrapper fn should be function");return function(...t){try{return e.apply(null,t)}catch{}}}const Ns=fe(Se(4),he("0123456789ABCDEF"),de("")),As=fe(Se(5),he("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),ft(5),de(""));fe(Se(5),he("0123456789ABCDEFGHIJKLMNOPQRSTUV"),ft(5),de("")),fe(Se(5),he("0123456789ABCDEFGHJKMNPQRSTVWXYZ"),de(""),nr(e=>e.toUpperCase().replace(/O/g,"0").replace(/[IL]/g,"1")));const pe=fe(Se(6),he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),ft(6),de("")),Ks=fe(Se(6),he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),ft(6),de("")),Gt=e=>fe(Ss(58),he(e),de("")),Ft=Gt("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");Gt("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"),Gt("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");const or=[0,2,3,5,6,7,9,10,11],Cs={encode(e){let t="";for(let n=0;n<e.length;n+=8){const r=e.subarray(n,n+8);t+=Ft.encode(r).padStart(or[r.length],"1")}return t},decode(e){let t=[];for(let n=0;n<e.length;n+=11){const r=e.slice(n,n+11),i=or.indexOf(r.length),s=Ft.decode(r);for(let o=0;o<s.length-i;o++)if(s[o]!==0)throw new Error("base58xmr: wrong padding");t=t.concat(Array.from(s.slice(s.length-i)))}return Uint8Array.from(t)}},Jt=fe(he("qpzry9x8gf2tvdw0s3jn54khce6mua7l"),de("")),ar=[996825010,642813549,513874426,1027748829,705979059];function Qe(e){const t=e>>25;let n=(e&33554431)<<5;for(let r=0;r<ar.length;r++)(t>>r&1)===1&&(n^=ar[r]);return n}function cr(e,t,n=1){const r=e.length;let i=1;for(let s=0;s<r;s++){const o=e.charCodeAt(s);if(o<33||o>126)throw new Error(`Invalid prefix (${e})`);i=Qe(i)^o>>5}i=Qe(i);for(let s=0;s<r;s++)i=Qe(i)^e.charCodeAt(s)&31;for(let s of t)i=Qe(i)^s;for(let s=0;s<6;s++)i=Qe(i);return i^=n,Jt.encode(Zt([i%2**30],30,5,!1))}function ur(e){const t=e==="bech32"?1:734539939,n=Se(5),r=n.decode,i=n.encode,s=sr(r);function o(f,u,g=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 b=f.length+7+u.length;if(g!==!1&&b>g)throw new TypeError(`Length ${b} exceeds limit ${g}`);return f=f.toLowerCase(),`${f}1${Jt.encode(u)}${cr(f,u,t)}`}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 g=f.toLowerCase();if(f!==g&&f!==f.toUpperCase())throw new Error("String must be lowercase or uppercase");f=g;const b=f.lastIndexOf("1");if(b===0||b===-1)throw new Error('Letter "1" must be present between prefix and data only');const p=f.slice(0,b),h=f.slice(b+1);if(h.length<6)throw new Error("Data must be at least 6 characters long");const d=Jt.decode(h).slice(0,-6),y=cr(p,d,t);if(!h.endsWith(y))throw new Error(`Invalid checksum in ${f}: expected "${y}"`);return{prefix:p,words:d}}const a=sr(c);function l(f){const{prefix:u,words:g}=c(f,!1);return{prefix:u,words:g,bytes:r(g)}}return{encode:o,decode:c,decodeToBytes:l,decodeUnsafe:a,fromWords:r,fromWordsUnsafe:s,toWords:i}}const qe=ur("bech32");ur("bech32m");const Bs={encode:e=>new TextDecoder().decode(e),decode:e=>new TextEncoder().encode(e)},ks=fe(Se(4),he("0123456789abcdef"),de(""),nr(e=>{if(typeof e!="string"||e.length%2)throw new TypeError(`hex.decode: expected string, got ${typeof e} with length ${e.length}`);return e.toLowerCase()}));`${Object.keys({utf8:Bs,hex:ks,base16:Ns,base32:As,base64:pe,base64url:Ks,base58:Ft,base58xmr:Cs}).join(", ")}`;function Yt(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`positive integer expected, not ${e}`)}function lr(e){if(typeof e!="boolean")throw new Error(`boolean expected, not ${e}`)}function _s(e){return e instanceof Uint8Array||e!=null&&typeof e=="object"&&e.constructor.name==="Uint8Array"}function ye(e,...t){if(!_s(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error(`Uint8Array expected of length ${t}, not of length=${e.length}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */const G=e=>new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4));if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function Is(e,t){if(t==null||typeof t!="object")throw new Error("options must be defined");return Object.assign(e,t)}function Us(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}const Ls=(e,t)=>(Object.assign(t,e),t),Ne=16,$s=283;function Xt(e){return e<<1^$s&-(e>>7)}function De(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=Xt(e);return n}const Qt=(()=>{let e=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Xt(r))e[n]=r;const t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return t})(),Ts=Qt.map((e,t)=>Qt.indexOf(t)),Rs=e=>e<<24|e>>>8,en=e=>e<<8|e>>>24;function fr(e,t){if(e.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((l,f)=>t(e[f])),r=n.map(en),i=r.map(en),s=i.map(en),o=new Uint32Array(256*256),c=new Uint32Array(256*256),a=new Uint16Array(256*256);for(let l=0;l<256;l++)for(let f=0;f<256;f++){const u=l*256+f;o[u]=n[l]^r[f],c[u]=i[l]^s[f],a[u]=e[l]<<8|e[f]}return{sbox:e,sbox2:a,T0:n,T1:r,T2:i,T3:s,T01:o,T23:c}}const tn=fr(Qt,e=>De(e,3)<<24|e<<16|e<<8|De(e,2)),hr=fr(Ts,e=>De(e,11)<<24|De(e,13)<<16|De(e,9)<<8|De(e,14)),Ms=(()=>{const e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=Xt(n))e[t]=n;return e})();function dr(e){ye(e);const t=e.length;if(![16,24,32].includes(t))throw new Error(`aes: wrong key size: should be 16, 24 or 32, got: ${t}`);const{sbox2:n}=tn,r=G(e),i=r.length,s=c=>ce(n,c,c,c,c),o=new Uint32Array(t+28);o.set(r);for(let c=i;c<o.length;c++){let a=o[c-1];c%i===0?a=s(Rs(a))^Ms[c/i-1]:i>6&&c%i===4&&(a=s(a)),o[c]=o[c-i]^a}return o}function Os(e){const t=dr(e),n=t.slice(),r=t.length,{sbox2:i}=tn,{T0:s,T1:o,T2:c,T3:a}=hr;for(let l=0;l<r;l+=4)for(let f=0;f<4;f++)n[l+f]=t[r-l-4+f];t.fill(0);for(let l=4;l<r-4;l++){const f=n[l],u=ce(i,f,f,f,f);n[l]=s[u&255]^o[u>>>8&255]^c[u>>>16&255]^a[u>>>24]}return n}function Ae(e,t,n,r,i,s){return e[n<<8&65280|r>>>8&255]^t[i>>>8&65280|s>>>24&255]}function ce(e,t,n,r,i){return e[t&255|n&65280]|e[r>>>16&255|i>>>16&65280]<<16}function pr(e,t,n,r,i){const{sbox2:s,T01:o,T23:c}=tn;let a=0;t^=e[a++],n^=e[a++],r^=e[a++],i^=e[a++];const l=e.length/4-2;for(let p=0;p<l;p++){const h=e[a++]^Ae(o,c,t,n,r,i),d=e[a++]^Ae(o,c,n,r,i,t),y=e[a++]^Ae(o,c,r,i,t,n),m=e[a++]^Ae(o,c,i,t,n,r);t=h,n=d,r=y,i=m}const f=e[a++]^ce(s,t,n,r,i),u=e[a++]^ce(s,n,r,i,t),g=e[a++]^ce(s,r,i,t,n),b=e[a++]^ce(s,i,t,n,r);return{s0:f,s1:u,s2:g,s3:b}}function Ps(e,t,n,r,i){const{sbox2:s,T01:o,T23:c}=hr;let a=0;t^=e[a++],n^=e[a++],r^=e[a++],i^=e[a++];const l=e.length/4-2;for(let p=0;p<l;p++){const h=e[a++]^Ae(o,c,t,i,r,n),d=e[a++]^Ae(o,c,n,t,i,r),y=e[a++]^Ae(o,c,r,n,t,i),m=e[a++]^Ae(o,c,i,r,n,t);t=h,n=d,r=y,i=m}const f=e[a++]^ce(s,t,i,r,n),u=e[a++]^ce(s,n,t,i,r),g=e[a++]^ce(s,r,n,t,i),b=e[a++]^ce(s,i,r,n,t);return{s0:f,s1:u,s2:g,s3:b}}function yr(e,t){if(!t)return new Uint8Array(e);if(ye(t),t.length<e)throw new Error(`aes: wrong destination length, expected at least ${e}, got: ${t.length}`);return t}function Hs(e){if(ye(e),e.length%Ne!==0)throw new Error(`aes/(cbc-ecb).decrypt ciphertext should consist of blocks with size ${Ne}`)}function qs(e,t,n){let r=e.length;const i=r%Ne;if(!t&&i!==0)throw new Error("aec/(cbc-ecb): unpadded plaintext with disabled padding");const s=G(e);if(t){let a=Ne-i;a||(a=Ne),r=r+a}const o=yr(r,n),c=G(o);return{b:s,o:c,out:o}}function Ds(e,t){if(!t)return e;const n=e.length;if(!n)throw new Error("aes/pcks5: empty ciphertext not allowed");const r=e[n-1];if(r<=0||r>16)throw new Error(`aes/pcks5: wrong padding byte: ${r}`);const i=e.subarray(0,-r);for(let s=0;s<r;s++)if(e[n-s-1]!==r)throw new Error("aes/pcks5: wrong padding");return i}function js(e){const t=new Uint8Array(16),n=G(t);t.set(e);const r=Ne-e.length;for(let i=Ne-r;i<Ne;i++)t[i]=r;return n}const gr=Ls({blockSize:16,nonceLength:16},function(t,n,r={}){ye(t),ye(n,16);const i=!r.disablePadding;return{encrypt:(s,o)=>{const c=dr(t),{b:a,o:l,out:f}=qs(s,i,o),u=G(n);let g=u[0],b=u[1],p=u[2],h=u[3],d=0;for(;d+4<=a.length;)g^=a[d+0],b^=a[d+1],p^=a[d+2],h^=a[d+3],{s0:g,s1:b,s2:p,s3:h}=pr(c,g,b,p,h),l[d++]=g,l[d++]=b,l[d++]=p,l[d++]=h;if(i){const y=js(s.subarray(d*4));g^=y[0],b^=y[1],p^=y[2],h^=y[3],{s0:g,s1:b,s2:p,s3:h}=pr(c,g,b,p,h),l[d++]=g,l[d++]=b,l[d++]=p,l[d++]=h}return c.fill(0),f},decrypt:(s,o)=>{Hs(s);const c=Os(t),a=G(n),l=yr(s.length,o),f=G(s),u=G(l);let g=a[0],b=a[1],p=a[2],h=a[3];for(let d=0;d+4<=f.length;){const y=g,m=b,A=p,I=h;g=f[d+0],b=f[d+1],p=f[d+2],h=f[d+3];const{s0:B,s1:E,s2:x,s3:S}=Ps(c,g,b,p,h);u[d++]=B^y,u[d++]=E^m,u[d++]=x^A,u[d++]=S^I}return c.fill(0),Ds(l,i)}}}),wr=e=>Uint8Array.from(e.split("").map(t=>t.charCodeAt(0))),zs=wr("expand 16-byte k"),Vs=wr("expand 32-byte k"),Ws=G(zs),br=G(Vs);br.slice();function U(e,t){return e<<t|e>>>32-t}function nn(e){return e.byteOffset%4===0}const dt=64,Zs=16,vr=2**32-1,Er=new Uint32Array;function Gs(e,t,n,r,i,s,o,c){const a=i.length,l=new Uint8Array(dt),f=G(l),u=nn(i)&&nn(s),g=u?G(i):Er,b=u?G(s):Er;for(let p=0;p<a;o++){if(e(t,n,r,f,o,c),o>=vr)throw new Error("arx: counter overflow");const h=Math.min(dt,a-p);if(u&&h===dt){const d=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,m;y<Zs;y++)m=d+y,b[m]=g[m]^f[y];p+=dt;continue}for(let d=0,y;d<h;d++)y=p+d,s[y]=i[y]^l[d];p+=h}}function Fs(e,t){const{allowShortKeys:n,extendNonceFn:r,counterLength:i,counterRight:s,rounds:o}=Is({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},t);if(typeof e!="function")throw new Error("core must be a function");return Yt(i),Yt(o),lr(s),lr(n),(c,a,l,f,u=0)=>{ye(c),ye(a),ye(l);const g=l.length;if(f||(f=new Uint8Array(g)),ye(f),Yt(u),u<0||u>=vr)throw new Error("arx: counter overflow");if(f.length<g)throw new Error(`arx: output (${f.length}) is shorter than data (${g})`);const b=[];let p=c.length,h,d;if(p===32)h=c.slice(),b.push(h),d=br;else if(p===16&&n)h=new Uint8Array(32),h.set(c),h.set(c,16),d=Ws,b.push(h);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);nn(a)||(a=a.slice(),b.push(a));const y=G(h);if(r){if(a.length!==24)throw new Error("arx: extended nonce must be 24 bytes");r(d,y,G(a.subarray(0,16)),y),a=a.subarray(16)}const m=16-i;if(m!==a.length)throw new Error(`arx: nonce must be ${m} or 16 bytes`);if(m!==12){const I=new Uint8Array(12);I.set(a,s?0:12-a.length),a=I,b.push(a)}const A=G(a);for(Gs(e,d,y,A,l,f,u,o);b.length>0;)b.pop().fill(0);return f}}function Js(e,t,n,r,i,s=20){let o=e[0],c=e[1],a=e[2],l=e[3],f=t[0],u=t[1],g=t[2],b=t[3],p=t[4],h=t[5],d=t[6],y=t[7],m=i,A=n[0],I=n[1],B=n[2],E=o,x=c,S=a,P=l,_=f,K=u,R=g,M=b,j=p,w=h,v=d,N=y,k=m,C=A,L=I,O=B;for(let ne=0;ne<s;ne+=2)E=E+_|0,k=U(k^E,16),j=j+k|0,_=U(_^j,12),E=E+_|0,k=U(k^E,8),j=j+k|0,_=U(_^j,7),x=x+K|0,C=U(C^x,16),w=w+C|0,K=U(K^w,12),x=x+K|0,C=U(C^x,8),w=w+C|0,K=U(K^w,7),S=S+R|0,L=U(L^S,16),v=v+L|0,R=U(R^v,12),S=S+R|0,L=U(L^S,8),v=v+L|0,R=U(R^v,7),P=P+M|0,O=U(O^P,16),N=N+O|0,M=U(M^N,12),P=P+M|0,O=U(O^P,8),N=N+O|0,M=U(M^N,7),E=E+K|0,O=U(O^E,16),v=v+O|0,K=U(K^v,12),E=E+K|0,O=U(O^E,8),v=v+O|0,K=U(K^v,7),x=x+R|0,k=U(k^x,16),N=N+k|0,R=U(R^N,12),x=x+R|0,k=U(k^x,8),N=N+k|0,R=U(R^N,7),S=S+M|0,C=U(C^S,16),j=j+C|0,M=U(M^j,12),S=S+M|0,C=U(C^S,8),j=j+C|0,M=U(M^j,7),P=P+_|0,L=U(L^P,16),w=w+L|0,_=U(_^w,12),P=P+_|0,L=U(L^P,8),w=w+L|0,_=U(_^w,7);let $=0;r[$++]=o+E|0,r[$++]=c+x|0,r[$++]=a+S|0,r[$++]=l+P|0,r[$++]=f+_|0,r[$++]=u+K|0,r[$++]=g+R|0,r[$++]=b+M|0,r[$++]=p+j|0,r[$++]=h+w|0,r[$++]=d+v|0,r[$++]=y+N|0,r[$++]=m+k|0,r[$++]=A+C|0,r[$++]=I+L|0,r[$++]=B+O|0}const mr=Fs(Js,{counterRight:!1,counterLength:4,allowShortKeys:!1});class xr extends Yn{constructor(t,n){super(),this.finished=!1,this.destroyed=!1,ae.hash(t);const r=Xe(n);if(this.iHash=t.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 i=this.blockLen,s=new Uint8Array(i);s.set(r.length>i?t.create().update(r).digest():r);for(let o=0;o<s.length;o++)s[o]^=54;this.iHash.update(s),this.oHash=t.create();for(let o=0;o<s.length;o++)s[o]^=106;this.oHash.update(s),s.fill(0)}update(t){return ae.exists(this),this.iHash.update(t),this}digestInto(t){ae.exists(this),ae.bytes(t,this.outputLen),this.finished=!0,this.iHash.digestInto(t),this.oHash.update(t),this.oHash.digestInto(t),this.destroy()}digest(){const t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||(t=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:i,destroyed:s,blockLen:o,outputLen:c}=this;return t=t,t.finished=i,t.destroyed=s,t.blockLen=o,t.outputLen=c,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const pt=(e,t,n)=>new xr(e,t).update(n).digest();pt.create=(e,t)=>new xr(e,t);function rn(e,t,n){return ae.hash(e),n===void 0&&(n=new Uint8Array(e.outputLen)),pt(e,Xe(n),Xe(t))}const sn=new Uint8Array([0]),Sr=new Uint8Array;function Nr(e,t,n,r=32){if(ae.hash(e),ae.number(r),r>255*e.outputLen)throw new Error("Length should be <= 255*HashLen");const i=Math.ceil(r/e.outputLen);n===void 0&&(n=Sr);const s=new Uint8Array(i*e.outputLen),o=pt.create(e,t),c=o._cloneInto(),a=new Uint8Array(o.outputLen);for(let l=0;l<i;l++)sn[0]=l+1,c.update(l===0?Sr:a).update(n).update(sn).digestInto(a),s.set(a,e.outputLen*l),o._cloneInto(c);return o.destroy(),c.destroy(),a.fill(0),sn.fill(0),s.slice(0,r)}var Ys=Object.defineProperty,q=(e,t)=>{for(var n in t)Ys(e,n,{get:t[n],enumerable:!0})},je=Symbol("verified"),Xs=e=>e instanceof Object;function yt(e){if(!Xs(e)||typeof e.kind!="number"||typeof e.content!="string"||typeof e.created_at!="number"||typeof e.pubkey!="string"||!e.pubkey.match(/^[a-f0-9]{64}$/)||!Array.isArray(e.tags))return!1;for(let t=0;t<e.tags.length;t++){let n=e.tags[t];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}var Qs={};q(Qs,{Queue:()=>ro,QueueNode:()=>Ar,binarySearch:()=>on,insertEventIntoAscendingList:()=>no,insertEventIntoDescendingList:()=>to,normalizeURL:()=>eo,utf8Decoder:()=>ge,utf8Encoder:()=>te});var ge=new TextDecoder("utf-8"),te=new TextEncoder;function eo(e){e.indexOf("://")===-1&&(e="wss://"+e);let t=new URL(e);return t.pathname=t.pathname.replace(/\/+/g,"/"),t.pathname.endsWith("/")&&(t.pathname=t.pathname.slice(0,-1)),(t.port==="80"&&t.protocol==="ws:"||t.port==="443"&&t.protocol==="wss:")&&(t.port=""),t.searchParams.sort(),t.hash="",t.toString()}function to(e,t){const[n,r]=on(e,i=>t.id===i.id?0:t.created_at===i.created_at?-1:i.created_at-t.created_at);return r||e.splice(n,0,t),e}function no(e,t){const[n,r]=on(e,i=>t.id===i.id?0:t.created_at===i.created_at?-1:t.created_at-i.created_at);return r||e.splice(n,0,t),e}function on(e,t){let n=0,r=e.length-1;for(;n<=r;){const i=Math.floor((n+r)/2),s=t(e[i]);if(s===0)return[i,!0];s<0?r=i-1:n=i+1}return[n,!1]}var Ar=class{constructor(e){ie(this,"value");ie(this,"next",null);ie(this,"prev",null);this.value=e}},ro=class{constructor(){ie(this,"first");ie(this,"last");this.first=null,this.last=null}enqueue(e){const t=new Ar(e);return this.last?this.last===this.first?(this.last=t,this.last.prev=this.first,this.first.next=t):(t.prev=this.last,this.last.next=t,this.last=t):(this.first=t,this.last=t),!0}dequeue(){if(!this.first)return null;if(this.first===this.last){const t=this.first;return this.first=null,this.last=null,t.value}const e=this.first;return this.first=e.next,e.value}},io=class{generateSecretKey(){return Ye.utils.randomPrivateKey()}getPublicKey(e){return T(Ye.getPublicKey(e))}finalizeEvent(e,t){const n=e;return n.pubkey=T(Ye.getPublicKey(t)),n.id=ze(n),n.sig=T(Ye.sign(ze(n),t)),n[je]=!0,n}verifyEvent(e){if(typeof e[je]=="boolean")return e[je];const t=ze(e);if(t!==e.id)return e[je]=!1,!1;try{const n=Ye.verify(e.sig,t,e.pubkey);return e[je]=n,n}catch{return e[je]=!1,!1}}};function so(e){if(!yt(e))throw new Error("can't serialize event with wrong or missing properties");return JSON.stringify([0,e.pubkey,e.created_at,e.kind,e.tags,e.content])}function ze(e){let t=le(te.encode(so(e)));return T(t)}var gt=new io,$e=gt.generateSecretKey,we=gt.getPublicKey,ee=gt.finalizeEvent,wt=gt.verifyEvent,oo={};q(oo,{Application:()=>ua,BadgeAward:()=>go,BadgeDefinition:()=>na,BlockedRelaysList:()=>Ho,BookmarkList:()=>Mo,Bookmarksets:()=>Qo,Calendar:()=>ga,CalendarEventRSVP:()=>wa,ChannelCreation:()=>Ir,ChannelHideMessage:()=>$r,ChannelMessage:()=>Lr,ChannelMetadata:()=>Ur,ChannelMuteUser:()=>Tr,ClassifiedListing:()=>ha,ClientAuth:()=>Mr,CommunitiesList:()=>Oo,CommunityDefinition:()=>Ea,CommunityPostApproval:()=>Ko,Contacts:()=>ho,CreateOrUpdateProduct:()=>sa,CreateOrUpdateStall:()=>ia,Curationsets:()=>ea,Date:()=>pa,DirectMessageRelaysList:()=>zo,DraftClassifiedListing:()=>da,DraftLong:()=>aa,Emojisets:()=>ca,EncryptedDirectMessage:()=>po,EventDeletion:()=>yo,FileMetadata:()=>Eo,FileServerPreference:()=>Vo,Followsets:()=>Jo,GenericRepost:()=>bo,Genericlists:()=>Yo,GiftWrap:()=>Rr,HTTPAuth:()=>un,Handlerinformation:()=>va,Handlerrecommendation:()=>ba,Highlights:()=>Lo,InterestsList:()=>Do,Interestsets:()=>ra,JobFeedback:()=>ko,JobRequest:()=>Co,JobResult:()=>Bo,Label:()=>Ao,LightningPubRPC:()=>Zo,LiveChatMessage:()=>mo,LiveEvent:()=>la,LongFormArticle:()=>oa,Metadata:()=>uo,Mutelist:()=>$o,NWCWalletInfo:()=>Wo,NWCWalletRequest:()=>Or,NWCWalletResponse:()=>Go,NostrConnect:()=>Fo,OpenTimestamps:()=>vo,Pinlist:()=>To,PrivateDirectMessage:()=>wo,ProblemTracker:()=>xo,ProfileBadges:()=>ta,PublicChatsList:()=>Po,Reaction:()=>cn,RecommendRelay:()=>fo,RelayList:()=>Ro,Relaysets:()=>Xo,Report:()=>So,Reporting:()=>No,Repost:()=>an,Seal:()=>_r,SearchRelaysList:()=>qo,ShortTextNote:()=>lo,Time:()=>ya,UserEmojiList:()=>jo,UserStatuses:()=>fa,Zap:()=>Uo,ZapGoal:()=>_o,ZapRequest:()=>Io,classifyKind:()=>ao,isEphemeralKind:()=>Br,isKind:()=>co,isParameterizedReplaceableKind:()=>kr,isRegularKind:()=>Kr,isReplaceableKind:()=>Cr});function Kr(e){return 1e3<=e&&e<1e4||[1,2,4,5,6,7,8,16,40,41,42,43,44].includes(e)}function Cr(e){return[0,3].includes(e)||1e4<=e&&e<2e4}function Br(e){return 2e4<=e&&e<3e4}function kr(e){return 3e4<=e&&e<4e4}function ao(e){return Kr(e)?"regular":Cr(e)?"replaceable":Br(e)?"ephemeral":kr(e)?"parameterized":"unknown"}function co(e,t){const n=t instanceof Array?t:[t];return yt(e)&&n.includes(e.kind)||!1}var uo=0,lo=1,fo=2,ho=3,po=4,yo=5,an=6,cn=7,go=8,_r=13,wo=14,bo=16,Ir=40,Ur=41,Lr=42,$r=43,Tr=44,vo=1040,Rr=1059,Eo=1063,mo=1311,xo=1971,So=1984,No=1984,Ao=1985,Ko=4550,Co=5999,Bo=6999,ko=7e3,_o=9041,Io=9734,Uo=9735,Lo=9802,$o=1e4,To=10001,Ro=10002,Mo=10003,Oo=10004,Po=10005,Ho=10006,qo=10007,Do=10015,jo=10030,zo=10050,Vo=10096,Wo=13194,Zo=21e3,Mr=22242,Or=23194,Go=23195,Fo=24133,un=27235,Jo=3e4,Yo=30001,Xo=30002,Qo=30003,ea=30004,ta=30008,na=30009,ra=30015,ia=30017,sa=30018,oa=30023,aa=30024,ca=30030,ua=30078,la=30311,fa=30315,ha=30402,da=30403,pa=31922,ya=31923,ga=31924,wa=31925,ba=31989,va=31990,Ea=34550,ma={};q(ma,{getHex64:()=>ln,getInt:()=>Pr,getSubscriptionId:()=>xa,matchEventId:()=>Sa,matchEventKind:()=>Aa,matchEventPubkey:()=>Na});function ln(e,t){let n=t.length+3,r=e.indexOf(`"${t}":`)+n,i=e.slice(r).indexOf('"')+r+1;return e.slice(i,i+64)}function Pr(e,t){let n=t.length,r=e.indexOf(`"${t}":`)+n+3,i=e.slice(r),s=Math.min(i.indexOf(","),i.indexOf("}"));return parseInt(i.slice(0,s),10)}function xa(e){let t=e.slice(0,22).indexOf('"EVENT"');if(t===-1)return null;let n=e.slice(t+7+1).indexOf('"');if(n===-1)return null;let r=t+7+1+n,i=e.slice(r+1,80).indexOf('"');if(i===-1)return null;let s=r+1+i;return e.slice(r+1,s)}function Sa(e,t){return t===ln(e,"id")}function Na(e,t){return t===ln(e,"pubkey")}function Aa(e,t){return t===Pr(e,"kind")}var Ka={};q(Ka,{makeAuthEvent:()=>Ca});function Ca(e,t){return{kind:Mr,created_at:Math.floor(Date.now()/1e3),tags:[["relay",e],["challenge",t]],content:""}}var Ba;try{Ba=WebSocket}catch{}var ka;try{ka=WebSocket}catch{}var _a={};q(_a,{BECH32_REGEX:()=>Hr,Bech32MaxSize:()=>fn,NostrTypeGuard:()=>Ia,decode:()=>bt,encodeBytes:()=>Et,naddrEncode:()=>Oa,neventEncode:()=>Ma,noteEncode:()=>Ta,nprofileEncode:()=>Ra,npubEncode:()=>$a,nsecEncode:()=>La});var Ia={isNProfile:e=>/^nprofile1[a-z\d]+$/.test(e||""),isNEvent:e=>/^nevent1[a-z\d]+$/.test(e||""),isNAddr:e=>/^naddr1[a-z\d]+$/.test(e||""),isNSec:e=>/^nsec1[a-z\d]{58}$/.test(e||""),isNPub:e=>/^npub1[a-z\d]{58}$/.test(e||""),isNote:e=>/^note1[a-z\d]+$/.test(e||""),isNcryptsec:e=>/^ncryptsec1[a-z\d]+$/.test(e||"")},fn=5e3,Hr=/[\x21-\x7E]{1,83}1[023456789acdefghjklmnpqrstuvwxyz]{6,}/;function Ua(e){const t=new Uint8Array(4);return t[0]=e>>24&255,t[1]=e>>16&255,t[2]=e>>8&255,t[3]=e&255,t}function bt(e){var i,s,o,c,a,l,f;let{prefix:t,words:n}=qe.decode(e,fn),r=new Uint8Array(qe.fromWords(n));switch(t){case"nprofile":{let u=hn(r);if(!((i=u[0])!=null&&i[0]))throw new Error("missing TLV 0 for nprofile");if(u[0][0].length!==32)throw new Error("TLV 0 should be 32 bytes");return{type:"nprofile",data:{pubkey:T(u[0][0]),relays:u[1]?u[1].map(g=>ge.decode(g)):[]}}}case"nevent":{let u=hn(r);if(!((s=u[0])!=null&&s[0]))throw new Error("missing TLV 0 for nevent");if(u[0][0].length!==32)throw new Error("TLV 0 should be 32 bytes");if(u[2]&&u[2][0].length!==32)throw new Error("TLV 2 should be 32 bytes");if(u[3]&&u[3][0].length!==4)throw new Error("TLV 3 should be 4 bytes");return{type:"nevent",data:{id:T(u[0][0]),relays:u[1]?u[1].map(g=>ge.decode(g)):[],author:(o=u[2])!=null&&o[0]?T(u[2][0]):void 0,kind:(c=u[3])!=null&&c[0]?parseInt(T(u[3][0]),16):void 0}}}case"naddr":{let u=hn(r);if(!((a=u[0])!=null&&a[0]))throw new Error("missing TLV 0 for naddr");if(!((l=u[2])!=null&&l[0]))throw new Error("missing TLV 2 for naddr");if(u[2][0].length!==32)throw new Error("TLV 2 should be 32 bytes");if(!((f=u[3])!=null&&f[0]))throw new Error("missing TLV 3 for naddr");if(u[3][0].length!==4)throw new Error("TLV 3 should be 4 bytes");return{type:"naddr",data:{identifier:ge.decode(u[0][0]),pubkey:T(u[2][0]),kind:parseInt(T(u[3][0]),16),relays:u[1]?u[1].map(g=>ge.decode(g)):[]}}}case"nsec":return{type:t,data:r};case"npub":case"note":return{type:t,data:T(r)};default:throw new Error(`unknown prefix ${t}`)}}function hn(e){let t={},n=e;for(;n.length>0;){let r=n[0],i=n[1],s=n.slice(2,2+i);if(n=n.slice(2+i),s.length<i)throw new Error(`not enough data to read on TLV ${r}`);t[r]=t[r]||[],t[r].push(s)}return t}function La(e){return Et("nsec",e)}function $a(e){return Et("npub",F(e))}function Ta(e){return Et("note",F(e))}function vt(e,t){let n=qe.toWords(t);return qe.encode(e,n,fn)}function Et(e,t){return vt(e,t)}function Ra(e){let t=dn({0:[F(e.pubkey)],1:(e.relays||[]).map(n=>te.encode(n))});return vt("nprofile",t)}function Ma(e){let t;e.kind!==void 0&&(t=Ua(e.kind));let n=dn({0:[F(e.id)],1:(e.relays||[]).map(r=>te.encode(r)),2:e.author?[F(e.author)]:[],3:t?[new Uint8Array(t)]:[]});return vt("nevent",n)}function Oa(e){let t=new ArrayBuffer(4);new DataView(t).setUint32(0,e.kind,!1);let n=dn({0:[te.encode(e.identifier)],1:(e.relays||[]).map(r=>te.encode(r)),2:[F(e.pubkey)],3:[new Uint8Array(t)]});return vt("naddr",n)}function dn(e){let t=[];return Object.entries(e).reverse().forEach(([n,r])=>{r.forEach(i=>{let s=new Uint8Array(i.length+2);s.set([parseInt(n)],0),s.set([i.length],1),s.set(i,2),t.push(s)})}),lt(...t)}var Pa={};q(Pa,{decrypt:()=>Ha,encrypt:()=>qr});async function qr(e,t,n){const r=e instanceof Uint8Array?T(e):e,i=Le.getSharedSecret(r,"02"+t),s=Dr(i);let o=Uint8Array.from(Qn(16)),c=te.encode(n),a=gr(s,o).encrypt(c),l=pe.encode(new Uint8Array(a)),f=pe.encode(new Uint8Array(o.buffer));return`${l}?iv=${f}`}async function Ha(e,t,n){const r=e instanceof Uint8Array?T(e):e;let[i,s]=n.split("?iv="),o=Le.getSharedSecret(r,"02"+t),c=Dr(o),a=pe.decode(s),l=pe.decode(i),f=gr(c,a).decrypt(l);return ge.decode(f)}function Dr(e){return e.slice(1,33)}var qa={};q(qa,{NIP05_REGEX:()=>pn,isNip05:()=>Da,isValid:()=>Va,queryProfile:()=>jr,searchDomain:()=>za,useFetchImplementation:()=>ja});var pn=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,Da=e=>pn.test(e||""),mt;try{mt=fetch}catch{}function ja(e){mt=e}async function za(e,t=""){try{const n=`https://${e}/.well-known/nostr.json?name=${t}`,r=await mt(n,{redirect:"manual"});if(r.status!==200)throw Error("Wrong response code");return(await r.json()).names}catch{return{}}}async function jr(e){var i;const t=e.match(pn);if(!t)return null;const[,n="_",r]=t;try{const s=`https://${r}/.well-known/nostr.json?name=${n}`,o=await mt(s,{redirect:"manual"});if(o.status!==200)throw Error("Wrong response code");const c=await o.json(),a=c.names[n];return a?{pubkey:a,relays:(i=c.relays)==null?void 0:i[a]}:null}catch{return null}}async function Va(e,t){const n=await jr(t);return n?n.pubkey===e:!1}var Wa={};q(Wa,{parse:()=>Za});function Za(e){const t={reply:void 0,root:void 0,mentions:[],profiles:[],quotes:[]};let n,r;for(let i=e.tags.length-1;i>=0;i--){const s=e.tags[i];if(s[0]==="e"&&s[1]){const[o,c,a,l,f]=s,u={id:c,relays:a?[a]:[],author:f};if(l==="root"){t.root=u;continue}if(l==="reply"){t.reply=u;continue}if(l==="mention"){t.mentions.push(u);continue}n?r=u:n=u,t.mentions.push(u);continue}if(s[0]==="q"&&s[1]){const[o,c,a]=s;t.quotes.push({id:c,relays:a?[a]:[]})}if(s[0]==="p"&&s[1]){t.profiles.push({pubkey:s[1],relays:s[2]?[s[2]]:[]});continue}}return t.root||(t.root=r||n||t.reply),t.reply||(t.reply=n||t.root),[t.reply,t.root].forEach(i=>{if(!i)return;let s=t.mentions.indexOf(i);if(s!==-1&&t.mentions.splice(s,1),i.author){let o=t.profiles.find(c=>c.pubkey===i.author);o&&o.relays&&(i.relays||(i.relays=[]),o.relays.forEach(c=>{var a;((a=i.relays)==null?void 0:a.indexOf(c))===-1&&i.relays.push(c)}),o.relays=i.relays)}}),t.mentions.forEach(i=>{if(i.author){let s=t.profiles.find(o=>o.pubkey===i.author);s&&s.relays&&(i.relays||(i.relays=[]),s.relays.forEach(o=>{i.relays.indexOf(o)===-1&&i.relays.push(o)}),s.relays=i.relays)}}),t}var Ga={};q(Ga,{fetchRelayInformation:()=>Ja,useFetchImplementation:()=>Fa});var zr;try{zr=fetch}catch{}function Fa(e){zr=e}async function Ja(e){return await(await fetch(e.replace("ws://","http://").replace("wss://","https://"),{headers:{Accept:"application/nostr+json"}})).json()}var Ya={};q(Ya,{fastEventHash:()=>Wr,getPow:()=>Vr,minePow:()=>Xa});function Vr(e){let t=0;for(let n=0;n<64;n+=8){const r=parseInt(e.substring(n,n+8),16);if(r===0)t+=32;else{t+=Math.clz32(r);break}}return t}function Xa(e,t){let n=0;const r=e,i=["nonce",n.toString(),t.toString()];for(r.tags.push(i);;){const s=Math.floor(new Date().getTime()/1e3);if(s!==r.created_at&&(n=0,r.created_at=s),i[1]=(++n).toString(),r.id=Wr(r),Vr(r.id)>=t)break}return r}function Wr(e){return T(le(te.encode(JSON.stringify([0,e.pubkey,e.created_at,e.kind,e.tags,e.content]))))}var Qa={};q(Qa,{finishRepostEvent:()=>ec,getRepostedEvent:()=>tc,getRepostedEventPointer:()=>Zr});function ec(e,t,n,r){return ee({kind:an,tags:[...e.tags??[],["e",t.id,n],["p",t.pubkey]],content:e.content===""?"":JSON.stringify(t),created_at:e.created_at},r)}function Zr(e){if(e.kind!==an)return;let t,n;for(let r=e.tags.length-1;r>=0&&(t===void 0||n===void 0);r--){const i=e.tags[r];i.length>=2&&(i[0]==="e"&&t===void 0?t=i:i[0]==="p"&&n===void 0&&(n=i))}if(t!==void 0)return{id:t[1],relays:[t[2],n==null?void 0:n[2]].filter(r=>typeof r=="string"),author:n==null?void 0:n[1]}}function tc(e,{skipVerification:t}={}){const n=Zr(e);if(n===void 0||e.content==="")return;let r;try{r=JSON.parse(e.content)}catch{return}if(r.id===n.id&&!(!t&&!wt(r)))return r}var nc={};q(nc,{NOSTR_URI_REGEX:()=>xt,parse:()=>ic,test:()=>rc});var xt=new RegExp(`nostr:(${Hr.source})`);function rc(e){return typeof e=="string"&&new RegExp(`^${xt.source}$`).test(e)}function ic(e){const t=e.match(new RegExp(`^${xt.source}$`));if(!t)throw new Error(`Invalid Nostr URI: ${e}`);return{uri:t[0],value:t[1],decoded:bt(t[1])}}var sc={};q(sc,{finishReactionEvent:()=>oc,getReactedEventPointer:()=>ac});function oc(e,t,n){const r=t.tags.filter(i=>i.length>=2&&(i[0]==="e"||i[0]==="p"));return ee({...e,kind:cn,tags:[...e.tags??[],...r,["e",t.id],["p",t.pubkey]],content:e.content??"+"},n)}function ac(e){if(e.kind!==cn)return;let t,n;for(let r=e.tags.length-1;r>=0&&(t===void 0||n===void 0);r--){const i=e.tags[r];i.length>=2&&(i[0]==="e"&&t===void 0?t=i:i[0]==="p"&&n===void 0&&(n=i))}if(!(t===void 0||n===void 0))return{id:t[1],relays:[t[2],n[2]].filter(r=>r!==void 0),author:n[1]}}var cc={};q(cc,{matchAll:()=>uc,regex:()=>yn,replaceAll:()=>lc});var yn=()=>new RegExp(`\\b${xt.source}\\b`,"g");function*uc(e){const t=e.matchAll(yn());for(const n of t)try{const[r,i]=n;yield{uri:r,value:i,decoded:bt(i),start:n.index,end:n.index+r.length}}catch{}}function lc(e,t){return e.replaceAll(yn(),(n,r)=>t({uri:n,value:r,decoded:bt(r)}))}var fc={};q(fc,{channelCreateEvent:()=>hc,channelHideMessageEvent:()=>yc,channelMessageEvent:()=>pc,channelMetadataEvent:()=>dc,channelMuteUserEvent:()=>gc});var hc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:Ir,tags:[...e.tags??[]],content:n,created_at:e.created_at},t)},dc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:Ur,tags:[["e",e.channel_create_event_id],...e.tags??[]],content:n,created_at:e.created_at},t)},pc=(e,t)=>{const n=[["e",e.channel_create_event_id,e.relay_url,"root"]];return e.reply_to_channel_message_event_id&&n.push(["e",e.reply_to_channel_message_event_id,e.relay_url,"reply"]),ee({kind:Lr,tags:[...n,...e.tags??[]],content:e.content,created_at:e.created_at},t)},yc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:$r,tags:[["e",e.channel_message_event_id],...e.tags??[]],content:n,created_at:e.created_at},t)},gc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:Tr,tags:[["p",e.pubkey_to_mute],...e.tags??[]],content:n,created_at:e.created_at},t)},wc={};q(wc,{EMOJI_SHORTCODE_REGEX:()=>Gr,matchAll:()=>bc,regex:()=>gn,replaceAll:()=>vc});var Gr=/:(\w+):/,gn=()=>new RegExp(`\\B${Gr.source}\\B`,"g");function*bc(e){const t=e.matchAll(gn());for(const n of t)try{const[r,i]=n;yield{shortcode:r,name:i,start:n.index,end:n.index+r.length}}catch{}}function vc(e,t){return e.replaceAll(gn(),(n,r)=>t({shortcode:n,name:r}))}var Ec={};q(Ec,{useFetchImplementation:()=>mc,validateGithub:()=>xc});var wn;try{wn=fetch}catch{}function mc(e){wn=e}async function xc(e,t,n){try{return await(await wn(`https://gist.github.com/${t}/${n}/raw`)).text()===`Verifying that I control the following Nostr public key: ${e}`}catch{return!1}}var D={};q(D,{decrypt:()=>mn,encrypt:()=>En,getConversationKey:()=>bn,v2:()=>Cc});var Fr=1,Jr=65535;function bn(e,t){const n=Le.getSharedSecret(e,"02"+t).subarray(1,33);return rn(le,n,"nip44-v2")}function Yr(e,t){const n=Nr(le,e,t,76);return{chacha_key:n.subarray(0,32),chacha_nonce:n.subarray(32,44),hmac_key:n.subarray(44,76)}}function vn(e){if(!Number.isSafeInteger(e)||e<1)throw new Error("expected positive integer");if(e<=32)return 32;const t=1<<Math.floor(Math.log2(e-1))+1,n=t<=256?32:t/8;return n*(Math.floor((e-1)/n)+1)}function Sc(e){if(!Number.isSafeInteger(e)||e<Fr||e>Jr)throw new Error("invalid plaintext size: must be between 1 and 65535 bytes");const t=new Uint8Array(2);return new DataView(t.buffer).setUint16(0,e,!1),t}function Nc(e){const t=te.encode(e),n=t.length,r=Sc(n),i=new Uint8Array(vn(n)-n);return lt(r,t,i)}function Ac(e){const t=new DataView(e.buffer).getUint16(0),n=e.subarray(2,2+t);if(t<Fr||t>Jr||n.length!==t||e.length!==2+vn(t))throw new Error("invalid padding");return ge.decode(n)}function Xr(e,t,n){if(n.length!==32)throw new Error("AAD associated data must be 32 bytes");const r=lt(n,t);return pt(le,e,r)}function Kc(e){if(typeof e!="string")throw new Error("payload must be a valid string");const t=e.length;if(t<132||t>87472)throw new Error("invalid payload length: "+t);if(e[0]==="#")throw new Error("unknown encryption version");let n;try{n=pe.decode(e)}catch(s){throw new Error("invalid base64: "+s.message)}const r=n.length;if(r<99||r>65603)throw new Error("invalid data length: "+r);const i=n[0];if(i!==2)throw new Error("unknown encryption version "+i);return{nonce:n.subarray(1,33),ciphertext:n.subarray(33,-32),mac:n.subarray(-32)}}function En(e,t,n=Qn(32)){const{chacha_key:r,chacha_nonce:i,hmac_key:s}=Yr(t,n),o=Nc(e),c=mr(r,i,o),a=Xr(s,c,n);return pe.encode(lt(new Uint8Array([2]),n,c,a))}function mn(e,t){const{nonce:n,ciphertext:r,mac:i}=Kc(e),{chacha_key:s,chacha_nonce:o,hmac_key:c}=Yr(t,n),a=Xr(c,r,n);if(!Us(a,i))throw new Error("invalid MAC");const l=mr(s,o,r);return Ac(l)}var Cc={utils:{getConversationKey:bn,calcPaddedLen:vn},encrypt:En,decrypt:mn},Bc={};q(Bc,{makeNwcRequestEvent:()=>_c,parseConnectionString:()=>kc});function kc(e){const{pathname:t,searchParams:n}=new URL(e),r=t,i=n.get("relay"),s=n.get("secret");if(!r||!i||!s)throw new Error("invalid connection string");return{pubkey:r,relay:i,secret:s}}async function _c(e,t,n){const i=await qr(t,e,JSON.stringify({method:"pay_invoice",params:{invoice:n}})),s={kind:Or,created_at:Math.round(Date.now()/1e3),content:i,tags:[["p",e]]};return ee(s,t)}var Ic={};q(Ic,{getZapEndpoint:()=>Lc,makeZapReceipt:()=>Rc,makeZapRequest:()=>$c,useFetchImplementation:()=>Uc,validateZapRequest:()=>Tc});var xn;try{xn=fetch}catch{}function Uc(e){xn=e}async function Lc(e){try{let t="",{lud06:n,lud16:r}=JSON.parse(e.content);if(n){let{words:o}=qe.decode(n,1e3),c=qe.fromWords(o);t=ge.decode(c)}else if(r){let[o,c]=r.split("@");t=new URL(`/.well-known/lnurlp/${o}`,`https://${c}`).toString()}else return null;let s=await(await xn(t)).json();if(s.allowsNostr&&s.nostrPubkey)return s.callback}catch{}return null}function $c({profile:e,event:t,amount:n,relays:r,comment:i=""}){if(!n)throw new Error("amount not given");if(!e)throw new Error("profile not given");let s={kind:9734,created_at:Math.round(Date.now()/1e3),content:i,tags:[["p",e],["amount",n.toString()],["relays",...r]]};return t&&s.tags.push(["e",t]),s}function Tc(e){let t;try{t=JSON.parse(e)}catch{return"Invalid zap request JSON."}if(!yt(t))return"Zap request is not a valid Nostr event.";if(!wt(t))return"Invalid signature on zap request.";let n=t.tags.find(([s,o])=>s==="p"&&o);if(!n)return"Zap request doesn't have a 'p' tag.";if(!n[1].match(/^[a-f0-9]{64}$/))return"Zap request 'p' tag is not valid hex.";let r=t.tags.find(([s,o])=>s==="e"&&o);return r&&!r[1].match(/^[a-f0-9]{64}$/)?"Zap request 'e' tag is not valid hex.":t.tags.find(([s,o])=>s==="relays"&&o)?null:"Zap request doesn't have a 'relays' tag."}function Rc({zapRequest:e,preimage:t,bolt11:n,paidAt:r}){let i=JSON.parse(e),s=i.tags.filter(([c])=>c==="e"||c==="p"||c==="a"),o={kind:9735,created_at:Math.round(r.getTime()/1e3),content:"",tags:[...s,["P",i.pubkey],["bolt11",n],["description",e]]};return t&&o.tags.push(["preimage",t]),o}var Mc={};q(Mc,{createRumor:()=>ii,createSeal:()=>si,createWrap:()=>oi,unwrapEvent:()=>ai,unwrapManyEvents:()=>Hc,wrapEvent:()=>Sn,wrapManyEvents:()=>Pc});var Oc=2*24*60*60,Qr=()=>Math.round(Date.now()/1e3),ei=()=>Math.round(Qr()-Math.random()*Oc),ti=(e,t)=>bn(e,t),ni=(e,t,n)=>En(JSON.stringify(e),ti(t,n)),ri=(e,t)=>JSON.parse(mn(e.content,ti(t,e.pubkey)));function ii(e,t){const n={created_at:Qr(),content:"",tags:[],...e,pubkey:we(t)};return n.id=ze(n),n}function si(e,t,n){return ee({kind:_r,content:ni(e,t,n),created_at:ei(),tags:[]},t)}function oi(e,t){const n=$e();return ee({kind:Rr,content:ni(e,n,t),created_at:ei(),tags:[["p",t]]},n)}function Sn(e,t,n){const r=ii(e,t),i=si(r,t,n);return oi(i,n)}function Pc(e,t,n){if(!n||n.length===0)throw new Error("At least one recipient is required.");const r=we(t),i=[Sn(e,t,r)];return n.forEach(s=>{i.push(Sn(e,t,s))}),i}function ai(e,t){const n=ri(e,t);return ri(n,t)}function Hc(e,t){let n=[];return e.forEach(r=>{n.push(ai(r,t))}),n.sort((r,i)=>r.created_at-i.created_at),n}var qc={};q(qc,{getToken:()=>Dc,hashPayload:()=>Nn,unpackEventFromToken:()=>ui,validateEvent:()=>yi,validateEventKind:()=>fi,validateEventMethodTag:()=>di,validateEventPayloadTag:()=>pi,validateEventTimestamp:()=>li,validateEventUrlTag:()=>hi,validateToken:()=>jc});var ci="Nostr ";async function Dc(e,t,n,r=!1,i){const s={kind:un,tags:[["u",e],["method",t]],created_at:Math.round(new Date().getTime()/1e3),content:""};i&&s.tags.push(["payload",Nn(i)]);const o=await n(s);return(r?ci:"")+pe.encode(te.encode(JSON.stringify(o)))}async function jc(e,t,n){const r=await ui(e).catch(s=>{throw s});return await yi(r,t,n).catch(s=>{throw s})}async function ui(e){if(!e)throw new Error("Missing token");e=e.replace(ci,"");const t=ge.decode(pe.decode(e));if(!t||t.length===0||!t.startsWith("{"))throw new Error("Invalid token");return JSON.parse(t)}function li(e){return e.created_at?Math.round(new Date().getTime()/1e3)-e.created_at<60:!1}function fi(e){return e.kind===un}function hi(e,t){const n=e.tags.find(r=>r[0]==="u");return n?n.length>0&&n[1]===t:!1}function di(e,t){const n=e.tags.find(r=>r[0]==="method");return n?n.length>0&&n[1].toLowerCase()===t.toLowerCase():!1}function Nn(e){const t=le(te.encode(JSON.stringify(e)));return T(t)}function pi(e,t){const n=e.tags.find(i=>i[0]==="payload");if(!n)return!1;const r=Nn(t);return n.length>0&&n[1]===r}async function yi(e,t,n,r){if(!wt(e))throw new Error("Invalid nostr event, signature invalid");if(!fi(e))throw new Error("Invalid nostr event, kind invalid");if(!li(e))throw new Error("Invalid nostr event, created_at timestamp invalid");if(!hi(e,t))throw new Error("Invalid nostr event, url tag invalid");if(!di(e,n))throw new Error("Invalid nostr event, method tag invalid");if(r&&typeof r=="object"&&Object.keys(r).length>0&&!pi(e,r))throw new Error("Invalid nostr event, payload tag does not match request body hash");return!0}const Ke=30078,An=30078,gi=14,zc=100;function Vc(e){return JSON.stringify({rootKey:T(e.rootKey),theirCurrentNostrPublicKey:e.theirCurrentNostrPublicKey,theirNextNostrPublicKey:e.theirNextNostrPublicKey,ourCurrentNostrKey:e.ourCurrentNostrKey?{publicKey:e.ourCurrentNostrKey.publicKey,privateKey:T(e.ourCurrentNostrKey.privateKey)}:void 0,ourNextNostrKey:{publicKey:e.ourNextNostrKey.publicKey,privateKey:T(e.ourNextNostrKey.privateKey)},receivingChainKey:e.receivingChainKey?T(e.receivingChainKey):void 0,sendingChainKey:e.sendingChainKey?T(e.sendingChainKey):void 0,sendingChainMessageNumber:e.sendingChainMessageNumber,receivingChainMessageNumber:e.receivingChainMessageNumber,previousSendingChainMessageCount:e.previousSendingChainMessageCount,skippedMessageKeys:Object.fromEntries(Object.entries(e.skippedMessageKeys).map(([t,n])=>[t,T(n)])),skippedHeaderKeys:Object.fromEntries(Object.entries(e.skippedHeaderKeys).map(([t,n])=>[t,n.map(r=>T(r))]))})}function Wc(e){const t=JSON.parse(e);return{rootKey:F(t.rootKey),theirCurrentNostrPublicKey:t.theirCurrentNostrPublicKey,theirNextNostrPublicKey:t.theirNextNostrPublicKey,ourCurrentNostrKey:t.ourCurrentNostrKey?{publicKey:t.ourCurrentNostrKey.publicKey,privateKey:F(t.ourCurrentNostrKey.privateKey)}:void 0,ourNextNostrKey:{publicKey:t.ourNextNostrKey.publicKey,privateKey:F(t.ourNextNostrKey.privateKey)},receivingChainKey:t.receivingChainKey?F(t.receivingChainKey):void 0,sendingChainKey:t.sendingChainKey?F(t.sendingChainKey):void 0,sendingChainMessageNumber:t.sendingChainMessageNumber,receivingChainMessageNumber:t.receivingChainMessageNumber,previousSendingChainMessageCount:t.previousSendingChainMessageCount,skippedMessageKeys:Object.fromEntries(Object.entries(t.skippedMessageKeys).map(([n,r])=>[n,F(r)])),skippedHeaderKeys:Object.fromEntries(Object.entries(t.skippedHeaderKeys||{}).map(([n,r])=>[n,r.map(i=>F(i))]))}}async function*Zc(e){const t=[];let n=null;const r=e.onEvent(i=>{n?(n(i),n=null):t.push(i)});try{for(;;)t.length>0?yield t.shift():yield new Promise(i=>{n=i})}finally{r()}}function Te(e,t=new Uint8Array(32),n=1){const r=rn(le,e,t),i=[];for(let s=1;s<=n;s++)i.push(Nr(le,r,new Uint8Array([s]),32));return i}function St(e,t){return`${e}:${t}`}function Gc(e){var n;const t=(n=e.tags)==null?void 0:n.find(r=>r[0]==="ms");return t?parseInt(t[1]):e.created_at*1e3}const Fc=1e3,Jc="0000000000000000000000000000000000000000000000000000000000000000";class et{constructor(t,n){ie(this,"nostrUnsubscribe");ie(this,"nostrNextUnsubscribe");ie(this,"internalSubscriptions",new Map);ie(this,"currentInternalSubscriptionId",0);ie(this,"name");this.nostrSubscribe=t,this.state=n,this.name=Math.random().toString(36).substring(2,6)}static init(t,n,r,i,s,o){const c=$e(),[a,l]=Te(s,D.getConversationKey(c,n),2);let f,u;i?(f={publicKey:we(r),privateKey:r},u={publicKey:we(c),privateKey:c}):u={publicKey:we(r),privateKey:r};const g={rootKey:i?a:s,theirNextNostrPublicKey:n,ourCurrentNostrKey:f,ourNextNostrKey:u,receivingChainKey:void 0,sendingChainKey:i?l:void 0,sendingChainMessageNumber:0,receivingChainMessageNumber:0,previousSendingChainMessageCount:0,skippedMessageKeys:{},skippedHeaderKeys:{}},b=new et(t,g);return o&&(b.name=o),b}send(t){return this.sendEvent({content:t,kind:gi})}sendEvent(t){if(!this.state.theirNextNostrPublicKey||!this.state.ourCurrentNostrKey)throw new Error("we are not the initiator, so we can't send the first message");if("sig"in t)throw new Error("Event must be unsigned "+JSON.stringify(t));const n=Date.now(),r={...t,content:t.content||"",kind:t.kind||Ke,created_at:t.created_at||Math.floor(n/1e3),tags:t.tags||[],pubkey:t.pubkey||Jc};r.tags.some(([l])=>l==="ms")||r.tags.push(["ms",String(n)]),r.id=ze(r);const[i,s]=this.ratchetEncrypt(JSON.stringify(r)),o=D.getConversationKey(this.state.ourCurrentNostrKey.privateKey,this.state.theirNextNostrPublicKey),c=D.encrypt(JSON.stringify(i),o);return{event:ee({content:s,kind:Ke,tags:[["header",c]],created_at:Math.floor(Date.now()/1e3)},this.state.ourCurrentNostrKey.privateKey),innerEvent:r}}onEvent(t){const n=this.currentInternalSubscriptionId++;return this.internalSubscriptions.set(n,t),this.subscribeToNostrEvents(),()=>this.internalSubscriptions.delete(n)}close(){var t,n;(t=this.nostrUnsubscribe)==null||t.call(this),(n=this.nostrNextUnsubscribe)==null||n.call(this)}ratchetEncrypt(t){const[n,r]=Te(this.state.sendingChainKey,new Uint8Array([1]),2);return this.state.sendingChainKey=n,[{number:this.state.sendingChainMessageNumber++,nextPublicKey:this.state.ourNextNostrKey.publicKey,previousChainLength:this.state.previousSendingChainMessageCount},D.encrypt(t,r)]}ratchetDecrypt(t,n,r){const i=this.trySkippedMessageKeys(t,n,r);if(i)return i;this.skipMessageKeys(t.number,r);const[s,o]=Te(this.state.receivingChainKey,new Uint8Array([1]),2);this.state.receivingChainKey=s,this.state.receivingChainMessageNumber++;try{return D.decrypt(n,o)}catch(c){throw console.error(this.name,"Decryption failed:",c,{messageKey:T(o).slice(0,4),receivingChainKey:T(this.state.receivingChainKey).slice(0,4),sendingChainKey:this.state.sendingChainKey&&T(this.state.sendingChainKey).slice(0,4),rootKey:T(this.state.rootKey).slice(0,4)}),c}}ratchetStep(t){this.state.previousSendingChainMessageCount=this.state.sendingChainMessageNumber,this.state.sendingChainMessageNumber=0,this.state.receivingChainMessageNumber=0,this.state.theirNextNostrPublicKey=t;const n=D.getConversationKey(this.state.ourNextNostrKey.privateKey,this.state.theirNextNostrPublicKey),[r,i]=Te(this.state.rootKey,n,2);this.state.receivingChainKey=i,this.state.ourCurrentNostrKey=this.state.ourNextNostrKey;const s=$e();this.state.ourNextNostrKey={publicKey:we(s),privateKey:s};const o=D.getConversationKey(this.state.ourNextNostrKey.privateKey,this.state.theirNextNostrPublicKey),[c,a]=Te(r,o,2);this.state.rootKey=c,this.state.sendingChainKey=a}skipMessageKeys(t,n){if(this.state.receivingChainMessageNumber+Fc<t)throw new Error("Too many skipped messages");for(;this.state.receivingChainMessageNumber<t;){const[r,i]=Te(this.state.receivingChainKey,new Uint8Array([1]),2);this.state.receivingChainKey=r;const s=St(n,this.state.receivingChainMessageNumber);if(this.state.skippedMessageKeys[s]=i,!this.state.skippedHeaderKeys[n]){const o=[];if(this.state.ourCurrentNostrKey){const a=D.getConversationKey(this.state.ourCurrentNostrKey.privateKey,n);o.push(a)}const c=D.getConversationKey(this.state.ourNextNostrKey.privateKey,n);o.push(c),this.state.skippedHeaderKeys[n]=o}this.state.receivingChainMessageNumber++}}trySkippedMessageKeys(t,n,r){var s;const i=St(r,t.number);if(i in this.state.skippedMessageKeys){const o=this.state.skippedMessageKeys[i];return delete this.state.skippedMessageKeys[i],Object.keys(this.state.skippedMessageKeys).some(a=>a.startsWith(`${r}:`))||(delete this.state.skippedHeaderKeys[r],(s=this.nostrUnsubscribe)==null||s.call(this),this.nostrUnsubscribe=void 0),D.decrypt(n,o)}return null}decryptHeader(t){const n=t.tags[0][1];if(this.state.ourCurrentNostrKey){const s=D.getConversationKey(this.state.ourCurrentNostrKey.privateKey,t.pubkey);try{return[JSON.parse(D.decrypt(n,s)),!1,!1]}catch{}}const r=D.getConversationKey(this.state.ourNextNostrKey.privateKey,t.pubkey);try{return[JSON.parse(D.decrypt(n,r)),!0,!1]}catch{}const i=this.state.skippedHeaderKeys[t.pubkey];if(i)for(const s of i)try{return[JSON.parse(D.decrypt(n,s)),!1,!0]}catch{}throw new Error("Failed to decrypt header with current and skipped header keys")}handleNostrEvent(t){var c;const[n,r,i]=this.decryptHeader(t);if(!i)this.state.theirNextNostrPublicKey!==n.nextPublicKey&&(this.state.theirCurrentNostrPublicKey=this.state.theirNextNostrPublicKey,this.state.theirNextNostrPublicKey=n.nextPublicKey,(c=this.nostrUnsubscribe)==null||c.call(this),this.nostrUnsubscribe=this.nostrNextUnsubscribe,this.nostrNextUnsubscribe=this.nostrSubscribe({authors:[this.state.theirNextNostrPublicKey],kinds:[Ke]},a=>this.handleNostrEvent(a))),r&&(this.skipMessageKeys(n.previousChainLength,t.pubkey),this.ratchetStep(n.nextPublicKey));else if(!(St(t.pubkey,n.number)in this.state.skippedMessageKeys))return;const s=this.ratchetDecrypt(n,t.content,t.pubkey),o=JSON.parse(s);if(!yt(o)){console.error("Invalid event received",o);return}if(o.id!==ze(o)){console.error("Event hash does not match",o);return}this.internalSubscriptions.forEach(a=>a(o,t))}subscribeToNostrEvents(){if(this.nostrNextUnsubscribe)return;this.nostrNextUnsubscribe=this.nostrSubscribe({authors:[this.state.theirNextNostrPublicKey],kinds:[Ke]},n=>this.handleNostrEvent(n));const t=Object.keys(this.state.skippedHeaderKeys);this.state.theirCurrentNostrPublicKey&&!t.includes(this.state.theirCurrentNostrPublicKey)&&t.push(this.state.theirCurrentNostrPublicKey),this.nostrUnsubscribe=this.nostrSubscribe({authors:t,kinds:[Ke]},n=>this.handleNostrEvent(n))}}new TextDecoder("utf-8"),new TextEncoder;function Nt(e,t){const n=Le.getSharedSecret(e,"02"+t).subarray(1,33);return rn(le,n,"nip44-v2")}class Re{constructor(t,n,r,i,s,o,c=[]){this.inviterEphemeralPublicKey=t,this.sharedSecret=n,this.inviter=r,this.inviterEphemeralPrivateKey=i,this.label=s,this.maxUses=o,this.usedBy=c}static createNew(t,n,r){if(!t)throw new Error("Inviter public key is required");const i=$e(),s=we(i),o=T($e());return new Re(s,o,t,i,n,r)}static fromUrl(t){const r=new URL(t).hash.slice(1);if(!r)throw new Error("No invite data found in the URL hash.");const i=decodeURIComponent(r);let s;try{s=JSON.parse(i)}catch(l){throw new Error("Invite data in URL hash is not valid JSON: "+l)}const{inviter:o,ephemeralKey:c,sharedSecret:a}=s;if(!o||!c||!a)throw new Error("Missing required fields (inviter, ephemeralKey, sharedSecret) in invite data.");return new Re(c,a,o)}static deserialize(t){const n=JSON.parse(t);return new Re(n.inviterEphemeralPublicKey,n.sharedSecret,n.inviter,n.inviterEphemeralPrivateKey?new Uint8Array(n.inviterEphemeralPrivateKey):void 0,n.label,n.maxUses,n.usedBy)}static fromEvent(t){var o,c;if(!t.sig)throw new Error("Event is not signed");if(!wt(t))throw new Error("Event signature is invalid");const{tags:n}=t;if(!n)throw new Error("Invalid invite event: missing tags");const r=(o=n.find(([a])=>a==="ephemeralKey"))==null?void 0:o[1],i=(c=n.find(([a])=>a==="sharedSecret"))==null?void 0:c[1],s=t.pubkey;if(!r||!i)throw new Error("Invalid invite event: missing session key or sharedSecret");return new Re(r,i,s)}static fromUser(t,n,r){const i={kinds:[An],authors:[t],limit:1,"#d":["nostr-double-ratchet/invite"]};let s=0;return n(i,c=>{if(!(!c.created_at||c.created_at<=s)){s=c.created_at;try{const a=Re.fromEvent(c);r(a)}catch(a){console.error("Error processing invite:",a,"event:",c)}}})}serialize(){return JSON.stringify({inviterEphemeralPublicKey:this.inviterEphemeralPublicKey,sharedSecret:this.sharedSecret,inviter:this.inviter,inviterEphemeralPrivateKey:this.inviterEphemeralPrivateKey?Array.from(this.inviterEphemeralPrivateKey):void 0,label:this.label,maxUses:this.maxUses,usedBy:this.usedBy})}getUrl(t="https://iris.to"){const n={inviter:this.inviter,ephemeralKey:this.inviterEphemeralPublicKey,sharedSecret:this.sharedSecret},r=new URL(t);return r.hash=encodeURIComponent(JSON.stringify(n)),r.toString()}getEvent(){return{kind:An,pubkey:this.inviter,content:"",created_at:Math.floor(Date.now()/1e3),tags:[["ephemeralKey",this.inviterEphemeralPublicKey],["sharedSecret",this.sharedSecret],["d","nostr-double-ratchet/invite"]]}}async accept(t,n,r){const i=$e(),s=we(i),o=this.inviter||this.inviterEphemeralPublicKey,c=F(this.sharedSecret),a=et.init(t,this.inviterEphemeralPublicKey,i,!0,c,void 0),l=$e(),f=we(l),g=await(typeof r=="function"?r:(h,d)=>Promise.resolve(D.encrypt(h,Nt(r,d))))(s,o),b={pubkey:n,tags:[["sharedSecret",this.sharedSecret]],content:await D.encrypt(g,c),created_at:Math.floor(Date.now()/1e3)},p={kind:Ke,pubkey:f,content:D.encrypt(JSON.stringify(b),Nt(l,this.inviterEphemeralPublicKey)),created_at:Math.floor(Date.now()/1e3),tags:[["p",this.inviterEphemeralPublicKey]]};return{session:a,event:ee(p,l)}}listen(t,n,r){if(!this.inviterEphemeralPrivateKey)throw new Error("Inviter session key is not available");const i={kinds:[Ke],"#p":[this.inviterEphemeralPublicKey]};return n(i,async s=>{try{if(this.maxUses&&this.usedBy.length>=this.maxUses){console.error("Invite has reached maximum number of uses");return}const o=await D.decrypt(s.content,Nt(this.inviterEphemeralPrivateKey,s.pubkey)),c=JSON.parse(o);if(!c.tags||!c.tags.some(([h,d])=>h==="sharedSecret"&&d===this.sharedSecret)){console.error("Invalid secret from event",s);return}const a=F(this.sharedSecret),l=c.pubkey;this.usedBy.push(l);const f=await D.decrypt(c.content,a),g=await(typeof t=="function"?t:(h,d)=>Promise.resolve(D.decrypt(h,Nt(t,d))))(f,l),b=s.id,p=et.init(n,g,this.inviterEphemeralPrivateKey,!1,a,b);r(p,l)}catch(o){console.error("Error processing invite message:",o,"event",s)}})}}H.CHAT_MESSAGE_KIND=gi,H.INVITE_EVENT_KIND=An,H.Invite=Re,H.MAX_SKIP=zc,H.MESSAGE_EVENT_KIND=Ke,H.Session=et,H.createEventStream=Zc,H.deserializeSessionState=Wc,H.getMillisecondTimestamp=Gc,H.kdf=Te,H.serializeSessionState=Vc,H.skippedMessageIndexKey=St,Object.defineProperty(H,Symbol.toStringTag,{value:"Module"})});
1
+ (function(H,J){typeof exports=="object"&&typeof module<"u"?J(exports):typeof define=="function"&&define.amd?define(["exports"],J):(H=typeof globalThis<"u"?globalThis:H||self,J(H["nostr-double-ratchet"]={}))})(this,function(H){"use strict";var Yc=Object.defineProperty;var Xc=(H,J,ke)=>J in H?Yc(H,J,{enumerable:!0,configurable:!0,writable:!0,value:ke}):H[J]=ke;var ie=(H,J,ke)=>Xc(H,typeof J!="symbol"?J+"":J,ke);function J(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function ke(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function Ei(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");J(e.outputLen),J(e.blockLen)}function nt(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function mi(e,t){ke(e);const n=t.outputLen;if(e.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const At=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Cn=e=>e instanceof Uint8Array,Kt=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),se=(e,t)=>e<<32-t|e>>>t;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function xi(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Ct(e){if(typeof e=="string"&&(e=xi(e)),!Cn(e))throw new Error(`expected Uint8Array, got ${typeof e}`);return e}function Si(...e){const t=new Uint8Array(e.reduce((r,i)=>r+i.length,0));let n=0;return e.forEach(r=>{if(!Cn(r))throw new Error("Uint8Array expected");t.set(r,n),n+=r.length}),t}let Bn=class{clone(){return this._cloneInto()}};function Ni(e){const t=r=>e().update(Ct(r)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function kn(e=32){if(At&&typeof At.getRandomValues=="function")return At.getRandomValues(new Uint8Array(e));throw new Error("crypto.getRandomValues must be defined")}function Ai(e,t,n,r){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,n,r);const i=BigInt(32),s=BigInt(4294967295),o=Number(n>>i&s),c=Number(n&s),a=r?4:0,l=r?0:4;e.setUint32(t+a,o,r),e.setUint32(t+l,c,r)}let Ki=class extends Bn{constructor(t,n,r,i){super(),this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Kt(this.buffer)}update(t){nt(this);const{view:n,buffer:r,blockLen:i}=this;t=Ct(t);const s=t.length;for(let o=0;o<s;){const c=Math.min(i-this.pos,s-o);if(c===i){const a=Kt(t);for(;i<=s-o;o+=i)this.process(a,o);continue}r.set(t.subarray(o,o+c),this.pos),this.pos+=c,o+=c,this.pos===i&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){nt(this),mi(t,this),this.finished=!0;const{buffer:n,view:r,blockLen:i,isLE:s}=this;let{pos:o}=this;n[o++]=128,this.buffer.subarray(o).fill(0),this.padOffset>i-o&&(this.process(r,0),o=0);for(let u=o;u<i;u++)n[u]=0;Ai(r,i-8,BigInt(this.length*8),s),this.process(r,0);const c=Kt(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const l=a/4,f=this.get();if(l>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)c.setUint32(4*u,f[u],s)}digest(){const{buffer:t,outputLen:n}=this;this.digestInto(t);const r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:n,buffer:r,length:i,finished:s,destroyed:o,pos:c}=this;return t.length=i,t.pos=c,t.finished=s,t.destroyed=o,i%n&&t.buffer.set(r),t}};const Ci=(e,t,n)=>e&t^~e&n,Bi=(e,t,n)=>e&t^e&n^t&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]),be=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ve=new Uint32Array(64);let _i=class extends Ki{constructor(){super(64,32,8,!1),this.A=be[0]|0,this.B=be[1]|0,this.C=be[2]|0,this.D=be[3]|0,this.E=be[4]|0,this.F=be[5]|0,this.G=be[6]|0,this.H=be[7]|0}get(){const{A:t,B:n,C:r,D:i,E:s,F:o,G:c,H:a}=this;return[t,n,r,i,s,o,c,a]}set(t,n,r,i,s,o,c,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=c|0,this.H=a|0}process(t,n){for(let u=0;u<16;u++,n+=4)ve[u]=t.getUint32(n,!1);for(let u=16;u<64;u++){const g=ve[u-15],b=ve[u-2],p=se(g,7)^se(g,18)^g>>>3,h=se(b,17)^se(b,19)^b>>>10;ve[u]=h+ve[u-7]+p+ve[u-16]|0}let{A:r,B:i,C:s,D:o,E:c,F:a,G:l,H:f}=this;for(let u=0;u<64;u++){const g=se(c,6)^se(c,11)^se(c,25),b=f+g+Ci(c,a,l)+ki[u]+ve[u]|0,h=(se(r,2)^se(r,13)^se(r,22))+Bi(r,i,s)|0;f=l,l=a,a=c,c=o+b|0,o=s,s=i,i=r,r=b+h|0}r=r+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,c=c+this.E|0,a=a+this.F|0,l=l+this.G|0,f=f+this.H|0,this.set(r,i,s,o,c,a,l,f)}roundClean(){ve.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};const Bt=Ni(()=>new _i);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _n=BigInt(0),rt=BigInt(1),Ii=BigInt(2),it=e=>e instanceof Uint8Array,Ui=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Oe(e){if(!it(e))throw new Error("Uint8Array expected");let t="";for(let n=0;n<e.length;n++)t+=Ui[e[n]];return t}function In(e){const t=e.toString(16);return t.length&1?`0${t}`:t}function kt(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return BigInt(e===""?"0":`0x${e}`)}function Pe(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);const t=e.length;if(t%2)throw new Error("padded hex string expected, got unpadded hex of length "+t);const n=new Uint8Array(t/2);for(let r=0;r<n.length;r++){const i=r*2,s=e.slice(i,i+2),o=Number.parseInt(s,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");n[r]=o}return n}function Y(e){return kt(Oe(e))}function _t(e){if(!it(e))throw new Error("Uint8Array expected");return kt(Oe(Uint8Array.from(e).reverse()))}function Ee(e,t){return Pe(e.toString(16).padStart(t*2,"0"))}function It(e,t){return Ee(e,t).reverse()}function Li(e){return Pe(In(e))}function Z(e,t,n){let r;if(typeof t=="string")try{r=Pe(t)}catch(s){throw new Error(`${e} must be valid hex string, got "${t}". Cause: ${s}`)}else if(it(t))r=Uint8Array.from(t);else throw new Error(`${e} must be hex string or Uint8Array`);const i=r.length;if(typeof n=="number"&&i!==n)throw new Error(`${e} expected ${n} bytes, got ${i}`);return r}function _e(...e){const t=new Uint8Array(e.reduce((r,i)=>r+i.length,0));let n=0;return e.forEach(r=>{if(!it(r))throw new Error("Uint8Array expected");t.set(r,n),n+=r.length}),t}function $i(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Ti(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Ri(e){let t;for(t=0;e>_n;e>>=rt,t+=1);return t}function Mi(e,t){return e>>BigInt(t)&rt}const Oi=(e,t,n)=>e|(n?rt:_n)<<BigInt(t),Ut=e=>(Ii<<BigInt(e-1))-rt,Lt=e=>new Uint8Array(e),Un=e=>Uint8Array.from(e);function Ln(e,t,n){if(typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof n!="function")throw new Error("hmacFn must be a function");let r=Lt(e),i=Lt(e),s=0;const o=()=>{r.fill(1),i.fill(0),s=0},c=(...u)=>n(i,r,...u),a=(u=Lt())=>{i=c(Un([0]),u),r=c(),u.length!==0&&(i=c(Un([1]),u),r=c())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0;const g=[];for(;u<t;){r=c();const b=r.slice();g.push(b),u+=r.length}return _e(...g)};return(u,g)=>{o(),a(u);let b;for(;!(b=g(l()));)a();return o(),b}}const Pi={bigint:e=>typeof e=="bigint",function:e=>typeof e=="function",boolean:e=>typeof e=="boolean",string:e=>typeof e=="string",stringOrUint8Array:e=>typeof e=="string"||e instanceof Uint8Array,isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>typeof e=="function"&&Number.isSafeInteger(e.outputLen)};function Fe(e,t,n={}){const r=(i,s,o)=>{const c=Pi[s];if(typeof c!="function")throw new Error(`Invalid validator "${s}", expected function`);const a=e[i];if(!(o&&a===void 0)&&!c(a,e))throw new Error(`Invalid param ${String(i)}=${a} (${typeof a}), expected ${s}`)};for(const[i,s]of Object.entries(t))r(i,s,!1);for(const[i,s]of Object.entries(n))r(i,s,!0);return e}const Hi=Object.freeze(Object.defineProperty({__proto__:null,bitGet:Mi,bitLen:Ri,bitMask:Ut,bitSet:Oi,bytesToHex:Oe,bytesToNumberBE:Y,bytesToNumberLE:_t,concatBytes:_e,createHmacDrbg:Ln,ensureBytes:Z,equalBytes:$i,hexToBytes:Pe,hexToNumber:kt,numberToBytesBE:Ee,numberToBytesLE:It,numberToHexUnpadded:In,numberToVarBytesBE:Li,utf8ToBytes:Ti,validateObject:Fe},Symbol.toStringTag,{value:"Module"}));/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const V=BigInt(0),z=BigInt(1),Ie=BigInt(2),qi=BigInt(3),$t=BigInt(4),$n=BigInt(5),Tn=BigInt(8);BigInt(9),BigInt(16);function W(e,t){const n=e%t;return n>=V?n:t+n}function Di(e,t,n){if(n<=V||t<V)throw new Error("Expected power/modulo > 0");if(n===z)return V;let r=z;for(;t>V;)t&z&&(r=r*e%n),e=e*e%n,t>>=z;return r}function X(e,t,n){let r=e;for(;t-- >V;)r*=r,r%=n;return r}function Tt(e,t){if(e===V||t<=V)throw new Error(`invert: expected positive integers, got n=${e} mod=${t}`);let n=W(e,t),r=t,i=V,s=z;for(;n!==V;){const c=r/n,a=r%n,l=i-s*c;r=n,n=a,i=s,s=l}if(r!==z)throw new Error("invert: does not exist");return W(i,t)}function ji(e){const t=(e-z)/Ie;let n,r,i;for(n=e-z,r=0;n%Ie===V;n/=Ie,r++);for(i=Ie;i<e&&Di(i,t,e)!==e-z;i++);if(r===1){const o=(e+z)/$t;return function(a,l){const f=a.pow(l,o);if(!a.eql(a.sqr(f),l))throw new Error("Cannot find square root");return f}}const s=(n+z)/Ie;return function(c,a){if(c.pow(a,t)===c.neg(c.ONE))throw new Error("Cannot find square root");let l=r,f=c.pow(c.mul(c.ONE,i),n),u=c.pow(a,s),g=c.pow(a,n);for(;!c.eql(g,c.ONE);){if(c.eql(g,c.ZERO))return c.ZERO;let b=1;for(let h=c.sqr(g);b<l&&!c.eql(h,c.ONE);b++)h=c.sqr(h);const p=c.pow(f,z<<BigInt(l-b-1));f=c.sqr(p),u=c.mul(u,p),g=c.mul(g,f),l=b}return u}}function zi(e){if(e%$t===qi){const t=(e+z)/$t;return function(r,i){const s=r.pow(i,t);if(!r.eql(r.sqr(s),i))throw new Error("Cannot find square root");return s}}if(e%Tn===$n){const t=(e-$n)/Tn;return function(r,i){const s=r.mul(i,Ie),o=r.pow(s,t),c=r.mul(i,o),a=r.mul(r.mul(c,Ie),o),l=r.mul(c,r.sub(a,r.ONE));if(!r.eql(r.sqr(l),i))throw new Error("Cannot find square root");return l}}return ji(e)}const Vi=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Wi(e){const t={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},n=Vi.reduce((r,i)=>(r[i]="function",r),t);return Fe(e,n)}function Zi(e,t,n){if(n<V)throw new Error("Expected power > 0");if(n===V)return e.ONE;if(n===z)return t;let r=e.ONE,i=t;for(;n>V;)n&z&&(r=e.mul(r,i)),i=e.sqr(i),n>>=z;return r}function Gi(e,t){const n=new Array(t.length),r=t.reduce((s,o,c)=>e.is0(o)?s:(n[c]=s,e.mul(s,o)),e.ONE),i=e.inv(r);return t.reduceRight((s,o,c)=>e.is0(o)?s:(n[c]=e.mul(s,n[c]),e.mul(s,o)),i),n}function Rn(e,t){const n=t!==void 0?t:e.toString(2).length,r=Math.ceil(n/8);return{nBitLength:n,nByteLength:r}}function Fi(e,t,n=!1,r={}){if(e<=V)throw new Error(`Expected Field ORDER > 0, got ${e}`);const{nBitLength:i,nByteLength:s}=Rn(e,t);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");const o=zi(e),c=Object.freeze({ORDER:e,BITS:i,BYTES:s,MASK:Ut(i),ZERO:V,ONE:z,create:a=>W(a,e),isValid:a=>{if(typeof a!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof a}`);return V<=a&&a<e},is0:a=>a===V,isOdd:a=>(a&z)===z,neg:a=>W(-a,e),eql:(a,l)=>a===l,sqr:a=>W(a*a,e),add:(a,l)=>W(a+l,e),sub:(a,l)=>W(a-l,e),mul:(a,l)=>W(a*l,e),pow:(a,l)=>Zi(c,a,l),div:(a,l)=>W(a*Tt(l,e),e),sqrN:a=>a*a,addN:(a,l)=>a+l,subN:(a,l)=>a-l,mulN:(a,l)=>a*l,inv:a=>Tt(a,e),sqrt:r.sqrt||(a=>o(c,a)),invertBatch:a=>Gi(c,a),cmov:(a,l,f)=>f?l:a,toBytes:a=>n?It(a,s):Ee(a,s),fromBytes:a=>{if(a.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${a.length}`);return n?_t(a):Y(a)}});return Object.freeze(c)}function Mn(e){if(typeof e!="bigint")throw new Error("field order must be bigint");const t=e.toString(2).length;return Math.ceil(t/8)}function On(e){const t=Mn(e);return t+Math.ceil(t/2)}function Ji(e,t,n=!1){const r=e.length,i=Mn(t),s=On(t);if(r<16||r<s||r>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${r}`);const o=n?Y(e):_t(e),c=W(o,t-z)+z;return n?It(c,i):Ee(c,i)}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const Yi=BigInt(0),Rt=BigInt(1);function Xi(e,t){const n=(i,s)=>{const o=s.negate();return i?o:s},r=i=>{const s=Math.ceil(t/i)+1,o=2**(i-1);return{windows:s,windowSize:o}};return{constTimeNegate:n,unsafeLadder(i,s){let o=e.ZERO,c=i;for(;s>Yi;)s&Rt&&(o=o.add(c)),c=c.double(),s>>=Rt;return o},precomputeWindow(i,s){const{windows:o,windowSize:c}=r(s),a=[];let l=i,f=l;for(let u=0;u<o;u++){f=l,a.push(f);for(let g=1;g<c;g++)f=f.add(l),a.push(f);l=f.double()}return a},wNAF(i,s,o){const{windows:c,windowSize:a}=r(i);let l=e.ZERO,f=e.BASE;const u=BigInt(2**i-1),g=2**i,b=BigInt(i);for(let p=0;p<c;p++){const h=p*a;let d=Number(o&u);o>>=b,d>a&&(d-=g,o+=Rt);const y=h,m=h+Math.abs(d)-1,A=p%2!==0,I=d<0;d===0?f=f.add(n(A,s[y])):l=l.add(n(I,s[m]))}return{p:l,f}},wNAFCached(i,s,o,c){const a=i._WINDOW_SIZE||1;let l=s.get(i);return l||(l=this.precomputeWindow(i,a),a!==1&&s.set(i,c(l))),this.wNAF(a,l,o)}}}function Pn(e){return Wi(e.Fp),Fe(e,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Rn(e.n,e.nBitLength),...e,p:e.Fp.ORDER})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Qi(e){const t=Pn(e);Fe(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:n,Fp:r,a:i}=t;if(n){if(!r.eql(i,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({...t})}const{bytesToNumberBE:es,hexToBytes:ts}=Hi,Ue={Err:class extends Error{constructor(t=""){super(t)}},_parseInt(e){const{Err:t}=Ue;if(e.length<2||e[0]!==2)throw new t("Invalid signature integer tag");const n=e[1],r=e.subarray(2,n+2);if(!n||r.length!==n)throw new t("Invalid signature integer: wrong length");if(r[0]&128)throw new t("Invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new t("Invalid signature integer: unnecessary leading zero");return{d:es(r),l:e.subarray(n+2)}},toSig(e){const{Err:t}=Ue,n=typeof e=="string"?ts(e):e;if(!(n instanceof Uint8Array))throw new Error("ui8a expected");let r=n.length;if(r<2||n[0]!=48)throw new t("Invalid signature tag");if(n[1]!==r-2)throw new t("Invalid signature: incorrect length");const{d:i,l:s}=Ue._parseInt(n.subarray(2)),{d:o,l:c}=Ue._parseInt(s);if(c.length)throw new t("Invalid signature: left bytes after parsing");return{r:i,s:o}},hexFromSig(e){const t=l=>Number.parseInt(l[0],16)&8?"00"+l:l,n=l=>{const f=l.toString(16);return f.length&1?`0${f}`:f},r=t(n(e.s)),i=t(n(e.r)),s=r.length/2,o=i.length/2,c=n(s),a=n(o);return`30${n(o+s+4)}02${a}${i}02${c}${r}`}},ue=BigInt(0),Q=BigInt(1);BigInt(2);const Hn=BigInt(3);BigInt(4);function ns(e){const t=Qi(e),{Fp:n}=t,r=t.toBytes||((p,h,d)=>{const y=h.toAffine();return _e(Uint8Array.from([4]),n.toBytes(y.x),n.toBytes(y.y))}),i=t.fromBytes||(p=>{const h=p.subarray(1),d=n.fromBytes(h.subarray(0,n.BYTES)),y=n.fromBytes(h.subarray(n.BYTES,2*n.BYTES));return{x:d,y}});function s(p){const{a:h,b:d}=t,y=n.sqr(p),m=n.mul(y,p);return n.add(n.add(m,n.mul(p,h)),d)}if(!n.eql(n.sqr(t.Gy),s(t.Gx)))throw new Error("bad generator point: equation left != right");function o(p){return typeof p=="bigint"&&ue<p&&p<t.n}function c(p){if(!o(p))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function a(p){const{allowedPrivateKeyLengths:h,nByteLength:d,wrapPrivateKey:y,n:m}=t;if(h&&typeof p!="bigint"){if(p instanceof Uint8Array&&(p=Oe(p)),typeof p!="string"||!h.includes(p.length))throw new Error("Invalid key");p=p.padStart(d*2,"0")}let A;try{A=typeof p=="bigint"?p:Y(Z("private key",p,d))}catch{throw new Error(`private key must be ${d} bytes, hex or bigint, not ${typeof p}`)}return y&&(A=W(A,m)),c(A),A}const l=new Map;function f(p){if(!(p instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(h,d,y){if(this.px=h,this.py=d,this.pz=y,h==null||!n.isValid(h))throw new Error("x required");if(d==null||!n.isValid(d))throw new Error("y required");if(y==null||!n.isValid(y))throw new Error("z required")}static fromAffine(h){const{x:d,y}=h||{};if(!h||!n.isValid(d)||!n.isValid(y))throw new Error("invalid affine point");if(h instanceof u)throw new Error("projective point not allowed");const m=A=>n.eql(A,n.ZERO);return m(d)&&m(y)?u.ZERO:new u(d,y,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(h){const d=n.invertBatch(h.map(y=>y.pz));return h.map((y,m)=>y.toAffine(d[m])).map(u.fromAffine)}static fromHex(h){const d=u.fromAffine(i(Z("pointHex",h)));return d.assertValidity(),d}static fromPrivateKey(h){return u.BASE.multiply(a(h))}_setWindowSize(h){this._WINDOW_SIZE=h,l.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!n.is0(this.py))return;throw new Error("bad point: ZERO")}const{x:h,y:d}=this.toAffine();if(!n.isValid(h)||!n.isValid(d))throw new Error("bad point: x or y not FE");const y=n.sqr(d),m=s(h);if(!n.eql(y,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:h}=this.toAffine();if(n.isOdd)return!n.isOdd(h);throw new Error("Field doesn't support isOdd")}equals(h){f(h);const{px:d,py:y,pz:m}=this,{px:A,py:I,pz:B}=h,E=n.eql(n.mul(d,B),n.mul(A,m)),x=n.eql(n.mul(y,B),n.mul(I,m));return E&&x}negate(){return new u(this.px,n.neg(this.py),this.pz)}double(){const{a:h,b:d}=t,y=n.mul(d,Hn),{px:m,py:A,pz:I}=this;let B=n.ZERO,E=n.ZERO,x=n.ZERO,S=n.mul(m,m),P=n.mul(A,A),_=n.mul(I,I),K=n.mul(m,A);return K=n.add(K,K),x=n.mul(m,I),x=n.add(x,x),B=n.mul(h,x),E=n.mul(y,_),E=n.add(B,E),B=n.sub(P,E),E=n.add(P,E),E=n.mul(B,E),B=n.mul(K,B),x=n.mul(y,x),_=n.mul(h,_),K=n.sub(S,_),K=n.mul(h,K),K=n.add(K,x),x=n.add(S,S),S=n.add(x,S),S=n.add(S,_),S=n.mul(S,K),E=n.add(E,S),_=n.mul(A,I),_=n.add(_,_),S=n.mul(_,K),B=n.sub(B,S),x=n.mul(_,P),x=n.add(x,x),x=n.add(x,x),new u(B,E,x)}add(h){f(h);const{px:d,py:y,pz:m}=this,{px:A,py:I,pz:B}=h;let E=n.ZERO,x=n.ZERO,S=n.ZERO;const P=t.a,_=n.mul(t.b,Hn);let K=n.mul(d,A),R=n.mul(y,I),M=n.mul(m,B),j=n.add(d,y),w=n.add(A,I);j=n.mul(j,w),w=n.add(K,R),j=n.sub(j,w),w=n.add(d,m);let v=n.add(A,B);return w=n.mul(w,v),v=n.add(K,M),w=n.sub(w,v),v=n.add(y,m),E=n.add(I,B),v=n.mul(v,E),E=n.add(R,M),v=n.sub(v,E),S=n.mul(P,w),E=n.mul(_,M),S=n.add(E,S),E=n.sub(R,S),S=n.add(R,S),x=n.mul(E,S),R=n.add(K,K),R=n.add(R,K),M=n.mul(P,M),w=n.mul(_,w),R=n.add(R,M),M=n.sub(K,M),M=n.mul(P,M),w=n.add(w,M),K=n.mul(R,w),x=n.add(x,K),K=n.mul(v,w),E=n.mul(j,E),E=n.sub(E,K),K=n.mul(j,R),S=n.mul(v,S),S=n.add(S,K),new u(E,x,S)}subtract(h){return this.add(h.negate())}is0(){return this.equals(u.ZERO)}wNAF(h){return b.wNAFCached(this,l,h,d=>{const y=n.invertBatch(d.map(m=>m.pz));return d.map((m,A)=>m.toAffine(y[A])).map(u.fromAffine)})}multiplyUnsafe(h){const d=u.ZERO;if(h===ue)return d;if(c(h),h===Q)return this;const{endo:y}=t;if(!y)return b.unsafeLadder(this,h);let{k1neg:m,k1:A,k2neg:I,k2:B}=y.splitScalar(h),E=d,x=d,S=this;for(;A>ue||B>ue;)A&Q&&(E=E.add(S)),B&Q&&(x=x.add(S)),S=S.double(),A>>=Q,B>>=Q;return m&&(E=E.negate()),I&&(x=x.negate()),x=new u(n.mul(x.px,y.beta),x.py,x.pz),E.add(x)}multiply(h){c(h);let d=h,y,m;const{endo:A}=t;if(A){const{k1neg:I,k1:B,k2neg:E,k2:x}=A.splitScalar(d);let{p:S,f:P}=this.wNAF(B),{p:_,f:K}=this.wNAF(x);S=b.constTimeNegate(I,S),_=b.constTimeNegate(E,_),_=new u(n.mul(_.px,A.beta),_.py,_.pz),y=S.add(_),m=P.add(K)}else{const{p:I,f:B}=this.wNAF(d);y=I,m=B}return u.normalizeZ([y,m])[0]}multiplyAndAddUnsafe(h,d,y){const m=u.BASE,A=(B,E)=>E===ue||E===Q||!B.equals(m)?B.multiplyUnsafe(E):B.multiply(E),I=A(this,d).add(A(h,y));return I.is0()?void 0:I}toAffine(h){const{px:d,py:y,pz:m}=this,A=this.is0();h==null&&(h=A?n.ONE:n.inv(m));const I=n.mul(d,h),B=n.mul(y,h),E=n.mul(m,h);if(A)return{x:n.ZERO,y:n.ZERO};if(!n.eql(E,n.ONE))throw new Error("invZ was invalid");return{x:I,y:B}}isTorsionFree(){const{h,isTorsionFree:d}=t;if(h===Q)return!0;if(d)return d(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h,clearCofactor:d}=t;return h===Q?this:d?d(u,this):this.multiplyUnsafe(t.h)}toRawBytes(h=!0){return this.assertValidity(),r(u,this,h)}toHex(h=!0){return Oe(this.toRawBytes(h))}}u.BASE=new u(t.Gx,t.Gy,n.ONE),u.ZERO=new u(n.ZERO,n.ONE,n.ZERO);const g=t.nBitLength,b=Xi(u,t.endo?Math.ceil(g/2):g);return{CURVE:t,ProjectivePoint:u,normPrivateKeyToScalar:a,weierstrassEquation:s,isWithinCurveOrder:o}}function rs(e){const t=Pn(e);return Fe(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function is(e){const t=rs(e),{Fp:n,n:r}=t,i=n.BYTES+1,s=2*n.BYTES+1;function o(w){return ue<w&&w<n.ORDER}function c(w){return W(w,r)}function a(w){return Tt(w,r)}const{ProjectivePoint:l,normPrivateKeyToScalar:f,weierstrassEquation:u,isWithinCurveOrder:g}=ns({...t,toBytes(w,v,N){const k=v.toAffine(),C=n.toBytes(k.x),L=_e;return N?L(Uint8Array.from([v.hasEvenY()?2:3]),C):L(Uint8Array.from([4]),C,n.toBytes(k.y))},fromBytes(w){const v=w.length,N=w[0],k=w.subarray(1);if(v===i&&(N===2||N===3)){const C=Y(k);if(!o(C))throw new Error("Point is not on curve");const L=u(C);let O=n.sqrt(L);const $=(O&Q)===Q;return(N&1)===1!==$&&(O=n.neg(O)),{x:C,y:O}}else if(v===s&&N===4){const C=n.fromBytes(k.subarray(0,n.BYTES)),L=n.fromBytes(k.subarray(n.BYTES,2*n.BYTES));return{x:C,y:L}}else throw new Error(`Point of length ${v} was invalid. Expected ${i} compressed bytes or ${s} uncompressed bytes`)}}),b=w=>Oe(Ee(w,t.nByteLength));function p(w){const v=r>>Q;return w>v}function h(w){return p(w)?c(-w):w}const d=(w,v,N)=>Y(w.slice(v,N));class y{constructor(v,N,k){this.r=v,this.s=N,this.recovery=k,this.assertValidity()}static fromCompact(v){const N=t.nByteLength;return v=Z("compactSignature",v,N*2),new y(d(v,0,N),d(v,N,2*N))}static fromDER(v){const{r:N,s:k}=Ue.toSig(Z("DER",v));return new y(N,k)}assertValidity(){if(!g(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!g(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(v){return new y(this.r,this.s,v)}recoverPublicKey(v){const{r:N,s:k,recovery:C}=this,L=x(Z("msgHash",v));if(C==null||![0,1,2,3].includes(C))throw new Error("recovery id invalid");const O=C===2||C===3?N+t.n:N;if(O>=n.ORDER)throw new Error("recovery id 2 or 3 invalid");const $=C&1?"03":"02",ne=l.fromHex($+b(O)),Ce=a(O),Ve=c(-L*Ce),tt=c(k*Ce),Be=l.BASE.multiplyAndAddUnsafe(ne,Ve,tt);if(!Be)throw new Error("point at infinify");return Be.assertValidity(),Be}hasHighS(){return p(this.s)}normalizeS(){return this.hasHighS()?new y(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return Pe(this.toDERHex())}toDERHex(){return Ue.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Pe(this.toCompactHex())}toCompactHex(){return b(this.r)+b(this.s)}}const m={isValidPrivateKey(w){try{return f(w),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{const w=On(t.n);return Ji(t.randomBytes(w),t.n)},precompute(w=8,v=l.BASE){return v._setWindowSize(w),v.multiply(BigInt(3)),v}};function A(w,v=!0){return l.fromPrivateKey(w).toRawBytes(v)}function I(w){const v=w instanceof Uint8Array,N=typeof w=="string",k=(v||N)&&w.length;return v?k===i||k===s:N?k===2*i||k===2*s:w instanceof l}function B(w,v,N=!0){if(I(w))throw new Error("first arg must be private key");if(!I(v))throw new Error("second arg must be public key");return l.fromHex(v).multiply(f(w)).toRawBytes(N)}const E=t.bits2int||function(w){const v=Y(w),N=w.length*8-t.nBitLength;return N>0?v>>BigInt(N):v},x=t.bits2int_modN||function(w){return c(E(w))},S=Ut(t.nBitLength);function P(w){if(typeof w!="bigint")throw new Error("bigint expected");if(!(ue<=w&&w<S))throw new Error(`bigint expected < 2^${t.nBitLength}`);return Ee(w,t.nByteLength)}function _(w,v,N=K){if(["recovered","canonical"].some(Me=>Me in N))throw new Error("sign() legacy options not supported");const{hash:k,randomBytes:C}=t;let{lowS:L,prehash:O,extraEntropy:$}=N;L==null&&(L=!0),w=Z("msgHash",w),O&&(w=Z("prehashed msgHash",k(w)));const ne=x(w),Ce=f(v),Ve=[P(Ce),P(ne)];if($!=null){const Me=$===!0?C(n.BYTES):$;Ve.push(Z("extraEntropy",Me))}const tt=_e(...Ve),Be=ne;function Kn(Me){const We=E(Me);if(!g(We))return;const wi=a(We),Ze=l.BASE.multiply(We).toAffine(),re=c(Ze.x);if(re===ue)return;const Ge=c(wi*c(Be+re*Ce));if(Ge===ue)return;let bi=(Ze.x===re?0:2)|Number(Ze.y&Q),vi=Ge;return L&&p(Ge)&&(vi=h(Ge),bi^=1),new y(re,vi,bi)}return{seed:tt,k2sig:Kn}}const K={lowS:t.lowS,prehash:!1},R={lowS:t.lowS,prehash:!1};function M(w,v,N=K){const{seed:k,k2sig:C}=_(w,v,N),L=t;return Ln(L.hash.outputLen,L.nByteLength,L.hmac)(k,C)}l.BASE._setWindowSize(8);function j(w,v,N,k=R){var Ze;const C=w;if(v=Z("msgHash",v),N=Z("publicKey",N),"strict"in k)throw new Error("options.strict was renamed to lowS");const{lowS:L,prehash:O}=k;let $,ne;try{if(typeof C=="string"||C instanceof Uint8Array)try{$=y.fromDER(C)}catch(re){if(!(re instanceof Ue.Err))throw re;$=y.fromCompact(C)}else if(typeof C=="object"&&typeof C.r=="bigint"&&typeof C.s=="bigint"){const{r:re,s:Ge}=C;$=new y(re,Ge)}else throw new Error("PARSE");ne=l.fromHex(N)}catch(re){if(re.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(L&&$.hasHighS())return!1;O&&(v=t.hash(v));const{r:Ce,s:Ve}=$,tt=x(v),Be=a(Ve),Kn=c(tt*Be),Me=c(Ce*Be),We=(Ze=l.BASE.multiplyAndAddUnsafe(ne,Kn,Me))==null?void 0:Ze.toAffine();return We?c(We.x)===Ce:!1}return{CURVE:t,getPublicKey:A,getSharedSecret:B,sign:M,verify:j,ProjectivePoint:l,Signature:y,utils:m}}let qn=class extends Bn{constructor(t,n){super(),this.finished=!1,this.destroyed=!1,Ei(t);const r=Ct(n);if(this.iHash=t.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 i=this.blockLen,s=new Uint8Array(i);s.set(r.length>i?t.create().update(r).digest():r);for(let o=0;o<s.length;o++)s[o]^=54;this.iHash.update(s),this.oHash=t.create();for(let o=0;o<s.length;o++)s[o]^=106;this.oHash.update(s),s.fill(0)}update(t){return nt(this),this.iHash.update(t),this}digestInto(t){nt(this),ke(t,this.outputLen),this.finished=!0,this.iHash.digestInto(t),this.oHash.update(t),this.oHash.digestInto(t),this.destroy()}digest(){const t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||(t=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:i,destroyed:s,blockLen:o,outputLen:c}=this;return t=t,t.finished=i,t.destroyed=s,t.blockLen=o,t.outputLen=c,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}};const Dn=(e,t,n)=>new qn(e,t).update(n).digest();Dn.create=(e,t)=>new qn(e,t);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function ss(e){return{hash:e,hmac:(t,...n)=>Dn(e,t,Si(...n)),randomBytes:kn}}function os(e,t){const n=r=>is({...e,...ss(r)});return Object.freeze({...n(t),create:n})}/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const st=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),ot=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),jn=BigInt(1),at=BigInt(2),zn=(e,t)=>(e+t/at)/t;function Vn(e){const t=st,n=BigInt(3),r=BigInt(6),i=BigInt(11),s=BigInt(22),o=BigInt(23),c=BigInt(44),a=BigInt(88),l=e*e*e%t,f=l*l*e%t,u=X(f,n,t)*f%t,g=X(u,n,t)*f%t,b=X(g,at,t)*l%t,p=X(b,i,t)*b%t,h=X(p,s,t)*p%t,d=X(h,c,t)*h%t,y=X(d,a,t)*d%t,m=X(y,c,t)*h%t,A=X(m,n,t)*f%t,I=X(A,o,t)*p%t,B=X(I,r,t)*l%t,E=X(B,at,t);if(!Mt.eql(Mt.sqr(E),e))throw new Error("Cannot find square root");return E}const Mt=Fi(st,void 0,void 0,{sqrt:Vn}),Le=os({a:BigInt(0),b:BigInt(7),Fp:Mt,n:ot,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{const t=ot,n=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),r=-jn*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=n,o=BigInt("0x100000000000000000000000000000000"),c=zn(s*e,t),a=zn(-r*e,t);let l=W(e-c*n-a*i,t),f=W(-c*r-a*s,t);const u=l>o,g=f>o;if(u&&(l=t-l),g&&(f=t-f),l>o||f>o)throw new Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:u,k1:l,k2neg:g,k2:f}}}},Bt),ct=BigInt(0),Wn=e=>typeof e=="bigint"&&ct<e&&e<st,as=e=>typeof e=="bigint"&&ct<e&&e<ot,Zn={};function ut(e,...t){let n=Zn[e];if(n===void 0){const r=Bt(Uint8Array.from(e,i=>i.charCodeAt(0)));n=_e(r,r),Zn[e]=n}return Bt(_e(n,...t))}const Ot=e=>e.toRawBytes(!0).slice(1),Pt=e=>Ee(e,32),Ht=e=>W(e,st),Je=e=>W(e,ot),qt=Le.ProjectivePoint,cs=(e,t,n)=>qt.BASE.multiplyAndAddUnsafe(e,t,n);function Dt(e){let t=Le.utils.normPrivateKeyToScalar(e),n=qt.fromPrivateKey(t);return{scalar:n.hasEvenY()?t:Je(-t),bytes:Ot(n)}}function Gn(e){if(!Wn(e))throw new Error("bad x: need 0 < x < p");const t=Ht(e*e),n=Ht(t*e+BigInt(7));let r=Vn(n);r%at!==ct&&(r=Ht(-r));const i=new qt(e,r,jn);return i.assertValidity(),i}function Fn(...e){return Je(Y(ut("BIP0340/challenge",...e)))}function us(e){return Dt(e).bytes}function ls(e,t,n=kn(32)){const r=Z("message",e),{bytes:i,scalar:s}=Dt(t),o=Z("auxRand",n,32),c=Pt(s^Y(ut("BIP0340/aux",o))),a=ut("BIP0340/nonce",c,i,r),l=Je(Y(a));if(l===ct)throw new Error("sign failed: k is zero");const{bytes:f,scalar:u}=Dt(l),g=Fn(f,i,r),b=new Uint8Array(64);if(b.set(f,0),b.set(Pt(Je(u+g*s)),32),!Jn(b,r,i))throw new Error("sign: Invalid signature produced");return b}function Jn(e,t,n){const r=Z("signature",e,64),i=Z("message",t),s=Z("publicKey",n,32);try{const o=Gn(Y(s)),c=Y(r.subarray(0,32));if(!Wn(c))return!1;const a=Y(r.subarray(32,64));if(!as(a))return!1;const l=Fn(Pt(c),Ot(o),i),f=cs(o,a,Je(-l));return!(!f||!f.hasEvenY()||f.toAffine().x!==c)}catch{return!1}}const Ye={getPublicKey:us,sign:ls,verify:Jn,utils:{randomPrivateKey:Le.utils.randomPrivateKey,lift_x:Gn,pointToBytes:Ot,numberToBytesBE:Ee,bytesToNumberBE:Y,taggedHash:ut,mod:W}},jt=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */const zt=e=>e instanceof Uint8Array,Vt=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),oe=(e,t)=>e<<32-t|e>>>t;if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");const fs=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function T(e){if(!zt(e))throw new Error("Uint8Array expected");let t="";for(let n=0;n<e.length;n++)t+=fs[e[n]];return t}function F(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);const t=e.length;if(t%2)throw new Error("padded hex string expected, got unpadded hex of length "+t);const n=new Uint8Array(t/2);for(let r=0;r<n.length;r++){const i=r*2,s=e.slice(i,i+2),o=Number.parseInt(s,16);if(Number.isNaN(o)||o<0)throw new Error("Invalid byte sequence");n[r]=o}return n}function hs(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Xe(e){if(typeof e=="string"&&(e=hs(e)),!zt(e))throw new Error(`expected Uint8Array, got ${typeof e}`);return e}function lt(...e){const t=new Uint8Array(e.reduce((r,i)=>r+i.length,0));let n=0;return e.forEach(r=>{if(!zt(r))throw new Error("Uint8Array expected");t.set(r,n),n+=r.length}),t}class Yn{clone(){return this._cloneInto()}}function Xn(e){const t=r=>e().update(Xe(r)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function Qn(e=32){if(jt&&typeof jt.getRandomValues=="function")return jt.getRandomValues(new Uint8Array(e));throw new Error("crypto.getRandomValues must be defined")}function Wt(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function ds(e){if(typeof e!="boolean")throw new Error(`Expected boolean, not ${e}`)}function er(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function ps(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Wt(e.outputLen),Wt(e.blockLen)}function ys(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function gs(e,t){er(e);const n=t.outputLen;if(e.length<n)throw new Error(`digestInto() expects output buffer of length at least ${n}`)}const ae={number:Wt,bool:ds,bytes:er,hash:ps,exists:ys,output:gs};function ws(e,t,n,r){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,n,r);const i=BigInt(32),s=BigInt(4294967295),o=Number(n>>i&s),c=Number(n&s),a=r?4:0,l=r?0:4;e.setUint32(t+a,o,r),e.setUint32(t+l,c,r)}class bs extends Yn{constructor(t,n,r,i){super(),this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Vt(this.buffer)}update(t){ae.exists(this);const{view:n,buffer:r,blockLen:i}=this;t=Xe(t);const s=t.length;for(let o=0;o<s;){const c=Math.min(i-this.pos,s-o);if(c===i){const a=Vt(t);for(;i<=s-o;o+=i)this.process(a,o);continue}r.set(t.subarray(o,o+c),this.pos),this.pos+=c,o+=c,this.pos===i&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){ae.exists(this),ae.output(t,this),this.finished=!0;const{buffer:n,view:r,blockLen:i,isLE:s}=this;let{pos:o}=this;n[o++]=128,this.buffer.subarray(o).fill(0),this.padOffset>i-o&&(this.process(r,0),o=0);for(let u=o;u<i;u++)n[u]=0;ws(r,i-8,BigInt(this.length*8),s),this.process(r,0);const c=Vt(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");const l=a/4,f=this.get();if(l>f.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)c.setUint32(4*u,f[u],s)}digest(){const{buffer:t,outputLen:n}=this;this.digestInto(t);const r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:n,buffer:r,length:i,finished:s,destroyed:o,pos:c}=this;return t.length=i,t.pos=c,t.finished=s,t.destroyed=o,i%n&&t.buffer.set(r),t}}const vs=(e,t,n)=>e&t^~e&n,Es=(e,t,n)=>e&t^e&n^t&n,ms=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]),me=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),xe=new Uint32Array(64);class tr extends bs{constructor(){super(64,32,8,!1),this.A=me[0]|0,this.B=me[1]|0,this.C=me[2]|0,this.D=me[3]|0,this.E=me[4]|0,this.F=me[5]|0,this.G=me[6]|0,this.H=me[7]|0}get(){const{A:t,B:n,C:r,D:i,E:s,F:o,G:c,H:a}=this;return[t,n,r,i,s,o,c,a]}set(t,n,r,i,s,o,c,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=c|0,this.H=a|0}process(t,n){for(let u=0;u<16;u++,n+=4)xe[u]=t.getUint32(n,!1);for(let u=16;u<64;u++){const g=xe[u-15],b=xe[u-2],p=oe(g,7)^oe(g,18)^g>>>3,h=oe(b,17)^oe(b,19)^b>>>10;xe[u]=h+xe[u-7]+p+xe[u-16]|0}let{A:r,B:i,C:s,D:o,E:c,F:a,G:l,H:f}=this;for(let u=0;u<64;u++){const g=oe(c,6)^oe(c,11)^oe(c,25),b=f+g+vs(c,a,l)+ms[u]+xe[u]|0,h=(oe(r,2)^oe(r,13)^oe(r,22))+Es(r,i,s)|0;f=l,l=a,a=c,c=o+b|0,o=s,s=i,i=r,r=b+h|0}r=r+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,c=c+this.E|0,a=a+this.F|0,l=l+this.G|0,f=f+this.H|0,this.set(r,i,s,o,c,a,l,f)}roundClean(){xe.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class xs extends tr{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 le=Xn(()=>new tr);Xn(()=>new xs);/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */function He(e){if(!Number.isSafeInteger(e))throw new Error(`Wrong integer: ${e}`)}function fe(...e){const t=(i,s)=>o=>i(s(o)),n=Array.from(e).reverse().reduce((i,s)=>i?t(i,s.encode):s.encode,void 0),r=e.reduce((i,s)=>i?t(i,s.decode):s.decode,void 0);return{encode:n,decode:r}}function he(e){return{encode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return t.map(n=>{if(He(n),n<0||n>=e.length)throw new Error(`Digit index outside alphabet: ${n} (alphabet: ${e.length})`);return e[n]})},decode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="string")throw new Error("alphabet.decode input should be array of strings");return t.map(n=>{if(typeof n!="string")throw new Error(`alphabet.decode: not string element=${n}`);const r=e.indexOf(n);if(r===-1)throw new Error(`Unknown letter: "${n}". Allowed: ${e}`);return r})}}}function de(e=""){if(typeof e!="string")throw new Error("join separator should be string");return{encode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="string")throw new Error("join.encode input should be array of strings");for(let n of t)if(typeof n!="string")throw new Error(`join.encode: non-string input=${n}`);return t.join(e)},decode:t=>{if(typeof t!="string")throw new Error("join.decode input should be string");return t.split(e)}}}function ft(e,t="="){if(He(e),typeof t!="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*e%8;)n.push(t);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 i of n)if(typeof i!="string")throw new Error(`padding.decode: non-string input=${i}`);let r=n.length;if(r*e%8)throw new Error("Invalid padding: string should have whole number of bytes");for(;r>0&&n[r-1]===t;r--)if(!((r-1)*e%8))throw new Error("Invalid padding: string has too much padding");return n.slice(0,r)}}}function nr(e){if(typeof e!="function")throw new Error("normalize fn should be function");return{encode:t=>t,decode:t=>e(t)}}function rr(e,t,n){if(t<2)throw new Error(`convertRadix: wrong from=${t}, 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(e))throw new Error("convertRadix: data should be array");if(!e.length)return[];let r=0;const i=[],s=Array.from(e);for(s.forEach(o=>{if(He(o),o<0||o>=t)throw new Error(`Wrong integer: ${o}`)});;){let o=0,c=!0;for(let a=r;a<s.length;a++){const l=s[a],f=t*o+l;if(!Number.isSafeInteger(f)||t*o/t!==o||f-l!==t*o)throw new Error("convertRadix: carry overflow");if(o=f%n,s[a]=Math.floor(f/n),!Number.isSafeInteger(s[a])||s[a]*n+o!==f)throw new Error("convertRadix: carry overflow");if(c)s[a]?c=!1:r=a;else continue}if(i.push(o),c)break}for(let o=0;o<e.length-1&&e[o]===0;o++)i.push(0);return i.reverse()}const ir=(e,t)=>t?ir(t,e%t):e,ht=(e,t)=>e+(t-ir(e,t));function Zt(e,t,n,r){if(!Array.isArray(e))throw new Error("convertRadix2: data should be array");if(t<=0||t>32)throw new Error(`convertRadix2: wrong from=${t}`);if(n<=0||n>32)throw new Error(`convertRadix2: wrong to=${n}`);if(ht(t,n)>32)throw new Error(`convertRadix2: carry overflow from=${t} to=${n} carryBits=${ht(t,n)}`);let i=0,s=0;const o=2**n-1,c=[];for(const a of e){if(He(a),a>=2**t)throw new Error(`convertRadix2: invalid data word=${a} from=${t}`);if(i=i<<t|a,s+t>32)throw new Error(`convertRadix2: carry overflow pos=${s} from=${t}`);for(s+=t;s>=n;s-=n)c.push((i>>s-n&o)>>>0);i&=2**s-1}if(i=i<<n-s&o,!r&&s>=t)throw new Error("Excess padding");if(!r&&i)throw new Error(`Non-zero padding: ${i}`);return r&&s>0&&c.push(i>>>0),c}function Ss(e){return He(e),{encode:t=>{if(!(t instanceof Uint8Array))throw new Error("radix.encode input should be Uint8Array");return rr(Array.from(t),2**8,e)},decode:t=>{if(!Array.isArray(t)||t.length&&typeof t[0]!="number")throw new Error("radix.decode input should be array of strings");return Uint8Array.from(rr(t,e,2**8))}}}function Se(e,t=!1){if(He(e),e<=0||e>32)throw new Error("radix2: bits should be in (0..32]");if(ht(8,e)>32||ht(e,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 Zt(Array.from(n),8,e,!t)},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(Zt(n,e,8,t))}}}function sr(e){if(typeof e!="function")throw new Error("unsafeWrapper fn should be function");return function(...t){try{return e.apply(null,t)}catch{}}}const Ns=fe(Se(4),he("0123456789ABCDEF"),de("")),As=fe(Se(5),he("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),ft(5),de(""));fe(Se(5),he("0123456789ABCDEFGHIJKLMNOPQRSTUV"),ft(5),de("")),fe(Se(5),he("0123456789ABCDEFGHJKMNPQRSTVWXYZ"),de(""),nr(e=>e.toUpperCase().replace(/O/g,"0").replace(/[IL]/g,"1")));const pe=fe(Se(6),he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),ft(6),de("")),Ks=fe(Se(6),he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),ft(6),de("")),Gt=e=>fe(Ss(58),he(e),de("")),Ft=Gt("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");Gt("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"),Gt("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");const or=[0,2,3,5,6,7,9,10,11],Cs={encode(e){let t="";for(let n=0;n<e.length;n+=8){const r=e.subarray(n,n+8);t+=Ft.encode(r).padStart(or[r.length],"1")}return t},decode(e){let t=[];for(let n=0;n<e.length;n+=11){const r=e.slice(n,n+11),i=or.indexOf(r.length),s=Ft.decode(r);for(let o=0;o<s.length-i;o++)if(s[o]!==0)throw new Error("base58xmr: wrong padding");t=t.concat(Array.from(s.slice(s.length-i)))}return Uint8Array.from(t)}},Jt=fe(he("qpzry9x8gf2tvdw0s3jn54khce6mua7l"),de("")),ar=[996825010,642813549,513874426,1027748829,705979059];function Qe(e){const t=e>>25;let n=(e&33554431)<<5;for(let r=0;r<ar.length;r++)(t>>r&1)===1&&(n^=ar[r]);return n}function cr(e,t,n=1){const r=e.length;let i=1;for(let s=0;s<r;s++){const o=e.charCodeAt(s);if(o<33||o>126)throw new Error(`Invalid prefix (${e})`);i=Qe(i)^o>>5}i=Qe(i);for(let s=0;s<r;s++)i=Qe(i)^e.charCodeAt(s)&31;for(let s of t)i=Qe(i)^s;for(let s=0;s<6;s++)i=Qe(i);return i^=n,Jt.encode(Zt([i%2**30],30,5,!1))}function ur(e){const t=e==="bech32"?1:734539939,n=Se(5),r=n.decode,i=n.encode,s=sr(r);function o(f,u,g=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 b=f.length+7+u.length;if(g!==!1&&b>g)throw new TypeError(`Length ${b} exceeds limit ${g}`);return f=f.toLowerCase(),`${f}1${Jt.encode(u)}${cr(f,u,t)}`}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 g=f.toLowerCase();if(f!==g&&f!==f.toUpperCase())throw new Error("String must be lowercase or uppercase");f=g;const b=f.lastIndexOf("1");if(b===0||b===-1)throw new Error('Letter "1" must be present between prefix and data only');const p=f.slice(0,b),h=f.slice(b+1);if(h.length<6)throw new Error("Data must be at least 6 characters long");const d=Jt.decode(h).slice(0,-6),y=cr(p,d,t);if(!h.endsWith(y))throw new Error(`Invalid checksum in ${f}: expected "${y}"`);return{prefix:p,words:d}}const a=sr(c);function l(f){const{prefix:u,words:g}=c(f,!1);return{prefix:u,words:g,bytes:r(g)}}return{encode:o,decode:c,decodeToBytes:l,decodeUnsafe:a,fromWords:r,fromWordsUnsafe:s,toWords:i}}const qe=ur("bech32");ur("bech32m");const Bs={encode:e=>new TextDecoder().decode(e),decode:e=>new TextEncoder().encode(e)},ks=fe(Se(4),he("0123456789abcdef"),de(""),nr(e=>{if(typeof e!="string"||e.length%2)throw new TypeError(`hex.decode: expected string, got ${typeof e} with length ${e.length}`);return e.toLowerCase()}));`${Object.keys({utf8:Bs,hex:ks,base16:Ns,base32:As,base64:pe,base64url:Ks,base58:Ft,base58xmr:Cs}).join(", ")}`;function Yt(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`positive integer expected, not ${e}`)}function lr(e){if(typeof e!="boolean")throw new Error(`boolean expected, not ${e}`)}function _s(e){return e instanceof Uint8Array||e!=null&&typeof e=="object"&&e.constructor.name==="Uint8Array"}function ye(e,...t){if(!_s(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error(`Uint8Array expected of length ${t}, not of length=${e.length}`)}/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */const G=e=>new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4));if(!(new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68))throw new Error("Non little-endian hardware is not supported");function Is(e,t){if(t==null||typeof t!="object")throw new Error("options must be defined");return Object.assign(e,t)}function Us(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}const Ls=(e,t)=>(Object.assign(t,e),t),Ne=16,$s=283;function Xt(e){return e<<1^$s&-(e>>7)}function De(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=Xt(e);return n}const Qt=(()=>{let e=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Xt(r))e[n]=r;const t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return t})(),Ts=Qt.map((e,t)=>Qt.indexOf(t)),Rs=e=>e<<24|e>>>8,en=e=>e<<8|e>>>24;function fr(e,t){if(e.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((l,f)=>t(e[f])),r=n.map(en),i=r.map(en),s=i.map(en),o=new Uint32Array(256*256),c=new Uint32Array(256*256),a=new Uint16Array(256*256);for(let l=0;l<256;l++)for(let f=0;f<256;f++){const u=l*256+f;o[u]=n[l]^r[f],c[u]=i[l]^s[f],a[u]=e[l]<<8|e[f]}return{sbox:e,sbox2:a,T0:n,T1:r,T2:i,T3:s,T01:o,T23:c}}const tn=fr(Qt,e=>De(e,3)<<24|e<<16|e<<8|De(e,2)),hr=fr(Ts,e=>De(e,11)<<24|De(e,13)<<16|De(e,9)<<8|De(e,14)),Ms=(()=>{const e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=Xt(n))e[t]=n;return e})();function dr(e){ye(e);const t=e.length;if(![16,24,32].includes(t))throw new Error(`aes: wrong key size: should be 16, 24 or 32, got: ${t}`);const{sbox2:n}=tn,r=G(e),i=r.length,s=c=>ce(n,c,c,c,c),o=new Uint32Array(t+28);o.set(r);for(let c=i;c<o.length;c++){let a=o[c-1];c%i===0?a=s(Rs(a))^Ms[c/i-1]:i>6&&c%i===4&&(a=s(a)),o[c]=o[c-i]^a}return o}function Os(e){const t=dr(e),n=t.slice(),r=t.length,{sbox2:i}=tn,{T0:s,T1:o,T2:c,T3:a}=hr;for(let l=0;l<r;l+=4)for(let f=0;f<4;f++)n[l+f]=t[r-l-4+f];t.fill(0);for(let l=4;l<r-4;l++){const f=n[l],u=ce(i,f,f,f,f);n[l]=s[u&255]^o[u>>>8&255]^c[u>>>16&255]^a[u>>>24]}return n}function Ae(e,t,n,r,i,s){return e[n<<8&65280|r>>>8&255]^t[i>>>8&65280|s>>>24&255]}function ce(e,t,n,r,i){return e[t&255|n&65280]|e[r>>>16&255|i>>>16&65280]<<16}function pr(e,t,n,r,i){const{sbox2:s,T01:o,T23:c}=tn;let a=0;t^=e[a++],n^=e[a++],r^=e[a++],i^=e[a++];const l=e.length/4-2;for(let p=0;p<l;p++){const h=e[a++]^Ae(o,c,t,n,r,i),d=e[a++]^Ae(o,c,n,r,i,t),y=e[a++]^Ae(o,c,r,i,t,n),m=e[a++]^Ae(o,c,i,t,n,r);t=h,n=d,r=y,i=m}const f=e[a++]^ce(s,t,n,r,i),u=e[a++]^ce(s,n,r,i,t),g=e[a++]^ce(s,r,i,t,n),b=e[a++]^ce(s,i,t,n,r);return{s0:f,s1:u,s2:g,s3:b}}function Ps(e,t,n,r,i){const{sbox2:s,T01:o,T23:c}=hr;let a=0;t^=e[a++],n^=e[a++],r^=e[a++],i^=e[a++];const l=e.length/4-2;for(let p=0;p<l;p++){const h=e[a++]^Ae(o,c,t,i,r,n),d=e[a++]^Ae(o,c,n,t,i,r),y=e[a++]^Ae(o,c,r,n,t,i),m=e[a++]^Ae(o,c,i,r,n,t);t=h,n=d,r=y,i=m}const f=e[a++]^ce(s,t,i,r,n),u=e[a++]^ce(s,n,t,i,r),g=e[a++]^ce(s,r,n,t,i),b=e[a++]^ce(s,i,r,n,t);return{s0:f,s1:u,s2:g,s3:b}}function yr(e,t){if(!t)return new Uint8Array(e);if(ye(t),t.length<e)throw new Error(`aes: wrong destination length, expected at least ${e}, got: ${t.length}`);return t}function Hs(e){if(ye(e),e.length%Ne!==0)throw new Error(`aes/(cbc-ecb).decrypt ciphertext should consist of blocks with size ${Ne}`)}function qs(e,t,n){let r=e.length;const i=r%Ne;if(!t&&i!==0)throw new Error("aec/(cbc-ecb): unpadded plaintext with disabled padding");const s=G(e);if(t){let a=Ne-i;a||(a=Ne),r=r+a}const o=yr(r,n),c=G(o);return{b:s,o:c,out:o}}function Ds(e,t){if(!t)return e;const n=e.length;if(!n)throw new Error("aes/pcks5: empty ciphertext not allowed");const r=e[n-1];if(r<=0||r>16)throw new Error(`aes/pcks5: wrong padding byte: ${r}`);const i=e.subarray(0,-r);for(let s=0;s<r;s++)if(e[n-s-1]!==r)throw new Error("aes/pcks5: wrong padding");return i}function js(e){const t=new Uint8Array(16),n=G(t);t.set(e);const r=Ne-e.length;for(let i=Ne-r;i<Ne;i++)t[i]=r;return n}const gr=Ls({blockSize:16,nonceLength:16},function(t,n,r={}){ye(t),ye(n,16);const i=!r.disablePadding;return{encrypt:(s,o)=>{const c=dr(t),{b:a,o:l,out:f}=qs(s,i,o),u=G(n);let g=u[0],b=u[1],p=u[2],h=u[3],d=0;for(;d+4<=a.length;)g^=a[d+0],b^=a[d+1],p^=a[d+2],h^=a[d+3],{s0:g,s1:b,s2:p,s3:h}=pr(c,g,b,p,h),l[d++]=g,l[d++]=b,l[d++]=p,l[d++]=h;if(i){const y=js(s.subarray(d*4));g^=y[0],b^=y[1],p^=y[2],h^=y[3],{s0:g,s1:b,s2:p,s3:h}=pr(c,g,b,p,h),l[d++]=g,l[d++]=b,l[d++]=p,l[d++]=h}return c.fill(0),f},decrypt:(s,o)=>{Hs(s);const c=Os(t),a=G(n),l=yr(s.length,o),f=G(s),u=G(l);let g=a[0],b=a[1],p=a[2],h=a[3];for(let d=0;d+4<=f.length;){const y=g,m=b,A=p,I=h;g=f[d+0],b=f[d+1],p=f[d+2],h=f[d+3];const{s0:B,s1:E,s2:x,s3:S}=Ps(c,g,b,p,h);u[d++]=B^y,u[d++]=E^m,u[d++]=x^A,u[d++]=S^I}return c.fill(0),Ds(l,i)}}}),wr=e=>Uint8Array.from(e.split("").map(t=>t.charCodeAt(0))),zs=wr("expand 16-byte k"),Vs=wr("expand 32-byte k"),Ws=G(zs),br=G(Vs);br.slice();function U(e,t){return e<<t|e>>>32-t}function nn(e){return e.byteOffset%4===0}const dt=64,Zs=16,vr=2**32-1,Er=new Uint32Array;function Gs(e,t,n,r,i,s,o,c){const a=i.length,l=new Uint8Array(dt),f=G(l),u=nn(i)&&nn(s),g=u?G(i):Er,b=u?G(s):Er;for(let p=0;p<a;o++){if(e(t,n,r,f,o,c),o>=vr)throw new Error("arx: counter overflow");const h=Math.min(dt,a-p);if(u&&h===dt){const d=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,m;y<Zs;y++)m=d+y,b[m]=g[m]^f[y];p+=dt;continue}for(let d=0,y;d<h;d++)y=p+d,s[y]=i[y]^l[d];p+=h}}function Fs(e,t){const{allowShortKeys:n,extendNonceFn:r,counterLength:i,counterRight:s,rounds:o}=Is({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},t);if(typeof e!="function")throw new Error("core must be a function");return Yt(i),Yt(o),lr(s),lr(n),(c,a,l,f,u=0)=>{ye(c),ye(a),ye(l);const g=l.length;if(f||(f=new Uint8Array(g)),ye(f),Yt(u),u<0||u>=vr)throw new Error("arx: counter overflow");if(f.length<g)throw new Error(`arx: output (${f.length}) is shorter than data (${g})`);const b=[];let p=c.length,h,d;if(p===32)h=c.slice(),b.push(h),d=br;else if(p===16&&n)h=new Uint8Array(32),h.set(c),h.set(c,16),d=Ws,b.push(h);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);nn(a)||(a=a.slice(),b.push(a));const y=G(h);if(r){if(a.length!==24)throw new Error("arx: extended nonce must be 24 bytes");r(d,y,G(a.subarray(0,16)),y),a=a.subarray(16)}const m=16-i;if(m!==a.length)throw new Error(`arx: nonce must be ${m} or 16 bytes`);if(m!==12){const I=new Uint8Array(12);I.set(a,s?0:12-a.length),a=I,b.push(a)}const A=G(a);for(Gs(e,d,y,A,l,f,u,o);b.length>0;)b.pop().fill(0);return f}}function Js(e,t,n,r,i,s=20){let o=e[0],c=e[1],a=e[2],l=e[3],f=t[0],u=t[1],g=t[2],b=t[3],p=t[4],h=t[5],d=t[6],y=t[7],m=i,A=n[0],I=n[1],B=n[2],E=o,x=c,S=a,P=l,_=f,K=u,R=g,M=b,j=p,w=h,v=d,N=y,k=m,C=A,L=I,O=B;for(let ne=0;ne<s;ne+=2)E=E+_|0,k=U(k^E,16),j=j+k|0,_=U(_^j,12),E=E+_|0,k=U(k^E,8),j=j+k|0,_=U(_^j,7),x=x+K|0,C=U(C^x,16),w=w+C|0,K=U(K^w,12),x=x+K|0,C=U(C^x,8),w=w+C|0,K=U(K^w,7),S=S+R|0,L=U(L^S,16),v=v+L|0,R=U(R^v,12),S=S+R|0,L=U(L^S,8),v=v+L|0,R=U(R^v,7),P=P+M|0,O=U(O^P,16),N=N+O|0,M=U(M^N,12),P=P+M|0,O=U(O^P,8),N=N+O|0,M=U(M^N,7),E=E+K|0,O=U(O^E,16),v=v+O|0,K=U(K^v,12),E=E+K|0,O=U(O^E,8),v=v+O|0,K=U(K^v,7),x=x+R|0,k=U(k^x,16),N=N+k|0,R=U(R^N,12),x=x+R|0,k=U(k^x,8),N=N+k|0,R=U(R^N,7),S=S+M|0,C=U(C^S,16),j=j+C|0,M=U(M^j,12),S=S+M|0,C=U(C^S,8),j=j+C|0,M=U(M^j,7),P=P+_|0,L=U(L^P,16),w=w+L|0,_=U(_^w,12),P=P+_|0,L=U(L^P,8),w=w+L|0,_=U(_^w,7);let $=0;r[$++]=o+E|0,r[$++]=c+x|0,r[$++]=a+S|0,r[$++]=l+P|0,r[$++]=f+_|0,r[$++]=u+K|0,r[$++]=g+R|0,r[$++]=b+M|0,r[$++]=p+j|0,r[$++]=h+w|0,r[$++]=d+v|0,r[$++]=y+N|0,r[$++]=m+k|0,r[$++]=A+C|0,r[$++]=I+L|0,r[$++]=B+O|0}const mr=Fs(Js,{counterRight:!1,counterLength:4,allowShortKeys:!1});class xr extends Yn{constructor(t,n){super(),this.finished=!1,this.destroyed=!1,ae.hash(t);const r=Xe(n);if(this.iHash=t.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 i=this.blockLen,s=new Uint8Array(i);s.set(r.length>i?t.create().update(r).digest():r);for(let o=0;o<s.length;o++)s[o]^=54;this.iHash.update(s),this.oHash=t.create();for(let o=0;o<s.length;o++)s[o]^=106;this.oHash.update(s),s.fill(0)}update(t){return ae.exists(this),this.iHash.update(t),this}digestInto(t){ae.exists(this),ae.bytes(t,this.outputLen),this.finished=!0,this.iHash.digestInto(t),this.oHash.update(t),this.oHash.digestInto(t),this.destroy()}digest(){const t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||(t=Object.create(Object.getPrototypeOf(this),{}));const{oHash:n,iHash:r,finished:i,destroyed:s,blockLen:o,outputLen:c}=this;return t=t,t.finished=i,t.destroyed=s,t.blockLen=o,t.outputLen=c,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const pt=(e,t,n)=>new xr(e,t).update(n).digest();pt.create=(e,t)=>new xr(e,t);function rn(e,t,n){return ae.hash(e),n===void 0&&(n=new Uint8Array(e.outputLen)),pt(e,Xe(n),Xe(t))}const sn=new Uint8Array([0]),Sr=new Uint8Array;function Nr(e,t,n,r=32){if(ae.hash(e),ae.number(r),r>255*e.outputLen)throw new Error("Length should be <= 255*HashLen");const i=Math.ceil(r/e.outputLen);n===void 0&&(n=Sr);const s=new Uint8Array(i*e.outputLen),o=pt.create(e,t),c=o._cloneInto(),a=new Uint8Array(o.outputLen);for(let l=0;l<i;l++)sn[0]=l+1,c.update(l===0?Sr:a).update(n).update(sn).digestInto(a),s.set(a,e.outputLen*l),o._cloneInto(c);return o.destroy(),c.destroy(),a.fill(0),sn.fill(0),s.slice(0,r)}var Ys=Object.defineProperty,q=(e,t)=>{for(var n in t)Ys(e,n,{get:t[n],enumerable:!0})},je=Symbol("verified"),Xs=e=>e instanceof Object;function yt(e){if(!Xs(e)||typeof e.kind!="number"||typeof e.content!="string"||typeof e.created_at!="number"||typeof e.pubkey!="string"||!e.pubkey.match(/^[a-f0-9]{64}$/)||!Array.isArray(e.tags))return!1;for(let t=0;t<e.tags.length;t++){let n=e.tags[t];if(!Array.isArray(n))return!1;for(let r=0;r<n.length;r++)if(typeof n[r]=="object")return!1}return!0}var Qs={};q(Qs,{Queue:()=>ro,QueueNode:()=>Ar,binarySearch:()=>on,insertEventIntoAscendingList:()=>no,insertEventIntoDescendingList:()=>to,normalizeURL:()=>eo,utf8Decoder:()=>ge,utf8Encoder:()=>te});var ge=new TextDecoder("utf-8"),te=new TextEncoder;function eo(e){e.indexOf("://")===-1&&(e="wss://"+e);let t=new URL(e);return t.pathname=t.pathname.replace(/\/+/g,"/"),t.pathname.endsWith("/")&&(t.pathname=t.pathname.slice(0,-1)),(t.port==="80"&&t.protocol==="ws:"||t.port==="443"&&t.protocol==="wss:")&&(t.port=""),t.searchParams.sort(),t.hash="",t.toString()}function to(e,t){const[n,r]=on(e,i=>t.id===i.id?0:t.created_at===i.created_at?-1:i.created_at-t.created_at);return r||e.splice(n,0,t),e}function no(e,t){const[n,r]=on(e,i=>t.id===i.id?0:t.created_at===i.created_at?-1:t.created_at-i.created_at);return r||e.splice(n,0,t),e}function on(e,t){let n=0,r=e.length-1;for(;n<=r;){const i=Math.floor((n+r)/2),s=t(e[i]);if(s===0)return[i,!0];s<0?r=i-1:n=i+1}return[n,!1]}var Ar=class{constructor(e){ie(this,"value");ie(this,"next",null);ie(this,"prev",null);this.value=e}},ro=class{constructor(){ie(this,"first");ie(this,"last");this.first=null,this.last=null}enqueue(e){const t=new Ar(e);return this.last?this.last===this.first?(this.last=t,this.last.prev=this.first,this.first.next=t):(t.prev=this.last,this.last.next=t,this.last=t):(this.first=t,this.last=t),!0}dequeue(){if(!this.first)return null;if(this.first===this.last){const t=this.first;return this.first=null,this.last=null,t.value}const e=this.first;return this.first=e.next,e.value}},io=class{generateSecretKey(){return Ye.utils.randomPrivateKey()}getPublicKey(e){return T(Ye.getPublicKey(e))}finalizeEvent(e,t){const n=e;return n.pubkey=T(Ye.getPublicKey(t)),n.id=ze(n),n.sig=T(Ye.sign(ze(n),t)),n[je]=!0,n}verifyEvent(e){if(typeof e[je]=="boolean")return e[je];const t=ze(e);if(t!==e.id)return e[je]=!1,!1;try{const n=Ye.verify(e.sig,t,e.pubkey);return e[je]=n,n}catch{return e[je]=!1,!1}}};function so(e){if(!yt(e))throw new Error("can't serialize event with wrong or missing properties");return JSON.stringify([0,e.pubkey,e.created_at,e.kind,e.tags,e.content])}function ze(e){let t=le(te.encode(so(e)));return T(t)}var gt=new io,$e=gt.generateSecretKey,we=gt.getPublicKey,ee=gt.finalizeEvent,wt=gt.verifyEvent,oo={};q(oo,{Application:()=>ua,BadgeAward:()=>go,BadgeDefinition:()=>na,BlockedRelaysList:()=>Ho,BookmarkList:()=>Mo,Bookmarksets:()=>Qo,Calendar:()=>ga,CalendarEventRSVP:()=>wa,ChannelCreation:()=>Ir,ChannelHideMessage:()=>$r,ChannelMessage:()=>Lr,ChannelMetadata:()=>Ur,ChannelMuteUser:()=>Tr,ClassifiedListing:()=>ha,ClientAuth:()=>Mr,CommunitiesList:()=>Oo,CommunityDefinition:()=>Ea,CommunityPostApproval:()=>Ko,Contacts:()=>ho,CreateOrUpdateProduct:()=>sa,CreateOrUpdateStall:()=>ia,Curationsets:()=>ea,Date:()=>pa,DirectMessageRelaysList:()=>zo,DraftClassifiedListing:()=>da,DraftLong:()=>aa,Emojisets:()=>ca,EncryptedDirectMessage:()=>po,EventDeletion:()=>yo,FileMetadata:()=>Eo,FileServerPreference:()=>Vo,Followsets:()=>Jo,GenericRepost:()=>bo,Genericlists:()=>Yo,GiftWrap:()=>Rr,HTTPAuth:()=>un,Handlerinformation:()=>va,Handlerrecommendation:()=>ba,Highlights:()=>Lo,InterestsList:()=>Do,Interestsets:()=>ra,JobFeedback:()=>ko,JobRequest:()=>Co,JobResult:()=>Bo,Label:()=>Ao,LightningPubRPC:()=>Zo,LiveChatMessage:()=>mo,LiveEvent:()=>la,LongFormArticle:()=>oa,Metadata:()=>uo,Mutelist:()=>$o,NWCWalletInfo:()=>Wo,NWCWalletRequest:()=>Or,NWCWalletResponse:()=>Go,NostrConnect:()=>Fo,OpenTimestamps:()=>vo,Pinlist:()=>To,PrivateDirectMessage:()=>wo,ProblemTracker:()=>xo,ProfileBadges:()=>ta,PublicChatsList:()=>Po,Reaction:()=>cn,RecommendRelay:()=>fo,RelayList:()=>Ro,Relaysets:()=>Xo,Report:()=>So,Reporting:()=>No,Repost:()=>an,Seal:()=>_r,SearchRelaysList:()=>qo,ShortTextNote:()=>lo,Time:()=>ya,UserEmojiList:()=>jo,UserStatuses:()=>fa,Zap:()=>Uo,ZapGoal:()=>_o,ZapRequest:()=>Io,classifyKind:()=>ao,isEphemeralKind:()=>Br,isKind:()=>co,isParameterizedReplaceableKind:()=>kr,isRegularKind:()=>Kr,isReplaceableKind:()=>Cr});function Kr(e){return 1e3<=e&&e<1e4||[1,2,4,5,6,7,8,16,40,41,42,43,44].includes(e)}function Cr(e){return[0,3].includes(e)||1e4<=e&&e<2e4}function Br(e){return 2e4<=e&&e<3e4}function kr(e){return 3e4<=e&&e<4e4}function ao(e){return Kr(e)?"regular":Cr(e)?"replaceable":Br(e)?"ephemeral":kr(e)?"parameterized":"unknown"}function co(e,t){const n=t instanceof Array?t:[t];return yt(e)&&n.includes(e.kind)||!1}var uo=0,lo=1,fo=2,ho=3,po=4,yo=5,an=6,cn=7,go=8,_r=13,wo=14,bo=16,Ir=40,Ur=41,Lr=42,$r=43,Tr=44,vo=1040,Rr=1059,Eo=1063,mo=1311,xo=1971,So=1984,No=1984,Ao=1985,Ko=4550,Co=5999,Bo=6999,ko=7e3,_o=9041,Io=9734,Uo=9735,Lo=9802,$o=1e4,To=10001,Ro=10002,Mo=10003,Oo=10004,Po=10005,Ho=10006,qo=10007,Do=10015,jo=10030,zo=10050,Vo=10096,Wo=13194,Zo=21e3,Mr=22242,Or=23194,Go=23195,Fo=24133,un=27235,Jo=3e4,Yo=30001,Xo=30002,Qo=30003,ea=30004,ta=30008,na=30009,ra=30015,ia=30017,sa=30018,oa=30023,aa=30024,ca=30030,ua=30078,la=30311,fa=30315,ha=30402,da=30403,pa=31922,ya=31923,ga=31924,wa=31925,ba=31989,va=31990,Ea=34550,ma={};q(ma,{getHex64:()=>ln,getInt:()=>Pr,getSubscriptionId:()=>xa,matchEventId:()=>Sa,matchEventKind:()=>Aa,matchEventPubkey:()=>Na});function ln(e,t){let n=t.length+3,r=e.indexOf(`"${t}":`)+n,i=e.slice(r).indexOf('"')+r+1;return e.slice(i,i+64)}function Pr(e,t){let n=t.length,r=e.indexOf(`"${t}":`)+n+3,i=e.slice(r),s=Math.min(i.indexOf(","),i.indexOf("}"));return parseInt(i.slice(0,s),10)}function xa(e){let t=e.slice(0,22).indexOf('"EVENT"');if(t===-1)return null;let n=e.slice(t+7+1).indexOf('"');if(n===-1)return null;let r=t+7+1+n,i=e.slice(r+1,80).indexOf('"');if(i===-1)return null;let s=r+1+i;return e.slice(r+1,s)}function Sa(e,t){return t===ln(e,"id")}function Na(e,t){return t===ln(e,"pubkey")}function Aa(e,t){return t===Pr(e,"kind")}var Ka={};q(Ka,{makeAuthEvent:()=>Ca});function Ca(e,t){return{kind:Mr,created_at:Math.floor(Date.now()/1e3),tags:[["relay",e],["challenge",t]],content:""}}var Ba;try{Ba=WebSocket}catch{}var ka;try{ka=WebSocket}catch{}var _a={};q(_a,{BECH32_REGEX:()=>Hr,Bech32MaxSize:()=>fn,NostrTypeGuard:()=>Ia,decode:()=>bt,encodeBytes:()=>Et,naddrEncode:()=>Oa,neventEncode:()=>Ma,noteEncode:()=>Ta,nprofileEncode:()=>Ra,npubEncode:()=>$a,nsecEncode:()=>La});var Ia={isNProfile:e=>/^nprofile1[a-z\d]+$/.test(e||""),isNEvent:e=>/^nevent1[a-z\d]+$/.test(e||""),isNAddr:e=>/^naddr1[a-z\d]+$/.test(e||""),isNSec:e=>/^nsec1[a-z\d]{58}$/.test(e||""),isNPub:e=>/^npub1[a-z\d]{58}$/.test(e||""),isNote:e=>/^note1[a-z\d]+$/.test(e||""),isNcryptsec:e=>/^ncryptsec1[a-z\d]+$/.test(e||"")},fn=5e3,Hr=/[\x21-\x7E]{1,83}1[023456789acdefghjklmnpqrstuvwxyz]{6,}/;function Ua(e){const t=new Uint8Array(4);return t[0]=e>>24&255,t[1]=e>>16&255,t[2]=e>>8&255,t[3]=e&255,t}function bt(e){var i,s,o,c,a,l,f;let{prefix:t,words:n}=qe.decode(e,fn),r=new Uint8Array(qe.fromWords(n));switch(t){case"nprofile":{let u=hn(r);if(!((i=u[0])!=null&&i[0]))throw new Error("missing TLV 0 for nprofile");if(u[0][0].length!==32)throw new Error("TLV 0 should be 32 bytes");return{type:"nprofile",data:{pubkey:T(u[0][0]),relays:u[1]?u[1].map(g=>ge.decode(g)):[]}}}case"nevent":{let u=hn(r);if(!((s=u[0])!=null&&s[0]))throw new Error("missing TLV 0 for nevent");if(u[0][0].length!==32)throw new Error("TLV 0 should be 32 bytes");if(u[2]&&u[2][0].length!==32)throw new Error("TLV 2 should be 32 bytes");if(u[3]&&u[3][0].length!==4)throw new Error("TLV 3 should be 4 bytes");return{type:"nevent",data:{id:T(u[0][0]),relays:u[1]?u[1].map(g=>ge.decode(g)):[],author:(o=u[2])!=null&&o[0]?T(u[2][0]):void 0,kind:(c=u[3])!=null&&c[0]?parseInt(T(u[3][0]),16):void 0}}}case"naddr":{let u=hn(r);if(!((a=u[0])!=null&&a[0]))throw new Error("missing TLV 0 for naddr");if(!((l=u[2])!=null&&l[0]))throw new Error("missing TLV 2 for naddr");if(u[2][0].length!==32)throw new Error("TLV 2 should be 32 bytes");if(!((f=u[3])!=null&&f[0]))throw new Error("missing TLV 3 for naddr");if(u[3][0].length!==4)throw new Error("TLV 3 should be 4 bytes");return{type:"naddr",data:{identifier:ge.decode(u[0][0]),pubkey:T(u[2][0]),kind:parseInt(T(u[3][0]),16),relays:u[1]?u[1].map(g=>ge.decode(g)):[]}}}case"nsec":return{type:t,data:r};case"npub":case"note":return{type:t,data:T(r)};default:throw new Error(`unknown prefix ${t}`)}}function hn(e){let t={},n=e;for(;n.length>0;){let r=n[0],i=n[1],s=n.slice(2,2+i);if(n=n.slice(2+i),s.length<i)throw new Error(`not enough data to read on TLV ${r}`);t[r]=t[r]||[],t[r].push(s)}return t}function La(e){return Et("nsec",e)}function $a(e){return Et("npub",F(e))}function Ta(e){return Et("note",F(e))}function vt(e,t){let n=qe.toWords(t);return qe.encode(e,n,fn)}function Et(e,t){return vt(e,t)}function Ra(e){let t=dn({0:[F(e.pubkey)],1:(e.relays||[]).map(n=>te.encode(n))});return vt("nprofile",t)}function Ma(e){let t;e.kind!==void 0&&(t=Ua(e.kind));let n=dn({0:[F(e.id)],1:(e.relays||[]).map(r=>te.encode(r)),2:e.author?[F(e.author)]:[],3:t?[new Uint8Array(t)]:[]});return vt("nevent",n)}function Oa(e){let t=new ArrayBuffer(4);new DataView(t).setUint32(0,e.kind,!1);let n=dn({0:[te.encode(e.identifier)],1:(e.relays||[]).map(r=>te.encode(r)),2:[F(e.pubkey)],3:[new Uint8Array(t)]});return vt("naddr",n)}function dn(e){let t=[];return Object.entries(e).reverse().forEach(([n,r])=>{r.forEach(i=>{let s=new Uint8Array(i.length+2);s.set([parseInt(n)],0),s.set([i.length],1),s.set(i,2),t.push(s)})}),lt(...t)}var Pa={};q(Pa,{decrypt:()=>Ha,encrypt:()=>qr});async function qr(e,t,n){const r=e instanceof Uint8Array?T(e):e,i=Le.getSharedSecret(r,"02"+t),s=Dr(i);let o=Uint8Array.from(Qn(16)),c=te.encode(n),a=gr(s,o).encrypt(c),l=pe.encode(new Uint8Array(a)),f=pe.encode(new Uint8Array(o.buffer));return`${l}?iv=${f}`}async function Ha(e,t,n){const r=e instanceof Uint8Array?T(e):e;let[i,s]=n.split("?iv="),o=Le.getSharedSecret(r,"02"+t),c=Dr(o),a=pe.decode(s),l=pe.decode(i),f=gr(c,a).decrypt(l);return ge.decode(f)}function Dr(e){return e.slice(1,33)}var qa={};q(qa,{NIP05_REGEX:()=>pn,isNip05:()=>Da,isValid:()=>Va,queryProfile:()=>jr,searchDomain:()=>za,useFetchImplementation:()=>ja});var pn=/^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,Da=e=>pn.test(e||""),mt;try{mt=fetch}catch{}function ja(e){mt=e}async function za(e,t=""){try{const n=`https://${e}/.well-known/nostr.json?name=${t}`,r=await mt(n,{redirect:"manual"});if(r.status!==200)throw Error("Wrong response code");return(await r.json()).names}catch{return{}}}async function jr(e){var i;const t=e.match(pn);if(!t)return null;const[,n="_",r]=t;try{const s=`https://${r}/.well-known/nostr.json?name=${n}`,o=await mt(s,{redirect:"manual"});if(o.status!==200)throw Error("Wrong response code");const c=await o.json(),a=c.names[n];return a?{pubkey:a,relays:(i=c.relays)==null?void 0:i[a]}:null}catch{return null}}async function Va(e,t){const n=await jr(t);return n?n.pubkey===e:!1}var Wa={};q(Wa,{parse:()=>Za});function Za(e){const t={reply:void 0,root:void 0,mentions:[],profiles:[],quotes:[]};let n,r;for(let i=e.tags.length-1;i>=0;i--){const s=e.tags[i];if(s[0]==="e"&&s[1]){const[o,c,a,l,f]=s,u={id:c,relays:a?[a]:[],author:f};if(l==="root"){t.root=u;continue}if(l==="reply"){t.reply=u;continue}if(l==="mention"){t.mentions.push(u);continue}n?r=u:n=u,t.mentions.push(u);continue}if(s[0]==="q"&&s[1]){const[o,c,a]=s;t.quotes.push({id:c,relays:a?[a]:[]})}if(s[0]==="p"&&s[1]){t.profiles.push({pubkey:s[1],relays:s[2]?[s[2]]:[]});continue}}return t.root||(t.root=r||n||t.reply),t.reply||(t.reply=n||t.root),[t.reply,t.root].forEach(i=>{if(!i)return;let s=t.mentions.indexOf(i);if(s!==-1&&t.mentions.splice(s,1),i.author){let o=t.profiles.find(c=>c.pubkey===i.author);o&&o.relays&&(i.relays||(i.relays=[]),o.relays.forEach(c=>{var a;((a=i.relays)==null?void 0:a.indexOf(c))===-1&&i.relays.push(c)}),o.relays=i.relays)}}),t.mentions.forEach(i=>{if(i.author){let s=t.profiles.find(o=>o.pubkey===i.author);s&&s.relays&&(i.relays||(i.relays=[]),s.relays.forEach(o=>{i.relays.indexOf(o)===-1&&i.relays.push(o)}),s.relays=i.relays)}}),t}var Ga={};q(Ga,{fetchRelayInformation:()=>Ja,useFetchImplementation:()=>Fa});var zr;try{zr=fetch}catch{}function Fa(e){zr=e}async function Ja(e){return await(await fetch(e.replace("ws://","http://").replace("wss://","https://"),{headers:{Accept:"application/nostr+json"}})).json()}var Ya={};q(Ya,{fastEventHash:()=>Wr,getPow:()=>Vr,minePow:()=>Xa});function Vr(e){let t=0;for(let n=0;n<64;n+=8){const r=parseInt(e.substring(n,n+8),16);if(r===0)t+=32;else{t+=Math.clz32(r);break}}return t}function Xa(e,t){let n=0;const r=e,i=["nonce",n.toString(),t.toString()];for(r.tags.push(i);;){const s=Math.floor(new Date().getTime()/1e3);if(s!==r.created_at&&(n=0,r.created_at=s),i[1]=(++n).toString(),r.id=Wr(r),Vr(r.id)>=t)break}return r}function Wr(e){return T(le(te.encode(JSON.stringify([0,e.pubkey,e.created_at,e.kind,e.tags,e.content]))))}var Qa={};q(Qa,{finishRepostEvent:()=>ec,getRepostedEvent:()=>tc,getRepostedEventPointer:()=>Zr});function ec(e,t,n,r){return ee({kind:an,tags:[...e.tags??[],["e",t.id,n],["p",t.pubkey]],content:e.content===""?"":JSON.stringify(t),created_at:e.created_at},r)}function Zr(e){if(e.kind!==an)return;let t,n;for(let r=e.tags.length-1;r>=0&&(t===void 0||n===void 0);r--){const i=e.tags[r];i.length>=2&&(i[0]==="e"&&t===void 0?t=i:i[0]==="p"&&n===void 0&&(n=i))}if(t!==void 0)return{id:t[1],relays:[t[2],n==null?void 0:n[2]].filter(r=>typeof r=="string"),author:n==null?void 0:n[1]}}function tc(e,{skipVerification:t}={}){const n=Zr(e);if(n===void 0||e.content==="")return;let r;try{r=JSON.parse(e.content)}catch{return}if(r.id===n.id&&!(!t&&!wt(r)))return r}var nc={};q(nc,{NOSTR_URI_REGEX:()=>xt,parse:()=>ic,test:()=>rc});var xt=new RegExp(`nostr:(${Hr.source})`);function rc(e){return typeof e=="string"&&new RegExp(`^${xt.source}$`).test(e)}function ic(e){const t=e.match(new RegExp(`^${xt.source}$`));if(!t)throw new Error(`Invalid Nostr URI: ${e}`);return{uri:t[0],value:t[1],decoded:bt(t[1])}}var sc={};q(sc,{finishReactionEvent:()=>oc,getReactedEventPointer:()=>ac});function oc(e,t,n){const r=t.tags.filter(i=>i.length>=2&&(i[0]==="e"||i[0]==="p"));return ee({...e,kind:cn,tags:[...e.tags??[],...r,["e",t.id],["p",t.pubkey]],content:e.content??"+"},n)}function ac(e){if(e.kind!==cn)return;let t,n;for(let r=e.tags.length-1;r>=0&&(t===void 0||n===void 0);r--){const i=e.tags[r];i.length>=2&&(i[0]==="e"&&t===void 0?t=i:i[0]==="p"&&n===void 0&&(n=i))}if(!(t===void 0||n===void 0))return{id:t[1],relays:[t[2],n[2]].filter(r=>r!==void 0),author:n[1]}}var cc={};q(cc,{matchAll:()=>uc,regex:()=>yn,replaceAll:()=>lc});var yn=()=>new RegExp(`\\b${xt.source}\\b`,"g");function*uc(e){const t=e.matchAll(yn());for(const n of t)try{const[r,i]=n;yield{uri:r,value:i,decoded:bt(i),start:n.index,end:n.index+r.length}}catch{}}function lc(e,t){return e.replaceAll(yn(),(n,r)=>t({uri:n,value:r,decoded:bt(r)}))}var fc={};q(fc,{channelCreateEvent:()=>hc,channelHideMessageEvent:()=>yc,channelMessageEvent:()=>pc,channelMetadataEvent:()=>dc,channelMuteUserEvent:()=>gc});var hc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:Ir,tags:[...e.tags??[]],content:n,created_at:e.created_at},t)},dc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:Ur,tags:[["e",e.channel_create_event_id],...e.tags??[]],content:n,created_at:e.created_at},t)},pc=(e,t)=>{const n=[["e",e.channel_create_event_id,e.relay_url,"root"]];return e.reply_to_channel_message_event_id&&n.push(["e",e.reply_to_channel_message_event_id,e.relay_url,"reply"]),ee({kind:Lr,tags:[...n,...e.tags??[]],content:e.content,created_at:e.created_at},t)},yc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:$r,tags:[["e",e.channel_message_event_id],...e.tags??[]],content:n,created_at:e.created_at},t)},gc=(e,t)=>{let n;if(typeof e.content=="object")n=JSON.stringify(e.content);else if(typeof e.content=="string")n=e.content;else return;return ee({kind:Tr,tags:[["p",e.pubkey_to_mute],...e.tags??[]],content:n,created_at:e.created_at},t)},wc={};q(wc,{EMOJI_SHORTCODE_REGEX:()=>Gr,matchAll:()=>bc,regex:()=>gn,replaceAll:()=>vc});var Gr=/:(\w+):/,gn=()=>new RegExp(`\\B${Gr.source}\\B`,"g");function*bc(e){const t=e.matchAll(gn());for(const n of t)try{const[r,i]=n;yield{shortcode:r,name:i,start:n.index,end:n.index+r.length}}catch{}}function vc(e,t){return e.replaceAll(gn(),(n,r)=>t({shortcode:n,name:r}))}var Ec={};q(Ec,{useFetchImplementation:()=>mc,validateGithub:()=>xc});var wn;try{wn=fetch}catch{}function mc(e){wn=e}async function xc(e,t,n){try{return await(await wn(`https://gist.github.com/${t}/${n}/raw`)).text()===`Verifying that I control the following Nostr public key: ${e}`}catch{return!1}}var D={};q(D,{decrypt:()=>mn,encrypt:()=>En,getConversationKey:()=>bn,v2:()=>Cc});var Fr=1,Jr=65535;function bn(e,t){const n=Le.getSharedSecret(e,"02"+t).subarray(1,33);return rn(le,n,"nip44-v2")}function Yr(e,t){const n=Nr(le,e,t,76);return{chacha_key:n.subarray(0,32),chacha_nonce:n.subarray(32,44),hmac_key:n.subarray(44,76)}}function vn(e){if(!Number.isSafeInteger(e)||e<1)throw new Error("expected positive integer");if(e<=32)return 32;const t=1<<Math.floor(Math.log2(e-1))+1,n=t<=256?32:t/8;return n*(Math.floor((e-1)/n)+1)}function Sc(e){if(!Number.isSafeInteger(e)||e<Fr||e>Jr)throw new Error("invalid plaintext size: must be between 1 and 65535 bytes");const t=new Uint8Array(2);return new DataView(t.buffer).setUint16(0,e,!1),t}function Nc(e){const t=te.encode(e),n=t.length,r=Sc(n),i=new Uint8Array(vn(n)-n);return lt(r,t,i)}function Ac(e){const t=new DataView(e.buffer).getUint16(0),n=e.subarray(2,2+t);if(t<Fr||t>Jr||n.length!==t||e.length!==2+vn(t))throw new Error("invalid padding");return ge.decode(n)}function Xr(e,t,n){if(n.length!==32)throw new Error("AAD associated data must be 32 bytes");const r=lt(n,t);return pt(le,e,r)}function Kc(e){if(typeof e!="string")throw new Error("payload must be a valid string");const t=e.length;if(t<132||t>87472)throw new Error("invalid payload length: "+t);if(e[0]==="#")throw new Error("unknown encryption version");let n;try{n=pe.decode(e)}catch(s){throw new Error("invalid base64: "+s.message)}const r=n.length;if(r<99||r>65603)throw new Error("invalid data length: "+r);const i=n[0];if(i!==2)throw new Error("unknown encryption version "+i);return{nonce:n.subarray(1,33),ciphertext:n.subarray(33,-32),mac:n.subarray(-32)}}function En(e,t,n=Qn(32)){const{chacha_key:r,chacha_nonce:i,hmac_key:s}=Yr(t,n),o=Nc(e),c=mr(r,i,o),a=Xr(s,c,n);return pe.encode(lt(new Uint8Array([2]),n,c,a))}function mn(e,t){const{nonce:n,ciphertext:r,mac:i}=Kc(e),{chacha_key:s,chacha_nonce:o,hmac_key:c}=Yr(t,n),a=Xr(c,r,n);if(!Us(a,i))throw new Error("invalid MAC");const l=mr(s,o,r);return Ac(l)}var Cc={utils:{getConversationKey:bn,calcPaddedLen:vn},encrypt:En,decrypt:mn},Bc={};q(Bc,{makeNwcRequestEvent:()=>_c,parseConnectionString:()=>kc});function kc(e){const{pathname:t,searchParams:n}=new URL(e),r=t,i=n.get("relay"),s=n.get("secret");if(!r||!i||!s)throw new Error("invalid connection string");return{pubkey:r,relay:i,secret:s}}async function _c(e,t,n){const i=await qr(t,e,JSON.stringify({method:"pay_invoice",params:{invoice:n}})),s={kind:Or,created_at:Math.round(Date.now()/1e3),content:i,tags:[["p",e]]};return ee(s,t)}var Ic={};q(Ic,{getZapEndpoint:()=>Lc,makeZapReceipt:()=>Rc,makeZapRequest:()=>$c,useFetchImplementation:()=>Uc,validateZapRequest:()=>Tc});var xn;try{xn=fetch}catch{}function Uc(e){xn=e}async function Lc(e){try{let t="",{lud06:n,lud16:r}=JSON.parse(e.content);if(n){let{words:o}=qe.decode(n,1e3),c=qe.fromWords(o);t=ge.decode(c)}else if(r){let[o,c]=r.split("@");t=new URL(`/.well-known/lnurlp/${o}`,`https://${c}`).toString()}else return null;let s=await(await xn(t)).json();if(s.allowsNostr&&s.nostrPubkey)return s.callback}catch{}return null}function $c({profile:e,event:t,amount:n,relays:r,comment:i=""}){if(!n)throw new Error("amount not given");if(!e)throw new Error("profile not given");let s={kind:9734,created_at:Math.round(Date.now()/1e3),content:i,tags:[["p",e],["amount",n.toString()],["relays",...r]]};return t&&s.tags.push(["e",t]),s}function Tc(e){let t;try{t=JSON.parse(e)}catch{return"Invalid zap request JSON."}if(!yt(t))return"Zap request is not a valid Nostr event.";if(!wt(t))return"Invalid signature on zap request.";let n=t.tags.find(([s,o])=>s==="p"&&o);if(!n)return"Zap request doesn't have a 'p' tag.";if(!n[1].match(/^[a-f0-9]{64}$/))return"Zap request 'p' tag is not valid hex.";let r=t.tags.find(([s,o])=>s==="e"&&o);return r&&!r[1].match(/^[a-f0-9]{64}$/)?"Zap request 'e' tag is not valid hex.":t.tags.find(([s,o])=>s==="relays"&&o)?null:"Zap request doesn't have a 'relays' tag."}function Rc({zapRequest:e,preimage:t,bolt11:n,paidAt:r}){let i=JSON.parse(e),s=i.tags.filter(([c])=>c==="e"||c==="p"||c==="a"),o={kind:9735,created_at:Math.round(r.getTime()/1e3),content:"",tags:[...s,["P",i.pubkey],["bolt11",n],["description",e]]};return t&&o.tags.push(["preimage",t]),o}var Mc={};q(Mc,{createRumor:()=>ii,createSeal:()=>si,createWrap:()=>oi,unwrapEvent:()=>ai,unwrapManyEvents:()=>Hc,wrapEvent:()=>Sn,wrapManyEvents:()=>Pc});var Oc=2*24*60*60,Qr=()=>Math.round(Date.now()/1e3),ei=()=>Math.round(Qr()-Math.random()*Oc),ti=(e,t)=>bn(e,t),ni=(e,t,n)=>En(JSON.stringify(e),ti(t,n)),ri=(e,t)=>JSON.parse(mn(e.content,ti(t,e.pubkey)));function ii(e,t){const n={created_at:Qr(),content:"",tags:[],...e,pubkey:we(t)};return n.id=ze(n),n}function si(e,t,n){return ee({kind:_r,content:ni(e,t,n),created_at:ei(),tags:[]},t)}function oi(e,t){const n=$e();return ee({kind:Rr,content:ni(e,n,t),created_at:ei(),tags:[["p",t]]},n)}function Sn(e,t,n){const r=ii(e,t),i=si(r,t,n);return oi(i,n)}function Pc(e,t,n){if(!n||n.length===0)throw new Error("At least one recipient is required.");const r=we(t),i=[Sn(e,t,r)];return n.forEach(s=>{i.push(Sn(e,t,s))}),i}function ai(e,t){const n=ri(e,t);return ri(n,t)}function Hc(e,t){let n=[];return e.forEach(r=>{n.push(ai(r,t))}),n.sort((r,i)=>r.created_at-i.created_at),n}var qc={};q(qc,{getToken:()=>Dc,hashPayload:()=>Nn,unpackEventFromToken:()=>ui,validateEvent:()=>yi,validateEventKind:()=>fi,validateEventMethodTag:()=>di,validateEventPayloadTag:()=>pi,validateEventTimestamp:()=>li,validateEventUrlTag:()=>hi,validateToken:()=>jc});var ci="Nostr ";async function Dc(e,t,n,r=!1,i){const s={kind:un,tags:[["u",e],["method",t]],created_at:Math.round(new Date().getTime()/1e3),content:""};i&&s.tags.push(["payload",Nn(i)]);const o=await n(s);return(r?ci:"")+pe.encode(te.encode(JSON.stringify(o)))}async function jc(e,t,n){const r=await ui(e).catch(s=>{throw s});return await yi(r,t,n).catch(s=>{throw s})}async function ui(e){if(!e)throw new Error("Missing token");e=e.replace(ci,"");const t=ge.decode(pe.decode(e));if(!t||t.length===0||!t.startsWith("{"))throw new Error("Invalid token");return JSON.parse(t)}function li(e){return e.created_at?Math.round(new Date().getTime()/1e3)-e.created_at<60:!1}function fi(e){return e.kind===un}function hi(e,t){const n=e.tags.find(r=>r[0]==="u");return n?n.length>0&&n[1]===t:!1}function di(e,t){const n=e.tags.find(r=>r[0]==="method");return n?n.length>0&&n[1].toLowerCase()===t.toLowerCase():!1}function Nn(e){const t=le(te.encode(JSON.stringify(e)));return T(t)}function pi(e,t){const n=e.tags.find(i=>i[0]==="payload");if(!n)return!1;const r=Nn(t);return n.length>0&&n[1]===r}async function yi(e,t,n,r){if(!wt(e))throw new Error("Invalid nostr event, signature invalid");if(!fi(e))throw new Error("Invalid nostr event, kind invalid");if(!li(e))throw new Error("Invalid nostr event, created_at timestamp invalid");if(!hi(e,t))throw new Error("Invalid nostr event, url tag invalid");if(!di(e,n))throw new Error("Invalid nostr event, method tag invalid");if(r&&typeof r=="object"&&Object.keys(r).length>0&&!pi(e,r))throw new Error("Invalid nostr event, payload tag does not match request body hash");return!0}const Ke=30078,An=30078,gi=14,zc=100;function Vc(e){return JSON.stringify({rootKey:T(e.rootKey),theirCurrentNostrPublicKey:e.theirCurrentNostrPublicKey,theirNextNostrPublicKey:e.theirNextNostrPublicKey,ourCurrentNostrKey:e.ourCurrentNostrKey?{publicKey:e.ourCurrentNostrKey.publicKey,privateKey:T(e.ourCurrentNostrKey.privateKey)}:void 0,ourNextNostrKey:{publicKey:e.ourNextNostrKey.publicKey,privateKey:T(e.ourNextNostrKey.privateKey)},receivingChainKey:e.receivingChainKey?T(e.receivingChainKey):void 0,sendingChainKey:e.sendingChainKey?T(e.sendingChainKey):void 0,sendingChainMessageNumber:e.sendingChainMessageNumber,receivingChainMessageNumber:e.receivingChainMessageNumber,previousSendingChainMessageCount:e.previousSendingChainMessageCount,skippedMessageKeys:Object.fromEntries(Object.entries(e.skippedMessageKeys).map(([t,n])=>[t,T(n)])),skippedHeaderKeys:Object.fromEntries(Object.entries(e.skippedHeaderKeys).map(([t,n])=>[t,n.map(r=>T(r))]))})}function Wc(e){const t=JSON.parse(e);return{rootKey:F(t.rootKey),theirCurrentNostrPublicKey:t.theirCurrentNostrPublicKey,theirNextNostrPublicKey:t.theirNextNostrPublicKey,ourCurrentNostrKey:t.ourCurrentNostrKey?{publicKey:t.ourCurrentNostrKey.publicKey,privateKey:F(t.ourCurrentNostrKey.privateKey)}:void 0,ourNextNostrKey:{publicKey:t.ourNextNostrKey.publicKey,privateKey:F(t.ourNextNostrKey.privateKey)},receivingChainKey:t.receivingChainKey?F(t.receivingChainKey):void 0,sendingChainKey:t.sendingChainKey?F(t.sendingChainKey):void 0,sendingChainMessageNumber:t.sendingChainMessageNumber,receivingChainMessageNumber:t.receivingChainMessageNumber,previousSendingChainMessageCount:t.previousSendingChainMessageCount,skippedMessageKeys:Object.fromEntries(Object.entries(t.skippedMessageKeys).map(([n,r])=>[n,F(r)])),skippedHeaderKeys:Object.fromEntries(Object.entries(t.skippedHeaderKeys||{}).map(([n,r])=>[n,r.map(i=>F(i))]))}}async function*Zc(e){const t=[];let n=null;const r=e.onEvent(i=>{n?(n(i),n=null):t.push(i)});try{for(;;)t.length>0?yield t.shift():yield new Promise(i=>{n=i})}finally{r()}}function Te(e,t=new Uint8Array(32),n=1){const r=rn(le,e,t),i=[];for(let s=1;s<=n;s++)i.push(Nr(le,r,new Uint8Array([s]),32));return i}function St(e,t){return`${e}:${t}`}function Gc(e){var n;const t=(n=e.tags)==null?void 0:n.find(r=>r[0]==="ms");return t?parseInt(t[1]):e.created_at*1e3}const Fc=1e3,Jc="0000000000000000000000000000000000000000000000000000000000000000";class et{constructor(t,n){ie(this,"nostrUnsubscribe");ie(this,"nostrNextUnsubscribe");ie(this,"internalSubscriptions",new Map);ie(this,"currentInternalSubscriptionId",0);ie(this,"name");this.nostrSubscribe=t,this.state=n,this.name=Math.random().toString(36).substring(2,6)}static init(t,n,r,i,s,o){const c=$e(),[a,l]=Te(s,D.getConversationKey(c,n),2);let f,u;i?(f={publicKey:we(r),privateKey:r},u={publicKey:we(c),privateKey:c}):u={publicKey:we(r),privateKey:r};const g={rootKey:i?a:s,theirNextNostrPublicKey:n,ourCurrentNostrKey:f,ourNextNostrKey:u,receivingChainKey:void 0,sendingChainKey:i?l:void 0,sendingChainMessageNumber:0,receivingChainMessageNumber:0,previousSendingChainMessageCount:0,skippedMessageKeys:{},skippedHeaderKeys:{}},b=new et(t,g);return o&&(b.name=o),b}send(t){return this.sendEvent({content:t,kind:gi})}sendEvent(t){if(!this.state.theirNextNostrPublicKey||!this.state.ourCurrentNostrKey)throw new Error("we are not the initiator, so we can't send the first message");if("sig"in t)throw new Error("Event must be unsigned "+JSON.stringify(t));const n=Date.now(),r={...t,content:t.content||"",kind:t.kind||Ke,created_at:t.created_at||Math.floor(n/1e3),tags:t.tags||[],pubkey:t.pubkey||Jc};r.tags.some(([l])=>l==="ms")||r.tags.push(["ms",String(n)]),r.id=ze(r);const[i,s]=this.ratchetEncrypt(JSON.stringify(r)),o=D.getConversationKey(this.state.ourCurrentNostrKey.privateKey,this.state.theirNextNostrPublicKey),c=D.encrypt(JSON.stringify(i),o);return{event:ee({content:s,kind:Ke,tags:[["header",c]],created_at:Math.floor(Date.now()/1e3)},this.state.ourCurrentNostrKey.privateKey),innerEvent:r}}onEvent(t){const n=this.currentInternalSubscriptionId++;return this.internalSubscriptions.set(n,t),this.subscribeToNostrEvents(),()=>this.internalSubscriptions.delete(n)}close(){var t,n;(t=this.nostrUnsubscribe)==null||t.call(this),(n=this.nostrNextUnsubscribe)==null||n.call(this)}ratchetEncrypt(t){const[n,r]=Te(this.state.sendingChainKey,new Uint8Array([1]),2);return this.state.sendingChainKey=n,[{number:this.state.sendingChainMessageNumber++,nextPublicKey:this.state.ourNextNostrKey.publicKey,previousChainLength:this.state.previousSendingChainMessageCount},D.encrypt(t,r)]}ratchetDecrypt(t,n,r){const i=this.trySkippedMessageKeys(t,n,r);if(i)return i;this.skipMessageKeys(t.number,r);const[s,o]=Te(this.state.receivingChainKey,new Uint8Array([1]),2);this.state.receivingChainKey=s,this.state.receivingChainMessageNumber++;try{return D.decrypt(n,o)}catch(c){throw console.error(this.name,"Decryption failed:",c,{messageKey:T(o).slice(0,4),receivingChainKey:T(this.state.receivingChainKey).slice(0,4),sendingChainKey:this.state.sendingChainKey&&T(this.state.sendingChainKey).slice(0,4),rootKey:T(this.state.rootKey).slice(0,4)}),c}}ratchetStep(t){this.state.previousSendingChainMessageCount=this.state.sendingChainMessageNumber,this.state.sendingChainMessageNumber=0,this.state.receivingChainMessageNumber=0,this.state.theirNextNostrPublicKey=t;const n=D.getConversationKey(this.state.ourNextNostrKey.privateKey,this.state.theirNextNostrPublicKey),[r,i]=Te(this.state.rootKey,n,2);this.state.receivingChainKey=i,this.state.ourCurrentNostrKey=this.state.ourNextNostrKey;const s=$e();this.state.ourNextNostrKey={publicKey:we(s),privateKey:s};const o=D.getConversationKey(this.state.ourNextNostrKey.privateKey,this.state.theirNextNostrPublicKey),[c,a]=Te(r,o,2);this.state.rootKey=c,this.state.sendingChainKey=a}skipMessageKeys(t,n){if(this.state.receivingChainMessageNumber+Fc<t)throw new Error("Too many skipped messages");for(;this.state.receivingChainMessageNumber<t;){const[r,i]=Te(this.state.receivingChainKey,new Uint8Array([1]),2);this.state.receivingChainKey=r;const s=St(n,this.state.receivingChainMessageNumber);if(this.state.skippedMessageKeys[s]=i,!this.state.skippedHeaderKeys[n]){const o=[];if(this.state.ourCurrentNostrKey){const a=D.getConversationKey(this.state.ourCurrentNostrKey.privateKey,n);o.push(a)}const c=D.getConversationKey(this.state.ourNextNostrKey.privateKey,n);o.push(c),this.state.skippedHeaderKeys[n]=o}this.state.receivingChainMessageNumber++}}trySkippedMessageKeys(t,n,r){var s;const i=St(r,t.number);if(i in this.state.skippedMessageKeys){const o=this.state.skippedMessageKeys[i];return delete this.state.skippedMessageKeys[i],Object.keys(this.state.skippedMessageKeys).some(a=>a.startsWith(`${r}:`))||(delete this.state.skippedHeaderKeys[r],(s=this.nostrUnsubscribe)==null||s.call(this),this.nostrUnsubscribe=void 0),D.decrypt(n,o)}return null}decryptHeader(t){const n=t.tags[0][1];if(this.state.ourCurrentNostrKey){const s=D.getConversationKey(this.state.ourCurrentNostrKey.privateKey,t.pubkey);try{return[JSON.parse(D.decrypt(n,s)),!1,!1]}catch{}}const r=D.getConversationKey(this.state.ourNextNostrKey.privateKey,t.pubkey);try{return[JSON.parse(D.decrypt(n,r)),!0,!1]}catch{}const i=this.state.skippedHeaderKeys[t.pubkey];if(i)for(const s of i)try{return[JSON.parse(D.decrypt(n,s)),!1,!0]}catch{}throw new Error("Failed to decrypt header with current and skipped header keys")}handleNostrEvent(t){var c;const[n,r,i]=this.decryptHeader(t);if(!i)this.state.theirNextNostrPublicKey!==n.nextPublicKey&&(this.state.theirCurrentNostrPublicKey=this.state.theirNextNostrPublicKey,this.state.theirNextNostrPublicKey=n.nextPublicKey,(c=this.nostrUnsubscribe)==null||c.call(this),this.nostrUnsubscribe=this.nostrNextUnsubscribe,this.nostrNextUnsubscribe=this.nostrSubscribe({authors:[this.state.theirNextNostrPublicKey],kinds:[Ke]},a=>this.handleNostrEvent(a))),r&&(this.skipMessageKeys(n.previousChainLength,t.pubkey),this.ratchetStep(n.nextPublicKey));else if(!(St(t.pubkey,n.number)in this.state.skippedMessageKeys))return;const s=this.ratchetDecrypt(n,t.content,t.pubkey),o=JSON.parse(s);if(!yt(o)){console.error("Invalid event received",o);return}if(o.id!==ze(o)){console.error("Event hash does not match",o);return}this.internalSubscriptions.forEach(a=>a(o,t))}subscribeToNostrEvents(){if(this.nostrNextUnsubscribe)return;this.nostrNextUnsubscribe=this.nostrSubscribe({authors:[this.state.theirNextNostrPublicKey],kinds:[Ke]},n=>this.handleNostrEvent(n));const t=Object.keys(this.state.skippedHeaderKeys);this.state.theirCurrentNostrPublicKey&&!t.includes(this.state.theirCurrentNostrPublicKey)&&t.push(this.state.theirCurrentNostrPublicKey),this.nostrUnsubscribe=this.nostrSubscribe({authors:t,kinds:[Ke]},n=>this.handleNostrEvent(n))}}new TextDecoder("utf-8"),new TextEncoder;function Nt(e,t){const n=Le.getSharedSecret(e,"02"+t).subarray(1,33);return rn(le,n,"nip44-v2")}class Re{constructor(t,n,r,i,s,o,c=[]){this.inviterEphemeralPublicKey=t,this.sharedSecret=n,this.inviter=r,this.inviterEphemeralPrivateKey=i,this.label=s,this.maxUses=o,this.usedBy=c}static createNew(t,n,r){if(!t)throw new Error("Inviter public key is required");const i=$e(),s=we(i),o=T($e());return new Re(s,o,t,i,n,r)}static fromUrl(t){const r=new URL(t).hash.slice(1);if(!r)throw new Error("No invite data found in the URL hash.");const i=decodeURIComponent(r);let s;try{s=JSON.parse(i)}catch(l){throw new Error("Invite data in URL hash is not valid JSON: "+l)}const{inviter:o,ephemeralKey:c,sharedSecret:a}=s;if(!o||!c||!a)throw new Error("Missing required fields (inviter, ephemeralKey, sharedSecret) in invite data.");return new Re(c,a,o)}static deserialize(t){const n=JSON.parse(t);return new Re(n.inviterEphemeralPublicKey,n.sharedSecret,n.inviter,n.inviterEphemeralPrivateKey?new Uint8Array(n.inviterEphemeralPrivateKey):void 0,n.label,n.maxUses,n.usedBy)}static fromEvent(t){var o,c;if(!t.sig)throw new Error("Event is not signed");if(!wt(t))throw new Error("Event signature is invalid");const{tags:n}=t;if(!n)throw new Error("Invalid invite event: missing tags");const r=(o=n.find(([a])=>a==="ephemeralKey"))==null?void 0:o[1],i=(c=n.find(([a])=>a==="sharedSecret"))==null?void 0:c[1],s=t.pubkey;if(!r||!i)throw new Error("Invalid invite event: missing session key or sharedSecret");return new Re(r,i,s)}static fromUser(t,n,r){const i={kinds:[An],authors:[t],limit:1,"#d":["double-ratchet/invites/public"]};let s=0;return n(i,c=>{if(!(!c.created_at||c.created_at<=s)){s=c.created_at;try{const a=Re.fromEvent(c);r(a)}catch(a){console.error("Error processing invite:",a,"event:",c)}}})}serialize(){return JSON.stringify({inviterEphemeralPublicKey:this.inviterEphemeralPublicKey,sharedSecret:this.sharedSecret,inviter:this.inviter,inviterEphemeralPrivateKey:this.inviterEphemeralPrivateKey?Array.from(this.inviterEphemeralPrivateKey):void 0,label:this.label,maxUses:this.maxUses,usedBy:this.usedBy})}getUrl(t="https://iris.to"){const n={inviter:this.inviter,ephemeralKey:this.inviterEphemeralPublicKey,sharedSecret:this.sharedSecret},r=new URL(t);return r.hash=encodeURIComponent(JSON.stringify(n)),r.toString()}getEvent(){return{kind:An,pubkey:this.inviter,content:"",created_at:Math.floor(Date.now()/1e3),tags:[["ephemeralKey",this.inviterEphemeralPublicKey],["sharedSecret",this.sharedSecret],["d","double-ratchet/invites/public"],["l","double-ratchet/invites"]]}}async accept(t,n,r){const i=$e(),s=we(i),o=this.inviter||this.inviterEphemeralPublicKey,c=F(this.sharedSecret),a=et.init(t,this.inviterEphemeralPublicKey,i,!0,c,void 0),l=$e(),f=we(l),g=await(typeof r=="function"?r:(h,d)=>Promise.resolve(D.encrypt(h,Nt(r,d))))(s,o),b={pubkey:n,tags:[["sharedSecret",this.sharedSecret]],content:await D.encrypt(g,c),created_at:Math.floor(Date.now()/1e3)},p={kind:Ke,pubkey:f,content:D.encrypt(JSON.stringify(b),Nt(l,this.inviterEphemeralPublicKey)),created_at:Math.floor(Date.now()/1e3),tags:[["p",this.inviterEphemeralPublicKey]]};return{session:a,event:ee(p,l)}}listen(t,n,r){if(!this.inviterEphemeralPrivateKey)throw new Error("Inviter session key is not available");const i={kinds:[Ke],"#p":[this.inviterEphemeralPublicKey]};return n(i,async s=>{try{if(this.maxUses&&this.usedBy.length>=this.maxUses){console.error("Invite has reached maximum number of uses");return}const o=await D.decrypt(s.content,Nt(this.inviterEphemeralPrivateKey,s.pubkey)),c=JSON.parse(o);if(!c.tags||!c.tags.some(([h,d])=>h==="sharedSecret"&&d===this.sharedSecret)){console.error("Invalid secret from event",s);return}const a=F(this.sharedSecret),l=c.pubkey;this.usedBy.push(l);const f=await D.decrypt(c.content,a),g=await(typeof t=="function"?t:(h,d)=>Promise.resolve(D.decrypt(h,Nt(t,d))))(f,l),b=s.id,p=et.init(n,g,this.inviterEphemeralPrivateKey,!1,a,b);r(p,l)}catch(o){console.error("Error processing invite message:",o,"event",s)}})}}H.CHAT_MESSAGE_KIND=gi,H.INVITE_EVENT_KIND=An,H.Invite=Re,H.MAX_SKIP=zc,H.MESSAGE_EVENT_KIND=Ke,H.Session=et,H.createEventStream=Zc,H.deserializeSessionState=Wc,H.getMillisecondTimestamp=Gc,H.kdf=Te,H.serializeSessionState=Vc,H.skippedMessageIndexKey=St,Object.defineProperty(H,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nostr-double-ratchet",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "type": "module",
5
5
  "packageManager": "yarn@1.22.22",
6
6
  "description": "Nostr double ratchet library",
package/src/Invite.ts CHANGED
@@ -115,7 +115,7 @@ export class Invite {
115
115
  kinds: [INVITE_EVENT_KIND],
116
116
  authors: [user],
117
117
  limit: 1,
118
- "#d": ["nostr-double-ratchet/invite"],
118
+ "#d": ["double-ratchet/invites/public"],
119
119
  };
120
120
  let latest = 0;
121
121
  const unsub = subscribe(filter, (event) => {
@@ -169,7 +169,12 @@ export class Invite {
169
169
  pubkey: this.inviter,
170
170
  content: "",
171
171
  created_at: Math.floor(Date.now() / 1000),
172
- tags: [['ephemeralKey', this.inviterEphemeralPublicKey], ['sharedSecret', this.sharedSecret], ['d', 'nostr-double-ratchet/invite']],
172
+ tags: [
173
+ ['ephemeralKey', this.inviterEphemeralPublicKey],
174
+ ['sharedSecret', this.sharedSecret],
175
+ ['d', 'double-ratchet/invites/public'],
176
+ ['l', 'double-ratchet/invites']
177
+ ],
173
178
  };
174
179
  }
175
180
 
package/src/Session.ts CHANGED
@@ -75,9 +75,10 @@ export class Session {
75
75
  }
76
76
 
77
77
  /**
78
- * Sends a text message through the encrypted session
78
+ * Sends a text message through the encrypted session.
79
+ * Sent in a Nostr event with the kind CHAT_MESSAGE_KIND.
79
80
  * @param text The plaintext message to send
80
- * @returns A verified Nostr event containing the encrypted message
81
+ * @returns A verified Nostr event containing the encrypted message. You need to publish this event to the Nostr network.
81
82
  * @throws Error if we are not the initiator and trying to send the first message
82
83
  */
83
84
  send(text: string): {event: VerifiedEvent, innerEvent: Rumor} {
@@ -91,7 +92,7 @@ export class Session {
91
92
  * Send a partial Nostr event through the encrypted session.
92
93
  * In addition to chat messages, it could be files, webrtc negotiation or many other types of messages.
93
94
  * @param event Partial Nostr event to send. Must be unsigned. Id and will be generated if not provided.
94
- * @returns A verified Nostr event containing the encrypted message
95
+ * @returns A verified Nostr event containing the encrypted message. You need to publish this event to the Nostr network.
95
96
  * @throws Error if we are not the initiator and trying to send the first message
96
97
  */
97
98
  sendEvent(event: Partial<UnsignedEvent>): {event: VerifiedEvent, innerEvent: Rumor} {