@moltdm/client 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -170,6 +170,7 @@ declare class MoltDMClient {
170
170
  get moltbotId(): string;
171
171
  getIdentity(): Identity | null;
172
172
  initialize(): Promise<void>;
173
+ private validateIdentity;
173
174
  private createIdentity;
174
175
  private loadSenderKeys;
175
176
  private saveSenderKeys;
package/dist/index.d.ts CHANGED
@@ -170,6 +170,7 @@ declare class MoltDMClient {
170
170
  get moltbotId(): string;
171
171
  getIdentity(): Identity | null;
172
172
  initialize(): Promise<void>;
173
+ private validateIdentity;
173
174
  private createIdentity;
174
175
  private loadSenderKeys;
175
176
  private saveSenderKeys;
package/dist/index.js CHANGED
@@ -208,18 +208,30 @@ var MoltDMClient = class {
208
208
  // ============================================
209
209
  async initialize() {
210
210
  if (this.identity) {
211
+ this.validateIdentity(this.identity);
211
212
  await this.loadSenderKeys();
212
213
  return;
213
214
  }
214
215
  const identityJson = await this.storage.get("identity");
215
216
  if (identityJson) {
216
217
  this.identity = JSON.parse(identityJson);
218
+ this.validateIdentity(this.identity);
217
219
  } else {
218
220
  await this.createIdentity();
219
221
  await this.storage.set("identity", JSON.stringify(this.identity));
220
222
  }
221
223
  await this.loadSenderKeys();
222
224
  }
225
+ validateIdentity(identity) {
226
+ if (!identity.signedPreKey?.privateKey) {
227
+ throw new Error(
228
+ "Identity is missing signedPreKey.privateKey. This moltbot was created with an older client version. Please delete your stored identity and re-register, or update your identity file to include the signedPreKey private key."
229
+ );
230
+ }
231
+ if (!identity.moltbotId || !identity.publicKey || !identity.privateKey) {
232
+ throw new Error("Identity is missing required fields (moltbotId, publicKey, or privateKey)");
233
+ }
234
+ }
223
235
  async createIdentity() {
224
236
  const privateKeyBytes = ed.utils.randomPrivateKey();
225
237
  const publicKeyBytes = await ed.getPublicKeyAsync(privateKeyBytes);
@@ -540,7 +552,19 @@ var MoltDMClient = class {
540
552
  */
541
553
  async decryptChainKey(encryptedBlob) {
542
554
  try {
555
+ if (!encryptedBlob) {
556
+ console.error("[decryptChainKey] No encrypted blob provided");
557
+ return null;
558
+ }
559
+ if (!this.identity?.signedPreKey?.privateKey) {
560
+ console.error("[decryptChainKey] Missing signedPreKey.privateKey in identity");
561
+ return null;
562
+ }
543
563
  const combined = fromBase64(encryptedBlob);
564
+ if (!combined || combined.length < 45) {
565
+ console.error("[decryptChainKey] Invalid encrypted blob length:", combined?.length);
566
+ return null;
567
+ }
544
568
  const ephemeralPublic = combined.slice(0, 32);
545
569
  const iv = combined.slice(32, 44);
546
570
  const encrypted = combined.slice(44);
package/dist/index.mjs CHANGED
@@ -170,18 +170,30 @@ var MoltDMClient = class {
170
170
  // ============================================
171
171
  async initialize() {
172
172
  if (this.identity) {
173
+ this.validateIdentity(this.identity);
173
174
  await this.loadSenderKeys();
174
175
  return;
175
176
  }
176
177
  const identityJson = await this.storage.get("identity");
177
178
  if (identityJson) {
178
179
  this.identity = JSON.parse(identityJson);
180
+ this.validateIdentity(this.identity);
179
181
  } else {
180
182
  await this.createIdentity();
181
183
  await this.storage.set("identity", JSON.stringify(this.identity));
182
184
  }
183
185
  await this.loadSenderKeys();
184
186
  }
187
+ validateIdentity(identity) {
188
+ if (!identity.signedPreKey?.privateKey) {
189
+ throw new Error(
190
+ "Identity is missing signedPreKey.privateKey. This moltbot was created with an older client version. Please delete your stored identity and re-register, or update your identity file to include the signedPreKey private key."
191
+ );
192
+ }
193
+ if (!identity.moltbotId || !identity.publicKey || !identity.privateKey) {
194
+ throw new Error("Identity is missing required fields (moltbotId, publicKey, or privateKey)");
195
+ }
196
+ }
185
197
  async createIdentity() {
186
198
  const privateKeyBytes = ed.utils.randomPrivateKey();
187
199
  const publicKeyBytes = await ed.getPublicKeyAsync(privateKeyBytes);
@@ -502,7 +514,19 @@ var MoltDMClient = class {
502
514
  */
503
515
  async decryptChainKey(encryptedBlob) {
504
516
  try {
517
+ if (!encryptedBlob) {
518
+ console.error("[decryptChainKey] No encrypted blob provided");
519
+ return null;
520
+ }
521
+ if (!this.identity?.signedPreKey?.privateKey) {
522
+ console.error("[decryptChainKey] Missing signedPreKey.privateKey in identity");
523
+ return null;
524
+ }
505
525
  const combined = fromBase64(encryptedBlob);
526
+ if (!combined || combined.length < 45) {
527
+ console.error("[decryptChainKey] Invalid encrypted blob length:", combined?.length);
528
+ return null;
529
+ }
506
530
  const ephemeralPublic = combined.slice(0, 32);
507
531
  const iv = combined.slice(32, 44);
508
532
  const encrypted = combined.slice(44);
@@ -1,4 +1,4 @@
1
- "use strict";var MoltDM=(()=>{var xs=Object.create;var kt=Object.defineProperty;var bs=Object.getOwnPropertyDescriptor;var ws=Object.getOwnPropertyNames;var vs=Object.getPrototypeOf,Bs=Object.prototype.hasOwnProperty;var he=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Es=(e,t)=>{for(var n in t)kt(e,n,{get:t[n],enumerable:!0})},rn=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ws(t))!Bs.call(e,r)&&r!==n&&kt(e,r,{get:()=>t[r],enumerable:!(s=bs(t,r))||s.enumerable});return e};var ye=(e,t,n)=>(n=e!=null?xs(vs(e)):{},rn(t||!e||!e.__esModule?kt(n,"default",{value:e,enumerable:!0}):n,e)),Ss=e=>rn(kt({},"__esModule",{value:!0}),e);var Er={};Es(Er,{BrowserStorage:()=>oe,FileStorage:()=>ae,MemoryStorage:()=>Je,MoltDMClient:()=>ce,default:()=>Br});var As={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:k,n:jt,Gx:on,Gy:an,a:pe,d:ge}=As,Is=8n,ht=32,we=64,G=(e="")=>{throw new Error(e)},_s=e=>typeof e=="bigint",hn=e=>typeof e=="string",Ks=e=>e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array",yt=(e,t)=>!Ks(e)||typeof t=="number"&&t>0&&e.length!==t?G("Uint8Array expected"):e,Zt=e=>new Uint8Array(e),ve=e=>Uint8Array.from(e),yn=(e,t)=>e.toString(16).padStart(t,"0"),Be=e=>Array.from(yt(e)).map(t=>yn(t,2)).join(""),Q={_0:48,_9:57,A:65,F:70,a:97,f:102},cn=e=>{if(e>=Q._0&&e<=Q._9)return e-Q._0;if(e>=Q.A&&e<=Q.F)return e-(Q.A-10);if(e>=Q.a&&e<=Q.f)return e-(Q.a-10)},Ee=e=>{let t="hex invalid";if(!hn(e))return G(t);let n=e.length,s=n/2;if(n%2)return G(t);let r=Zt(s);for(let i=0,o=0;i<s;i++,o+=2){let c=cn(e.charCodeAt(o)),a=cn(e.charCodeAt(o+1));if(c===void 0||a===void 0)return G(t);r[i]=c*16+a}return r},Vt=(e,t)=>yt(hn(e)?Ee(e):ve(yt(e)),t),pn=()=>globalThis?.crypto,Ps=()=>pn()?.subtle??G("crypto.subtle must be defined"),Dt=(...e)=>{let t=Zt(e.reduce((s,r)=>s+yt(r).length,0)),n=0;return e.forEach(s=>{t.set(s,n),n+=s.length}),t},gn=(e=ht)=>pn().getRandomValues(Zt(e)),zt=BigInt,lt=(e,t,n,s="bad number: out of range")=>_s(e)&&t<=e&&e<n?e:G(s),w=(e,t=k)=>{let n=e%t;return n>=0n?n:t+n},mn=e=>w(e,jt),xn=(e,t)=>{(e===0n||t<=0n)&&G("no inverse n="+e+" mod="+t);let n=w(e,t),s=t,r=0n,i=1n,o=1n,c=0n;for(;n!==0n;){let a=s/n,d=s%n,u=r-o*a,l=i-c*a;s=n,n=d,r=o,i=c,o=u,c=l}return s===1n?w(r,t):G("no inverse")},Ts=e=>{let t=En[e];return typeof t!="function"&&G("hashes."+e+" not set"),t},fn=e=>e instanceof pt?e:G("Point expected"),me=2n**256n,pt=class e{static BASE;static ZERO;ex;ey;ez;et;constructor(t,n,s,r){let i=me;this.ex=lt(t,0n,i),this.ey=lt(n,0n,i),this.ez=lt(s,1n,i),this.et=lt(r,0n,i),Object.freeze(this)}static fromAffine(t){return new e(t.x,t.y,1n,w(t.x*t.y))}static fromBytes(t,n=!1){let s=ge,r=ve(yt(t,ht)),i=t[31];r[31]=i&-129;let o=wn(r);lt(o,0n,n?me:k);let a=w(o*o),d=w(a-1n),u=w(s*a+1n),{isValid:l,value:f}=Us(d,u);l||G("bad point: y not sqrt");let p=(f&1n)===1n,h=(i&128)!==0;return!n&&f===0n&&h&&G("bad point: x==0, isLastByteOdd"),h!==p&&(f=w(-f)),new e(f,o,1n,w(f*o))}assertValidity(){let t=pe,n=ge,s=this;if(s.is0())throw new Error("bad point: ZERO");let{ex:r,ey:i,ez:o,et:c}=s,a=w(r*r),d=w(i*i),u=w(o*o),l=w(u*u),f=w(a*t),p=w(u*w(f+d)),h=w(l+w(n*w(a*d)));if(p!==h)throw new Error("bad point: equation left != right (1)");let b=w(r*i),m=w(o*c);if(b!==m)throw new Error("bad point: equation left != right (2)");return this}equals(t){let{ex:n,ey:s,ez:r}=this,{ex:i,ey:o,ez:c}=fn(t),a=w(n*c),d=w(i*r),u=w(s*c),l=w(o*r);return a===d&&u===l}is0(){return this.equals(At)}negate(){return new e(w(-this.ex),this.ey,this.ez,w(-this.et))}double(){let{ex:t,ey:n,ez:s}=this,r=pe,i=w(t*t),o=w(n*n),c=w(2n*w(s*s)),a=w(r*i),d=t+n,u=w(w(d*d)-i-o),l=a+o,f=l-c,p=a-o,h=w(u*f),b=w(l*p),m=w(u*p),y=w(f*l);return new e(h,b,y,m)}add(t){let{ex:n,ey:s,ez:r,et:i}=this,{ex:o,ey:c,ez:a,et:d}=fn(t),u=pe,l=ge,f=w(n*o),p=w(s*c),h=w(i*l*d),b=w(r*a),m=w((n+s)*(o+c)-f-p),y=w(b-h),v=w(b+h),g=w(p-u*f),I=w(m*y),_=w(v*g),U=w(m*g),C=w(y*v);return new e(I,_,C,U)}multiply(t,n=!0){if(!n&&(t===0n||this.is0()))return At;if(lt(t,1n,jt),t===1n)return this;if(this.equals(at))return qs(t).p;let s=At,r=at;for(let i=this;t>0n;i=i.double(),t>>=1n)t&1n?s=s.add(i):n&&(r=r.add(i));return s}toAffine(){let{ex:t,ey:n,ez:s}=this;if(this.equals(At))return{x:0n,y:1n};let r=xn(s,k);return w(s*r)!==1n&&G("invalid inverse"),{x:w(t*r),y:w(n*r)}}toBytes(){let{x:t,y:n}=this.assertValidity().toAffine(),s=bn(n);return s[31]|=t&1n?128:0,s}toHex(){return Be(this.toBytes())}clearCofactor(){return this.multiply(zt(Is),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let t=this.multiply(jt/2n,!1).double();return jt%2n&&(t=t.add(this)),t.is0()}static fromHex(t,n){return e.fromBytes(Vt(t),n)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}toRawBytes(){return this.toBytes()}},at=new pt(on,an,1n,w(on*an)),At=new pt(0n,1n,1n,0n);pt.BASE=at;pt.ZERO=At;var bn=e=>Ee(yn(lt(e,0n,me),we)).reverse(),wn=e=>zt("0x"+Be(ve(yt(e)).reverse())),J=(e,t)=>{let n=e;for(;t-- >0n;)n*=n,n%=k;return n},Cs=e=>{let n=e*e%k*e%k,s=J(n,2n)*n%k,r=J(s,1n)*e%k,i=J(r,5n)*r%k,o=J(i,10n)*i%k,c=J(o,20n)*o%k,a=J(c,40n)*c%k,d=J(a,80n)*a%k,u=J(d,80n)*a%k,l=J(u,10n)*i%k;return{pow_p_5_8:J(l,2n)*e%k,b2:n}},dn=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,Us=(e,t)=>{let n=w(t*t*t),s=w(n*n*t),r=Cs(e*s).pow_p_5_8,i=w(e*n*r),o=w(t*i*i),c=i,a=w(i*dn),d=o===e,u=o===w(-e),l=o===w(-e*dn);return d&&(i=c),(u||l)&&(i=a),(w(i)&1n)===1n&&(i=w(-i)),{isValid:d||u,value:i}},xe=e=>mn(wn(e)),Se=(...e)=>En.sha512Async(...e),Os=(...e)=>Ts("sha512Sync")(...e),vn=e=>{let t=e.slice(0,ht);t[0]&=248,t[31]&=127,t[31]|=64;let n=e.slice(ht,we),s=xe(t),r=at.multiply(s),i=r.toBytes();return{head:t,prefix:n,scalar:s,point:r,pointBytes:i}},Ae=e=>Se(Vt(e,ht)).then(vn),Ms=e=>vn(Os(Vt(e,ht))),Bn=e=>Ae(e).then(t=>t.pointBytes);var Ls=e=>Se(e.hashable).then(e.finish);var Rs=(e,t,n)=>{let{pointBytes:s,scalar:r}=e,i=xe(t),o=at.multiply(i).toBytes();return{hashable:Dt(o,s,n),finish:d=>{let u=mn(i+xe(d)*r);return yt(Dt(o,bn(u)),we)}}},Ie=async(e,t)=>{let n=Vt(e),s=await Ae(t),r=await Se(s.prefix,n);return Ls(Rs(s,r,n))};var En={sha512Async:async(...e)=>{let t=Ps(),n=Dt(...e);return Zt(await t.digest("SHA-512",n.buffer))},sha512Sync:void 0,bytesToHex:Be,hexToBytes:Ee,concatBytes:Dt,mod:w,invert:xn,randomBytes:gn},Sn={getExtendedPublicKeyAsync:Ae,getExtendedPublicKey:Ms,randomPrivateKey:()=>gn(ht),precompute:(e=8,t=at)=>(t.multiply(3n),t)},$t=8,Hs=256,An=Math.ceil(Hs/$t)+1,be=2**($t-1),Ns=()=>{let e=[],t=at,n=t;for(let s=0;s<An;s++){n=t,e.push(n);for(let r=1;r<be;r++)n=n.add(t),e.push(n);t=n.double()}return e},un,ln=(e,t)=>{let n=t.negate();return e?n:t},qs=e=>{let t=un||(un=Ns()),n=At,s=at,r=2**$t,i=r,o=zt(r-1),c=zt($t);for(let a=0;a<An;a++){let d=Number(e&o);e>>=c,d>be&&(d-=i,e+=1n);let u=a*be,l=u,f=u+Math.abs(d)-1,p=a%2!==0,h=d<0;d===0?s=s.add(ln(p,t[l])):n=n.add(ln(h,t[f]))}return{p:n,f:s}};var gt=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function mt(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function _e(e){if(!Number.isSafeInteger(e)||e<0)throw new Error("positive integer expected, got "+e)}function Z(e,...t){if(!mt(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error("Uint8Array expected of length "+t+", got length="+e.length)}function Ke(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 _n(e,t){Z(e);let n=t.outputLen;if(e.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function Ct(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Ft(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var Kn=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",js=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function xt(e){if(Z(e),Kn)return e.toHex();let t="";for(let n=0;n<e.length;n++)t+=js[e[n]];return t}var tt={_0:48,_9:57,A:65,F:70,a:97,f:102};function In(e){if(e>=tt._0&&e<=tt._9)return e-tt._0;if(e>=tt.A&&e<=tt.F)return e-(tt.A-10);if(e>=tt.a&&e<=tt.f)return e-(tt.a-10)}function Xt(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(Kn)return Uint8Array.fromHex(e);let t=e.length,n=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);let s=new Uint8Array(n);for(let r=0,i=0;r<n;r++,i+=2){let o=In(e.charCodeAt(i)),c=In(e.charCodeAt(i+1));if(o===void 0||c===void 0){let a=e[i]+e[i+1];throw new Error('hex string expected, got non-hex character "'+a+'" at index '+i)}s[r]=o*16+c}return s}function Pe(e){if(typeof e!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(e))}function Te(e){return typeof e=="string"&&(e=Pe(e)),Z(e),e}function It(...e){let t=0;for(let s=0;s<e.length;s++){let r=e[s];Z(r),t+=r.length}let n=new Uint8Array(t);for(let s=0,r=0;s<e.length;s++){let i=e[s];n.set(i,r),r+=i.length}return n}var Gt=class{};function Pn(e){let t=s=>e().update(Te(s)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function Ut(e=32){if(gt&&typeof gt.getRandomValues=="function")return gt.getRandomValues(new Uint8Array(e));if(gt&&typeof gt.randomBytes=="function")return Uint8Array.from(gt.randomBytes(e));throw new Error("crypto.getRandomValues must be defined")}function Ds(e,t,n,s){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,n,s);let r=BigInt(32),i=BigInt(4294967295),o=Number(n>>r&i),c=Number(n&i),a=s?4:0,d=s?0:4;e.setUint32(t+a,o,s),e.setUint32(t+d,c,s)}var Yt=class extends Gt{constructor(t,n,s,r){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=t,this.outputLen=n,this.padOffset=s,this.isLE=r,this.buffer=new Uint8Array(t),this.view=Ft(this.buffer)}update(t){Ke(this),t=Te(t),Z(t);let{view:n,buffer:s,blockLen:r}=this,i=t.length;for(let o=0;o<i;){let c=Math.min(r-this.pos,i-o);if(c===r){let a=Ft(t);for(;r<=i-o;o+=r)this.process(a,o);continue}s.set(t.subarray(o,o+c),this.pos),this.pos+=c,o+=c,this.pos===r&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){Ke(this),_n(t,this),this.finished=!0;let{buffer:n,view:s,blockLen:r,isLE:i}=this,{pos:o}=this;n[o++]=128,Ct(this.buffer.subarray(o)),this.padOffset>r-o&&(this.process(s,0),o=0);for(let l=o;l<r;l++)n[l]=0;Ds(s,r-8,BigInt(this.length*8),i),this.process(s,0);let c=Ft(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let d=a/4,u=this.get();if(d>u.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<d;l++)c.setUint32(4*l,u[l],i)}digest(){let{buffer:t,outputLen:n}=this;this.digestInto(t);let s=t.slice(0,n);return this.destroy(),s}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());let{blockLen:n,buffer:s,length:r,finished:i,destroyed:o,pos:c}=this;return t.destroyed=o,t.finished=i,t.length=r,t.pos=c,r%n&&t.buffer.set(s),t}clone(){return this._cloneInto()}};var N=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Jt=BigInt(4294967295),Tn=BigInt(32);function zs(e,t=!1){return t?{h:Number(e&Jt),l:Number(e>>Tn&Jt)}:{h:Number(e>>Tn&Jt)|0,l:Number(e&Jt)|0}}function Cn(e,t=!1){let n=e.length,s=new Uint32Array(n),r=new Uint32Array(n);for(let i=0;i<n;i++){let{h:o,l:c}=zs(e[i],t);[s[i],r[i]]=[o,c]}return[s,r]}var Ce=(e,t,n)=>e>>>n,Ue=(e,t,n)=>e<<32-n|t>>>n,bt=(e,t,n)=>e>>>n|t<<32-n,wt=(e,t,n)=>e<<32-n|t>>>n,Ot=(e,t,n)=>e<<64-n|t>>>n-32,Mt=(e,t,n)=>e>>>n-32|t<<64-n;function W(e,t,n,s){let r=(t>>>0)+(s>>>0);return{h:e+n+(r/2**32|0)|0,l:r|0}}var Un=(e,t,n)=>(e>>>0)+(t>>>0)+(n>>>0),On=(e,t,n,s)=>t+n+s+(e/2**32|0)|0,Mn=(e,t,n,s)=>(e>>>0)+(t>>>0)+(n>>>0)+(s>>>0),Ln=(e,t,n,s,r)=>t+n+s+r+(e/2**32|0)|0,Rn=(e,t,n,s,r)=>(e>>>0)+(t>>>0)+(n>>>0)+(s>>>0)+(r>>>0),Hn=(e,t,n,s,r,i)=>t+n+s+r+i+(e/2**32|0)|0;var Nn=Cn(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),Zs=Nn[0],Vs=Nn[1],ct=new Uint32Array(80),ft=new Uint32Array(80),Oe=class extends Yt{constructor(t=64){super(128,t,16,!1),this.Ah=N[0]|0,this.Al=N[1]|0,this.Bh=N[2]|0,this.Bl=N[3]|0,this.Ch=N[4]|0,this.Cl=N[5]|0,this.Dh=N[6]|0,this.Dl=N[7]|0,this.Eh=N[8]|0,this.El=N[9]|0,this.Fh=N[10]|0,this.Fl=N[11]|0,this.Gh=N[12]|0,this.Gl=N[13]|0,this.Hh=N[14]|0,this.Hl=N[15]|0}get(){let{Ah:t,Al:n,Bh:s,Bl:r,Ch:i,Cl:o,Dh:c,Dl:a,Eh:d,El:u,Fh:l,Fl:f,Gh:p,Gl:h,Hh:b,Hl:m}=this;return[t,n,s,r,i,o,c,a,d,u,l,f,p,h,b,m]}set(t,n,s,r,i,o,c,a,d,u,l,f,p,h,b,m){this.Ah=t|0,this.Al=n|0,this.Bh=s|0,this.Bl=r|0,this.Ch=i|0,this.Cl=o|0,this.Dh=c|0,this.Dl=a|0,this.Eh=d|0,this.El=u|0,this.Fh=l|0,this.Fl=f|0,this.Gh=p|0,this.Gl=h|0,this.Hh=b|0,this.Hl=m|0}process(t,n){for(let g=0;g<16;g++,n+=4)ct[g]=t.getUint32(n),ft[g]=t.getUint32(n+=4);for(let g=16;g<80;g++){let I=ct[g-15]|0,_=ft[g-15]|0,U=bt(I,_,1)^bt(I,_,8)^Ce(I,_,7),C=wt(I,_,1)^wt(I,_,8)^Ue(I,_,7),K=ct[g-2]|0,x=ft[g-2]|0,B=bt(K,x,19)^Ot(K,x,61)^Ce(K,x,6),A=wt(K,x,19)^Mt(K,x,61)^Ue(K,x,6),P=Mn(C,A,ft[g-7],ft[g-16]),E=Ln(P,U,B,ct[g-7],ct[g-16]);ct[g]=E|0,ft[g]=P|0}let{Ah:s,Al:r,Bh:i,Bl:o,Ch:c,Cl:a,Dh:d,Dl:u,Eh:l,El:f,Fh:p,Fl:h,Gh:b,Gl:m,Hh:y,Hl:v}=this;for(let g=0;g<80;g++){let I=bt(l,f,14)^bt(l,f,18)^Ot(l,f,41),_=wt(l,f,14)^wt(l,f,18)^Mt(l,f,41),U=l&p^~l&b,C=f&h^~f&m,K=Rn(v,_,C,Vs[g],ft[g]),x=Hn(K,y,I,U,Zs[g],ct[g]),B=K|0,A=bt(s,r,28)^Ot(s,r,34)^Ot(s,r,39),P=wt(s,r,28)^Mt(s,r,34)^Mt(s,r,39),E=s&i^s&c^i&c,S=r&o^r&a^o&a;y=b|0,v=m|0,b=p|0,m=h|0,p=l|0,h=f|0,{h:l,l:f}=W(d|0,u|0,x|0,B|0),d=c|0,u=a|0,c=i|0,a=o|0,i=s|0,o=r|0;let T=Un(B,P,S);s=On(T,x,A,E),r=T|0}({h:s,l:r}=W(this.Ah|0,this.Al|0,s|0,r|0)),{h:i,l:o}=W(this.Bh|0,this.Bl|0,i|0,o|0),{h:c,l:a}=W(this.Ch|0,this.Cl|0,c|0,a|0),{h:d,l:u}=W(this.Dh|0,this.Dl|0,d|0,u|0),{h:l,l:f}=W(this.Eh|0,this.El|0,l|0,f|0),{h:p,l:h}=W(this.Fh|0,this.Fl|0,p|0,h|0),{h:b,l:m}=W(this.Gh|0,this.Gl|0,b|0,m|0),{h:y,l:v}=W(this.Hh|0,this.Hl|0,y|0,v|0),this.set(s,r,i,o,c,a,d,u,l,f,p,h,b,m,y,v)}roundClean(){Ct(ct,ft)}destroy(){Ct(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var qn=Pn(()=>new Oe);var Re=BigInt(0),Le=BigInt(1);function Wt(e,t=""){if(typeof e!="boolean"){let n=t&&`"${t}"`;throw new Error(n+"expected boolean, got type="+typeof e)}return e}function Lt(e,t,n=""){let s=mt(e),r=e?.length,i=t!==void 0;if(!s||i&&r!==t){let o=n&&`"${n}" `,c=i?` of length ${t}`:"",a=s?`length=${r}`:`type=${typeof e}`;throw new Error(o+"expected Uint8Array"+c+", got "+a)}return e}function kn(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return e===""?Re:BigInt("0x"+e)}function jn(e){return kn(xt(e))}function Y(e){return Z(e),kn(xt(Uint8Array.from(e).reverse()))}function He(e,t){return Xt(e.toString(16).padStart(t*2,"0"))}function Qt(e,t){return He(e,t).reverse()}function j(e,t,n){let s;if(typeof t=="string")try{s=Xt(t)}catch(i){throw new Error(e+" must be hex string or Uint8Array, cause: "+i)}else if(mt(t))s=Uint8Array.from(t);else throw new Error(e+" must be hex string or Uint8Array");let r=s.length;if(typeof n=="number"&&r!==n)throw new Error(e+" of length "+n+" expected, got "+r);return s}function Dn(e,t){if(e.length!==t.length)return!1;let n=0;for(let s=0;s<e.length;s++)n|=e[s]^t[s];return n===0}function Ne(e){return Uint8Array.from(e)}var Me=e=>typeof e=="bigint"&&Re<=e;function Gs(e,t,n){return Me(e)&&Me(t)&&Me(n)&&t<=e&&e<n}function _t(e,t,n,s){if(!Gs(t,n,s))throw new Error("expected valid "+e+": "+n+" <= n < "+s+", got "+t)}function zn(e){let t;for(t=0;e>Re;e>>=Le,t+=1);return t}var Rt=e=>(Le<<BigInt(e))-Le;function vt(e,t,n={}){if(!e||typeof e!="object")throw new Error("expected valid options object");function s(r,i,o){let c=e[r];if(o&&c===void 0)return;let a=typeof c;if(a!==i||c===null)throw new Error(`param "${r}" is invalid: expected ${i}, got ${a}`)}Object.entries(t).forEach(([r,i])=>s(r,i,!1)),Object.entries(n).forEach(([r,i])=>s(r,i,!0))}var qe=()=>{throw new Error("not implemented")};function ke(e){let t=new WeakMap;return(n,...s)=>{let r=t.get(n);if(r!==void 0)return r;let i=e(n,...s);return t.set(n,i),i}}var z=BigInt(0),D=BigInt(1),Bt=BigInt(2),Vn=BigInt(3),Gn=BigInt(4),Fn=BigInt(5),Fs=BigInt(7),Xn=BigInt(8),Xs=BigInt(9),Yn=BigInt(16);function O(e,t){let n=e%t;return n>=z?n:t+n}function F(e,t,n){let s=e;for(;t-- >z;)s*=s,s%=n;return s}function $n(e,t){if(e===z)throw new Error("invert: expected non-zero number");if(t<=z)throw new Error("invert: expected positive modulus, got "+t);let n=O(e,t),s=t,r=z,i=D,o=D,c=z;for(;n!==z;){let d=s/n,u=s%n,l=r-o*d,f=i-c*d;s=n,n=u,r=o,i=c,o=l,c=f}if(s!==D)throw new Error("invert: does not exist");return O(r,t)}function je(e,t,n){if(!e.eql(e.sqr(t),n))throw new Error("Cannot find square root")}function Jn(e,t){let n=(e.ORDER+D)/Gn,s=e.pow(t,n);return je(e,s,t),s}function Ys(e,t){let n=(e.ORDER-Fn)/Xn,s=e.mul(t,Bt),r=e.pow(s,n),i=e.mul(t,r),o=e.mul(e.mul(i,Bt),r),c=e.mul(i,e.sub(o,e.ONE));return je(e,c,t),c}function Js(e){let t=nt(e),n=Wn(e),s=n(t,t.neg(t.ONE)),r=n(t,s),i=n(t,t.neg(s)),o=(e+Fs)/Yn;return(c,a)=>{let d=c.pow(a,o),u=c.mul(d,s),l=c.mul(d,r),f=c.mul(d,i),p=c.eql(c.sqr(u),a),h=c.eql(c.sqr(l),a);d=c.cmov(d,u,p),u=c.cmov(f,l,h);let b=c.eql(c.sqr(u),a),m=c.cmov(d,u,b);return je(c,m,a),m}}function Wn(e){if(e<Vn)throw new Error("sqrt is not defined for small field");let t=e-D,n=0;for(;t%Bt===z;)t/=Bt,n++;let s=Bt,r=nt(e);for(;Zn(r,s)===1;)if(s++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return Jn;let i=r.pow(s,t),o=(t+D)/Bt;return function(a,d){if(a.is0(d))return d;if(Zn(a,d)!==1)throw new Error("Cannot find square root");let u=n,l=a.mul(a.ONE,i),f=a.pow(d,t),p=a.pow(d,o);for(;!a.eql(f,a.ONE);){if(a.is0(f))return a.ZERO;let h=1,b=a.sqr(f);for(;!a.eql(b,a.ONE);)if(h++,b=a.sqr(b),h===u)throw new Error("Cannot find square root");let m=D<<BigInt(u-h-1),y=a.pow(l,m);u=h,l=a.sqr(y),f=a.mul(f,l),p=a.mul(p,y)}return p}}function Ws(e){return e%Gn===Vn?Jn:e%Xn===Fn?Ys:e%Yn===Xs?Js(e):Wn(e)}var et=(e,t)=>(O(e,t)&D)===D,Qs=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Qn(e){let t={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},n=Qs.reduce((s,r)=>(s[r]="function",s),t);return vt(e,n),e}function tr(e,t,n){if(n<z)throw new Error("invalid exponent, negatives unsupported");if(n===z)return e.ONE;if(n===D)return t;let s=e.ONE,r=t;for(;n>z;)n&D&&(s=e.mul(s,r)),r=e.sqr(r),n>>=D;return s}function te(e,t,n=!1){let s=new Array(t.length).fill(n?e.ZERO:void 0),r=t.reduce((o,c,a)=>e.is0(c)?o:(s[a]=o,e.mul(o,c)),e.ONE),i=e.inv(r);return t.reduceRight((o,c,a)=>e.is0(c)?o:(s[a]=e.mul(o,s[a]),e.mul(o,c)),i),s}function Zn(e,t){let n=(e.ORDER-D)/Bt,s=e.pow(t,n),r=e.eql(s,e.ONE),i=e.eql(s,e.ZERO),o=e.eql(s,e.neg(e.ONE));if(!r&&!i&&!o)throw new Error("invalid Legendre symbol result");return r?1:i?0:-1}function ts(e,t){t!==void 0&&_e(t);let n=t!==void 0?t:e.toString(2).length,s=Math.ceil(n/8);return{nBitLength:n,nByteLength:s}}function nt(e,t,n=!1,s={}){if(e<=z)throw new Error("invalid field: expected ORDER > 0, got "+e);let r,i,o=!1,c;if(typeof t=="object"&&t!=null){if(s.sqrt||n)throw new Error("cannot specify opts in two arguments");let f=t;f.BITS&&(r=f.BITS),f.sqrt&&(i=f.sqrt),typeof f.isLE=="boolean"&&(n=f.isLE),typeof f.modFromBytes=="boolean"&&(o=f.modFromBytes),c=f.allowedLengths}else typeof t=="number"&&(r=t),s.sqrt&&(i=s.sqrt);let{nBitLength:a,nByteLength:d}=ts(e,r);if(d>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let u,l=Object.freeze({ORDER:e,isLE:n,BITS:a,BYTES:d,MASK:Rt(a),ZERO:z,ONE:D,allowedLengths:c,create:f=>O(f,e),isValid:f=>{if(typeof f!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof f);return z<=f&&f<e},is0:f=>f===z,isValidNot0:f=>!l.is0(f)&&l.isValid(f),isOdd:f=>(f&D)===D,neg:f=>O(-f,e),eql:(f,p)=>f===p,sqr:f=>O(f*f,e),add:(f,p)=>O(f+p,e),sub:(f,p)=>O(f-p,e),mul:(f,p)=>O(f*p,e),pow:(f,p)=>tr(l,f,p),div:(f,p)=>O(f*$n(p,e),e),sqrN:f=>f*f,addN:(f,p)=>f+p,subN:(f,p)=>f-p,mulN:(f,p)=>f*p,inv:f=>$n(f,e),sqrt:i||(f=>(u||(u=Ws(e)),u(l,f))),toBytes:f=>n?Qt(f,d):He(f,d),fromBytes:(f,p=!0)=>{if(c){if(!c.includes(f.length)||f.length>d)throw new Error("Field.fromBytes: expected "+c+" bytes, got "+f.length);let b=new Uint8Array(d);b.set(f,n?0:b.length-f.length),f=b}if(f.length!==d)throw new Error("Field.fromBytes: expected "+d+" bytes, got "+f.length);let h=n?Y(f):jn(f);if(o&&(h=O(h,e)),!p&&!l.isValid(h))throw new Error("invalid field element: outside of range 0..ORDER");return h},invertBatch:f=>te(l,f),cmov:(f,p,h)=>h?p:f});return Object.freeze(l)}var ee=BigInt(0),Ze=BigInt(1);function es(e,t){let n=t.negate();return e?n:t}function Ht(e,t){let n=te(e.Fp,t.map(s=>s.Z));return t.map((s,r)=>e.fromAffine(s.toAffine(n[r])))}function is(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function De(e,t){is(e,t);let n=Math.ceil(t/e)+1,s=2**(e-1),r=2**e,i=Rt(e),o=BigInt(e);return{windows:n,windowSize:s,mask:i,maxNumber:r,shiftBy:o}}function ns(e,t,n){let{windowSize:s,mask:r,maxNumber:i,shiftBy:o}=n,c=Number(e&r),a=e>>o;c>s&&(c-=i,a+=Ze);let d=t*s,u=d+Math.abs(c)-1,l=c===0,f=c<0,p=t%2!==0;return{nextN:a,offset:u,isZero:l,isNeg:f,isNegF:p,offsetF:d}}function er(e,t){if(!Array.isArray(e))throw new Error("array expected");e.forEach((n,s)=>{if(!(n instanceof t))throw new Error("invalid point at index "+s)})}function nr(e,t){if(!Array.isArray(e))throw new Error("array of scalars expected");e.forEach((n,s)=>{if(!t.isValid(n))throw new Error("invalid scalar at index "+s)})}var ze=new WeakMap,os=new WeakMap;function $e(e){return os.get(e)||1}function ss(e){if(e!==ee)throw new Error("invalid wNAF")}var ne=class{constructor(t,n){this.BASE=t.BASE,this.ZERO=t.ZERO,this.Fn=t.Fn,this.bits=n}_unsafeLadder(t,n,s=this.ZERO){let r=t;for(;n>ee;)n&Ze&&(s=s.add(r)),r=r.double(),n>>=Ze;return s}precomputeWindow(t,n){let{windows:s,windowSize:r}=De(n,this.bits),i=[],o=t,c=o;for(let a=0;a<s;a++){c=o,i.push(c);for(let d=1;d<r;d++)c=c.add(o),i.push(c);o=c.double()}return i}wNAF(t,n,s){if(!this.Fn.isValid(s))throw new Error("invalid scalar");let r=this.ZERO,i=this.BASE,o=De(t,this.bits);for(let c=0;c<o.windows;c++){let{nextN:a,offset:d,isZero:u,isNeg:l,isNegF:f,offsetF:p}=ns(s,c,o);s=a,u?i=i.add(es(f,n[p])):r=r.add(es(l,n[d]))}return ss(s),{p:r,f:i}}wNAFUnsafe(t,n,s,r=this.ZERO){let i=De(t,this.bits);for(let o=0;o<i.windows&&s!==ee;o++){let{nextN:c,offset:a,isZero:d,isNeg:u}=ns(s,o,i);if(s=c,!d){let l=n[a];r=r.add(u?l.negate():l)}}return ss(s),r}getPrecomputes(t,n,s){let r=ze.get(n);return r||(r=this.precomputeWindow(n,t),t!==1&&(typeof s=="function"&&(r=s(r)),ze.set(n,r))),r}cached(t,n,s){let r=$e(t);return this.wNAF(r,this.getPrecomputes(r,t,s),n)}unsafe(t,n,s,r){let i=$e(t);return i===1?this._unsafeLadder(t,n,r):this.wNAFUnsafe(i,this.getPrecomputes(i,t,s),n,r)}createCache(t,n){is(n,this.bits),os.set(t,n),ze.delete(t)}hasCache(t){return $e(t)!==1}};function se(e,t,n,s){er(n,e),nr(s,t);let r=n.length,i=s.length;if(r!==i)throw new Error("arrays of points and scalars must have equal length");let o=e.ZERO,c=zn(BigInt(r)),a=1;c>12?a=c-3:c>4?a=c-2:c>0&&(a=2);let d=Rt(a),u=new Array(Number(d)+1).fill(o),l=Math.floor((t.BITS-1)/a)*a,f=o;for(let p=l;p>=0;p-=a){u.fill(o);for(let b=0;b<i;b++){let m=s[b],y=Number(m>>BigInt(p)&d);u[y]=u[y].add(n[b])}let h=o;for(let b=u.length-1,m=o;b>0;b--)m=m.add(u[b]),h=h.add(m);if(f=f.add(h),p!==0)for(let b=0;b<a;b++)f=f.double()}return f}function rs(e,t,n){if(t){if(t.ORDER!==e)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Qn(t),t}else return nt(e,{isLE:n})}function as(e,t,n={},s){if(s===void 0&&(s=e==="edwards"),!t||typeof t!="object")throw new Error(`expected valid ${e} CURVE object`);for(let a of["p","n","h"]){let d=t[a];if(!(typeof d=="bigint"&&d>ee))throw new Error(`CURVE.${a} must be positive bigint`)}let r=rs(t.p,n.Fp,s),i=rs(t.n,n.Fn,s),c=["Gx","Gy","a",e==="weierstrass"?"b":"d"];for(let a of c)if(!r.isValid(t[a]))throw new Error(`CURVE.${a} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:r,Fn:i}}var dt=BigInt(0),L=BigInt(1),Ve=BigInt(2),sr=BigInt(8);function rr(e,t,n,s){let r=e.sqr(n),i=e.sqr(s),o=e.add(e.mul(t.a,r),i),c=e.add(e.ONE,e.mul(t.d,e.mul(r,i)));return e.eql(o,c)}function ir(e,t={}){let n=as("edwards",e,t,t.FpFnLE),{Fp:s,Fn:r}=n,i=n.CURVE,{h:o}=i;vt(t,{},{uvRatio:"function"});let c=Ve<<BigInt(r.BYTES*8)-L,a=m=>s.create(m),d=t.uvRatio||((m,y)=>{try{return{isValid:!0,value:s.sqrt(s.div(m,y))}}catch{return{isValid:!1,value:dt}}});if(!rr(s,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(m,y,v=!1){let g=v?L:dt;return _t("coordinate "+m,y,g,c),y}function l(m){if(!(m instanceof h))throw new Error("ExtendedPoint expected")}let f=ke((m,y)=>{let{X:v,Y:g,Z:I}=m,_=m.is0();y==null&&(y=_?sr:s.inv(I));let U=a(v*y),C=a(g*y),K=s.mul(I,y);if(_)return{x:dt,y:L};if(K!==L)throw new Error("invZ was invalid");return{x:U,y:C}}),p=ke(m=>{let{a:y,d:v}=i;if(m.is0())throw new Error("bad point: ZERO");let{X:g,Y:I,Z:_,T:U}=m,C=a(g*g),K=a(I*I),x=a(_*_),B=a(x*x),A=a(C*y),P=a(x*a(A+K)),E=a(B+a(v*a(C*K)));if(P!==E)throw new Error("bad point: equation left != right (1)");let S=a(g*I),T=a(_*U);if(S!==T)throw new Error("bad point: equation left != right (2)");return!0});class h{constructor(y,v,g,I){this.X=u("x",y),this.Y=u("y",v),this.Z=u("z",g,!0),this.T=u("t",I),Object.freeze(this)}static CURVE(){return i}static fromAffine(y){if(y instanceof h)throw new Error("extended point not allowed");let{x:v,y:g}=y||{};return u("x",v),u("y",g),new h(v,g,L,a(v*g))}static fromBytes(y,v=!1){let g=s.BYTES,{a:I,d:_}=i;y=Ne(Lt(y,g,"point")),Wt(v,"zip215");let U=Ne(y),C=y[g-1];U[g-1]=C&-129;let K=Y(U),x=v?c:s.ORDER;_t("point.y",K,dt,x);let B=a(K*K),A=a(B-L),P=a(_*B-I),{isValid:E,value:S}=d(A,P);if(!E)throw new Error("bad point: invalid y coordinate");let T=(S&L)===L,M=(C&128)!==0;if(!v&&S===dt&&M)throw new Error("bad point: x=0 and x_0=1");return M!==T&&(S=a(-S)),h.fromAffine({x:S,y:K})}static fromHex(y,v=!1){return h.fromBytes(j("point",y),v)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(y=8,v=!0){return b.createCache(this,y),v||this.multiply(Ve),this}assertValidity(){p(this)}equals(y){l(y);let{X:v,Y:g,Z:I}=this,{X:_,Y:U,Z:C}=y,K=a(v*C),x=a(_*I),B=a(g*C),A=a(U*I);return K===x&&B===A}is0(){return this.equals(h.ZERO)}negate(){return new h(a(-this.X),this.Y,this.Z,a(-this.T))}double(){let{a:y}=i,{X:v,Y:g,Z:I}=this,_=a(v*v),U=a(g*g),C=a(Ve*a(I*I)),K=a(y*_),x=v+g,B=a(a(x*x)-_-U),A=K+U,P=A-C,E=K-U,S=a(B*P),T=a(A*E),M=a(B*E),R=a(P*A);return new h(S,T,R,M)}add(y){l(y);let{a:v,d:g}=i,{X:I,Y:_,Z:U,T:C}=this,{X:K,Y:x,Z:B,T:A}=y,P=a(I*K),E=a(_*x),S=a(C*g*A),T=a(U*B),M=a((I+_)*(K+x)-P-E),R=T-S,q=T+S,H=a(E-v*P),V=a(M*R),X=a(q*H),Tt=a(M*H),St=a(R*q);return new h(V,X,St,Tt)}subtract(y){return this.add(y.negate())}multiply(y){if(!r.isValidNot0(y))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:v,f:g}=b.cached(this,y,I=>Ht(h,I));return Ht(h,[v,g])[0]}multiplyUnsafe(y,v=h.ZERO){if(!r.isValid(y))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return y===dt?h.ZERO:this.is0()||y===L?this:b.unsafe(this,y,g=>Ht(h,g),v)}isSmallOrder(){return this.multiplyUnsafe(o).is0()}isTorsionFree(){return b.unsafe(this,i.n).is0()}toAffine(y){return f(this,y)}clearCofactor(){return o===L?this:this.multiplyUnsafe(o)}toBytes(){let{x:y,y:v}=this.toAffine(),g=s.toBytes(v);return g[g.length-1]|=y&L?128:0,g}toHex(){return xt(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get ex(){return this.X}get ey(){return this.Y}get ez(){return this.Z}get et(){return this.T}static normalizeZ(y){return Ht(h,y)}static msm(y,v){return se(h,r,y,v)}_setWindowSize(y){this.precompute(y)}toRawBytes(){return this.toBytes()}}h.BASE=new h(i.Gx,i.Gy,L,a(i.Gx*i.Gy)),h.ZERO=new h(dt,L,L,dt),h.Fp=s,h.Fn=r;let b=new ne(h,r.BITS);return h.BASE.precompute(8),h}var re=class{constructor(t){this.ep=t}static fromBytes(t){qe()}static fromHex(t){qe()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(t){return this.ep.toAffine(t)}toHex(){return xt(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(t){return this.assertSame(t),this.init(this.ep.add(t.ep))}subtract(t){return this.assertSame(t),this.init(this.ep.subtract(t.ep))}multiply(t){return this.init(this.ep.multiply(t))}multiplyUnsafe(t){return this.init(this.ep.multiplyUnsafe(t))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(t,n){return this.init(this.ep.precompute(t,n))}toRawBytes(){return this.toBytes()}};function or(e,t,n={}){if(typeof t!="function")throw new Error('"hash" function param is required');vt(n,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:s}=n,{BASE:r,Fp:i,Fn:o}=e,c=n.randomBytes||Ut,a=n.adjustScalarBytes||(x=>x),d=n.domain||((x,B,A)=>{if(Wt(A,"phflag"),B.length||A)throw new Error("Contexts/pre-hash are not supported");return x});function u(x){return o.create(Y(x))}function l(x){let B=g.secretKey;x=j("private key",x,B);let A=j("hashed private key",t(x),2*B),P=a(A.slice(0,B)),E=A.slice(B,2*B),S=u(P);return{head:P,prefix:E,scalar:S}}function f(x){let{head:B,prefix:A,scalar:P}=l(x),E=r.multiply(P),S=E.toBytes();return{head:B,prefix:A,scalar:P,point:E,pointBytes:S}}function p(x){return f(x).pointBytes}function h(x=Uint8Array.of(),...B){let A=It(...B);return u(t(d(A,j("context",x),!!s)))}function b(x,B,A={}){x=j("message",x),s&&(x=s(x));let{prefix:P,scalar:E,pointBytes:S}=f(B),T=h(A.context,P,x),M=r.multiply(T).toBytes(),R=h(A.context,M,S,x),q=o.create(T+R*E);if(!o.isValid(q))throw new Error("sign failed: invalid s");let H=It(M,o.toBytes(q));return Lt(H,g.signature,"result")}let m={zip215:!0};function y(x,B,A,P=m){let{context:E,zip215:S}=P,T=g.signature;x=j("signature",x,T),B=j("message",B),A=j("publicKey",A,g.publicKey),S!==void 0&&Wt(S,"zip215"),s&&(B=s(B));let M=T/2,R=x.subarray(0,M),q=Y(x.subarray(M,T)),H,V,X;try{H=e.fromBytes(A,S),V=e.fromBytes(R,S),X=r.multiplyUnsafe(q)}catch{return!1}if(!S&&H.isSmallOrder())return!1;let Tt=h(E,V.toBytes(),H.toBytes(),B);return V.add(H.multiplyUnsafe(Tt)).subtract(X).clearCofactor().is0()}let v=i.BYTES,g={secretKey:v,publicKey:v,signature:2*v,seed:v};function I(x=c(g.seed)){return Lt(x,g.seed,"seed")}function _(x){let B=K.randomSecretKey(x);return{secretKey:B,publicKey:p(B)}}function U(x){return mt(x)&&x.length===o.BYTES}function C(x,B){try{return!!e.fromBytes(x,B)}catch{return!1}}let K={getExtendedPublicKey:f,randomSecretKey:I,isValidSecretKey:U,isValidPublicKey:C,toMontgomery(x){let{y:B}=e.fromBytes(x),A=g.publicKey,P=A===32;if(!P&&A!==57)throw new Error("only defined for 25519 and 448");let E=P?i.div(L+B,L-B):i.div(B-L,B+L);return i.toBytes(E)},toMontgomerySecret(x){let B=g.secretKey;Lt(x,B);let A=t(x.subarray(0,B));return a(A).subarray(0,B)},randomPrivateKey:I,precompute(x=8,B=e.BASE){return B.precompute(x,!1)}};return Object.freeze({keygen:_,getPublicKey:p,sign:b,verify:y,utils:K,Point:e,lengths:g})}function ar(e){let t={a:e.a,d:e.d,p:e.Fp.ORDER,n:e.n,h:e.h,Gx:e.Gx,Gy:e.Gy},n=e.Fp,s=nt(t.n,e.nBitLength,!0),r={Fp:n,Fn:s,uvRatio:e.uvRatio},i={randomBytes:e.randomBytes,adjustScalarBytes:e.adjustScalarBytes,domain:e.domain,prehash:e.prehash,mapToCurve:e.mapToCurve};return{CURVE:t,curveOpts:r,hash:e.hash,eddsaOpts:i}}function cr(e,t){let n=t.Point;return Object.assign({},t,{ExtendedPoint:n,CURVE:e,nBitLength:n.Fn.BITS,nByteLength:n.Fn.BYTES})}function cs(e){let{CURVE:t,curveOpts:n,hash:s,eddsaOpts:r}=ar(e),i=ir(t,n),o=or(i,s,r);return cr(e,o)}var Nt=BigInt(0),Kt=BigInt(1),ie=BigInt(2);function fr(e){return vt(e,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...e})}function fs(e){let t=fr(e),{P:n,type:s,adjustScalarBytes:r,powPminus2:i,randomBytes:o}=t,c=s==="x25519";if(!c&&s!=="x448")throw new Error("invalid type");let a=o||Ut,d=c?255:448,u=c?32:56,l=BigInt(c?9:5),f=BigInt(c?121665:39081),p=c?ie**BigInt(254):ie**BigInt(447),h=c?BigInt(8)*ie**BigInt(251)-Kt:BigInt(4)*ie**BigInt(445)-Kt,b=p+h+Kt,m=E=>O(E,n),y=v(l);function v(E){return Qt(m(E),u)}function g(E){let S=j("u coordinate",E,u);return c&&(S[31]&=127),m(Y(S))}function I(E){return Y(r(j("scalar",E,u)))}function _(E,S){let T=K(g(S),I(E));if(T===Nt)throw new Error("invalid private or public key received");return v(T)}function U(E){return _(E,y)}function C(E,S,T){let M=m(E*(S-T));return S=m(S-M),T=m(T+M),{x_2:S,x_3:T}}function K(E,S){_t("u",E,Nt,n),_t("scalar",S,p,b);let T=S,M=E,R=Kt,q=Nt,H=E,V=Kt,X=Nt;for(let St=BigInt(d-1);St>=Nt;St--){let fe=T>>St&Kt;X^=fe,{x_2:R,x_3:H}=C(X,R,H),{x_2:q,x_3:V}=C(X,q,V),X=fe;let de=R+q,ue=m(de*de),le=R-q,We=m(le*le),Qe=ue-We,gs=H+V,ms=H-V,tn=m(ms*de),en=m(gs*le),nn=tn+en,sn=tn-en;H=m(nn*nn),V=m(M*m(sn*sn)),R=m(ue*We),q=m(Qe*(ue+m(f*Qe)))}({x_2:R,x_3:H}=C(X,R,H)),{x_2:q,x_3:V}=C(X,q,V);let Tt=i(q);return m(R*Tt)}let x={secretKey:u,publicKey:u,seed:u},B=(E=a(u))=>(Z(E,x.seed),E);function A(E){let S=B(E);return{secretKey:S,publicKey:U(S)}}return{keygen:A,getSharedSecret:(E,S)=>_(E,S),getPublicKey:E=>U(E),scalarMult:_,scalarMultBase:U,utils:{randomSecretKey:B,randomPrivateKey:B},GuBytes:y.slice(),lengths:x}}var dr=BigInt(0),rt=BigInt(1),ds=BigInt(2),ur=BigInt(3),lr=BigInt(5),hr=BigInt(8),Pt=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),qt={p:Pt,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:hr,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function hs(e){let t=BigInt(10),n=BigInt(20),s=BigInt(40),r=BigInt(80),i=Pt,c=e*e%i*e%i,a=F(c,ds,i)*c%i,d=F(a,rt,i)*e%i,u=F(d,lr,i)*d%i,l=F(u,t,i)*u%i,f=F(l,n,i)*l%i,p=F(f,s,i)*f%i,h=F(p,r,i)*p%i,b=F(h,r,i)*p%i,m=F(b,t,i)*u%i;return{pow_p_5_8:F(m,ds,i)*e%i,b2:c}}function ys(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}var Ge=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Ye(e,t){let n=Pt,s=O(t*t*t,n),r=O(s*s*t,n),i=hs(e*r).pow_p_5_8,o=O(e*s*i,n),c=O(t*o*o,n),a=o,d=O(o*Ge,n),u=c===e,l=c===O(-e,n),f=c===O(-e*Ge,n);return u&&(o=a),(l||f)&&(o=d),et(o,n)&&(o=O(-o,n)),{isValid:u||l,value:o}}var st=nt(qt.p,{isLE:!0}),yr=nt(qt.n,{isLE:!0}),pr={...qt,Fp:st,hash:qn,adjustScalarBytes:ys,uvRatio:Ye},Et=cs(pr);var ot=(()=>{let e=st.ORDER;return fs({P:e,type:"x25519",powPminus2:t=>{let{pow_p_5_8:n,b2:s}=hs(t);return O(F(n,ur,e)*s,e)},adjustScalarBytes:ys})})();var Fe=Ge,gr=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),mr=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),xr=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),br=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),us=e=>Ye(rt,e),wr=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),Xe=e=>Et.Point.Fp.create(Y(e)&wr);function ls(e){let{d:t}=qt,n=Pt,s=y=>st.create(y),r=s(Fe*e*e),i=s((r+rt)*xr),o=BigInt(-1),c=s((o-t*r)*s(r+t)),{isValid:a,value:d}=Ye(i,c),u=s(d*e);et(u,n)||(u=s(-u)),a||(d=u),a||(o=r);let l=s(o*(r-rt)*br-c),f=d*d,p=s((d+d)*c),h=s(l*gr),b=s(rt-f),m=s(rt+f);return new Et.Point(s(p*m),s(b*h),s(h*m),s(p*b))}function vr(e){Z(e,64);let t=Xe(e.subarray(0,32)),n=ls(t),s=Xe(e.subarray(32,64)),r=ls(s);return new it(n.add(r))}var it=class e extends re{constructor(t){super(t)}static fromAffine(t){return new e(Et.Point.fromAffine(t))}assertSame(t){if(!(t instanceof e))throw new Error("RistrettoPoint expected")}init(t){return new e(t)}static hashToCurve(t){return vr(j("ristrettoHash",t,64))}static fromBytes(t){Z(t,32);let{a:n,d:s}=qt,r=Pt,i=I=>st.create(I),o=Xe(t);if(!Dn(st.toBytes(o),t)||et(o,r))throw new Error("invalid ristretto255 encoding 1");let c=i(o*o),a=i(rt+n*c),d=i(rt-n*c),u=i(a*a),l=i(d*d),f=i(n*s*u-l),{isValid:p,value:h}=us(i(f*l)),b=i(h*d),m=i(h*b*f),y=i((o+o)*b);et(y,r)&&(y=i(-y));let v=i(a*m),g=i(y*v);if(!p||et(g,r)||v===dr)throw new Error("invalid ristretto255 encoding 2");return new e(new Et.Point(y,v,rt,g))}static fromHex(t){return e.fromBytes(j("ristrettoHex",t,32))}static msm(t,n){return se(e,Et.Point.Fn,t,n)}toBytes(){let{X:t,Y:n,Z:s,T:r}=this.ep,i=Pt,o=m=>st.create(m),c=o(o(s+n)*o(s-n)),a=o(t*n),d=o(a*a),{value:u}=us(o(c*d)),l=o(u*c),f=o(u*a),p=o(l*f*r),h;if(et(r*p,i)){let m=o(n*Fe),y=o(t*Fe);t=m,n=y,h=o(l*mr)}else h=f;et(t*p,i)&&(n=o(-n));let b=o((s-n)*h);return et(b,i)&&(b=o(-b)),st.toBytes(b)}equals(t){this.assertSame(t);let{X:n,Y:s}=this.ep,{X:r,Y:i}=t.ep,o=d=>st.create(d),c=o(n*i)===o(s*r),a=o(s*i)===o(n*r);return c||a}is0(){return this.equals(e.ZERO)}};it.BASE=new it(Et.Point.BASE);it.ZERO=new it(Et.Point.ZERO);it.Fp=st;it.Fn=yr;var Je=class{data=new Map;async get(t){return this.data.get(t)??null}async set(t,n){this.data.set(t,n)}async delete(t){this.data.delete(t)}},oe=class{prefix;constructor(t="moltdm"){this.prefix=t}async get(t){return typeof localStorage>"u"?null:localStorage.getItem(`${this.prefix}:${t}`)}async set(t,n){typeof localStorage>"u"||localStorage.setItem(`${this.prefix}:${t}`,n)}async delete(t){typeof localStorage>"u"||localStorage.removeItem(`${this.prefix}:${t}`)}},ae=class{basePath;_fs=null;_path=null;_initialized=!1;constructor(t){this.basePath=t||".moltdm"}async ensureModules(){if(!this._initialized){if(typeof window<"u"){console.warn("FileStorage is not supported in browser. Use BrowserStorage instead.");return}try{let t=await import("fs"),n=await import("path"),s=await import("os");if(this._fs=t,this._path=n,this.basePath===".moltdm"){let r=process.env.OPENCLAW_STATE_DIR;this.basePath=r?n.join(r,".moltdm"):n.join(s.homedir(),".moltdm")}t.existsSync(this.basePath)||t.mkdirSync(this.basePath,{recursive:!0}),this._initialized=!0}catch(t){console.error("Failed to load Node.js modules for FileStorage:",t)}}}async get(t){if(await this.ensureModules(),!this._fs)return null;let n=this._path.join(this.basePath,`${t}.json`);return this._fs.existsSync(n)?this._fs.readFileSync(n,"utf-8"):null}async set(t,n){if(await this.ensureModules(),!this._fs)return;let s=this._path.join(this.basePath,`${t}.json`);this._fs.writeFileSync(s,n)}async delete(t){if(await this.ensureModules(),!this._fs)return;let n=this._path.join(this.basePath,`${t}.json`);this._fs.existsSync(n)&&this._fs.unlinkSync(n)}};function $(e){if(typeof Buffer<"u")return Buffer.from(e).toString("base64");let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function ut(e){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(e,"base64"));let t=atob(e),n=new Uint8Array(t.length);for(let s=0;s<t.length;s++)n[s]=t.charCodeAt(s);return n}async function ps(e,t){let n=new Uint8Array(e).buffer,s=new Uint8Array(t).buffer,r=await crypto.subtle.importKey("raw",n,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",r,s);return new Uint8Array(i)}var ce=class{storage;relayUrl;identity=null;senderKeys=new Map;receivedSenderKeys=new Map;constructor(t={}){t.storage?this.storage=t.storage:typeof window<"u"&&typeof localStorage<"u"?this.storage=new oe:this.storage=new ae(t.storagePath),this.relayUrl=t.relayUrl||"https://relay.moltdm.com",t.identity&&(this.identity=t.identity)}get address(){if(!this.identity)throw new Error("Not initialized. Call initialize() first.");return`moltdm:${this.identity.moltbotId}`}get moltbotId(){if(!this.identity)throw new Error("Not initialized. Call initialize() first.");return this.identity.moltbotId}getIdentity(){return this.identity}async initialize(){if(this.identity){await this.loadSenderKeys();return}let t=await this.storage.get("identity");t?this.identity=JSON.parse(t):(await this.createIdentity(),await this.storage.set("identity",JSON.stringify(this.identity))),await this.loadSenderKeys()}async createIdentity(){let t=Sn.randomPrivateKey(),n=await Bn(t),s=$(t),r=$(n),i=ot.utils.randomPrivateKey(),o=ot.getPublicKey(i),c=await Ie(o,t),a={publicKey:$(o),privateKey:$(i),signature:$(c)},d=[],u=[];for(let p=0;p<10;p++){let h=ot.utils.randomPrivateKey(),b=ot.getPublicKey(h);d.push({publicKey:$(b),privateKey:$(h)}),u.push($(b))}let l=await fetch(`${this.relayUrl}/api/identity/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publicKey:r,signedPreKey:a.publicKey,preKeySignature:a.signature,oneTimePreKeys:u})});if(!l.ok){let p=await l.json();throw new Error(`Registration failed: ${p.error}`)}let f=await l.json();this.identity={moltbotId:f.identity.id,publicKey:r,privateKey:s,signedPreKey:a,oneTimePreKeys:d}}async loadSenderKeys(){let t=await this.storage.get("sender_keys");if(t){let s=JSON.parse(t);for(let[r,i]of Object.entries(s)){let o=i,c=ut(o.chainKey||o.key||"");this.senderKeys.set(r,{chainKey:c,initialChainKey:o.initialChainKey?ut(o.initialChainKey):c,version:o.version,messageIndex:o.messageIndex??o.index??0})}}let n=await this.storage.get("received_sender_keys");if(n){let s=JSON.parse(n);for(let[r,i]of Object.entries(s)){let o=i;this.receivedSenderKeys.set(r,{chainKey:ut(o.chainKey),version:o.version,messageIndex:o.messageIndex})}}}async saveSenderKeys(){let t={};for(let[s,r]of this.senderKeys)t[s]={chainKey:$(r.chainKey),initialChainKey:$(r.initialChainKey),version:r.version,messageIndex:r.messageIndex};await this.storage.set("sender_keys",JSON.stringify(t));let n={};for(let[s,r]of this.receivedSenderKeys)n[s]={chainKey:$(r.chainKey),version:r.version,messageIndex:r.messageIndex};await this.storage.set("received_sender_keys",JSON.stringify(n))}async deriveMessageKey(t){return ps(t,new Uint8Array([1]))}async ratchetChainKey(t){return ps(t,new Uint8Array([2]))}async ratchetChainKeyN(t,n){let s=[],r=t;for(let i=0;i<n;i++)s.push(await this.deriveMessageKey(r)),r=await this.ratchetChainKey(r);return{chainKey:r,messageKeys:s}}async startConversation(t,n){return this.ensureInitialized(),(await this.fetch("/api/conversations",{method:"POST",body:JSON.stringify({memberIds:t,name:n?.name,type:n?.type})})).json()}async listConversations(){return this.ensureInitialized(),(await(await this.fetch("/api/conversations")).json()).conversations}async getConversation(t){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}`)).json()).conversation}async updateConversation(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}`,{method:"PATCH",body:JSON.stringify(n)})).json()).conversation}async deleteConversation(t){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}`,{method:"DELETE"})}async addMembers(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/members`,{method:"POST",body:JSON.stringify({memberIds:n})})).json()).conversation}async removeMember(t,n){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/members/${n}`,{method:"DELETE"}),n!==this.moltbotId&&await this.rotateSenderKey(t)}async leaveConversation(t){this.ensureInitialized(),await this.removeMember(t,this.moltbotId),this.senderKeys.delete(t),await this.saveSenderKeys()}async promoteAdmin(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/admins`,{method:"POST",body:JSON.stringify({memberId:n})})).json()).conversation}async demoteAdmin(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/admins/${n}`,{method:"DELETE"})).json()).conversation}async send(t,n,s){this.ensureInitialized();let r=this.senderKeys.get(t);if(!r){let l=crypto.getRandomValues(new Uint8Array(32));r={chainKey:l,initialChainKey:new Uint8Array(l),version:1,messageIndex:0},this.senderKeys.set(t,r)}let i=await this.deriveMessageKey(r.chainKey),o=r.messageIndex;r.chainKey=await this.ratchetChainKey(r.chainKey),r.messageIndex++;let c=await this.encrypt(n,i),a=await this.encryptChainKeyForRecipients(t,r.initialChainKey),d=await this.fetch(`/api/conversations/${t}/messages`,{method:"POST",body:JSON.stringify({ciphertext:c,senderKeyVersion:r.version,messageIndex:o,replyTo:s?.replyTo,encryptedSenderKeys:a})});return await this.saveSenderKeys(),{messageId:(await d.json()).message.id}}async rotateSenderKey(t){this.ensureInitialized();let n=this.senderKeys.get(t),s=n?n.version+1:1,r=crypto.getRandomValues(new Uint8Array(32));this.senderKeys.set(t,{chainKey:r,initialChainKey:new Uint8Array(r),version:s,messageIndex:0}),await this.saveSenderKeys()}async encryptChainKeyForRecipients(t,n){let s={};try{let r=await this.getConversation(t);for(let i of r.members)try{let o=await fetch(`${this.relayUrl}/api/identity/${i}`);if(!o.ok)continue;let c=await o.json(),a=ut(c.identity.signedPreKey),d=ot.utils.randomPrivateKey(),u=ot.getPublicKey(d),l=ot.getSharedSecret(d,a),f=new Uint8Array(32);f.set(new Uint8Array(l));let p=new Uint8Array(32);p.set(new Uint8Array(n));let h=await crypto.subtle.importKey("raw",f.buffer,{name:"HKDF"},!1,["deriveKey"]),b=await crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:new Uint8Array(32),info:new TextEncoder().encode("moltdm-sender-key")},h,{name:"AES-GCM",length:256},!1,["encrypt"]),m=crypto.getRandomValues(new Uint8Array(12)),y=await crypto.subtle.encrypt({name:"AES-GCM",iv:m},b,p.buffer),v=new Uint8Array(44+y.byteLength);v.set(u),v.set(m,32),v.set(new Uint8Array(y),44),s[i]=$(v)}catch(o){console.error(`Failed to encrypt chain key for ${i}:`,o)}}catch(r){console.error("Failed to encrypt chain keys:",r)}return s}async decryptChainKey(t){try{let n=ut(t),s=n.slice(0,32),r=n.slice(32,44),i=n.slice(44),o=ut(this.identity.signedPreKey.privateKey),c=ot.getSharedSecret(o,s),a=await crypto.subtle.importKey("raw",new Uint8Array(c).buffer,{name:"HKDF"},!1,["deriveKey"]),d=await crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:new Uint8Array(32),info:new TextEncoder().encode("moltdm-sender-key")},a,{name:"AES-GCM",length:256},!1,["decrypt"]),u=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},d,i);return new Uint8Array(u)}catch(n){return console.error("Failed to decrypt chain key:",n),null}}async decryptMessage(t){this.ensureInitialized();let{conversationId:n,fromId:s,ciphertext:r,senderKeyVersion:i,messageIndex:o,encryptedSenderKeys:c}=t,a=`${n}:${s}`,d=this.receivedSenderKeys.get(a);if(c?c[this.moltbotId]||console.error(`[decrypt] Message ${t.id} missing key for ${this.moltbotId}. Available: ${Object.keys(c).join(", ")}`):console.error(`[decrypt] Message ${t.id} has no encryptedSenderKeys - sent before Sender Keys`),c&&c[this.moltbotId]&&(!d||d.version!==i)){let u=await this.decryptChainKey(c[this.moltbotId]);u?(d={chainKey:u,version:i,messageIndex:0},this.receivedSenderKeys.set(a,d),await this.saveSenderKeys()):console.error(`[decrypt] Failed to decrypt chain key for ${a}`)}if(!d)return console.error(`[decrypt] No sender key for ${a}`),null;if(o>d.messageIndex){let u=o-d.messageIndex+1,{chainKey:l,messageKeys:f}=await this.ratchetChainKeyN(d.chainKey,u),p=f[f.length-1];return d.chainKey=l,d.messageIndex=o+1,this.receivedSenderKeys.set(a,d),await this.saveSenderKeys(),this.decrypt(r,p)}else if(o===d.messageIndex){let u=await this.deriveMessageKey(d.chainKey);return d.chainKey=await this.ratchetChainKey(d.chainKey),d.messageIndex++,this.receivedSenderKeys.set(a,d),await this.saveSenderKeys(),this.decrypt(r,u)}else return console.error(`[decrypt] Message index ${o} is in the past (current: ${d.messageIndex})`),null}async getMessages(t,n){this.ensureInitialized();let s=new URLSearchParams;n?.since&&s.set("since",n.since),n?.limit&&s.set("limit",String(n.limit));let r=`/api/conversations/${t}/messages${s.toString()?"?"+s:""}`;return(await(await this.fetch(r)).json()).messages}async deleteMessage(t,n){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/messages/${n}`,{method:"DELETE"})}async react(t,n,s){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/messages/${n}/reactions`,{method:"POST",body:JSON.stringify({emoji:s})})).json()).reaction}async unreact(t,n,s){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/messages/${n}/reactions/${encodeURIComponent(s)}`,{method:"DELETE"})}async getReactions(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/messages/${n}/reactions`)).json()).reactions}async setDisappearingTimer(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/disappearing`,{method:"PATCH",body:JSON.stringify({timer:n})})).json()).conversation}async createInvite(t,n){this.ensureInitialized();let r=await(await this.fetch(`/api/conversations/${t}/invites`,{method:"POST",body:JSON.stringify({expiresIn:n?.expiresIn})})).json();return{token:r.invite.token,url:r.url}}async listInvites(t){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/invites`)).json()).invites}async revokeInvite(t,n){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/invites/${n}`,{method:"DELETE"})}async getInviteInfo(t){let n=await fetch(`${this.relayUrl}/api/invites/${t}`);if(!n.ok){let s=await n.json();throw new Error(s.error||"Failed to get invite info")}return n.json()}async joinViaInvite(t){return this.ensureInitialized(),(await(await this.fetch(`/api/invites/${t}/join`,{method:"POST"})).json()).conversation}async getPendingRequests(){return this.ensureInitialized(),(await(await this.fetch("/api/requests")).json()).requests}async acceptRequest(t){return this.ensureInitialized(),(await(await this.fetch(`/api/requests/${t}/accept`,{method:"POST"})).json()).conversation}async rejectRequest(t){this.ensureInitialized(),await this.fetch(`/api/requests/${t}/reject`,{method:"POST"})}async block(t){this.ensureInitialized(),await this.fetch(`/api/blocks/${t}`,{method:"POST"})}async unblock(t){this.ensureInitialized(),await this.fetch(`/api/blocks/${t}`,{method:"DELETE"})}async listBlocked(){return this.ensureInitialized(),(await(await this.fetch("/api/blocks")).json()).blocked}async poll(t){this.ensureInitialized();let n=new URLSearchParams;t?.since&&n.set("since",t.since);let s=`/api/poll${n.toString()?"?"+n:""}`;return(await this.fetch(s)).json()}async createPairingLink(){return this.ensureInitialized(),(await this.fetch("/api/pair/init",{method:"POST"})).json()}async getPendingPairings(){return this.ensureInitialized(),(await(await this.fetch("/api/pair/pending")).json()).requests}async approvePairing(t){this.ensureInitialized();let n={};for(let[o,c]of this.senderKeys)n[o]=$(c.initialChainKey);let s={identityKey:this.identity.publicKey,privateKey:this.identity.privateKey,signedPreKeyPrivate:this.identity.signedPreKey.privateKey,senderKeys:n};return(await(await this.fetch("/api/pair/approve",{method:"POST",body:JSON.stringify({token:t,encryptionKeys:s})})).json()).device}async rejectPairing(t){this.ensureInitialized(),await this.fetch("/api/pair/reject",{method:"POST",body:JSON.stringify({token:t})})}async listDevices(){return this.ensureInitialized(),(await(await this.fetch("/api/devices")).json()).devices}async revokeDevice(t){this.ensureInitialized(),await this.fetch(`/api/devices/${t}`,{method:"DELETE"})}async getEvents(t,n){this.ensureInitialized();let s=new URLSearchParams;n?.since&&s.set("since",n.since);let r=`/api/conversations/${t}/events${s.toString()?"?"+s:""}`;return(await(await this.fetch(r)).json()).events}async encrypt(t,n){let s=crypto.getRandomValues(new Uint8Array(12)),i=new TextEncoder().encode(t),o=new Uint8Array(n).buffer,c=await crypto.subtle.importKey("raw",o,{name:"AES-GCM"},!1,["encrypt"]),a=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},c,i),d=new Uint8Array(s.length+a.byteLength);return d.set(s),d.set(new Uint8Array(a),s.length),$(d)}async decrypt(t,n){let s=ut(t),r=s.slice(0,12),i=s.slice(12),o=new Uint8Array(n).buffer,c=await crypto.subtle.importKey("raw",o,{name:"AES-GCM"},!1,["decrypt"]),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},c,i);return new TextDecoder().decode(a)}ensureInitialized(){if(!this.identity)throw new Error("Not initialized. Call initialize() first.")}async signMessage(t){let n=ut(this.identity.privateKey),s=await Ie(new TextEncoder().encode(t),n);return $(s)}async createSignedMessage(t,n,s,r){let i="";if(r){let o=new TextEncoder().encode(r),c=await crypto.subtle.digest("SHA-256",o);i=Array.from(new Uint8Array(c)).map(d=>d.toString(16).padStart(2,"0")).join("")}return`${t}:${n}:${s}:${i}`}async fetch(t,n={}){let s=n.method||"GET",r=n.body,i=Date.now().toString(),o=await this.createSignedMessage(i,s,t,r),c=await this.signMessage(o),a=await fetch(`${this.relayUrl}${t}`,{...n,headers:{"Content-Type":"application/json","X-Moltbot-Id":this.identity.moltbotId,"X-Timestamp":i,"X-Signature":c,...n.headers}});if(!a.ok){let d=await a.json().catch(()=>({error:"Request failed"}));throw new Error(d.error||`HTTP ${a.status}`)}return a}},Br=ce;return Ss(Er);})();
1
+ "use strict";var MoltDM=(()=>{var xs=Object.create;var kt=Object.defineProperty;var bs=Object.getOwnPropertyDescriptor;var ws=Object.getOwnPropertyNames;var vs=Object.getPrototypeOf,Bs=Object.prototype.hasOwnProperty;var he=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Es=(e,t)=>{for(var n in t)kt(e,n,{get:t[n],enumerable:!0})},rn=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ws(t))!Bs.call(e,r)&&r!==n&&kt(e,r,{get:()=>t[r],enumerable:!(s=bs(t,r))||s.enumerable});return e};var ye=(e,t,n)=>(n=e!=null?xs(vs(e)):{},rn(t||!e||!e.__esModule?kt(n,"default",{value:e,enumerable:!0}):n,e)),Ss=e=>rn(kt({},"__esModule",{value:!0}),e);var Er={};Es(Er,{BrowserStorage:()=>oe,FileStorage:()=>ae,MemoryStorage:()=>Je,MoltDMClient:()=>ce,default:()=>Br});var As={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:k,n:jt,Gx:on,Gy:an,a:pe,d:ge}=As,Is=8n,ht=32,we=64,G=(e="")=>{throw new Error(e)},Ks=e=>typeof e=="bigint",hn=e=>typeof e=="string",_s=e=>e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array",yt=(e,t)=>!_s(e)||typeof t=="number"&&t>0&&e.length!==t?G("Uint8Array expected"):e,Zt=e=>new Uint8Array(e),ve=e=>Uint8Array.from(e),yn=(e,t)=>e.toString(16).padStart(t,"0"),Be=e=>Array.from(yt(e)).map(t=>yn(t,2)).join(""),Q={_0:48,_9:57,A:65,F:70,a:97,f:102},cn=e=>{if(e>=Q._0&&e<=Q._9)return e-Q._0;if(e>=Q.A&&e<=Q.F)return e-(Q.A-10);if(e>=Q.a&&e<=Q.f)return e-(Q.a-10)},Ee=e=>{let t="hex invalid";if(!hn(e))return G(t);let n=e.length,s=n/2;if(n%2)return G(t);let r=Zt(s);for(let i=0,o=0;i<s;i++,o+=2){let c=cn(e.charCodeAt(o)),a=cn(e.charCodeAt(o+1));if(c===void 0||a===void 0)return G(t);r[i]=c*16+a}return r},Vt=(e,t)=>yt(hn(e)?Ee(e):ve(yt(e)),t),pn=()=>globalThis?.crypto,Ps=()=>pn()?.subtle??G("crypto.subtle must be defined"),Dt=(...e)=>{let t=Zt(e.reduce((s,r)=>s+yt(r).length,0)),n=0;return e.forEach(s=>{t.set(s,n),n+=s.length}),t},gn=(e=ht)=>pn().getRandomValues(Zt(e)),zt=BigInt,lt=(e,t,n,s="bad number: out of range")=>Ks(e)&&t<=e&&e<n?e:G(s),w=(e,t=k)=>{let n=e%t;return n>=0n?n:t+n},mn=e=>w(e,jt),xn=(e,t)=>{(e===0n||t<=0n)&&G("no inverse n="+e+" mod="+t);let n=w(e,t),s=t,r=0n,i=1n,o=1n,c=0n;for(;n!==0n;){let a=s/n,d=s%n,u=r-o*a,l=i-c*a;s=n,n=d,r=o,i=c,o=u,c=l}return s===1n?w(r,t):G("no inverse")},Ts=e=>{let t=En[e];return typeof t!="function"&&G("hashes."+e+" not set"),t},fn=e=>e instanceof pt?e:G("Point expected"),me=2n**256n,pt=class e{static BASE;static ZERO;ex;ey;ez;et;constructor(t,n,s,r){let i=me;this.ex=lt(t,0n,i),this.ey=lt(n,0n,i),this.ez=lt(s,1n,i),this.et=lt(r,0n,i),Object.freeze(this)}static fromAffine(t){return new e(t.x,t.y,1n,w(t.x*t.y))}static fromBytes(t,n=!1){let s=ge,r=ve(yt(t,ht)),i=t[31];r[31]=i&-129;let o=wn(r);lt(o,0n,n?me:k);let a=w(o*o),d=w(a-1n),u=w(s*a+1n),{isValid:l,value:f}=Us(d,u);l||G("bad point: y not sqrt");let p=(f&1n)===1n,h=(i&128)!==0;return!n&&f===0n&&h&&G("bad point: x==0, isLastByteOdd"),h!==p&&(f=w(-f)),new e(f,o,1n,w(f*o))}assertValidity(){let t=pe,n=ge,s=this;if(s.is0())throw new Error("bad point: ZERO");let{ex:r,ey:i,ez:o,et:c}=s,a=w(r*r),d=w(i*i),u=w(o*o),l=w(u*u),f=w(a*t),p=w(u*w(f+d)),h=w(l+w(n*w(a*d)));if(p!==h)throw new Error("bad point: equation left != right (1)");let b=w(r*i),m=w(o*c);if(b!==m)throw new Error("bad point: equation left != right (2)");return this}equals(t){let{ex:n,ey:s,ez:r}=this,{ex:i,ey:o,ez:c}=fn(t),a=w(n*c),d=w(i*r),u=w(s*c),l=w(o*r);return a===d&&u===l}is0(){return this.equals(At)}negate(){return new e(w(-this.ex),this.ey,this.ez,w(-this.et))}double(){let{ex:t,ey:n,ez:s}=this,r=pe,i=w(t*t),o=w(n*n),c=w(2n*w(s*s)),a=w(r*i),d=t+n,u=w(w(d*d)-i-o),l=a+o,f=l-c,p=a-o,h=w(u*f),b=w(l*p),m=w(u*p),y=w(f*l);return new e(h,b,y,m)}add(t){let{ex:n,ey:s,ez:r,et:i}=this,{ex:o,ey:c,ez:a,et:d}=fn(t),u=pe,l=ge,f=w(n*o),p=w(s*c),h=w(i*l*d),b=w(r*a),m=w((n+s)*(o+c)-f-p),y=w(b-h),v=w(b+h),g=w(p-u*f),I=w(m*y),K=w(v*g),U=w(m*g),C=w(y*v);return new e(I,K,C,U)}multiply(t,n=!0){if(!n&&(t===0n||this.is0()))return At;if(lt(t,1n,jt),t===1n)return this;if(this.equals(at))return qs(t).p;let s=At,r=at;for(let i=this;t>0n;i=i.double(),t>>=1n)t&1n?s=s.add(i):n&&(r=r.add(i));return s}toAffine(){let{ex:t,ey:n,ez:s}=this;if(this.equals(At))return{x:0n,y:1n};let r=xn(s,k);return w(s*r)!==1n&&G("invalid inverse"),{x:w(t*r),y:w(n*r)}}toBytes(){let{x:t,y:n}=this.assertValidity().toAffine(),s=bn(n);return s[31]|=t&1n?128:0,s}toHex(){return Be(this.toBytes())}clearCofactor(){return this.multiply(zt(Is),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let t=this.multiply(jt/2n,!1).double();return jt%2n&&(t=t.add(this)),t.is0()}static fromHex(t,n){return e.fromBytes(Vt(t),n)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}toRawBytes(){return this.toBytes()}},at=new pt(on,an,1n,w(on*an)),At=new pt(0n,1n,1n,0n);pt.BASE=at;pt.ZERO=At;var bn=e=>Ee(yn(lt(e,0n,me),we)).reverse(),wn=e=>zt("0x"+Be(ve(yt(e)).reverse())),J=(e,t)=>{let n=e;for(;t-- >0n;)n*=n,n%=k;return n},Cs=e=>{let n=e*e%k*e%k,s=J(n,2n)*n%k,r=J(s,1n)*e%k,i=J(r,5n)*r%k,o=J(i,10n)*i%k,c=J(o,20n)*o%k,a=J(c,40n)*c%k,d=J(a,80n)*a%k,u=J(d,80n)*a%k,l=J(u,10n)*i%k;return{pow_p_5_8:J(l,2n)*e%k,b2:n}},dn=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,Us=(e,t)=>{let n=w(t*t*t),s=w(n*n*t),r=Cs(e*s).pow_p_5_8,i=w(e*n*r),o=w(t*i*i),c=i,a=w(i*dn),d=o===e,u=o===w(-e),l=o===w(-e*dn);return d&&(i=c),(u||l)&&(i=a),(w(i)&1n)===1n&&(i=w(-i)),{isValid:d||u,value:i}},xe=e=>mn(wn(e)),Se=(...e)=>En.sha512Async(...e),Os=(...e)=>Ts("sha512Sync")(...e),vn=e=>{let t=e.slice(0,ht);t[0]&=248,t[31]&=127,t[31]|=64;let n=e.slice(ht,we),s=xe(t),r=at.multiply(s),i=r.toBytes();return{head:t,prefix:n,scalar:s,point:r,pointBytes:i}},Ae=e=>Se(Vt(e,ht)).then(vn),Ms=e=>vn(Os(Vt(e,ht))),Bn=e=>Ae(e).then(t=>t.pointBytes);var Ls=e=>Se(e.hashable).then(e.finish);var Rs=(e,t,n)=>{let{pointBytes:s,scalar:r}=e,i=xe(t),o=at.multiply(i).toBytes();return{hashable:Dt(o,s,n),finish:d=>{let u=mn(i+xe(d)*r);return yt(Dt(o,bn(u)),we)}}},Ie=async(e,t)=>{let n=Vt(e),s=await Ae(t),r=await Se(s.prefix,n);return Ls(Rs(s,r,n))};var En={sha512Async:async(...e)=>{let t=Ps(),n=Dt(...e);return Zt(await t.digest("SHA-512",n.buffer))},sha512Sync:void 0,bytesToHex:Be,hexToBytes:Ee,concatBytes:Dt,mod:w,invert:xn,randomBytes:gn},Sn={getExtendedPublicKeyAsync:Ae,getExtendedPublicKey:Ms,randomPrivateKey:()=>gn(ht),precompute:(e=8,t=at)=>(t.multiply(3n),t)},$t=8,Hs=256,An=Math.ceil(Hs/$t)+1,be=2**($t-1),Ns=()=>{let e=[],t=at,n=t;for(let s=0;s<An;s++){n=t,e.push(n);for(let r=1;r<be;r++)n=n.add(t),e.push(n);t=n.double()}return e},un,ln=(e,t)=>{let n=t.negate();return e?n:t},qs=e=>{let t=un||(un=Ns()),n=At,s=at,r=2**$t,i=r,o=zt(r-1),c=zt($t);for(let a=0;a<An;a++){let d=Number(e&o);e>>=c,d>be&&(d-=i,e+=1n);let u=a*be,l=u,f=u+Math.abs(d)-1,p=a%2!==0,h=d<0;d===0?s=s.add(ln(p,t[l])):n=n.add(ln(h,t[f]))}return{p:n,f:s}};var gt=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function mt(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function Ke(e){if(!Number.isSafeInteger(e)||e<0)throw new Error("positive integer expected, got "+e)}function Z(e,...t){if(!mt(e))throw new Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length))throw new Error("Uint8Array expected of length "+t+", got length="+e.length)}function _e(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 Kn(e,t){Z(e);let n=t.outputLen;if(e.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function Ct(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Ft(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var _n=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",js=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function xt(e){if(Z(e),_n)return e.toHex();let t="";for(let n=0;n<e.length;n++)t+=js[e[n]];return t}var tt={_0:48,_9:57,A:65,F:70,a:97,f:102};function In(e){if(e>=tt._0&&e<=tt._9)return e-tt._0;if(e>=tt.A&&e<=tt.F)return e-(tt.A-10);if(e>=tt.a&&e<=tt.f)return e-(tt.a-10)}function Xt(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(_n)return Uint8Array.fromHex(e);let t=e.length,n=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);let s=new Uint8Array(n);for(let r=0,i=0;r<n;r++,i+=2){let o=In(e.charCodeAt(i)),c=In(e.charCodeAt(i+1));if(o===void 0||c===void 0){let a=e[i]+e[i+1];throw new Error('hex string expected, got non-hex character "'+a+'" at index '+i)}s[r]=o*16+c}return s}function Pe(e){if(typeof e!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(e))}function Te(e){return typeof e=="string"&&(e=Pe(e)),Z(e),e}function It(...e){let t=0;for(let s=0;s<e.length;s++){let r=e[s];Z(r),t+=r.length}let n=new Uint8Array(t);for(let s=0,r=0;s<e.length;s++){let i=e[s];n.set(i,r),r+=i.length}return n}var Gt=class{};function Pn(e){let t=s=>e().update(Te(s)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}function Ut(e=32){if(gt&&typeof gt.getRandomValues=="function")return gt.getRandomValues(new Uint8Array(e));if(gt&&typeof gt.randomBytes=="function")return Uint8Array.from(gt.randomBytes(e));throw new Error("crypto.getRandomValues must be defined")}function Ds(e,t,n,s){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,n,s);let r=BigInt(32),i=BigInt(4294967295),o=Number(n>>r&i),c=Number(n&i),a=s?4:0,d=s?0:4;e.setUint32(t+a,o,s),e.setUint32(t+d,c,s)}var Yt=class extends Gt{constructor(t,n,s,r){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=t,this.outputLen=n,this.padOffset=s,this.isLE=r,this.buffer=new Uint8Array(t),this.view=Ft(this.buffer)}update(t){_e(this),t=Te(t),Z(t);let{view:n,buffer:s,blockLen:r}=this,i=t.length;for(let o=0;o<i;){let c=Math.min(r-this.pos,i-o);if(c===r){let a=Ft(t);for(;r<=i-o;o+=r)this.process(a,o);continue}s.set(t.subarray(o,o+c),this.pos),this.pos+=c,o+=c,this.pos===r&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){_e(this),Kn(t,this),this.finished=!0;let{buffer:n,view:s,blockLen:r,isLE:i}=this,{pos:o}=this;n[o++]=128,Ct(this.buffer.subarray(o)),this.padOffset>r-o&&(this.process(s,0),o=0);for(let l=o;l<r;l++)n[l]=0;Ds(s,r-8,BigInt(this.length*8),i),this.process(s,0);let c=Ft(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let d=a/4,u=this.get();if(d>u.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<d;l++)c.setUint32(4*l,u[l],i)}digest(){let{buffer:t,outputLen:n}=this;this.digestInto(t);let s=t.slice(0,n);return this.destroy(),s}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());let{blockLen:n,buffer:s,length:r,finished:i,destroyed:o,pos:c}=this;return t.destroyed=o,t.finished=i,t.length=r,t.pos=c,r%n&&t.buffer.set(s),t}clone(){return this._cloneInto()}};var N=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Jt=BigInt(4294967295),Tn=BigInt(32);function zs(e,t=!1){return t?{h:Number(e&Jt),l:Number(e>>Tn&Jt)}:{h:Number(e>>Tn&Jt)|0,l:Number(e&Jt)|0}}function Cn(e,t=!1){let n=e.length,s=new Uint32Array(n),r=new Uint32Array(n);for(let i=0;i<n;i++){let{h:o,l:c}=zs(e[i],t);[s[i],r[i]]=[o,c]}return[s,r]}var Ce=(e,t,n)=>e>>>n,Ue=(e,t,n)=>e<<32-n|t>>>n,bt=(e,t,n)=>e>>>n|t<<32-n,wt=(e,t,n)=>e<<32-n|t>>>n,Ot=(e,t,n)=>e<<64-n|t>>>n-32,Mt=(e,t,n)=>e>>>n-32|t<<64-n;function W(e,t,n,s){let r=(t>>>0)+(s>>>0);return{h:e+n+(r/2**32|0)|0,l:r|0}}var Un=(e,t,n)=>(e>>>0)+(t>>>0)+(n>>>0),On=(e,t,n,s)=>t+n+s+(e/2**32|0)|0,Mn=(e,t,n,s)=>(e>>>0)+(t>>>0)+(n>>>0)+(s>>>0),Ln=(e,t,n,s,r)=>t+n+s+r+(e/2**32|0)|0,Rn=(e,t,n,s,r)=>(e>>>0)+(t>>>0)+(n>>>0)+(s>>>0)+(r>>>0),Hn=(e,t,n,s,r,i)=>t+n+s+r+i+(e/2**32|0)|0;var Nn=Cn(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),Zs=Nn[0],Vs=Nn[1],ct=new Uint32Array(80),ft=new Uint32Array(80),Oe=class extends Yt{constructor(t=64){super(128,t,16,!1),this.Ah=N[0]|0,this.Al=N[1]|0,this.Bh=N[2]|0,this.Bl=N[3]|0,this.Ch=N[4]|0,this.Cl=N[5]|0,this.Dh=N[6]|0,this.Dl=N[7]|0,this.Eh=N[8]|0,this.El=N[9]|0,this.Fh=N[10]|0,this.Fl=N[11]|0,this.Gh=N[12]|0,this.Gl=N[13]|0,this.Hh=N[14]|0,this.Hl=N[15]|0}get(){let{Ah:t,Al:n,Bh:s,Bl:r,Ch:i,Cl:o,Dh:c,Dl:a,Eh:d,El:u,Fh:l,Fl:f,Gh:p,Gl:h,Hh:b,Hl:m}=this;return[t,n,s,r,i,o,c,a,d,u,l,f,p,h,b,m]}set(t,n,s,r,i,o,c,a,d,u,l,f,p,h,b,m){this.Ah=t|0,this.Al=n|0,this.Bh=s|0,this.Bl=r|0,this.Ch=i|0,this.Cl=o|0,this.Dh=c|0,this.Dl=a|0,this.Eh=d|0,this.El=u|0,this.Fh=l|0,this.Fl=f|0,this.Gh=p|0,this.Gl=h|0,this.Hh=b|0,this.Hl=m|0}process(t,n){for(let g=0;g<16;g++,n+=4)ct[g]=t.getUint32(n),ft[g]=t.getUint32(n+=4);for(let g=16;g<80;g++){let I=ct[g-15]|0,K=ft[g-15]|0,U=bt(I,K,1)^bt(I,K,8)^Ce(I,K,7),C=wt(I,K,1)^wt(I,K,8)^Ue(I,K,7),_=ct[g-2]|0,x=ft[g-2]|0,B=bt(_,x,19)^Ot(_,x,61)^Ce(_,x,6),A=wt(_,x,19)^Mt(_,x,61)^Ue(_,x,6),P=Mn(C,A,ft[g-7],ft[g-16]),E=Ln(P,U,B,ct[g-7],ct[g-16]);ct[g]=E|0,ft[g]=P|0}let{Ah:s,Al:r,Bh:i,Bl:o,Ch:c,Cl:a,Dh:d,Dl:u,Eh:l,El:f,Fh:p,Fl:h,Gh:b,Gl:m,Hh:y,Hl:v}=this;for(let g=0;g<80;g++){let I=bt(l,f,14)^bt(l,f,18)^Ot(l,f,41),K=wt(l,f,14)^wt(l,f,18)^Mt(l,f,41),U=l&p^~l&b,C=f&h^~f&m,_=Rn(v,K,C,Vs[g],ft[g]),x=Hn(_,y,I,U,Zs[g],ct[g]),B=_|0,A=bt(s,r,28)^Ot(s,r,34)^Ot(s,r,39),P=wt(s,r,28)^Mt(s,r,34)^Mt(s,r,39),E=s&i^s&c^i&c,S=r&o^r&a^o&a;y=b|0,v=m|0,b=p|0,m=h|0,p=l|0,h=f|0,{h:l,l:f}=W(d|0,u|0,x|0,B|0),d=c|0,u=a|0,c=i|0,a=o|0,i=s|0,o=r|0;let T=Un(B,P,S);s=On(T,x,A,E),r=T|0}({h:s,l:r}=W(this.Ah|0,this.Al|0,s|0,r|0)),{h:i,l:o}=W(this.Bh|0,this.Bl|0,i|0,o|0),{h:c,l:a}=W(this.Ch|0,this.Cl|0,c|0,a|0),{h:d,l:u}=W(this.Dh|0,this.Dl|0,d|0,u|0),{h:l,l:f}=W(this.Eh|0,this.El|0,l|0,f|0),{h:p,l:h}=W(this.Fh|0,this.Fl|0,p|0,h|0),{h:b,l:m}=W(this.Gh|0,this.Gl|0,b|0,m|0),{h:y,l:v}=W(this.Hh|0,this.Hl|0,y|0,v|0),this.set(s,r,i,o,c,a,d,u,l,f,p,h,b,m,y,v)}roundClean(){Ct(ct,ft)}destroy(){Ct(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var qn=Pn(()=>new Oe);var Re=BigInt(0),Le=BigInt(1);function Wt(e,t=""){if(typeof e!="boolean"){let n=t&&`"${t}"`;throw new Error(n+"expected boolean, got type="+typeof e)}return e}function Lt(e,t,n=""){let s=mt(e),r=e?.length,i=t!==void 0;if(!s||i&&r!==t){let o=n&&`"${n}" `,c=i?` of length ${t}`:"",a=s?`length=${r}`:`type=${typeof e}`;throw new Error(o+"expected Uint8Array"+c+", got "+a)}return e}function kn(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return e===""?Re:BigInt("0x"+e)}function jn(e){return kn(xt(e))}function Y(e){return Z(e),kn(xt(Uint8Array.from(e).reverse()))}function He(e,t){return Xt(e.toString(16).padStart(t*2,"0"))}function Qt(e,t){return He(e,t).reverse()}function j(e,t,n){let s;if(typeof t=="string")try{s=Xt(t)}catch(i){throw new Error(e+" must be hex string or Uint8Array, cause: "+i)}else if(mt(t))s=Uint8Array.from(t);else throw new Error(e+" must be hex string or Uint8Array");let r=s.length;if(typeof n=="number"&&r!==n)throw new Error(e+" of length "+n+" expected, got "+r);return s}function Dn(e,t){if(e.length!==t.length)return!1;let n=0;for(let s=0;s<e.length;s++)n|=e[s]^t[s];return n===0}function Ne(e){return Uint8Array.from(e)}var Me=e=>typeof e=="bigint"&&Re<=e;function Gs(e,t,n){return Me(e)&&Me(t)&&Me(n)&&t<=e&&e<n}function Kt(e,t,n,s){if(!Gs(t,n,s))throw new Error("expected valid "+e+": "+n+" <= n < "+s+", got "+t)}function zn(e){let t;for(t=0;e>Re;e>>=Le,t+=1);return t}var Rt=e=>(Le<<BigInt(e))-Le;function vt(e,t,n={}){if(!e||typeof e!="object")throw new Error("expected valid options object");function s(r,i,o){let c=e[r];if(o&&c===void 0)return;let a=typeof c;if(a!==i||c===null)throw new Error(`param "${r}" is invalid: expected ${i}, got ${a}`)}Object.entries(t).forEach(([r,i])=>s(r,i,!1)),Object.entries(n).forEach(([r,i])=>s(r,i,!0))}var qe=()=>{throw new Error("not implemented")};function ke(e){let t=new WeakMap;return(n,...s)=>{let r=t.get(n);if(r!==void 0)return r;let i=e(n,...s);return t.set(n,i),i}}var z=BigInt(0),D=BigInt(1),Bt=BigInt(2),Vn=BigInt(3),Gn=BigInt(4),Fn=BigInt(5),Fs=BigInt(7),Xn=BigInt(8),Xs=BigInt(9),Yn=BigInt(16);function O(e,t){let n=e%t;return n>=z?n:t+n}function F(e,t,n){let s=e;for(;t-- >z;)s*=s,s%=n;return s}function $n(e,t){if(e===z)throw new Error("invert: expected non-zero number");if(t<=z)throw new Error("invert: expected positive modulus, got "+t);let n=O(e,t),s=t,r=z,i=D,o=D,c=z;for(;n!==z;){let d=s/n,u=s%n,l=r-o*d,f=i-c*d;s=n,n=u,r=o,i=c,o=l,c=f}if(s!==D)throw new Error("invert: does not exist");return O(r,t)}function je(e,t,n){if(!e.eql(e.sqr(t),n))throw new Error("Cannot find square root")}function Jn(e,t){let n=(e.ORDER+D)/Gn,s=e.pow(t,n);return je(e,s,t),s}function Ys(e,t){let n=(e.ORDER-Fn)/Xn,s=e.mul(t,Bt),r=e.pow(s,n),i=e.mul(t,r),o=e.mul(e.mul(i,Bt),r),c=e.mul(i,e.sub(o,e.ONE));return je(e,c,t),c}function Js(e){let t=nt(e),n=Wn(e),s=n(t,t.neg(t.ONE)),r=n(t,s),i=n(t,t.neg(s)),o=(e+Fs)/Yn;return(c,a)=>{let d=c.pow(a,o),u=c.mul(d,s),l=c.mul(d,r),f=c.mul(d,i),p=c.eql(c.sqr(u),a),h=c.eql(c.sqr(l),a);d=c.cmov(d,u,p),u=c.cmov(f,l,h);let b=c.eql(c.sqr(u),a),m=c.cmov(d,u,b);return je(c,m,a),m}}function Wn(e){if(e<Vn)throw new Error("sqrt is not defined for small field");let t=e-D,n=0;for(;t%Bt===z;)t/=Bt,n++;let s=Bt,r=nt(e);for(;Zn(r,s)===1;)if(s++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return Jn;let i=r.pow(s,t),o=(t+D)/Bt;return function(a,d){if(a.is0(d))return d;if(Zn(a,d)!==1)throw new Error("Cannot find square root");let u=n,l=a.mul(a.ONE,i),f=a.pow(d,t),p=a.pow(d,o);for(;!a.eql(f,a.ONE);){if(a.is0(f))return a.ZERO;let h=1,b=a.sqr(f);for(;!a.eql(b,a.ONE);)if(h++,b=a.sqr(b),h===u)throw new Error("Cannot find square root");let m=D<<BigInt(u-h-1),y=a.pow(l,m);u=h,l=a.sqr(y),f=a.mul(f,l),p=a.mul(p,y)}return p}}function Ws(e){return e%Gn===Vn?Jn:e%Xn===Fn?Ys:e%Yn===Xs?Js(e):Wn(e)}var et=(e,t)=>(O(e,t)&D)===D,Qs=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Qn(e){let t={ORDER:"bigint",MASK:"bigint",BYTES:"number",BITS:"number"},n=Qs.reduce((s,r)=>(s[r]="function",s),t);return vt(e,n),e}function tr(e,t,n){if(n<z)throw new Error("invalid exponent, negatives unsupported");if(n===z)return e.ONE;if(n===D)return t;let s=e.ONE,r=t;for(;n>z;)n&D&&(s=e.mul(s,r)),r=e.sqr(r),n>>=D;return s}function te(e,t,n=!1){let s=new Array(t.length).fill(n?e.ZERO:void 0),r=t.reduce((o,c,a)=>e.is0(c)?o:(s[a]=o,e.mul(o,c)),e.ONE),i=e.inv(r);return t.reduceRight((o,c,a)=>e.is0(c)?o:(s[a]=e.mul(o,s[a]),e.mul(o,c)),i),s}function Zn(e,t){let n=(e.ORDER-D)/Bt,s=e.pow(t,n),r=e.eql(s,e.ONE),i=e.eql(s,e.ZERO),o=e.eql(s,e.neg(e.ONE));if(!r&&!i&&!o)throw new Error("invalid Legendre symbol result");return r?1:i?0:-1}function ts(e,t){t!==void 0&&Ke(t);let n=t!==void 0?t:e.toString(2).length,s=Math.ceil(n/8);return{nBitLength:n,nByteLength:s}}function nt(e,t,n=!1,s={}){if(e<=z)throw new Error("invalid field: expected ORDER > 0, got "+e);let r,i,o=!1,c;if(typeof t=="object"&&t!=null){if(s.sqrt||n)throw new Error("cannot specify opts in two arguments");let f=t;f.BITS&&(r=f.BITS),f.sqrt&&(i=f.sqrt),typeof f.isLE=="boolean"&&(n=f.isLE),typeof f.modFromBytes=="boolean"&&(o=f.modFromBytes),c=f.allowedLengths}else typeof t=="number"&&(r=t),s.sqrt&&(i=s.sqrt);let{nBitLength:a,nByteLength:d}=ts(e,r);if(d>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let u,l=Object.freeze({ORDER:e,isLE:n,BITS:a,BYTES:d,MASK:Rt(a),ZERO:z,ONE:D,allowedLengths:c,create:f=>O(f,e),isValid:f=>{if(typeof f!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof f);return z<=f&&f<e},is0:f=>f===z,isValidNot0:f=>!l.is0(f)&&l.isValid(f),isOdd:f=>(f&D)===D,neg:f=>O(-f,e),eql:(f,p)=>f===p,sqr:f=>O(f*f,e),add:(f,p)=>O(f+p,e),sub:(f,p)=>O(f-p,e),mul:(f,p)=>O(f*p,e),pow:(f,p)=>tr(l,f,p),div:(f,p)=>O(f*$n(p,e),e),sqrN:f=>f*f,addN:(f,p)=>f+p,subN:(f,p)=>f-p,mulN:(f,p)=>f*p,inv:f=>$n(f,e),sqrt:i||(f=>(u||(u=Ws(e)),u(l,f))),toBytes:f=>n?Qt(f,d):He(f,d),fromBytes:(f,p=!0)=>{if(c){if(!c.includes(f.length)||f.length>d)throw new Error("Field.fromBytes: expected "+c+" bytes, got "+f.length);let b=new Uint8Array(d);b.set(f,n?0:b.length-f.length),f=b}if(f.length!==d)throw new Error("Field.fromBytes: expected "+d+" bytes, got "+f.length);let h=n?Y(f):jn(f);if(o&&(h=O(h,e)),!p&&!l.isValid(h))throw new Error("invalid field element: outside of range 0..ORDER");return h},invertBatch:f=>te(l,f),cmov:(f,p,h)=>h?p:f});return Object.freeze(l)}var ee=BigInt(0),Ze=BigInt(1);function es(e,t){let n=t.negate();return e?n:t}function Ht(e,t){let n=te(e.Fp,t.map(s=>s.Z));return t.map((s,r)=>e.fromAffine(s.toAffine(n[r])))}function is(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function De(e,t){is(e,t);let n=Math.ceil(t/e)+1,s=2**(e-1),r=2**e,i=Rt(e),o=BigInt(e);return{windows:n,windowSize:s,mask:i,maxNumber:r,shiftBy:o}}function ns(e,t,n){let{windowSize:s,mask:r,maxNumber:i,shiftBy:o}=n,c=Number(e&r),a=e>>o;c>s&&(c-=i,a+=Ze);let d=t*s,u=d+Math.abs(c)-1,l=c===0,f=c<0,p=t%2!==0;return{nextN:a,offset:u,isZero:l,isNeg:f,isNegF:p,offsetF:d}}function er(e,t){if(!Array.isArray(e))throw new Error("array expected");e.forEach((n,s)=>{if(!(n instanceof t))throw new Error("invalid point at index "+s)})}function nr(e,t){if(!Array.isArray(e))throw new Error("array of scalars expected");e.forEach((n,s)=>{if(!t.isValid(n))throw new Error("invalid scalar at index "+s)})}var ze=new WeakMap,os=new WeakMap;function $e(e){return os.get(e)||1}function ss(e){if(e!==ee)throw new Error("invalid wNAF")}var ne=class{constructor(t,n){this.BASE=t.BASE,this.ZERO=t.ZERO,this.Fn=t.Fn,this.bits=n}_unsafeLadder(t,n,s=this.ZERO){let r=t;for(;n>ee;)n&Ze&&(s=s.add(r)),r=r.double(),n>>=Ze;return s}precomputeWindow(t,n){let{windows:s,windowSize:r}=De(n,this.bits),i=[],o=t,c=o;for(let a=0;a<s;a++){c=o,i.push(c);for(let d=1;d<r;d++)c=c.add(o),i.push(c);o=c.double()}return i}wNAF(t,n,s){if(!this.Fn.isValid(s))throw new Error("invalid scalar");let r=this.ZERO,i=this.BASE,o=De(t,this.bits);for(let c=0;c<o.windows;c++){let{nextN:a,offset:d,isZero:u,isNeg:l,isNegF:f,offsetF:p}=ns(s,c,o);s=a,u?i=i.add(es(f,n[p])):r=r.add(es(l,n[d]))}return ss(s),{p:r,f:i}}wNAFUnsafe(t,n,s,r=this.ZERO){let i=De(t,this.bits);for(let o=0;o<i.windows&&s!==ee;o++){let{nextN:c,offset:a,isZero:d,isNeg:u}=ns(s,o,i);if(s=c,!d){let l=n[a];r=r.add(u?l.negate():l)}}return ss(s),r}getPrecomputes(t,n,s){let r=ze.get(n);return r||(r=this.precomputeWindow(n,t),t!==1&&(typeof s=="function"&&(r=s(r)),ze.set(n,r))),r}cached(t,n,s){let r=$e(t);return this.wNAF(r,this.getPrecomputes(r,t,s),n)}unsafe(t,n,s,r){let i=$e(t);return i===1?this._unsafeLadder(t,n,r):this.wNAFUnsafe(i,this.getPrecomputes(i,t,s),n,r)}createCache(t,n){is(n,this.bits),os.set(t,n),ze.delete(t)}hasCache(t){return $e(t)!==1}};function se(e,t,n,s){er(n,e),nr(s,t);let r=n.length,i=s.length;if(r!==i)throw new Error("arrays of points and scalars must have equal length");let o=e.ZERO,c=zn(BigInt(r)),a=1;c>12?a=c-3:c>4?a=c-2:c>0&&(a=2);let d=Rt(a),u=new Array(Number(d)+1).fill(o),l=Math.floor((t.BITS-1)/a)*a,f=o;for(let p=l;p>=0;p-=a){u.fill(o);for(let b=0;b<i;b++){let m=s[b],y=Number(m>>BigInt(p)&d);u[y]=u[y].add(n[b])}let h=o;for(let b=u.length-1,m=o;b>0;b--)m=m.add(u[b]),h=h.add(m);if(f=f.add(h),p!==0)for(let b=0;b<a;b++)f=f.double()}return f}function rs(e,t,n){if(t){if(t.ORDER!==e)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Qn(t),t}else return nt(e,{isLE:n})}function as(e,t,n={},s){if(s===void 0&&(s=e==="edwards"),!t||typeof t!="object")throw new Error(`expected valid ${e} CURVE object`);for(let a of["p","n","h"]){let d=t[a];if(!(typeof d=="bigint"&&d>ee))throw new Error(`CURVE.${a} must be positive bigint`)}let r=rs(t.p,n.Fp,s),i=rs(t.n,n.Fn,s),c=["Gx","Gy","a",e==="weierstrass"?"b":"d"];for(let a of c)if(!r.isValid(t[a]))throw new Error(`CURVE.${a} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:r,Fn:i}}var dt=BigInt(0),L=BigInt(1),Ve=BigInt(2),sr=BigInt(8);function rr(e,t,n,s){let r=e.sqr(n),i=e.sqr(s),o=e.add(e.mul(t.a,r),i),c=e.add(e.ONE,e.mul(t.d,e.mul(r,i)));return e.eql(o,c)}function ir(e,t={}){let n=as("edwards",e,t,t.FpFnLE),{Fp:s,Fn:r}=n,i=n.CURVE,{h:o}=i;vt(t,{},{uvRatio:"function"});let c=Ve<<BigInt(r.BYTES*8)-L,a=m=>s.create(m),d=t.uvRatio||((m,y)=>{try{return{isValid:!0,value:s.sqrt(s.div(m,y))}}catch{return{isValid:!1,value:dt}}});if(!rr(s,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(m,y,v=!1){let g=v?L:dt;return Kt("coordinate "+m,y,g,c),y}function l(m){if(!(m instanceof h))throw new Error("ExtendedPoint expected")}let f=ke((m,y)=>{let{X:v,Y:g,Z:I}=m,K=m.is0();y==null&&(y=K?sr:s.inv(I));let U=a(v*y),C=a(g*y),_=s.mul(I,y);if(K)return{x:dt,y:L};if(_!==L)throw new Error("invZ was invalid");return{x:U,y:C}}),p=ke(m=>{let{a:y,d:v}=i;if(m.is0())throw new Error("bad point: ZERO");let{X:g,Y:I,Z:K,T:U}=m,C=a(g*g),_=a(I*I),x=a(K*K),B=a(x*x),A=a(C*y),P=a(x*a(A+_)),E=a(B+a(v*a(C*_)));if(P!==E)throw new Error("bad point: equation left != right (1)");let S=a(g*I),T=a(K*U);if(S!==T)throw new Error("bad point: equation left != right (2)");return!0});class h{constructor(y,v,g,I){this.X=u("x",y),this.Y=u("y",v),this.Z=u("z",g,!0),this.T=u("t",I),Object.freeze(this)}static CURVE(){return i}static fromAffine(y){if(y instanceof h)throw new Error("extended point not allowed");let{x:v,y:g}=y||{};return u("x",v),u("y",g),new h(v,g,L,a(v*g))}static fromBytes(y,v=!1){let g=s.BYTES,{a:I,d:K}=i;y=Ne(Lt(y,g,"point")),Wt(v,"zip215");let U=Ne(y),C=y[g-1];U[g-1]=C&-129;let _=Y(U),x=v?c:s.ORDER;Kt("point.y",_,dt,x);let B=a(_*_),A=a(B-L),P=a(K*B-I),{isValid:E,value:S}=d(A,P);if(!E)throw new Error("bad point: invalid y coordinate");let T=(S&L)===L,M=(C&128)!==0;if(!v&&S===dt&&M)throw new Error("bad point: x=0 and x_0=1");return M!==T&&(S=a(-S)),h.fromAffine({x:S,y:_})}static fromHex(y,v=!1){return h.fromBytes(j("point",y),v)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(y=8,v=!0){return b.createCache(this,y),v||this.multiply(Ve),this}assertValidity(){p(this)}equals(y){l(y);let{X:v,Y:g,Z:I}=this,{X:K,Y:U,Z:C}=y,_=a(v*C),x=a(K*I),B=a(g*C),A=a(U*I);return _===x&&B===A}is0(){return this.equals(h.ZERO)}negate(){return new h(a(-this.X),this.Y,this.Z,a(-this.T))}double(){let{a:y}=i,{X:v,Y:g,Z:I}=this,K=a(v*v),U=a(g*g),C=a(Ve*a(I*I)),_=a(y*K),x=v+g,B=a(a(x*x)-K-U),A=_+U,P=A-C,E=_-U,S=a(B*P),T=a(A*E),M=a(B*E),R=a(P*A);return new h(S,T,R,M)}add(y){l(y);let{a:v,d:g}=i,{X:I,Y:K,Z:U,T:C}=this,{X:_,Y:x,Z:B,T:A}=y,P=a(I*_),E=a(K*x),S=a(C*g*A),T=a(U*B),M=a((I+K)*(_+x)-P-E),R=T-S,q=T+S,H=a(E-v*P),V=a(M*R),X=a(q*H),Tt=a(M*H),St=a(R*q);return new h(V,X,St,Tt)}subtract(y){return this.add(y.negate())}multiply(y){if(!r.isValidNot0(y))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:v,f:g}=b.cached(this,y,I=>Ht(h,I));return Ht(h,[v,g])[0]}multiplyUnsafe(y,v=h.ZERO){if(!r.isValid(y))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return y===dt?h.ZERO:this.is0()||y===L?this:b.unsafe(this,y,g=>Ht(h,g),v)}isSmallOrder(){return this.multiplyUnsafe(o).is0()}isTorsionFree(){return b.unsafe(this,i.n).is0()}toAffine(y){return f(this,y)}clearCofactor(){return o===L?this:this.multiplyUnsafe(o)}toBytes(){let{x:y,y:v}=this.toAffine(),g=s.toBytes(v);return g[g.length-1]|=y&L?128:0,g}toHex(){return xt(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get ex(){return this.X}get ey(){return this.Y}get ez(){return this.Z}get et(){return this.T}static normalizeZ(y){return Ht(h,y)}static msm(y,v){return se(h,r,y,v)}_setWindowSize(y){this.precompute(y)}toRawBytes(){return this.toBytes()}}h.BASE=new h(i.Gx,i.Gy,L,a(i.Gx*i.Gy)),h.ZERO=new h(dt,L,L,dt),h.Fp=s,h.Fn=r;let b=new ne(h,r.BITS);return h.BASE.precompute(8),h}var re=class{constructor(t){this.ep=t}static fromBytes(t){qe()}static fromHex(t){qe()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(t){return this.ep.toAffine(t)}toHex(){return xt(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(t){return this.assertSame(t),this.init(this.ep.add(t.ep))}subtract(t){return this.assertSame(t),this.init(this.ep.subtract(t.ep))}multiply(t){return this.init(this.ep.multiply(t))}multiplyUnsafe(t){return this.init(this.ep.multiplyUnsafe(t))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(t,n){return this.init(this.ep.precompute(t,n))}toRawBytes(){return this.toBytes()}};function or(e,t,n={}){if(typeof t!="function")throw new Error('"hash" function param is required');vt(n,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:s}=n,{BASE:r,Fp:i,Fn:o}=e,c=n.randomBytes||Ut,a=n.adjustScalarBytes||(x=>x),d=n.domain||((x,B,A)=>{if(Wt(A,"phflag"),B.length||A)throw new Error("Contexts/pre-hash are not supported");return x});function u(x){return o.create(Y(x))}function l(x){let B=g.secretKey;x=j("private key",x,B);let A=j("hashed private key",t(x),2*B),P=a(A.slice(0,B)),E=A.slice(B,2*B),S=u(P);return{head:P,prefix:E,scalar:S}}function f(x){let{head:B,prefix:A,scalar:P}=l(x),E=r.multiply(P),S=E.toBytes();return{head:B,prefix:A,scalar:P,point:E,pointBytes:S}}function p(x){return f(x).pointBytes}function h(x=Uint8Array.of(),...B){let A=It(...B);return u(t(d(A,j("context",x),!!s)))}function b(x,B,A={}){x=j("message",x),s&&(x=s(x));let{prefix:P,scalar:E,pointBytes:S}=f(B),T=h(A.context,P,x),M=r.multiply(T).toBytes(),R=h(A.context,M,S,x),q=o.create(T+R*E);if(!o.isValid(q))throw new Error("sign failed: invalid s");let H=It(M,o.toBytes(q));return Lt(H,g.signature,"result")}let m={zip215:!0};function y(x,B,A,P=m){let{context:E,zip215:S}=P,T=g.signature;x=j("signature",x,T),B=j("message",B),A=j("publicKey",A,g.publicKey),S!==void 0&&Wt(S,"zip215"),s&&(B=s(B));let M=T/2,R=x.subarray(0,M),q=Y(x.subarray(M,T)),H,V,X;try{H=e.fromBytes(A,S),V=e.fromBytes(R,S),X=r.multiplyUnsafe(q)}catch{return!1}if(!S&&H.isSmallOrder())return!1;let Tt=h(E,V.toBytes(),H.toBytes(),B);return V.add(H.multiplyUnsafe(Tt)).subtract(X).clearCofactor().is0()}let v=i.BYTES,g={secretKey:v,publicKey:v,signature:2*v,seed:v};function I(x=c(g.seed)){return Lt(x,g.seed,"seed")}function K(x){let B=_.randomSecretKey(x);return{secretKey:B,publicKey:p(B)}}function U(x){return mt(x)&&x.length===o.BYTES}function C(x,B){try{return!!e.fromBytes(x,B)}catch{return!1}}let _={getExtendedPublicKey:f,randomSecretKey:I,isValidSecretKey:U,isValidPublicKey:C,toMontgomery(x){let{y:B}=e.fromBytes(x),A=g.publicKey,P=A===32;if(!P&&A!==57)throw new Error("only defined for 25519 and 448");let E=P?i.div(L+B,L-B):i.div(B-L,B+L);return i.toBytes(E)},toMontgomerySecret(x){let B=g.secretKey;Lt(x,B);let A=t(x.subarray(0,B));return a(A).subarray(0,B)},randomPrivateKey:I,precompute(x=8,B=e.BASE){return B.precompute(x,!1)}};return Object.freeze({keygen:K,getPublicKey:p,sign:b,verify:y,utils:_,Point:e,lengths:g})}function ar(e){let t={a:e.a,d:e.d,p:e.Fp.ORDER,n:e.n,h:e.h,Gx:e.Gx,Gy:e.Gy},n=e.Fp,s=nt(t.n,e.nBitLength,!0),r={Fp:n,Fn:s,uvRatio:e.uvRatio},i={randomBytes:e.randomBytes,adjustScalarBytes:e.adjustScalarBytes,domain:e.domain,prehash:e.prehash,mapToCurve:e.mapToCurve};return{CURVE:t,curveOpts:r,hash:e.hash,eddsaOpts:i}}function cr(e,t){let n=t.Point;return Object.assign({},t,{ExtendedPoint:n,CURVE:e,nBitLength:n.Fn.BITS,nByteLength:n.Fn.BYTES})}function cs(e){let{CURVE:t,curveOpts:n,hash:s,eddsaOpts:r}=ar(e),i=ir(t,n),o=or(i,s,r);return cr(e,o)}var Nt=BigInt(0),_t=BigInt(1),ie=BigInt(2);function fr(e){return vt(e,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...e})}function fs(e){let t=fr(e),{P:n,type:s,adjustScalarBytes:r,powPminus2:i,randomBytes:o}=t,c=s==="x25519";if(!c&&s!=="x448")throw new Error("invalid type");let a=o||Ut,d=c?255:448,u=c?32:56,l=BigInt(c?9:5),f=BigInt(c?121665:39081),p=c?ie**BigInt(254):ie**BigInt(447),h=c?BigInt(8)*ie**BigInt(251)-_t:BigInt(4)*ie**BigInt(445)-_t,b=p+h+_t,m=E=>O(E,n),y=v(l);function v(E){return Qt(m(E),u)}function g(E){let S=j("u coordinate",E,u);return c&&(S[31]&=127),m(Y(S))}function I(E){return Y(r(j("scalar",E,u)))}function K(E,S){let T=_(g(S),I(E));if(T===Nt)throw new Error("invalid private or public key received");return v(T)}function U(E){return K(E,y)}function C(E,S,T){let M=m(E*(S-T));return S=m(S-M),T=m(T+M),{x_2:S,x_3:T}}function _(E,S){Kt("u",E,Nt,n),Kt("scalar",S,p,b);let T=S,M=E,R=_t,q=Nt,H=E,V=_t,X=Nt;for(let St=BigInt(d-1);St>=Nt;St--){let fe=T>>St&_t;X^=fe,{x_2:R,x_3:H}=C(X,R,H),{x_2:q,x_3:V}=C(X,q,V),X=fe;let de=R+q,ue=m(de*de),le=R-q,We=m(le*le),Qe=ue-We,gs=H+V,ms=H-V,tn=m(ms*de),en=m(gs*le),nn=tn+en,sn=tn-en;H=m(nn*nn),V=m(M*m(sn*sn)),R=m(ue*We),q=m(Qe*(ue+m(f*Qe)))}({x_2:R,x_3:H}=C(X,R,H)),{x_2:q,x_3:V}=C(X,q,V);let Tt=i(q);return m(R*Tt)}let x={secretKey:u,publicKey:u,seed:u},B=(E=a(u))=>(Z(E,x.seed),E);function A(E){let S=B(E);return{secretKey:S,publicKey:U(S)}}return{keygen:A,getSharedSecret:(E,S)=>K(E,S),getPublicKey:E=>U(E),scalarMult:K,scalarMultBase:U,utils:{randomSecretKey:B,randomPrivateKey:B},GuBytes:y.slice(),lengths:x}}var dr=BigInt(0),rt=BigInt(1),ds=BigInt(2),ur=BigInt(3),lr=BigInt(5),hr=BigInt(8),Pt=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),qt={p:Pt,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:hr,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function hs(e){let t=BigInt(10),n=BigInt(20),s=BigInt(40),r=BigInt(80),i=Pt,c=e*e%i*e%i,a=F(c,ds,i)*c%i,d=F(a,rt,i)*e%i,u=F(d,lr,i)*d%i,l=F(u,t,i)*u%i,f=F(l,n,i)*l%i,p=F(f,s,i)*f%i,h=F(p,r,i)*p%i,b=F(h,r,i)*p%i,m=F(b,t,i)*u%i;return{pow_p_5_8:F(m,ds,i)*e%i,b2:c}}function ys(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}var Ge=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Ye(e,t){let n=Pt,s=O(t*t*t,n),r=O(s*s*t,n),i=hs(e*r).pow_p_5_8,o=O(e*s*i,n),c=O(t*o*o,n),a=o,d=O(o*Ge,n),u=c===e,l=c===O(-e,n),f=c===O(-e*Ge,n);return u&&(o=a),(l||f)&&(o=d),et(o,n)&&(o=O(-o,n)),{isValid:u||l,value:o}}var st=nt(qt.p,{isLE:!0}),yr=nt(qt.n,{isLE:!0}),pr={...qt,Fp:st,hash:qn,adjustScalarBytes:ys,uvRatio:Ye},Et=cs(pr);var ot=(()=>{let e=st.ORDER;return fs({P:e,type:"x25519",powPminus2:t=>{let{pow_p_5_8:n,b2:s}=hs(t);return O(F(n,ur,e)*s,e)},adjustScalarBytes:ys})})();var Fe=Ge,gr=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),mr=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),xr=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),br=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952"),us=e=>Ye(rt,e),wr=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),Xe=e=>Et.Point.Fp.create(Y(e)&wr);function ls(e){let{d:t}=qt,n=Pt,s=y=>st.create(y),r=s(Fe*e*e),i=s((r+rt)*xr),o=BigInt(-1),c=s((o-t*r)*s(r+t)),{isValid:a,value:d}=Ye(i,c),u=s(d*e);et(u,n)||(u=s(-u)),a||(d=u),a||(o=r);let l=s(o*(r-rt)*br-c),f=d*d,p=s((d+d)*c),h=s(l*gr),b=s(rt-f),m=s(rt+f);return new Et.Point(s(p*m),s(b*h),s(h*m),s(p*b))}function vr(e){Z(e,64);let t=Xe(e.subarray(0,32)),n=ls(t),s=Xe(e.subarray(32,64)),r=ls(s);return new it(n.add(r))}var it=class e extends re{constructor(t){super(t)}static fromAffine(t){return new e(Et.Point.fromAffine(t))}assertSame(t){if(!(t instanceof e))throw new Error("RistrettoPoint expected")}init(t){return new e(t)}static hashToCurve(t){return vr(j("ristrettoHash",t,64))}static fromBytes(t){Z(t,32);let{a:n,d:s}=qt,r=Pt,i=I=>st.create(I),o=Xe(t);if(!Dn(st.toBytes(o),t)||et(o,r))throw new Error("invalid ristretto255 encoding 1");let c=i(o*o),a=i(rt+n*c),d=i(rt-n*c),u=i(a*a),l=i(d*d),f=i(n*s*u-l),{isValid:p,value:h}=us(i(f*l)),b=i(h*d),m=i(h*b*f),y=i((o+o)*b);et(y,r)&&(y=i(-y));let v=i(a*m),g=i(y*v);if(!p||et(g,r)||v===dr)throw new Error("invalid ristretto255 encoding 2");return new e(new Et.Point(y,v,rt,g))}static fromHex(t){return e.fromBytes(j("ristrettoHex",t,32))}static msm(t,n){return se(e,Et.Point.Fn,t,n)}toBytes(){let{X:t,Y:n,Z:s,T:r}=this.ep,i=Pt,o=m=>st.create(m),c=o(o(s+n)*o(s-n)),a=o(t*n),d=o(a*a),{value:u}=us(o(c*d)),l=o(u*c),f=o(u*a),p=o(l*f*r),h;if(et(r*p,i)){let m=o(n*Fe),y=o(t*Fe);t=m,n=y,h=o(l*mr)}else h=f;et(t*p,i)&&(n=o(-n));let b=o((s-n)*h);return et(b,i)&&(b=o(-b)),st.toBytes(b)}equals(t){this.assertSame(t);let{X:n,Y:s}=this.ep,{X:r,Y:i}=t.ep,o=d=>st.create(d),c=o(n*i)===o(s*r),a=o(s*i)===o(n*r);return c||a}is0(){return this.equals(e.ZERO)}};it.BASE=new it(Et.Point.BASE);it.ZERO=new it(Et.Point.ZERO);it.Fp=st;it.Fn=yr;var Je=class{data=new Map;async get(t){return this.data.get(t)??null}async set(t,n){this.data.set(t,n)}async delete(t){this.data.delete(t)}},oe=class{prefix;constructor(t="moltdm"){this.prefix=t}async get(t){return typeof localStorage>"u"?null:localStorage.getItem(`${this.prefix}:${t}`)}async set(t,n){typeof localStorage>"u"||localStorage.setItem(`${this.prefix}:${t}`,n)}async delete(t){typeof localStorage>"u"||localStorage.removeItem(`${this.prefix}:${t}`)}},ae=class{basePath;_fs=null;_path=null;_initialized=!1;constructor(t){this.basePath=t||".moltdm"}async ensureModules(){if(!this._initialized){if(typeof window<"u"){console.warn("FileStorage is not supported in browser. Use BrowserStorage instead.");return}try{let t=await import("fs"),n=await import("path"),s=await import("os");if(this._fs=t,this._path=n,this.basePath===".moltdm"){let r=process.env.OPENCLAW_STATE_DIR;this.basePath=r?n.join(r,".moltdm"):n.join(s.homedir(),".moltdm")}t.existsSync(this.basePath)||t.mkdirSync(this.basePath,{recursive:!0}),this._initialized=!0}catch(t){console.error("Failed to load Node.js modules for FileStorage:",t)}}}async get(t){if(await this.ensureModules(),!this._fs)return null;let n=this._path.join(this.basePath,`${t}.json`);return this._fs.existsSync(n)?this._fs.readFileSync(n,"utf-8"):null}async set(t,n){if(await this.ensureModules(),!this._fs)return;let s=this._path.join(this.basePath,`${t}.json`);this._fs.writeFileSync(s,n)}async delete(t){if(await this.ensureModules(),!this._fs)return;let n=this._path.join(this.basePath,`${t}.json`);this._fs.existsSync(n)&&this._fs.unlinkSync(n)}};function $(e){if(typeof Buffer<"u")return Buffer.from(e).toString("base64");let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function ut(e){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(e,"base64"));let t=atob(e),n=new Uint8Array(t.length);for(let s=0;s<t.length;s++)n[s]=t.charCodeAt(s);return n}async function ps(e,t){let n=new Uint8Array(e).buffer,s=new Uint8Array(t).buffer,r=await crypto.subtle.importKey("raw",n,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",r,s);return new Uint8Array(i)}var ce=class{storage;relayUrl;identity=null;senderKeys=new Map;receivedSenderKeys=new Map;constructor(t={}){t.storage?this.storage=t.storage:typeof window<"u"&&typeof localStorage<"u"?this.storage=new oe:this.storage=new ae(t.storagePath),this.relayUrl=t.relayUrl||"https://relay.moltdm.com",t.identity&&(this.identity=t.identity)}get address(){if(!this.identity)throw new Error("Not initialized. Call initialize() first.");return`moltdm:${this.identity.moltbotId}`}get moltbotId(){if(!this.identity)throw new Error("Not initialized. Call initialize() first.");return this.identity.moltbotId}getIdentity(){return this.identity}async initialize(){if(this.identity){this.validateIdentity(this.identity),await this.loadSenderKeys();return}let t=await this.storage.get("identity");t?(this.identity=JSON.parse(t),this.validateIdentity(this.identity)):(await this.createIdentity(),await this.storage.set("identity",JSON.stringify(this.identity))),await this.loadSenderKeys()}validateIdentity(t){if(!t.signedPreKey?.privateKey)throw new Error("Identity is missing signedPreKey.privateKey. This moltbot was created with an older client version. Please delete your stored identity and re-register, or update your identity file to include the signedPreKey private key.");if(!t.moltbotId||!t.publicKey||!t.privateKey)throw new Error("Identity is missing required fields (moltbotId, publicKey, or privateKey)")}async createIdentity(){let t=Sn.randomPrivateKey(),n=await Bn(t),s=$(t),r=$(n),i=ot.utils.randomPrivateKey(),o=ot.getPublicKey(i),c=await Ie(o,t),a={publicKey:$(o),privateKey:$(i),signature:$(c)},d=[],u=[];for(let p=0;p<10;p++){let h=ot.utils.randomPrivateKey(),b=ot.getPublicKey(h);d.push({publicKey:$(b),privateKey:$(h)}),u.push($(b))}let l=await fetch(`${this.relayUrl}/api/identity/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publicKey:r,signedPreKey:a.publicKey,preKeySignature:a.signature,oneTimePreKeys:u})});if(!l.ok){let p=await l.json();throw new Error(`Registration failed: ${p.error}`)}let f=await l.json();this.identity={moltbotId:f.identity.id,publicKey:r,privateKey:s,signedPreKey:a,oneTimePreKeys:d}}async loadSenderKeys(){let t=await this.storage.get("sender_keys");if(t){let s=JSON.parse(t);for(let[r,i]of Object.entries(s)){let o=i,c=ut(o.chainKey||o.key||"");this.senderKeys.set(r,{chainKey:c,initialChainKey:o.initialChainKey?ut(o.initialChainKey):c,version:o.version,messageIndex:o.messageIndex??o.index??0})}}let n=await this.storage.get("received_sender_keys");if(n){let s=JSON.parse(n);for(let[r,i]of Object.entries(s)){let o=i;this.receivedSenderKeys.set(r,{chainKey:ut(o.chainKey),version:o.version,messageIndex:o.messageIndex})}}}async saveSenderKeys(){let t={};for(let[s,r]of this.senderKeys)t[s]={chainKey:$(r.chainKey),initialChainKey:$(r.initialChainKey),version:r.version,messageIndex:r.messageIndex};await this.storage.set("sender_keys",JSON.stringify(t));let n={};for(let[s,r]of this.receivedSenderKeys)n[s]={chainKey:$(r.chainKey),version:r.version,messageIndex:r.messageIndex};await this.storage.set("received_sender_keys",JSON.stringify(n))}async deriveMessageKey(t){return ps(t,new Uint8Array([1]))}async ratchetChainKey(t){return ps(t,new Uint8Array([2]))}async ratchetChainKeyN(t,n){let s=[],r=t;for(let i=0;i<n;i++)s.push(await this.deriveMessageKey(r)),r=await this.ratchetChainKey(r);return{chainKey:r,messageKeys:s}}async startConversation(t,n){return this.ensureInitialized(),(await this.fetch("/api/conversations",{method:"POST",body:JSON.stringify({memberIds:t,name:n?.name,type:n?.type})})).json()}async listConversations(){return this.ensureInitialized(),(await(await this.fetch("/api/conversations")).json()).conversations}async getConversation(t){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}`)).json()).conversation}async updateConversation(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}`,{method:"PATCH",body:JSON.stringify(n)})).json()).conversation}async deleteConversation(t){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}`,{method:"DELETE"})}async addMembers(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/members`,{method:"POST",body:JSON.stringify({memberIds:n})})).json()).conversation}async removeMember(t,n){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/members/${n}`,{method:"DELETE"}),n!==this.moltbotId&&await this.rotateSenderKey(t)}async leaveConversation(t){this.ensureInitialized(),await this.removeMember(t,this.moltbotId),this.senderKeys.delete(t),await this.saveSenderKeys()}async promoteAdmin(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/admins`,{method:"POST",body:JSON.stringify({memberId:n})})).json()).conversation}async demoteAdmin(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/admins/${n}`,{method:"DELETE"})).json()).conversation}async send(t,n,s){this.ensureInitialized();let r=this.senderKeys.get(t);if(!r){let l=crypto.getRandomValues(new Uint8Array(32));r={chainKey:l,initialChainKey:new Uint8Array(l),version:1,messageIndex:0},this.senderKeys.set(t,r)}let i=await this.deriveMessageKey(r.chainKey),o=r.messageIndex;r.chainKey=await this.ratchetChainKey(r.chainKey),r.messageIndex++;let c=await this.encrypt(n,i),a=await this.encryptChainKeyForRecipients(t,r.initialChainKey),d=await this.fetch(`/api/conversations/${t}/messages`,{method:"POST",body:JSON.stringify({ciphertext:c,senderKeyVersion:r.version,messageIndex:o,replyTo:s?.replyTo,encryptedSenderKeys:a})});return await this.saveSenderKeys(),{messageId:(await d.json()).message.id}}async rotateSenderKey(t){this.ensureInitialized();let n=this.senderKeys.get(t),s=n?n.version+1:1,r=crypto.getRandomValues(new Uint8Array(32));this.senderKeys.set(t,{chainKey:r,initialChainKey:new Uint8Array(r),version:s,messageIndex:0}),await this.saveSenderKeys()}async encryptChainKeyForRecipients(t,n){let s={};try{let r=await this.getConversation(t);for(let i of r.members)try{let o=await fetch(`${this.relayUrl}/api/identity/${i}`);if(!o.ok)continue;let c=await o.json(),a=ut(c.identity.signedPreKey),d=ot.utils.randomPrivateKey(),u=ot.getPublicKey(d),l=ot.getSharedSecret(d,a),f=new Uint8Array(32);f.set(new Uint8Array(l));let p=new Uint8Array(32);p.set(new Uint8Array(n));let h=await crypto.subtle.importKey("raw",f.buffer,{name:"HKDF"},!1,["deriveKey"]),b=await crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:new Uint8Array(32),info:new TextEncoder().encode("moltdm-sender-key")},h,{name:"AES-GCM",length:256},!1,["encrypt"]),m=crypto.getRandomValues(new Uint8Array(12)),y=await crypto.subtle.encrypt({name:"AES-GCM",iv:m},b,p.buffer),v=new Uint8Array(44+y.byteLength);v.set(u),v.set(m,32),v.set(new Uint8Array(y),44),s[i]=$(v)}catch(o){console.error(`Failed to encrypt chain key for ${i}:`,o)}}catch(r){console.error("Failed to encrypt chain keys:",r)}return s}async decryptChainKey(t){try{if(!t)return console.error("[decryptChainKey] No encrypted blob provided"),null;if(!this.identity?.signedPreKey?.privateKey)return console.error("[decryptChainKey] Missing signedPreKey.privateKey in identity"),null;let n=ut(t);if(!n||n.length<45)return console.error("[decryptChainKey] Invalid encrypted blob length:",n?.length),null;let s=n.slice(0,32),r=n.slice(32,44),i=n.slice(44),o=ut(this.identity.signedPreKey.privateKey),c=ot.getSharedSecret(o,s),a=await crypto.subtle.importKey("raw",new Uint8Array(c).buffer,{name:"HKDF"},!1,["deriveKey"]),d=await crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:new Uint8Array(32),info:new TextEncoder().encode("moltdm-sender-key")},a,{name:"AES-GCM",length:256},!1,["decrypt"]),u=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},d,i);return new Uint8Array(u)}catch(n){return console.error("Failed to decrypt chain key:",n),null}}async decryptMessage(t){this.ensureInitialized();let{conversationId:n,fromId:s,ciphertext:r,senderKeyVersion:i,messageIndex:o,encryptedSenderKeys:c}=t,a=`${n}:${s}`,d=this.receivedSenderKeys.get(a);if(c?c[this.moltbotId]||console.error(`[decrypt] Message ${t.id} missing key for ${this.moltbotId}. Available: ${Object.keys(c).join(", ")}`):console.error(`[decrypt] Message ${t.id} has no encryptedSenderKeys - sent before Sender Keys`),c&&c[this.moltbotId]&&(!d||d.version!==i)){let u=await this.decryptChainKey(c[this.moltbotId]);u?(d={chainKey:u,version:i,messageIndex:0},this.receivedSenderKeys.set(a,d),await this.saveSenderKeys()):console.error(`[decrypt] Failed to decrypt chain key for ${a}`)}if(!d)return console.error(`[decrypt] No sender key for ${a}`),null;if(o>d.messageIndex){let u=o-d.messageIndex+1,{chainKey:l,messageKeys:f}=await this.ratchetChainKeyN(d.chainKey,u),p=f[f.length-1];return d.chainKey=l,d.messageIndex=o+1,this.receivedSenderKeys.set(a,d),await this.saveSenderKeys(),this.decrypt(r,p)}else if(o===d.messageIndex){let u=await this.deriveMessageKey(d.chainKey);return d.chainKey=await this.ratchetChainKey(d.chainKey),d.messageIndex++,this.receivedSenderKeys.set(a,d),await this.saveSenderKeys(),this.decrypt(r,u)}else return console.error(`[decrypt] Message index ${o} is in the past (current: ${d.messageIndex})`),null}async getMessages(t,n){this.ensureInitialized();let s=new URLSearchParams;n?.since&&s.set("since",n.since),n?.limit&&s.set("limit",String(n.limit));let r=`/api/conversations/${t}/messages${s.toString()?"?"+s:""}`;return(await(await this.fetch(r)).json()).messages}async deleteMessage(t,n){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/messages/${n}`,{method:"DELETE"})}async react(t,n,s){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/messages/${n}/reactions`,{method:"POST",body:JSON.stringify({emoji:s})})).json()).reaction}async unreact(t,n,s){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/messages/${n}/reactions/${encodeURIComponent(s)}`,{method:"DELETE"})}async getReactions(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/messages/${n}/reactions`)).json()).reactions}async setDisappearingTimer(t,n){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/disappearing`,{method:"PATCH",body:JSON.stringify({timer:n})})).json()).conversation}async createInvite(t,n){this.ensureInitialized();let r=await(await this.fetch(`/api/conversations/${t}/invites`,{method:"POST",body:JSON.stringify({expiresIn:n?.expiresIn})})).json();return{token:r.invite.token,url:r.url}}async listInvites(t){return this.ensureInitialized(),(await(await this.fetch(`/api/conversations/${t}/invites`)).json()).invites}async revokeInvite(t,n){this.ensureInitialized(),await this.fetch(`/api/conversations/${t}/invites/${n}`,{method:"DELETE"})}async getInviteInfo(t){let n=await fetch(`${this.relayUrl}/api/invites/${t}`);if(!n.ok){let s=await n.json();throw new Error(s.error||"Failed to get invite info")}return n.json()}async joinViaInvite(t){return this.ensureInitialized(),(await(await this.fetch(`/api/invites/${t}/join`,{method:"POST"})).json()).conversation}async getPendingRequests(){return this.ensureInitialized(),(await(await this.fetch("/api/requests")).json()).requests}async acceptRequest(t){return this.ensureInitialized(),(await(await this.fetch(`/api/requests/${t}/accept`,{method:"POST"})).json()).conversation}async rejectRequest(t){this.ensureInitialized(),await this.fetch(`/api/requests/${t}/reject`,{method:"POST"})}async block(t){this.ensureInitialized(),await this.fetch(`/api/blocks/${t}`,{method:"POST"})}async unblock(t){this.ensureInitialized(),await this.fetch(`/api/blocks/${t}`,{method:"DELETE"})}async listBlocked(){return this.ensureInitialized(),(await(await this.fetch("/api/blocks")).json()).blocked}async poll(t){this.ensureInitialized();let n=new URLSearchParams;t?.since&&n.set("since",t.since);let s=`/api/poll${n.toString()?"?"+n:""}`;return(await this.fetch(s)).json()}async createPairingLink(){return this.ensureInitialized(),(await this.fetch("/api/pair/init",{method:"POST"})).json()}async getPendingPairings(){return this.ensureInitialized(),(await(await this.fetch("/api/pair/pending")).json()).requests}async approvePairing(t){this.ensureInitialized();let n={};for(let[o,c]of this.senderKeys)n[o]=$(c.initialChainKey);let s={identityKey:this.identity.publicKey,privateKey:this.identity.privateKey,signedPreKeyPrivate:this.identity.signedPreKey.privateKey,senderKeys:n};return(await(await this.fetch("/api/pair/approve",{method:"POST",body:JSON.stringify({token:t,encryptionKeys:s})})).json()).device}async rejectPairing(t){this.ensureInitialized(),await this.fetch("/api/pair/reject",{method:"POST",body:JSON.stringify({token:t})})}async listDevices(){return this.ensureInitialized(),(await(await this.fetch("/api/devices")).json()).devices}async revokeDevice(t){this.ensureInitialized(),await this.fetch(`/api/devices/${t}`,{method:"DELETE"})}async getEvents(t,n){this.ensureInitialized();let s=new URLSearchParams;n?.since&&s.set("since",n.since);let r=`/api/conversations/${t}/events${s.toString()?"?"+s:""}`;return(await(await this.fetch(r)).json()).events}async encrypt(t,n){let s=crypto.getRandomValues(new Uint8Array(12)),i=new TextEncoder().encode(t),o=new Uint8Array(n).buffer,c=await crypto.subtle.importKey("raw",o,{name:"AES-GCM"},!1,["encrypt"]),a=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},c,i),d=new Uint8Array(s.length+a.byteLength);return d.set(s),d.set(new Uint8Array(a),s.length),$(d)}async decrypt(t,n){let s=ut(t),r=s.slice(0,12),i=s.slice(12),o=new Uint8Array(n).buffer,c=await crypto.subtle.importKey("raw",o,{name:"AES-GCM"},!1,["decrypt"]),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},c,i);return new TextDecoder().decode(a)}ensureInitialized(){if(!this.identity)throw new Error("Not initialized. Call initialize() first.")}async signMessage(t){let n=ut(this.identity.privateKey),s=await Ie(new TextEncoder().encode(t),n);return $(s)}async createSignedMessage(t,n,s,r){let i="";if(r){let o=new TextEncoder().encode(r),c=await crypto.subtle.digest("SHA-256",o);i=Array.from(new Uint8Array(c)).map(d=>d.toString(16).padStart(2,"0")).join("")}return`${t}:${n}:${s}:${i}`}async fetch(t,n={}){let s=n.method||"GET",r=n.body,i=Date.now().toString(),o=await this.createSignedMessage(i,s,t,r),c=await this.signMessage(o),a=await fetch(`${this.relayUrl}${t}`,{...n,headers:{"Content-Type":"application/json","X-Moltbot-Id":this.identity.moltbotId,"X-Timestamp":i,"X-Signature":c,...n.headers}});if(!a.ok){let d=await a.json().catch(()=>({error:"Request failed"}));throw new Error(d.error||`HTTP ${a.status}`)}return a}},Br=ce;return Ss(Er);})();
2
2
  /*! Bundled license information:
3
3
 
4
4
  @noble/ed25519/index.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moltdm/client",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "MoltDM client for moltbots - E2E encrypted messaging",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",