@actioncodes/protocol 2.0.23 → 2.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transaction, VersionedTransaction, TransactionInstruction } from "@solana/web3.js";
|
|
1
|
+
import { Transaction, VersionedTransaction, TransactionInstruction, Connection } from "@solana/web3.js";
|
|
2
2
|
import { BaseChainAdapter } from "./BaseChainAdapter";
|
|
3
3
|
import { type ProtocolMetaFields } from "../utils/protocolMeta";
|
|
4
4
|
import type { ActionCode, DelegatedActionCode } from "../types";
|
|
@@ -40,7 +40,13 @@ export declare class SolanaAdapter extends BaseChainAdapter {
|
|
|
40
40
|
/**
|
|
41
41
|
* Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.
|
|
42
42
|
* Throws ProtocolError if the transaction already contains protocol meta.
|
|
43
|
+
*
|
|
44
|
+
* @param txString - Base64-encoded transaction string
|
|
45
|
+
* @param meta - Protocol metadata to attach
|
|
46
|
+
* @param connection - Optional Solana connection. Required if transaction has address lookup tables
|
|
47
|
+
* and instructions reference accounts from those tables.
|
|
48
|
+
* @returns Base64-encoded transaction with protocol meta attached
|
|
43
49
|
*/
|
|
44
|
-
static attachProtocolMeta(txString: string, meta: ProtocolMetaFields): string
|
|
50
|
+
static attachProtocolMeta(txString: string, meta: ProtocolMetaFields, connection?: Connection): Promise<string>;
|
|
45
51
|
}
|
|
46
52
|
//# sourceMappingURL=SolanaAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolanaAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/SolanaAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EACX,oBAAoB,EACpB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"SolanaAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/SolanaAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EACX,oBAAoB,EACpB,sBAAsB,EAEtB,UAAU,EAGX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAQhE,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,oBAAoB,CAAC;AAEnE,eAAO,MAAM,kBAAkB,EAAG,QAAiB,CAAC;AAEpD,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,0CAA0C;IAC1C,OAAO,CAAC,eAAe;IAOvB,mEAAmE;IACnE,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IA6BjD,wCAAwC;IACxC,oBAAoB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO;IAkFvE,0EAA0E;IAC1E,sBAAsB,CACpB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,MAAM,GACtB,OAAO;IA8BV,0BAA0B,CACxB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,MAAM,GACtB,OAAO;IAiFV,gFAAgF;IAChF,MAAM,CAAC,oBAAoB,CACzB,IAAI,EAAE,kBAAkB,GACvB,sBAAsB;IAKzB,yFAAyF;IACzF,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAoBhD,2EAA2E;IAC3E,OAAO,CAAC,sBAAsB;IA2B9B,iGAAiG;IACjG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAMtD,uEAAuE;IACvE,OAAO,CAAC,mBAAmB;IAmC3B;;;OAGG;IACH,4BAA4B,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiC5E;;;;OAIG;IACH,oCAAoC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgH5D,gCAAgC,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,IAAI;IA2BP;;;;;;;;;OASG;WACU,kBAAkB,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,kBAAkB,EACxB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,MAAM,CAAC;CAkJnB"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var I0=Object.create;var{getPrototypeOf:m0,defineProperty:o,getOwnPropertyNames:e8,getOwnPropertyDescriptor:b0}=Object,o8=Object.prototype.hasOwnProperty;var Q8=(Q,$,q)=>{q=Q!=null?I0(m0(Q)):{};let Z=$||!Q||!Q.__esModule?o(q,"default",{value:Q,enumerable:!0}):q;for(let Y of e8(Q))if(!o8.call(Z,Y))o(Z,Y,{get:()=>Q[Y],enumerable:!0});return Z},t8=new WeakMap,B0=(Q)=>{var $=t8.get(Q),q;if($)return $;if($=o({},"__esModule",{value:!0}),Q&&typeof Q==="object"||typeof Q==="function")e8(Q).map((Z)=>!o8.call($,Z)&&o($,Z,{get:()=>Q[Z],enumerable:!(q=b0(Q,Z))||q.enumerable}));return t8.set(Q,$),$};var y0=(Q,$)=>{for(var q in $)o(Q,q,{get:$[q],enumerable:!0,configurable:!0,set:(Z)=>$[q]=()=>Z})};var r0={};y0(r0,{validateProtocolMetaFormat:()=>i0,truncateBits:()=>O8,sha256:()=>F0,serializeDelegationProof:()=>x8,serializeCanonicalRevoke:()=>l,serializeCanonical:()=>E,parseProtocolMeta:()=>U8,hmacSha256:()=>v8,hkdfSha256:()=>d0,getCanonicalMessageParts:()=>w8,digestToDigits:()=>F8,codeHash:()=>A,buildProtocolMeta:()=>T8,base32EncodeCrockford:()=>l0,WalletStrategy:()=>t,TransactionNotSignedByIssuerError:()=>u8,TransactionNotSignedByIntendedOwnerError:()=>A8,SolanaAdapter:()=>e,SUPPORTED_CHAINS:()=>V8,SCHEME:()=>k8,ProtocolErrorCode:()=>w0,ProtocolError:()=>X,PROTOCOL_NORMALIZATION:()=>J8,PROTOCOL_META_MAX_BYTES:()=>a,MissingMetaError:()=>C8,MetaMismatchError:()=>p8,InvalidSignatureError:()=>h8,InvalidPubkeyFormatError:()=>g8,InvalidCodeFormatError:()=>c8,InvalidAdapterError:()=>d8,ExpiredCodeError:()=>f8,DelegationStrategy:()=>I8,CODE_MIN_LENGTH:()=>L8,CODE_MAX_LENGTH:()=>M8,CODE_DEFAULT_LENGTH:()=>n0,CODE_CHARSET_DIGITS:()=>s0,CANONICAL_REVOKE_MESSAGE_PREFIX:()=>L0,CANONICAL_MESSAGE_VERSION:()=>l8,CANONICAL_MESSAGE_PREFIX:()=>x0,BaseChainAdapter:()=>j8,ActionCodesProtocol:()=>k0,ADAPTER_CHAIN_NAME:()=>n});module.exports=B0(r0);class j8{}/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function E0(Q){return Q instanceof Uint8Array||ArrayBuffer.isView(Q)&&Q.constructor.name==="Uint8Array"}function G8(Q,$=""){if(!Number.isSafeInteger(Q)||Q<0){let q=$&&`"${$}" `;throw Error(`${q}expected integer >= 0, got ${Q}`)}}function S(Q,$,q=""){let Z=E0(Q),Y=Q?.length,J=$!==void 0;if(!Z||J&&Y!==$){let U=q&&`"${q}" `,K=J?` of length ${$}`:"",j=Z?`length=${Y}`:`type=${typeof Q}`;throw Error(U+"expected Uint8Array"+K+", got "+j)}return Q}function $8(Q){if(typeof Q!=="function"||typeof Q.create!=="function")throw Error("Hash must wrapped by utils.createHasher");G8(Q.outputLen),G8(Q.blockLen)}function s(Q,$=!0){if(Q.destroyed)throw Error("Hash instance has been destroyed");if($&&Q.finished)throw Error("Hash#digest() has already been called")}function Q0(Q,$){S(Q,void 0,"digestInto() output");let q=$.outputLen;if(Q.length<q)throw Error('"digestInto() output" expected to be of length >='+q)}function k(...Q){for(let $=0;$<Q.length;$++)Q[$].fill(0)}function N8(Q){return new DataView(Q.buffer,Q.byteOffset,Q.byteLength)}function T(Q,$){return Q<<32-$|Q>>>$}function $0(Q,$={}){let q=(Y,J)=>Q(J).update(Y).digest(),Z=Q(void 0);return q.outputLen=Z.outputLen,q.blockLen=Z.blockLen,q.create=(Y)=>Q(Y),Object.assign(q,$),Object.freeze(q)}var q0=(Q)=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,Q])});function Z0(Q,$,q){return Q&$^~Q&q}function Y0(Q,$,q){return Q&$^Q&q^$&q}class R8{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(Q,$,q,Z){this.blockLen=Q,this.outputLen=$,this.padOffset=q,this.isLE=Z,this.buffer=new Uint8Array(Q),this.view=N8(this.buffer)}update(Q){s(this),S(Q);let{view:$,buffer:q,blockLen:Z}=this,Y=Q.length;for(let J=0;J<Y;){let U=Math.min(Z-this.pos,Y-J);if(U===Z){let K=N8(Q);for(;Z<=Y-J;J+=Z)this.process(K,J);continue}if(q.set(Q.subarray(J,J+U),this.pos),this.pos+=U,J+=U,this.pos===Z)this.process($,0),this.pos=0}return this.length+=Q.length,this.roundClean(),this}digestInto(Q){s(this),Q0(Q,this),this.finished=!0;let{buffer:$,view:q,blockLen:Z,isLE:Y}=this,{pos:J}=this;if($[J++]=128,k(this.buffer.subarray(J)),this.padOffset>Z-J)this.process(q,0),J=0;for(let z=J;z<Z;z++)$[z]=0;q.setBigUint64(Z-8,BigInt(this.length*8),Y),this.process(q,0);let U=N8(Q),K=this.outputLen;if(K%4)throw Error("_sha2: outputLen must be aligned to 32bit");let j=K/4,G=this.get();if(j>G.length)throw Error("_sha2: outputLen bigger than state");for(let z=0;z<j;z++)U.setUint32(4*z,G[z],Y)}digest(){let{buffer:Q,outputLen:$}=this;this.digestInto(Q);let q=Q.slice(0,$);return this.destroy(),q}_cloneInto(Q){Q||=new this.constructor,Q.set(...this.get());let{blockLen:$,buffer:q,length:Z,finished:Y,destroyed:J,pos:U}=this;if(Q.destroyed=J,Q.finished=Y,Q.length=Z,Q.pos=U,Z%$)Q.buffer.set(q);return Q}clone(){return this._cloneInto()}}var B=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),y=Uint32Array.from([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]),w=Uint32Array.from([3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]),x=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var W8=BigInt(4294967295),J0=BigInt(32);function H0(Q,$=!1){if($)return{h:Number(Q&W8),l:Number(Q>>J0&W8)};return{h:Number(Q>>J0&W8)|0,l:Number(Q&W8)|0}}function X0(Q,$=!1){let q=Q.length,Z=new Uint32Array(q),Y=new Uint32Array(q);for(let J=0;J<q;J++){let{h:U,l:K}=H0(Q[J],$);[Z[J],Y[J]]=[U,K]}return[Z,Y]}var E8=(Q,$,q)=>Q>>>q,H8=(Q,$,q)=>Q<<32-q|$>>>q,c=(Q,$,q)=>Q>>>q|$<<32-q,d=(Q,$,q)=>Q<<32-q|$>>>q,q8=(Q,$,q)=>Q<<64-q|$>>>q-32,Z8=(Q,$,q)=>Q>>>q-32|$<<64-q;function I(Q,$,q,Z){let Y=($>>>0)+(Z>>>0);return{h:Q+q+(Y/4294967296|0)|0,l:Y|0}}var U0=(Q,$,q)=>(Q>>>0)+($>>>0)+(q>>>0),z0=(Q,$,q,Z)=>$+q+Z+(Q/4294967296|0)|0,K0=(Q,$,q,Z)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0),j0=(Q,$,q,Z,Y)=>$+q+Z+Y+(Q/4294967296|0)|0,G0=(Q,$,q,Z,Y)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0)+(Y>>>0),N0=(Q,$,q,Z,Y,J)=>$+q+Z+Y+J+(Q/4294967296|0)|0;var _0=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),f=new Uint32Array(64);class P8 extends R8{constructor(Q){super(64,Q,8,!1)}get(){let{A:Q,B:$,C:q,D:Z,E:Y,F:J,G:U,H:K}=this;return[Q,$,q,Z,Y,J,U,K]}set(Q,$,q,Z,Y,J,U,K){this.A=Q|0,this.B=$|0,this.C=q|0,this.D=Z|0,this.E=Y|0,this.F=J|0,this.G=U|0,this.H=K|0}process(Q,$){for(let z=0;z<16;z++,$+=4)f[z]=Q.getUint32($,!1);for(let z=16;z<64;z++){let N=f[z-15],R=f[z-2],W=T(N,7)^T(N,18)^N>>>3,F=T(R,17)^T(R,19)^R>>>10;f[z]=F+f[z-7]+W+f[z-16]|0}let{A:q,B:Z,C:Y,D:J,E:U,F:K,G:j,H:G}=this;for(let z=0;z<64;z++){let N=T(U,6)^T(U,11)^T(U,25),R=G+N+Z0(U,K,j)+_0[z]+f[z]|0,F=(T(q,2)^T(q,13)^T(q,22))+Y0(q,Z,Y)|0;G=j,j=K,K=U,U=J+R|0,J=Y,Y=Z,Z=q,q=R+F|0}q=q+this.A|0,Z=Z+this.B|0,Y=Y+this.C|0,J=J+this.D|0,U=U+this.E|0,K=K+this.F|0,j=j+this.G|0,G=G+this.H|0,this.set(q,Z,Y,J,U,K,j,G)}roundClean(){k(f)}destroy(){this.set(0,0,0,0,0,0,0,0),k(this.buffer)}}class R0 extends P8{A=B[0]|0;B=B[1]|0;C=B[2]|0;D=B[3]|0;E=B[4]|0;F=B[5]|0;G=B[6]|0;H=B[7]|0;constructor(){super(32)}}class S0 extends P8{A=y[0]|0;B=y[1]|0;C=y[2]|0;D=y[3]|0;E=y[4]|0;F=y[5]|0;G=y[6]|0;H=y[7]|0;constructor(){super(28)}}var W0=(()=>X0(["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((Q)=>BigInt(Q))))(),f0=(()=>W0[0])(),C0=(()=>W0[1])(),C=new Uint32Array(80),p=new Uint32Array(80);class Y8 extends R8{constructor(Q){super(128,Q,16,!1)}get(){let{Ah:Q,Al:$,Bh:q,Bl:Z,Ch:Y,Cl:J,Dh:U,Dl:K,Eh:j,El:G,Fh:z,Fl:N,Gh:R,Gl:W,Hh:F,Hl:V}=this;return[Q,$,q,Z,Y,J,U,K,j,G,z,N,R,W,F,V]}set(Q,$,q,Z,Y,J,U,K,j,G,z,N,R,W,F,V){this.Ah=Q|0,this.Al=$|0,this.Bh=q|0,this.Bl=Z|0,this.Ch=Y|0,this.Cl=J|0,this.Dh=U|0,this.Dl=K|0,this.Eh=j|0,this.El=G|0,this.Fh=z|0,this.Fl=N|0,this.Gh=R|0,this.Gl=W|0,this.Hh=F|0,this.Hl=V|0}process(Q,$){for(let D=0;D<16;D++,$+=4)C[D]=Q.getUint32($),p[D]=Q.getUint32($+=4);for(let D=16;D<80;D++){let P=C[D-15]|0,_=p[D-15]|0,m8=c(P,_,1)^c(P,_,8)^E8(P,_,7),b8=d(P,_,1)^d(P,_,8)^H8(P,_,7),m=C[D-2]|0,b=p[D-2]|0,z8=c(m,b,19)^q8(m,b,61)^E8(m,b,6),B8=d(m,b,19)^Z8(m,b,61)^H8(m,b,6),K8=K0(b8,B8,p[D-7],p[D-16]),y8=j0(K8,m8,z8,C[D-7],C[D-16]);C[D]=y8|0,p[D]=K8|0}let{Ah:q,Al:Z,Bh:Y,Bl:J,Ch:U,Cl:K,Dh:j,Dl:G,Eh:z,El:N,Fh:R,Fl:W,Gh:F,Gl:V,Hh:h,Hl:O}=this;for(let D=0;D<80;D++){let P=c(z,N,14)^c(z,N,18)^q8(z,N,41),_=d(z,N,14)^d(z,N,18)^Z8(z,N,41),m8=z&R^~z&F,b8=N&W^~N&V,m=G0(O,_,b8,C0[D],p[D]),b=N0(m,h,P,m8,f0[D],C[D]),z8=m|0,B8=c(q,Z,28)^q8(q,Z,34)^q8(q,Z,39),K8=d(q,Z,28)^Z8(q,Z,34)^Z8(q,Z,39),y8=q&Y^q&U^Y&U,T0=Z&J^Z&K^J&K;h=F|0,O=V|0,F=R|0,V=W|0,R=z|0,W=N|0,{h:z,l:N}=I(j|0,G|0,b|0,z8|0),j=U|0,G=K|0,U=Y|0,K=J|0,Y=q|0,J=Z|0;let a8=U0(z8,K8,T0);q=z0(a8,b,B8,y8),Z=a8|0}({h:q,l:Z}=I(this.Ah|0,this.Al|0,q|0,Z|0)),{h:Y,l:J}=I(this.Bh|0,this.Bl|0,Y|0,J|0),{h:U,l:K}=I(this.Ch|0,this.Cl|0,U|0,K|0),{h:j,l:G}=I(this.Dh|0,this.Dl|0,j|0,G|0),{h:z,l:N}=I(this.Eh|0,this.El|0,z|0,N|0),{h:R,l:W}=I(this.Fh|0,this.Fl|0,R|0,W|0),{h:F,l:V}=I(this.Gh|0,this.Gl|0,F|0,V|0),{h,l:O}=I(this.Hh|0,this.Hl|0,h|0,O|0),this.set(q,Z,Y,J,U,K,j,G,z,N,R,W,F,V,h,O)}roundClean(){k(C,p)}destroy(){k(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class p0 extends Y8{Ah=x[0]|0;Al=x[1]|0;Bh=x[2]|0;Bl=x[3]|0;Ch=x[4]|0;Cl=x[5]|0;Dh=x[6]|0;Dl=x[7]|0;Eh=x[8]|0;El=x[9]|0;Fh=x[10]|0;Fl=x[11]|0;Gh=x[12]|0;Gl=x[13]|0;Hh=x[14]|0;Hl=x[15]|0;constructor(){super(64)}}class A0 extends Y8{Ah=w[0]|0;Al=w[1]|0;Bh=w[2]|0;Bl=w[3]|0;Ch=w[4]|0;Cl=w[5]|0;Dh=w[6]|0;Dl=w[7]|0;Eh=w[8]|0;El=w[9]|0;Fh=w[10]|0;Fl=w[11]|0;Gh=w[12]|0;Gl=w[13]|0;Hh=w[14]|0;Hl=w[15]|0;constructor(){super(48)}}var L=Uint32Array.from([2352822216,424955298,1944164710,2312950998,502970286,855612546,1738396948,1479516111,258812777,2077511080,2011393907,79989058,1067287976,1780299464,286451373,2446758561]),M=Uint32Array.from([573645204,4230739756,2673172387,3360449730,596883563,1867755857,2520282905,1497426621,2519219938,2827943907,3193839141,1401305490,721525244,746961066,246885852,2177182882]);class u0 extends Y8{Ah=L[0]|0;Al=L[1]|0;Bh=L[2]|0;Bl=L[3]|0;Ch=L[4]|0;Cl=L[5]|0;Dh=L[6]|0;Dl=L[7]|0;Eh=L[8]|0;El=L[9]|0;Fh=L[10]|0;Fl=L[11]|0;Gh=L[12]|0;Gl=L[13]|0;Hh=L[14]|0;Hl=L[15]|0;constructor(){super(28)}}class g0 extends Y8{Ah=M[0]|0;Al=M[1]|0;Bh=M[2]|0;Bl=M[3]|0;Ch=M[4]|0;Cl=M[5]|0;Dh=M[6]|0;Dl=M[7]|0;Eh=M[8]|0;El=M[9]|0;Fh=M[10]|0;Fl=M[11]|0;Gh=M[12]|0;Gl=M[13]|0;Hh=M[14]|0;Hl=M[15]|0;constructor(){super(32)}}var D8=$0(()=>new R0,q0(1));class _8{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(Q,$){if($8(Q),S($,void 0,"key"),this.iHash=Q.create(),typeof this.iHash.update!=="function")throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let q=this.blockLen,Z=new Uint8Array(q);Z.set($.length>q?Q.create().update($).digest():$);for(let Y=0;Y<Z.length;Y++)Z[Y]^=54;this.iHash.update(Z),this.oHash=Q.create();for(let Y=0;Y<Z.length;Y++)Z[Y]^=106;this.oHash.update(Z),k(Z)}update(Q){return s(this),this.iHash.update(Q),this}digestInto(Q){s(this),S(Q,this.outputLen,"output"),this.finished=!0,this.iHash.digestInto(Q),this.oHash.update(Q),this.oHash.digestInto(Q),this.destroy()}digest(){let Q=new Uint8Array(this.oHash.outputLen);return this.digestInto(Q),Q}_cloneInto(Q){Q||=Object.create(Object.getPrototypeOf(this),{});let{oHash:$,iHash:q,finished:Z,destroyed:Y,blockLen:J,outputLen:U}=this;return Q=Q,Q.finished=Z,Q.destroyed=Y,Q.blockLen=J,Q.outputLen=U,Q.oHash=$._cloneInto(Q.oHash),Q.iHash=q._cloneInto(Q.iHash),Q}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}var i=(Q,$,q)=>new _8(Q,$).update(q).digest();i.create=(Q,$)=>new _8(Q,$);function h0(Q,$,q){if($8(Q),q===void 0)q=new Uint8Array(Q.outputLen);return i(Q,q,$)}var S8=Uint8Array.of(0),D0=Uint8Array.of();function c0(Q,$,q,Z=32){$8(Q),G8(Z,"length");let Y=Q.outputLen;if(Z>255*Y)throw Error("Length must be <= 255*HashLen");let J=Math.ceil(Z/Y);if(q===void 0)q=D0;else S(q,void 0,"info");let U=new Uint8Array(J*Y),K=i.create(Q,$),j=K._cloneInto(),G=new Uint8Array(K.outputLen);for(let z=0;z<J;z++)S8[0]=z+1,j.update(z===0?D0:G).update(q).update(S8).digestInto(G),U.set(G,Y*z),K._cloneInto(j);return K.destroy(),j.destroy(),k(G,S8),U.slice(0,Z)}var v0=(Q,$,q,Z,Y)=>c0(Q,h0(Q,$,q),Z,Y);function r(Q){if(typeof Q==="string")return new TextEncoder().encode(Q);return Q}function F0(Q){return D8(r(Q))}function v8(Q,$){return i(D8,r(Q),r($))}function d0(Q,$,{salt:q,info:Z}={}){let Y=q?r(q):new Uint8Array(32),J=r(Q),U=Z?r(Z):new Uint8Array(0);return v0(D8,J,Y,U,$)}var O0="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function l0(Q){let $=0,q=0,Z="";for(let Y=0;Y<Q.length;Y++){q=q<<8|Q[Y],$+=8;while($>=5)Z+=O0[q>>>$-5&31],$-=5}if($>0)Z+=O0[q<<5-$&31];return Z}function O8(Q,$){let q=Math.ceil($/8),Z=new Uint8Array(q),Y=Math.min(q,Q.length);Z.set(Q.subarray(0,Y));let J=q*8-$;if(J>0){let U=255<<J;Z[q-1]=Z[q-1]&U}return Z}function F8(Q,$){if(Q.length===0)throw Error("digestToDigits: empty digest");let q="",Z=Q[Q.length-1]&15;for(let Y=0;q.length<$;Y++){let J=(Z+Y*4)%Math.max(1,Q.length-4),j=(((Q[J]&127)<<24|Q[J+1]<<16|Q[J+2]<<8|Q[J+3])%1e9).toString().padStart(9,"0");q+=j}return q.slice(0,$)}function A(Q){let $=F0(Q);return Array.from($).map((q)=>q.toString(16).padStart(2,"0")).join("")}var w0;((O)=>{O.EXPIRED_CODE="EXPIRED_CODE";O.INVALID_CODE="INVALID_CODE";O.INVALID_CODE_FORMAT="INVALID_CODE_FORMAT";O.INVALID_SIGNATURE="INVALID_SIGNATURE";O.MISSING_META="MISSING_META";O.INVALID_META_FORMAT="INVALID_META_FORMAT";O.META_MISMATCH="META_MISMATCH";O.META_TOO_LARGE="META_TOO_LARGE";O.TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER="TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER";O.TRANSACTION_NOT_SIGNED_BY_ISSUER="TRANSACTION_NOT_SIGNED_BY_ISSUER";O.INVALID_TRANSACTION_FORMAT="INVALID_TRANSACTION_FORMAT";O.INVALID_PUBKEY_FORMAT="INVALID_PUBKEY_FORMAT";O.INVALID_INPUT="INVALID_INPUT";O.MISSING_REQUIRED_FIELD="MISSING_REQUIRED_FIELD";O.CRYPTO_ERROR="CRYPTO_ERROR";O.INVALID_DIGEST="INVALID_DIGEST";O.INVALID_ADAPTER="INVALID_ADAPTER"})(w0||={});class X extends Error{code;details;constructor(Q,$,q){super($);this.code=Q;this.details=q;this.name="ProtocolError"}static expiredCode(Q,$,q){return new f8(Q,$,q)}static invalidCode(){return new X("INVALID_CODE","Invalid code provided",{})}static invalidCodeFormat(Q,$){return new c8(Q,$)}static invalidSignature(Q){return new h8(Q)}static missingMeta(){return new C8}static invalidMetaFormat(Q){return new X("INVALID_META_FORMAT",`Invalid protocol meta format: ${Q}`,{reason:Q})}static metaMismatch(Q,$,q){return new p8(Q,$,q)}static metaTooLarge(Q,$){return new X("META_TOO_LARGE",`Protocol meta too large: ${$} bytes (max: ${Q})`,{maxBytes:Q,actualBytes:$})}static transactionNotSignedByIntendedOwner(Q,$){return new A8(Q,$)}static transactionNotSignedByIssuer(Q,$){return new u8(Q,$)}static invalidTransactionFormat(Q){return new X("INVALID_TRANSACTION_FORMAT",`Invalid transaction format: ${Q}`,{reason:Q})}static invalidPubkeyFormat(Q,$){return new g8(Q,$)}static invalidInput(Q,$,q){return new X("INVALID_INPUT",`Invalid ${Q}: ${q}`,{field:Q,value:$,reason:q})}static missingRequiredField(Q){return new X("MISSING_REQUIRED_FIELD",`Missing required field: ${Q}`,{field:Q})}static cryptoError(Q,$){return new X("CRYPTO_ERROR",`Crypto error in ${Q}: ${$}`,{operation:Q,reason:$})}static invalidDigest(Q){return new X("INVALID_DIGEST",`Invalid digest: ${Q}`,{reason:Q})}static invalidAdapter(Q){return new d8(Q)}static create(Q,$,q){return new X(Q,$,q)}}class f8 extends X{constructor(Q,$,q){super("EXPIRED_CODE",`Action code '${Q}' has expired`,{code:Q,expiresAt:$,currentTime:q});this.name="ExpiredCodeError"}}class C8 extends X{constructor(){super("MISSING_META","Transaction does not contain valid protocol meta");this.name="MissingMetaError"}}class p8 extends X{constructor(Q,$,q){super("META_MISMATCH",`Meta ${q} mismatch: expected '${Q}', got '${$}'`,{expected:Q,actual:$,field:q});this.name="MetaMismatchError"}}class A8 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER",`Transaction not signed by intended owner '${Q}'. Actual signers: [${$.join(", ")}]`,{intended:Q,actualSigners:$});this.name="TransactionNotSignedByIntendedOwnerError"}}class u8 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_ISSUER",`Transaction not signed by issuer '${Q}'. Actual signers: [${$.join(", ")}]`,{issuer:Q,actualSigners:$});this.name="TransactionNotSignedByIssuerError"}}class g8 extends X{constructor(Q,$){super("INVALID_PUBKEY_FORMAT",`Invalid public key format '${Q}': ${$}`,{pubkey:Q,reason:$});this.name="InvalidPubkeyFormatError"}}class h8 extends X{constructor(Q){super("INVALID_SIGNATURE",`Invalid signature: ${Q}`,{reason:Q});this.name="InvalidSignatureError"}}class c8 extends X{constructor(Q,$){super("INVALID_CODE_FORMAT",`Invalid code format '${Q}': ${$}`,{code:Q,reason:$});this.name="InvalidCodeFormatError"}}class d8 extends X{constructor(Q){super("INVALID_ADAPTER",`Invalid adapter: ${Q}`,{adapter:Q});this.name="InvalidAdapterError"}}var l8=1,x0="actioncodes",L0="actioncodes-revoke";function E(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey))throw X.invalidInput("pubkey",Q.pubkey,"contains invalid characters for public key or JSON");let $=JSON.stringify({id:x0,ver:l8,pubkey:Q.pubkey,windowStart:Q.windowStart});return new TextEncoder().encode($)}function l(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(typeof Q.codeHash!=="string")throw X.invalidInput("codeHash",Q.codeHash,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(Q.codeHash.length===0)throw X.invalidInput("codeHash",Q.codeHash,"cannot be empty");if(Q.codeHash.length>100)throw X.invalidInput("codeHash",Q.codeHash,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey)||/["\\\x00-\x1f\x7f-\x9f]/.test(Q.codeHash))throw X.invalidInput("input","contains invalid characters for identifiers or JSON","contains invalid characters");let $=JSON.stringify({id:L0,ver:l8,pubkey:Q.pubkey,codeHash:Q.codeHash,windowStart:Q.windowStart});return new TextEncoder().encode($)}function w8(Q){return E({pubkey:Q,windowStart:Date.now()})}function x8(Q){let $=["walletPubkey","delegatedPubkey","chain"];for(let Z of $){let Y=Q[Z];if(typeof Y!=="string")throw X.invalidInput(Z,Y,"must be a string");if(Y.length===0)throw X.invalidInput(Z,Y,"cannot be empty");if(Y.length>100)throw X.invalidInput(Z,Y,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Y))throw X.invalidInput(Z,Y,"contains invalid characters for identifiers or JSON")}let q=JSON.stringify({walletPubkey:Q.walletPubkey,delegatedPubkey:Q.delegatedPubkey,expiresAt:Q.expiresAt,chain:Q.chain});return new TextEncoder().encode(q)}var J8="NFC",a=512,L8=6,M8=24,n0=8,s0="0123456789",V8={solana:"solana"};var k8="actioncodes:";function T8(Q){let $=M0(Q);if($.int!=null)X8($.int);let q=[`ver=${$.ver}`,`id=${encodeURIComponent($.id)}`,`int=${encodeURIComponent($.int)}`];if($.iss!=null&&$.iss!==$.int)q.push(`iss=${encodeURIComponent($.iss)}`);if($.p!=null&&Object.keys($.p).length>0){let Y=JSON.stringify($.p);X8(Y),q.push(`p=${encodeURIComponent(Y)}`)}let Z=k8+q.join("&");return V0(Z),Z}function U8(Q){if(!Q.startsWith(k8))throw Error("protocol meta must start with actioncodes:");let q=Q.slice(k8.length).split("&").filter(Boolean),Z=new Map;for(let W of q){let[F,V]=W.split("=",2);if(!F)continue;let h=V!=null?decodeURIComponent(V):"";Z.set(F,h)}let Y=Z.get("ver"),J=Z.get("id"),U=Z.get("int"),K=Z.get("iss"),j=Z.get("p");if(Y==null||J==null||U==null)throw Error("protocol meta missing required fields ver or id or int");let G=Number(Y);if(!Number.isInteger(G)||G<=0)throw Error("protocol meta ver must be positive integer");let z;if(j!=null&&j!=="")try{if(z=JSON.parse(j),typeof z!=="object"||z===null||Array.isArray(z))throw Error("protocol meta p must be a JSON object")}catch{throw Error("protocol meta p must be valid JSON")}let N=M0({ver:G,id:J,int:U,iss:K,p:z});if(N.int!=null)X8(N.int);if(N.iss!=null)X8(N.iss);if(N.p!=null)X8(JSON.stringify(N.p));if([...Z.keys()].filter((W)=>W!=="ver"&&W!=="id"&&W!=="int"&&W!=="iss"&&W!=="p").length>0)throw Error("protocol meta contains unsupported keys");return V0(T8(N)),N}function i0(Q){try{return U8(Q),{ok:!0}}catch($){return{ok:!1,reason:String($)}}}function M0(Q){let $=Q.id.normalize(J8).trim(),q={ver:Q.ver,id:$,int:Q.int};if(Q.int!=null)q.int=Q.int.normalize(J8).trim();if(Q.iss!=null)q.iss=Q.iss.normalize(J8).trim();if(Q.p!=null)q.p=Q.p;return q}function V0(Q){if(new TextEncoder().encode(Q).length>a)throw Error(`protocol meta exceeds ${a} bytes`)}function X8(Q){if(new TextEncoder().encode(Q).length>a)throw Error(`protocol meta params exceed ${a} bytes`)}var n8=Q8(require("bs58"));class t{config;constructor(Q){this.config=Q}generateCode(Q,$,q){let Z=Q,Y=JSON.parse(new TextDecoder().decode(Z)),J=Y.pubkey,U=Y.windowStart,K;try{K=n8.default.decode(q)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let j=v8(K,Z),G=Math.max(L8,Math.min(M8,this.config.codeLength)),z=8*Math.ceil(G/2),N=O8(j,z),R=F8(N,G);return{chain:$,code:R,pubkey:J,timestamp:U,expiresAt:U+this.config.ttlMs,signature:q}}validateCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);let q=E({pubkey:Q.pubkey,windowStart:Q.timestamp});if(!Q.signature)throw X.missingRequiredField("signature");let Z;try{Z=n8.default.decode(Q.signature)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let Y=v8(Z,q),J=Math.max(L8,Math.min(M8,this.config.codeLength)),U=O8(Y,8*Math.ceil(J/2));if(F8(U,J)!==Q.code)throw X.invalidCode()}}var s8=require("@solana/web3.js"),i8=Q8(require("tweetnacl")),r8=Q8(require("bs58"));class I8{walletStrategy;config;constructor(Q){this.config=Q,this.walletStrategy=new t(Q)}generateDelegatedCode(Q,$,q,Z){return this.validateDelegationProof(Q),{...this.walletStrategy.generateCode($,q,Z),delegationProof:Q}}validateDelegatedCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);if(this.validateDelegationProof(Q.delegationProof),Q.pubkey!==Q.delegationProof.delegatedPubkey)throw X.invalidInput("delegatedPubkey",Q.delegationProof.delegatedPubkey,"Action code pubkey does not match delegated signer");if(Q.expiresAt>Q.delegationProof.expiresAt)throw X.invalidInput("expiresAt",Q.expiresAt,"Action code cannot expire after delegation proof expiration");if(!Q.delegationProof.signature)throw X.missingRequiredField("delegationProof.signature");let q=E({pubkey:Q.delegationProof.delegatedPubkey,windowStart:Q.timestamp}),Z;try{Z=r8.default.decode(Q.signature??"")}catch{throw X.invalidSignature("Invalid Base58 delegated signature format")}let Y=r8.default.decode(Q.delegationProof.delegatedPubkey);if(!i8.default.sign.detached.verify(q,Z,Y))throw X.invalidSignature("Delegated signature verification failed")}validateDelegationProof(Q){if(!Q.walletPubkey||typeof Q.walletPubkey!=="string")throw X.invalidInput("walletPubkey",Q.walletPubkey,"Wallet pubkey is required and must be a string");try{new s8.PublicKey(Q.walletPubkey)}catch{throw X.invalidInput("walletPubkey",Q.walletPubkey,"Invalid wallet pubkey format")}if(!Q.delegatedPubkey||typeof Q.delegatedPubkey!=="string")throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Delegated pubkey is required and must be a string");try{new s8.PublicKey(Q.delegatedPubkey)}catch{throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Invalid delegated pubkey format")}if(!Q.chain||typeof Q.chain!=="string")throw X.invalidInput("chain",Q.chain,"Chain is required and must be a string");if(Q.chain.length===0||Q.chain.length>50)throw X.invalidInput("chain",Q.chain,"Chain must be between 1 and 50 characters");if(!/^[a-z0-9-]+$/.test(Q.chain))throw X.invalidInput("chain",Q.chain,"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)");if(typeof Q.expiresAt!=="number"||!Number.isInteger(Q.expiresAt))throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be a valid integer timestamp");if(Q.expiresAt<=0)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be positive");let $=Date.now(),q=31536000000;if(Q.expiresAt>$+q)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time is too far in the future");if(Q.expiresAt<$)throw X.expiredCode("Delegation proof has expired",Q.expiresAt,$);if(!Q.signature||typeof Q.signature!=="string")throw X.invalidInput("signature",Q.signature,"Delegation signature is required and must be a string");if(Q.signature.length===0||Q.signature.length>200)throw X.invalidInput("signature",Q.signature,"Delegation signature must be between 1 and 200 characters")}}var H=Q8(require("tweetnacl")),u=Q8(require("bs58")),v=require("@solana/web3.js"),g=require("@solana/spl-memo");var n="solana";class e extends j8{normalizePubkey(Q){if(typeof Q==="string")return new v.PublicKey(Q);return Q}verifyWithWallet(Q){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;try{let $=E({pubkey:Q.pubkey,windowStart:Q.timestamp}),q=this.normalizePubkey(Q.pubkey),Z=u.default.decode(Q.signature),Y=q.toBytes();if(Z.length!==64||Y.length!==32)return!1;return H.default.sign.detached.verify($,Z,Y)}catch{return!1}}verifyWithDelegation(Q){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;let $=Q.delegationProof;if(!$.walletPubkey||!$.delegatedPubkey||!$.chain||!$.expiresAt||!$.signature)return!1;if($.chain!==n)return!1;if(Q.pubkey!==$.delegatedPubkey)return!1;if($.expiresAt<Date.now())return!1;try{let q=x8($),Z=this.normalizePubkey($.walletPubkey),Y=u.default.decode($.signature),J=Z.toBytes(),U=E({pubkey:$.delegatedPubkey,windowStart:Q.timestamp}),K=this.normalizePubkey($.delegatedPubkey),j=u.default.decode(Q.signature),G=K.toBytes();if(Y.length!==64||J.length!==32)return!1;if(j.length!==64||G.length!==32)return!1;let z=H.default.sign.detached.verify(q,Y,J),N=H.default.sign.detached.verify(U,j,G);return z&&N}catch{return!1}}verifyRevokeWithWallet(Q,$){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!$)return!1;try{let q=l({pubkey:Q.pubkey,codeHash:A(Q.code),windowStart:Q.timestamp}),Z=this.normalizePubkey(Q.pubkey),Y=u.default.decode($),J=Z.toBytes();if(Y.length!==64||J.length!==32)return!1;return H.default.sign.detached.verify(q,Y,J)}catch{return!1}}verifyRevokeWithDelegation(Q,$){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature||!Q.delegationProof)return!1;let q=Q.delegationProof;if(!q.walletPubkey||!q.delegatedPubkey||!q.chain||!q.expiresAt||!q.signature)return!1;if(q.chain!==n)return!1;if(Q.pubkey!==q.delegatedPubkey)return!1;if(q.expiresAt<Date.now())return!1;try{let Z=x8(q),Y=this.normalizePubkey(q.walletPubkey),J=u.default.decode(q.signature),U=Y.toBytes(),K=l({pubkey:q.delegatedPubkey,codeHash:A(Q.code),windowStart:Q.timestamp}),j=this.normalizePubkey(q.delegatedPubkey),G=u.default.decode($),z=j.toBytes();if(J.length!==64||U.length!==32)return!1;if(G.length!==64||z.length!==32)return!1;let N=H.default.sign.detached.verify(Z,J,U),R=H.default.sign.detached.verify(K,G,z);return N&&R}catch{return!1}}static createProtocolMetaIx(Q){let $=T8(Q);return g.createMemoInstruction($)}getProtocolMeta(Q){try{let $=this.deserializeTransaction(Q);for(let q of this.getMemoInstructions($)){let Z=q.data;try{let Y=new TextDecoder().decode(Z);if(U8(Y))return Y}catch{}}return null}catch{return null}}deserializeTransaction(Q){try{let $=v.VersionedTransaction.deserialize(Buffer.from(Q,"base64"));if($.message instanceof v.MessageV0)return $;else return v.Transaction.from(Buffer.from(Q,"base64"))}catch{try{return v.Transaction.from(Buffer.from(Q,"base64"))}catch{throw X.invalidTransactionFormat("Invalid base64 transaction format")}}}parseMeta(Q){let $=this.getProtocolMeta(Q);if(!$)return null;return U8($)}getMemoInstructions(Q){if(Q instanceof v.Transaction)return Q.instructions.filter(($)=>$.programId.equals(g.MEMO_PROGRAM_ID));else{let q=Q.message;if(q instanceof v.MessageV0){let Z=[];for(let Y of q.compiledInstructions){let J=q.staticAccountKeys[Y.programIdIndex];if(J&&J.equals(g.MEMO_PROGRAM_ID)){let U=Y.accountKeyIndexes.map((K)=>({pubkey:q.staticAccountKeys[K],isSigner:!1,isWritable:!1}));Z.push(new v.TransactionInstruction({keys:U,programId:J,data:Y.data}))}}return Z}return[]}}verifyTransactionMatchesCode(Q,$){let q=Date.now();if(q>Q.expiresAt)throw X.expiredCode(Q.code,Q.expiresAt,q);let Z=this.parseMeta($);if(!Z)throw X.missingMeta();if(Z.ver!==2)throw X.metaMismatch("2",String(Z.ver),"ver");let Y=A(Q.code);if(Z.id!==Y)throw X.metaMismatch(Y,Z.id,"id");if(Z.int!==Q.pubkey)throw X.metaMismatch(Q.pubkey,Z.int,"int")}verifyTransactionSignedByIntentOwner(Q){let $=this.parseMeta(Q);if(!$)throw X.missingMeta();let{int:q,iss:Z}=$;if(!q)throw X.invalidMetaFormat("Missing 'int' (intendedFor) field");let Y,J;try{Y=new v.PublicKey(q)}catch{throw X.invalidPubkeyFormat(q,"Invalid public key format")}try{if(Z)J=new v.PublicKey(Z)}catch{throw X.invalidPubkeyFormat(Z||"","Invalid public key format")}let U=this.deserializeTransaction(Q),K=[];if(U instanceof v.Transaction){let j=!1,G=!1;if(U.signatures.forEach((z)=>{if(!z.signature)return;if(K.push(z.publicKey.toString()),z.publicKey.equals(Y))j=!0;if(Z&&z.publicKey.equals(J))G=!0}),!j)throw X.transactionNotSignedByIntendedOwner(q,K);if(Z&&!G)throw X.transactionNotSignedByIssuer(Z,K);return}if(U instanceof v.VersionedTransaction){let j=U.message;if(j instanceof v.MessageV0){let G=!1,z=!1,N=j.header.numRequiredSignatures;for(let R=0;R<N;R++){let W=j.staticAccountKeys[R];if(W){if(K.push(W.toString()),W.equals(Y))G=!0;if(Z&&W.equals(J))z=!0}}if(!G)throw X.transactionNotSignedByIntendedOwner(q,K);if(Z&&!z)throw X.transactionNotSignedByIssuer(Z,K);return}}throw X.invalidTransactionFormat("Unsupported transaction format")}verifyMessageSignedByIntentOwner(Q,$,q){try{let Z=new TextEncoder().encode(Q),Y=u.default.decode($),U=this.normalizePubkey(q).toBytes();if(!H.default.sign.detached.verify(Z,Y,U))throw X.invalidSignature("Signature verification failed")}catch(Z){if(Z instanceof Error&&Z.message.includes("Signature verification failed"))throw Z;throw X.invalidSignature("Invalid signature format")}}static attachProtocolMeta(Q,$){if(new e().getProtocolMeta(Q))throw X.invalidTransactionFormat("Transaction already contains protocol meta. Cannot attach additional protocol meta.");let Y=e.createProtocolMetaIx($);try{let J=v.VersionedTransaction.deserialize(Buffer.from(Q,"base64"));if(J.message instanceof v.MessageV0){let U=J.message,K=[...U.staticAccountKeys];if(!K.some((R)=>R.equals(g.MEMO_PROGRAM_ID)))K.push(g.MEMO_PROGRAM_ID);let G={programIdIndex:K.findIndex((R)=>R.equals(g.MEMO_PROGRAM_ID)),accountKeyIndexes:[],data:Y.data},z=new v.MessageV0({header:U.header,staticAccountKeys:K,recentBlockhash:U.recentBlockhash,compiledInstructions:[...U.compiledInstructions,G],addressTableLookups:U.addressTableLookups}),N=new v.VersionedTransaction(z);return N.signatures=J.signatures,Buffer.from(N.serialize()).toString("base64")}else{let U=v.Transaction.from(Buffer.from(Q,"base64"));return U.add(Y),Buffer.from(U.serialize({requireAllSignatures:!1})).toString("base64")}}catch{try{let J=v.Transaction.from(Buffer.from(Q,"base64"));return J.add(Y),Buffer.from(J.serialize({requireAllSignatures:!1})).toString("base64")}catch{throw X.invalidTransactionFormat("Invalid base64 transaction format")}}}}class k0{config;adapters={};_walletStrategy;_delegationStrategy;constructor(Q){this.config=Q;this.adapters.solana=new e,this._walletStrategy=new t(Q),this._delegationStrategy=new I8(Q)}getConfig(){return this.config}registerAdapter(Q,$){this.adapters[Q]=$}getAdapter(Q){return this.adapters[Q]}get adapter(){return{solana:this.adapters.solana}}get walletStrategy(){return this._walletStrategy}get delegationStrategy(){return this._delegationStrategy}async generate(Q,$,q,Z){if(!q||!V8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=w8($),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return this.walletStrategy.generateCode(Y,q,J)}else{let Y=$,J=w8(Y.delegatedPubkey),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return this.delegationStrategy.generateDelegatedCode(Y,J,q,U)}}async revoke(Q,$,q,Z){if(!q||!V8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=l({codeHash:A($.code),pubkey:$.pubkey,windowStart:$.timestamp}),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return{...$,revokeSignature:J}}else{let Y=$,J=l({codeHash:A($.code),pubkey:Y.delegationProof.delegatedPubkey,windowStart:$.timestamp}),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return{...$,revokeSignature:U}}}validate(Q,$){if(Q==="wallet"){this.walletStrategy.validateCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithWallet($))throw X.invalidSignature("Wallet signature verification failed")}else{this.delegationStrategy.validateDelegatedCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithDelegation($))throw X.invalidSignature("Delegation signature verification failed")}}}
|
|
1
|
+
var I0=Object.create;var{getPrototypeOf:b0,defineProperty:o,getOwnPropertyNames:e8,getOwnPropertyDescriptor:m0}=Object,o8=Object.prototype.hasOwnProperty;var Q8=(Q,$,q)=>{q=Q!=null?I0(b0(Q)):{};let Z=$||!Q||!Q.__esModule?o(q,"default",{value:Q,enumerable:!0}):q;for(let Y of e8(Q))if(!o8.call(Z,Y))o(Z,Y,{get:()=>Q[Y],enumerable:!0});return Z},t8=new WeakMap,B0=(Q)=>{var $=t8.get(Q),q;if($)return $;if($=o({},"__esModule",{value:!0}),Q&&typeof Q==="object"||typeof Q==="function")e8(Q).map((Z)=>!o8.call($,Z)&&o($,Z,{get:()=>Q[Z],enumerable:!(q=m0(Q,Z))||q.enumerable}));return t8.set(Q,$),$};var y0=(Q,$)=>{for(var q in $)o(Q,q,{get:$[q],enumerable:!0,configurable:!0,set:(Z)=>$[q]=()=>Z})};var r0={};y0(r0,{validateProtocolMetaFormat:()=>i0,truncateBits:()=>O8,sha256:()=>F0,serializeDelegationProof:()=>x8,serializeCanonicalRevoke:()=>l,serializeCanonical:()=>H,parseProtocolMeta:()=>U8,hmacSha256:()=>v8,hkdfSha256:()=>d0,getCanonicalMessageParts:()=>w8,digestToDigits:()=>F8,codeHash:()=>u,buildProtocolMeta:()=>T8,base32EncodeCrockford:()=>l0,WalletStrategy:()=>t,TransactionNotSignedByIssuerError:()=>u8,TransactionNotSignedByIntendedOwnerError:()=>A8,SolanaAdapter:()=>e,SUPPORTED_CHAINS:()=>M8,SCHEME:()=>k8,ProtocolErrorCode:()=>w0,ProtocolError:()=>X,PROTOCOL_NORMALIZATION:()=>J8,PROTOCOL_META_MAX_BYTES:()=>a,MissingMetaError:()=>C8,MetaMismatchError:()=>p8,InvalidSignatureError:()=>h8,InvalidPubkeyFormatError:()=>g8,InvalidCodeFormatError:()=>c8,InvalidAdapterError:()=>d8,ExpiredCodeError:()=>f8,DelegationStrategy:()=>I8,CODE_MIN_LENGTH:()=>L8,CODE_MAX_LENGTH:()=>V8,CODE_DEFAULT_LENGTH:()=>n0,CODE_CHARSET_DIGITS:()=>s0,CANONICAL_REVOKE_MESSAGE_PREFIX:()=>L0,CANONICAL_MESSAGE_VERSION:()=>l8,CANONICAL_MESSAGE_PREFIX:()=>x0,BaseChainAdapter:()=>j8,ActionCodesProtocol:()=>k0,ADAPTER_CHAIN_NAME:()=>n});module.exports=B0(r0);class j8{}/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function E0(Q){return Q instanceof Uint8Array||ArrayBuffer.isView(Q)&&Q.constructor.name==="Uint8Array"}function G8(Q,$=""){if(!Number.isSafeInteger(Q)||Q<0){let q=$&&`"${$}" `;throw Error(`${q}expected integer >= 0, got ${Q}`)}}function f(Q,$,q=""){let Z=E0(Q),Y=Q?.length,J=$!==void 0;if(!Z||J&&Y!==$){let U=q&&`"${q}" `,z=J?` of length ${$}`:"",G=Z?`length=${Y}`:`type=${typeof Q}`;throw Error(U+"expected Uint8Array"+z+", got "+G)}return Q}function $8(Q){if(typeof Q!=="function"||typeof Q.create!=="function")throw Error("Hash must wrapped by utils.createHasher");G8(Q.outputLen),G8(Q.blockLen)}function s(Q,$=!0){if(Q.destroyed)throw Error("Hash instance has been destroyed");if($&&Q.finished)throw Error("Hash#digest() has already been called")}function Q0(Q,$){f(Q,void 0,"digestInto() output");let q=$.outputLen;if(Q.length<q)throw Error('"digestInto() output" expected to be of length >='+q)}function T(...Q){for(let $=0;$<Q.length;$++)Q[$].fill(0)}function N8(Q){return new DataView(Q.buffer,Q.byteOffset,Q.byteLength)}function I(Q,$){return Q<<32-$|Q>>>$}function $0(Q,$={}){let q=(Y,J)=>Q(J).update(Y).digest(),Z=Q(void 0);return q.outputLen=Z.outputLen,q.blockLen=Z.blockLen,q.create=(Y)=>Q(Y),Object.assign(q,$),Object.freeze(q)}var q0=(Q)=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,Q])});function Z0(Q,$,q){return Q&$^~Q&q}function Y0(Q,$,q){return Q&$^Q&q^$&q}class R8{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(Q,$,q,Z){this.blockLen=Q,this.outputLen=$,this.padOffset=q,this.isLE=Z,this.buffer=new Uint8Array(Q),this.view=N8(this.buffer)}update(Q){s(this),f(Q);let{view:$,buffer:q,blockLen:Z}=this,Y=Q.length;for(let J=0;J<Y;){let U=Math.min(Z-this.pos,Y-J);if(U===Z){let z=N8(Q);for(;Z<=Y-J;J+=Z)this.process(z,J);continue}if(q.set(Q.subarray(J,J+U),this.pos),this.pos+=U,J+=U,this.pos===Z)this.process($,0),this.pos=0}return this.length+=Q.length,this.roundClean(),this}digestInto(Q){s(this),Q0(Q,this),this.finished=!0;let{buffer:$,view:q,blockLen:Z,isLE:Y}=this,{pos:J}=this;if($[J++]=128,T(this.buffer.subarray(J)),this.padOffset>Z-J)this.process(q,0),J=0;for(let K=J;K<Z;K++)$[K]=0;q.setBigUint64(Z-8,BigInt(this.length*8),Y),this.process(q,0);let U=N8(Q),z=this.outputLen;if(z%4)throw Error("_sha2: outputLen must be aligned to 32bit");let G=z/4,N=this.get();if(G>N.length)throw Error("_sha2: outputLen bigger than state");for(let K=0;K<G;K++)U.setUint32(4*K,N[K],Y)}digest(){let{buffer:Q,outputLen:$}=this;this.digestInto(Q);let q=Q.slice(0,$);return this.destroy(),q}_cloneInto(Q){Q||=new this.constructor,Q.set(...this.get());let{blockLen:$,buffer:q,length:Z,finished:Y,destroyed:J,pos:U}=this;if(Q.destroyed=J,Q.finished=Y,Q.length=Z,Q.pos=U,Z%$)Q.buffer.set(q);return Q}clone(){return this._cloneInto()}}var y=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),E=Uint32Array.from([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]),x=Uint32Array.from([3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]),L=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var W8=BigInt(4294967295),J0=BigInt(32);function H0(Q,$=!1){if($)return{h:Number(Q&W8),l:Number(Q>>J0&W8)};return{h:Number(Q>>J0&W8)|0,l:Number(Q&W8)|0}}function X0(Q,$=!1){let q=Q.length,Z=new Uint32Array(q),Y=new Uint32Array(q);for(let J=0;J<q;J++){let{h:U,l:z}=H0(Q[J],$);[Z[J],Y[J]]=[U,z]}return[Z,Y]}var E8=(Q,$,q)=>Q>>>q,H8=(Q,$,q)=>Q<<32-q|$>>>q,c=(Q,$,q)=>Q>>>q|$<<32-q,d=(Q,$,q)=>Q<<32-q|$>>>q,q8=(Q,$,q)=>Q<<64-q|$>>>q-32,Z8=(Q,$,q)=>Q>>>q-32|$<<64-q;function b(Q,$,q,Z){let Y=($>>>0)+(Z>>>0);return{h:Q+q+(Y/4294967296|0)|0,l:Y|0}}var U0=(Q,$,q)=>(Q>>>0)+($>>>0)+(q>>>0),z0=(Q,$,q,Z)=>$+q+Z+(Q/4294967296|0)|0,K0=(Q,$,q,Z)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0),j0=(Q,$,q,Z,Y)=>$+q+Z+Y+(Q/4294967296|0)|0,G0=(Q,$,q,Z,Y)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0)+(Y>>>0),N0=(Q,$,q,Z,Y,J)=>$+q+Z+Y+J+(Q/4294967296|0)|0;var _0=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),C=new Uint32Array(64);class P8 extends R8{constructor(Q){super(64,Q,8,!1)}get(){let{A:Q,B:$,C:q,D:Z,E:Y,F:J,G:U,H:z}=this;return[Q,$,q,Z,Y,J,U,z]}set(Q,$,q,Z,Y,J,U,z){this.A=Q|0,this.B=$|0,this.C=q|0,this.D=Z|0,this.E=Y|0,this.F=J|0,this.G=U|0,this.H=z|0}process(Q,$){for(let K=0;K<16;K++,$+=4)C[K]=Q.getUint32($,!1);for(let K=16;K<64;K++){let j=C[K-15],R=C[K-2],W=I(j,7)^I(j,18)^j>>>3,F=I(R,17)^I(R,19)^R>>>10;C[K]=F+C[K-7]+W+C[K-16]|0}let{A:q,B:Z,C:Y,D:J,E:U,F:z,G,H:N}=this;for(let K=0;K<64;K++){let j=I(U,6)^I(U,11)^I(U,25),R=N+j+Z0(U,z,G)+_0[K]+C[K]|0,F=(I(q,2)^I(q,13)^I(q,22))+Y0(q,Z,Y)|0;N=G,G=z,z=U,U=J+R|0,J=Y,Y=Z,Z=q,q=R+F|0}q=q+this.A|0,Z=Z+this.B|0,Y=Y+this.C|0,J=J+this.D|0,U=U+this.E|0,z=z+this.F|0,G=G+this.G|0,N=N+this.H|0,this.set(q,Z,Y,J,U,z,G,N)}roundClean(){T(C)}destroy(){this.set(0,0,0,0,0,0,0,0),T(this.buffer)}}class R0 extends P8{A=y[0]|0;B=y[1]|0;C=y[2]|0;D=y[3]|0;E=y[4]|0;F=y[5]|0;G=y[6]|0;H=y[7]|0;constructor(){super(32)}}class S0 extends P8{A=E[0]|0;B=E[1]|0;C=E[2]|0;D=E[3]|0;E=E[4]|0;F=E[5]|0;G=E[6]|0;H=E[7]|0;constructor(){super(28)}}var W0=(()=>X0(["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((Q)=>BigInt(Q))))(),f0=(()=>W0[0])(),C0=(()=>W0[1])(),p=new Uint32Array(80),A=new Uint32Array(80);class Y8 extends R8{constructor(Q){super(128,Q,16,!1)}get(){let{Ah:Q,Al:$,Bh:q,Bl:Z,Ch:Y,Cl:J,Dh:U,Dl:z,Eh:G,El:N,Fh:K,Fl:j,Gh:R,Gl:W,Hh:F,Hl:w}=this;return[Q,$,q,Z,Y,J,U,z,G,N,K,j,R,W,F,w]}set(Q,$,q,Z,Y,J,U,z,G,N,K,j,R,W,F,w){this.Ah=Q|0,this.Al=$|0,this.Bh=q|0,this.Bl=Z|0,this.Ch=Y|0,this.Cl=J|0,this.Dh=U|0,this.Dl=z|0,this.Eh=G|0,this.El=N|0,this.Fh=K|0,this.Fl=j|0,this.Gh=R|0,this.Gl=W|0,this.Hh=F|0,this.Hl=w|0}process(Q,$){for(let v=0;v<16;v++,$+=4)p[v]=Q.getUint32($),A[v]=Q.getUint32($+=4);for(let v=16;v<80;v++){let _=p[v-15]|0,S=A[v-15]|0,b8=c(_,S,1)^c(_,S,8)^E8(_,S,7),m8=d(_,S,1)^d(_,S,8)^H8(_,S,7),m=p[v-2]|0,B=A[v-2]|0,z8=c(m,B,19)^q8(m,B,61)^E8(m,B,6),B8=d(m,B,19)^Z8(m,B,61)^H8(m,B,6),K8=K0(m8,B8,A[v-7],A[v-16]),y8=j0(K8,b8,z8,p[v-7],p[v-16]);p[v]=y8|0,A[v]=K8|0}let{Ah:q,Al:Z,Bh:Y,Bl:J,Ch:U,Cl:z,Dh:G,Dl:N,Eh:K,El:j,Fh:R,Fl:W,Gh:F,Gl:w,Hh:V,Hl:O}=this;for(let v=0;v<80;v++){let _=c(K,j,14)^c(K,j,18)^q8(K,j,41),S=d(K,j,14)^d(K,j,18)^Z8(K,j,41),b8=K&R^~K&F,m8=j&W^~j&w,m=G0(O,S,m8,C0[v],A[v]),B=N0(m,V,_,b8,f0[v],p[v]),z8=m|0,B8=c(q,Z,28)^q8(q,Z,34)^q8(q,Z,39),K8=d(q,Z,28)^Z8(q,Z,34)^Z8(q,Z,39),y8=q&Y^q&U^Y&U,T0=Z&J^Z&z^J&z;V=F|0,O=w|0,F=R|0,w=W|0,R=K|0,W=j|0,{h:K,l:j}=b(G|0,N|0,B|0,z8|0),G=U|0,N=z|0,U=Y|0,z=J|0,Y=q|0,J=Z|0;let a8=U0(z8,K8,T0);q=z0(a8,B,B8,y8),Z=a8|0}({h:q,l:Z}=b(this.Ah|0,this.Al|0,q|0,Z|0)),{h:Y,l:J}=b(this.Bh|0,this.Bl|0,Y|0,J|0),{h:U,l:z}=b(this.Ch|0,this.Cl|0,U|0,z|0),{h:G,l:N}=b(this.Dh|0,this.Dl|0,G|0,N|0),{h:K,l:j}=b(this.Eh|0,this.El|0,K|0,j|0),{h:R,l:W}=b(this.Fh|0,this.Fl|0,R|0,W|0),{h:F,l:w}=b(this.Gh|0,this.Gl|0,F|0,w|0),{h:V,l:O}=b(this.Hh|0,this.Hl|0,V|0,O|0),this.set(q,Z,Y,J,U,z,G,N,K,j,R,W,F,w,V,O)}roundClean(){T(p,A)}destroy(){T(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class p0 extends Y8{Ah=L[0]|0;Al=L[1]|0;Bh=L[2]|0;Bl=L[3]|0;Ch=L[4]|0;Cl=L[5]|0;Dh=L[6]|0;Dl=L[7]|0;Eh=L[8]|0;El=L[9]|0;Fh=L[10]|0;Fl=L[11]|0;Gh=L[12]|0;Gl=L[13]|0;Hh=L[14]|0;Hl=L[15]|0;constructor(){super(64)}}class A0 extends Y8{Ah=x[0]|0;Al=x[1]|0;Bh=x[2]|0;Bl=x[3]|0;Ch=x[4]|0;Cl=x[5]|0;Dh=x[6]|0;Dl=x[7]|0;Eh=x[8]|0;El=x[9]|0;Fh=x[10]|0;Fl=x[11]|0;Gh=x[12]|0;Gl=x[13]|0;Hh=x[14]|0;Hl=x[15]|0;constructor(){super(48)}}var M=Uint32Array.from([2352822216,424955298,1944164710,2312950998,502970286,855612546,1738396948,1479516111,258812777,2077511080,2011393907,79989058,1067287976,1780299464,286451373,2446758561]),k=Uint32Array.from([573645204,4230739756,2673172387,3360449730,596883563,1867755857,2520282905,1497426621,2519219938,2827943907,3193839141,1401305490,721525244,746961066,246885852,2177182882]);class u0 extends Y8{Ah=M[0]|0;Al=M[1]|0;Bh=M[2]|0;Bl=M[3]|0;Ch=M[4]|0;Cl=M[5]|0;Dh=M[6]|0;Dl=M[7]|0;Eh=M[8]|0;El=M[9]|0;Fh=M[10]|0;Fl=M[11]|0;Gh=M[12]|0;Gl=M[13]|0;Hh=M[14]|0;Hl=M[15]|0;constructor(){super(28)}}class g0 extends Y8{Ah=k[0]|0;Al=k[1]|0;Bh=k[2]|0;Bl=k[3]|0;Ch=k[4]|0;Cl=k[5]|0;Dh=k[6]|0;Dl=k[7]|0;Eh=k[8]|0;El=k[9]|0;Fh=k[10]|0;Fl=k[11]|0;Gh=k[12]|0;Gl=k[13]|0;Hh=k[14]|0;Hl=k[15]|0;constructor(){super(32)}}var D8=$0(()=>new R0,q0(1));class _8{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(Q,$){if($8(Q),f($,void 0,"key"),this.iHash=Q.create(),typeof this.iHash.update!=="function")throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let q=this.blockLen,Z=new Uint8Array(q);Z.set($.length>q?Q.create().update($).digest():$);for(let Y=0;Y<Z.length;Y++)Z[Y]^=54;this.iHash.update(Z),this.oHash=Q.create();for(let Y=0;Y<Z.length;Y++)Z[Y]^=106;this.oHash.update(Z),T(Z)}update(Q){return s(this),this.iHash.update(Q),this}digestInto(Q){s(this),f(Q,this.outputLen,"output"),this.finished=!0,this.iHash.digestInto(Q),this.oHash.update(Q),this.oHash.digestInto(Q),this.destroy()}digest(){let Q=new Uint8Array(this.oHash.outputLen);return this.digestInto(Q),Q}_cloneInto(Q){Q||=Object.create(Object.getPrototypeOf(this),{});let{oHash:$,iHash:q,finished:Z,destroyed:Y,blockLen:J,outputLen:U}=this;return Q=Q,Q.finished=Z,Q.destroyed=Y,Q.blockLen=J,Q.outputLen=U,Q.oHash=$._cloneInto(Q.oHash),Q.iHash=q._cloneInto(Q.iHash),Q}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}var i=(Q,$,q)=>new _8(Q,$).update(q).digest();i.create=(Q,$)=>new _8(Q,$);function h0(Q,$,q){if($8(Q),q===void 0)q=new Uint8Array(Q.outputLen);return i(Q,q,$)}var S8=Uint8Array.of(0),D0=Uint8Array.of();function c0(Q,$,q,Z=32){$8(Q),G8(Z,"length");let Y=Q.outputLen;if(Z>255*Y)throw Error("Length must be <= 255*HashLen");let J=Math.ceil(Z/Y);if(q===void 0)q=D0;else f(q,void 0,"info");let U=new Uint8Array(J*Y),z=i.create(Q,$),G=z._cloneInto(),N=new Uint8Array(z.outputLen);for(let K=0;K<J;K++)S8[0]=K+1,G.update(K===0?D0:N).update(q).update(S8).digestInto(N),U.set(N,Y*K),z._cloneInto(G);return z.destroy(),G.destroy(),T(N,S8),U.slice(0,Z)}var v0=(Q,$,q,Z,Y)=>c0(Q,h0(Q,$,q),Z,Y);function r(Q){if(typeof Q==="string")return new TextEncoder().encode(Q);return Q}function F0(Q){return D8(r(Q))}function v8(Q,$){return i(D8,r(Q),r($))}function d0(Q,$,{salt:q,info:Z}={}){let Y=q?r(q):new Uint8Array(32),J=r(Q),U=Z?r(Z):new Uint8Array(0);return v0(D8,J,Y,U,$)}var O0="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function l0(Q){let $=0,q=0,Z="";for(let Y=0;Y<Q.length;Y++){q=q<<8|Q[Y],$+=8;while($>=5)Z+=O0[q>>>$-5&31],$-=5}if($>0)Z+=O0[q<<5-$&31];return Z}function O8(Q,$){let q=Math.ceil($/8),Z=new Uint8Array(q),Y=Math.min(q,Q.length);Z.set(Q.subarray(0,Y));let J=q*8-$;if(J>0){let U=255<<J;Z[q-1]=Z[q-1]&U}return Z}function F8(Q,$){if(Q.length===0)throw Error("digestToDigits: empty digest");let q="",Z=Q[Q.length-1]&15;for(let Y=0;q.length<$;Y++){let J=(Z+Y*4)%Math.max(1,Q.length-4),G=(((Q[J]&127)<<24|Q[J+1]<<16|Q[J+2]<<8|Q[J+3])%1e9).toString().padStart(9,"0");q+=G}return q.slice(0,$)}function u(Q){let $=F0(Q);return Array.from($).map((q)=>q.toString(16).padStart(2,"0")).join("")}var w0;((O)=>{O.EXPIRED_CODE="EXPIRED_CODE";O.INVALID_CODE="INVALID_CODE";O.INVALID_CODE_FORMAT="INVALID_CODE_FORMAT";O.INVALID_SIGNATURE="INVALID_SIGNATURE";O.MISSING_META="MISSING_META";O.INVALID_META_FORMAT="INVALID_META_FORMAT";O.META_MISMATCH="META_MISMATCH";O.META_TOO_LARGE="META_TOO_LARGE";O.TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER="TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER";O.TRANSACTION_NOT_SIGNED_BY_ISSUER="TRANSACTION_NOT_SIGNED_BY_ISSUER";O.INVALID_TRANSACTION_FORMAT="INVALID_TRANSACTION_FORMAT";O.INVALID_PUBKEY_FORMAT="INVALID_PUBKEY_FORMAT";O.INVALID_INPUT="INVALID_INPUT";O.MISSING_REQUIRED_FIELD="MISSING_REQUIRED_FIELD";O.CRYPTO_ERROR="CRYPTO_ERROR";O.INVALID_DIGEST="INVALID_DIGEST";O.INVALID_ADAPTER="INVALID_ADAPTER"})(w0||={});class X extends Error{code;details;constructor(Q,$,q){super($);this.code=Q;this.details=q;this.name="ProtocolError"}static expiredCode(Q,$,q){return new f8(Q,$,q)}static invalidCode(){return new X("INVALID_CODE","Invalid code provided",{})}static invalidCodeFormat(Q,$){return new c8(Q,$)}static invalidSignature(Q){return new h8(Q)}static missingMeta(){return new C8}static invalidMetaFormat(Q){return new X("INVALID_META_FORMAT",`Invalid protocol meta format: ${Q}`,{reason:Q})}static metaMismatch(Q,$,q){return new p8(Q,$,q)}static metaTooLarge(Q,$){return new X("META_TOO_LARGE",`Protocol meta too large: ${$} bytes (max: ${Q})`,{maxBytes:Q,actualBytes:$})}static transactionNotSignedByIntendedOwner(Q,$){return new A8(Q,$)}static transactionNotSignedByIssuer(Q,$){return new u8(Q,$)}static invalidTransactionFormat(Q){return new X("INVALID_TRANSACTION_FORMAT",`Invalid transaction format: ${Q}`,{reason:Q})}static invalidPubkeyFormat(Q,$){return new g8(Q,$)}static invalidInput(Q,$,q){return new X("INVALID_INPUT",`Invalid ${Q}: ${q}`,{field:Q,value:$,reason:q})}static missingRequiredField(Q){return new X("MISSING_REQUIRED_FIELD",`Missing required field: ${Q}`,{field:Q})}static cryptoError(Q,$){return new X("CRYPTO_ERROR",`Crypto error in ${Q}: ${$}`,{operation:Q,reason:$})}static invalidDigest(Q){return new X("INVALID_DIGEST",`Invalid digest: ${Q}`,{reason:Q})}static invalidAdapter(Q){return new d8(Q)}static create(Q,$,q){return new X(Q,$,q)}}class f8 extends X{constructor(Q,$,q){super("EXPIRED_CODE",`Action code '${Q}' has expired`,{code:Q,expiresAt:$,currentTime:q});this.name="ExpiredCodeError"}}class C8 extends X{constructor(){super("MISSING_META","Transaction does not contain valid protocol meta");this.name="MissingMetaError"}}class p8 extends X{constructor(Q,$,q){super("META_MISMATCH",`Meta ${q} mismatch: expected '${Q}', got '${$}'`,{expected:Q,actual:$,field:q});this.name="MetaMismatchError"}}class A8 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER",`Transaction not signed by intended owner '${Q}'. Actual signers: [${$.join(", ")}]`,{intended:Q,actualSigners:$});this.name="TransactionNotSignedByIntendedOwnerError"}}class u8 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_ISSUER",`Transaction not signed by issuer '${Q}'. Actual signers: [${$.join(", ")}]`,{issuer:Q,actualSigners:$});this.name="TransactionNotSignedByIssuerError"}}class g8 extends X{constructor(Q,$){super("INVALID_PUBKEY_FORMAT",`Invalid public key format '${Q}': ${$}`,{pubkey:Q,reason:$});this.name="InvalidPubkeyFormatError"}}class h8 extends X{constructor(Q){super("INVALID_SIGNATURE",`Invalid signature: ${Q}`,{reason:Q});this.name="InvalidSignatureError"}}class c8 extends X{constructor(Q,$){super("INVALID_CODE_FORMAT",`Invalid code format '${Q}': ${$}`,{code:Q,reason:$});this.name="InvalidCodeFormatError"}}class d8 extends X{constructor(Q){super("INVALID_ADAPTER",`Invalid adapter: ${Q}`,{adapter:Q});this.name="InvalidAdapterError"}}var l8=1,x0="actioncodes",L0="actioncodes-revoke";function H(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey))throw X.invalidInput("pubkey",Q.pubkey,"contains invalid characters for public key or JSON");let $=JSON.stringify({id:x0,ver:l8,pubkey:Q.pubkey,windowStart:Q.windowStart});return new TextEncoder().encode($)}function l(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(typeof Q.codeHash!=="string")throw X.invalidInput("codeHash",Q.codeHash,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(Q.codeHash.length===0)throw X.invalidInput("codeHash",Q.codeHash,"cannot be empty");if(Q.codeHash.length>100)throw X.invalidInput("codeHash",Q.codeHash,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey)||/["\\\x00-\x1f\x7f-\x9f]/.test(Q.codeHash))throw X.invalidInput("input","contains invalid characters for identifiers or JSON","contains invalid characters");let $=JSON.stringify({id:L0,ver:l8,pubkey:Q.pubkey,codeHash:Q.codeHash,windowStart:Q.windowStart});return new TextEncoder().encode($)}function w8(Q){return H({pubkey:Q,windowStart:Date.now()})}function x8(Q){let $=["walletPubkey","delegatedPubkey","chain"];for(let Z of $){let Y=Q[Z];if(typeof Y!=="string")throw X.invalidInput(Z,Y,"must be a string");if(Y.length===0)throw X.invalidInput(Z,Y,"cannot be empty");if(Y.length>100)throw X.invalidInput(Z,Y,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Y))throw X.invalidInput(Z,Y,"contains invalid characters for identifiers or JSON")}let q=JSON.stringify({walletPubkey:Q.walletPubkey,delegatedPubkey:Q.delegatedPubkey,expiresAt:Q.expiresAt,chain:Q.chain});return new TextEncoder().encode(q)}var J8="NFC",a=512,L8=6,V8=24,n0=8,s0="0123456789",M8={solana:"solana"};var k8="actioncodes:";function T8(Q){let $=V0(Q);if($.int!=null)X8($.int);let q=[`ver=${$.ver}`,`id=${encodeURIComponent($.id)}`,`int=${encodeURIComponent($.int)}`];if($.iss!=null&&$.iss!==$.int)q.push(`iss=${encodeURIComponent($.iss)}`);if($.p!=null&&Object.keys($.p).length>0){let Y=JSON.stringify($.p);X8(Y),q.push(`p=${encodeURIComponent(Y)}`)}let Z=k8+q.join("&");return M0(Z),Z}function U8(Q){if(!Q.startsWith(k8))throw Error("protocol meta must start with actioncodes:");let q=Q.slice(k8.length).split("&").filter(Boolean),Z=new Map;for(let W of q){let[F,w]=W.split("=",2);if(!F)continue;let V=w!=null?decodeURIComponent(w):"";Z.set(F,V)}let Y=Z.get("ver"),J=Z.get("id"),U=Z.get("int"),z=Z.get("iss"),G=Z.get("p");if(Y==null||J==null||U==null)throw Error("protocol meta missing required fields ver or id or int");let N=Number(Y);if(!Number.isInteger(N)||N<=0)throw Error("protocol meta ver must be positive integer");let K;if(G!=null&&G!=="")try{if(K=JSON.parse(G),typeof K!=="object"||K===null||Array.isArray(K))throw Error("protocol meta p must be a JSON object")}catch{throw Error("protocol meta p must be valid JSON")}let j=V0({ver:N,id:J,int:U,iss:z,p:K});if(j.int!=null)X8(j.int);if(j.iss!=null)X8(j.iss);if(j.p!=null)X8(JSON.stringify(j.p));if([...Z.keys()].filter((W)=>W!=="ver"&&W!=="id"&&W!=="int"&&W!=="iss"&&W!=="p").length>0)throw Error("protocol meta contains unsupported keys");return M0(T8(j)),j}function i0(Q){try{return U8(Q),{ok:!0}}catch($){return{ok:!1,reason:String($)}}}function V0(Q){let $=Q.id.normalize(J8).trim(),q={ver:Q.ver,id:$,int:Q.int};if(Q.int!=null)q.int=Q.int.normalize(J8).trim();if(Q.iss!=null)q.iss=Q.iss.normalize(J8).trim();if(Q.p!=null)q.p=Q.p;return q}function M0(Q){if(new TextEncoder().encode(Q).length>a)throw Error(`protocol meta exceeds ${a} bytes`)}function X8(Q){if(new TextEncoder().encode(Q).length>a)throw Error(`protocol meta params exceed ${a} bytes`)}var n8=Q8(require("bs58"));class t{config;constructor(Q){this.config=Q}generateCode(Q,$,q){let Z=Q,Y=JSON.parse(new TextDecoder().decode(Z)),J=Y.pubkey,U=Y.windowStart,z;try{z=n8.default.decode(q)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let G=v8(z,Z),N=Math.max(L8,Math.min(V8,this.config.codeLength)),K=8*Math.ceil(N/2),j=O8(G,K),R=F8(j,N);return{chain:$,code:R,pubkey:J,timestamp:U,expiresAt:U+this.config.ttlMs,signature:q}}validateCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);let q=H({pubkey:Q.pubkey,windowStart:Q.timestamp});if(!Q.signature)throw X.missingRequiredField("signature");let Z;try{Z=n8.default.decode(Q.signature)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let Y=v8(Z,q),J=Math.max(L8,Math.min(V8,this.config.codeLength)),U=O8(Y,8*Math.ceil(J/2));if(F8(U,J)!==Q.code)throw X.invalidCode()}}var s8=require("@solana/web3.js"),i8=Q8(require("tweetnacl")),r8=Q8(require("bs58"));class I8{walletStrategy;config;constructor(Q){this.config=Q,this.walletStrategy=new t(Q)}generateDelegatedCode(Q,$,q,Z){return this.validateDelegationProof(Q),{...this.walletStrategy.generateCode($,q,Z),delegationProof:Q}}validateDelegatedCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);if(this.validateDelegationProof(Q.delegationProof),Q.pubkey!==Q.delegationProof.delegatedPubkey)throw X.invalidInput("delegatedPubkey",Q.delegationProof.delegatedPubkey,"Action code pubkey does not match delegated signer");if(Q.expiresAt>Q.delegationProof.expiresAt)throw X.invalidInput("expiresAt",Q.expiresAt,"Action code cannot expire after delegation proof expiration");if(!Q.delegationProof.signature)throw X.missingRequiredField("delegationProof.signature");let q=H({pubkey:Q.delegationProof.delegatedPubkey,windowStart:Q.timestamp}),Z;try{Z=r8.default.decode(Q.signature??"")}catch{throw X.invalidSignature("Invalid Base58 delegated signature format")}let Y=r8.default.decode(Q.delegationProof.delegatedPubkey);if(!i8.default.sign.detached.verify(q,Z,Y))throw X.invalidSignature("Delegated signature verification failed")}validateDelegationProof(Q){if(!Q.walletPubkey||typeof Q.walletPubkey!=="string")throw X.invalidInput("walletPubkey",Q.walletPubkey,"Wallet pubkey is required and must be a string");try{new s8.PublicKey(Q.walletPubkey)}catch{throw X.invalidInput("walletPubkey",Q.walletPubkey,"Invalid wallet pubkey format")}if(!Q.delegatedPubkey||typeof Q.delegatedPubkey!=="string")throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Delegated pubkey is required and must be a string");try{new s8.PublicKey(Q.delegatedPubkey)}catch{throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Invalid delegated pubkey format")}if(!Q.chain||typeof Q.chain!=="string")throw X.invalidInput("chain",Q.chain,"Chain is required and must be a string");if(Q.chain.length===0||Q.chain.length>50)throw X.invalidInput("chain",Q.chain,"Chain must be between 1 and 50 characters");if(!/^[a-z0-9-]+$/.test(Q.chain))throw X.invalidInput("chain",Q.chain,"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)");if(typeof Q.expiresAt!=="number"||!Number.isInteger(Q.expiresAt))throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be a valid integer timestamp");if(Q.expiresAt<=0)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be positive");let $=Date.now(),q=31536000000;if(Q.expiresAt>$+q)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time is too far in the future");if(Q.expiresAt<$)throw X.expiredCode("Delegation proof has expired",Q.expiresAt,$);if(!Q.signature||typeof Q.signature!=="string")throw X.invalidInput("signature",Q.signature,"Delegation signature is required and must be a string");if(Q.signature.length===0||Q.signature.length>200)throw X.invalidInput("signature",Q.signature,"Delegation signature must be between 1 and 200 characters")}}var P=Q8(require("tweetnacl")),g=Q8(require("bs58")),D=require("@solana/web3.js"),h=require("@solana/spl-memo");var n="solana";class e extends j8{normalizePubkey(Q){if(typeof Q==="string")return new D.PublicKey(Q);return Q}verifyWithWallet(Q){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;try{let $=H({pubkey:Q.pubkey,windowStart:Q.timestamp}),q=this.normalizePubkey(Q.pubkey),Z=g.default.decode(Q.signature),Y=q.toBytes();if(Z.length!==64||Y.length!==32)return!1;return P.default.sign.detached.verify($,Z,Y)}catch{return!1}}verifyWithDelegation(Q){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;let $=Q.delegationProof;if(!$.walletPubkey||!$.delegatedPubkey||!$.chain||!$.expiresAt||!$.signature)return!1;if($.chain!==n)return!1;if(Q.pubkey!==$.delegatedPubkey)return!1;if($.expiresAt<Date.now())return!1;try{let q=x8($),Z=this.normalizePubkey($.walletPubkey),Y=g.default.decode($.signature),J=Z.toBytes(),U=H({pubkey:$.delegatedPubkey,windowStart:Q.timestamp}),z=this.normalizePubkey($.delegatedPubkey),G=g.default.decode(Q.signature),N=z.toBytes();if(Y.length!==64||J.length!==32)return!1;if(G.length!==64||N.length!==32)return!1;let K=P.default.sign.detached.verify(q,Y,J),j=P.default.sign.detached.verify(U,G,N);return K&&j}catch{return!1}}verifyRevokeWithWallet(Q,$){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!$)return!1;try{let q=l({pubkey:Q.pubkey,codeHash:u(Q.code),windowStart:Q.timestamp}),Z=this.normalizePubkey(Q.pubkey),Y=g.default.decode($),J=Z.toBytes();if(Y.length!==64||J.length!==32)return!1;return P.default.sign.detached.verify(q,Y,J)}catch{return!1}}verifyRevokeWithDelegation(Q,$){if(Q.chain!==n)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature||!Q.delegationProof)return!1;let q=Q.delegationProof;if(!q.walletPubkey||!q.delegatedPubkey||!q.chain||!q.expiresAt||!q.signature)return!1;if(q.chain!==n)return!1;if(Q.pubkey!==q.delegatedPubkey)return!1;if(q.expiresAt<Date.now())return!1;try{let Z=x8(q),Y=this.normalizePubkey(q.walletPubkey),J=g.default.decode(q.signature),U=Y.toBytes(),z=l({pubkey:q.delegatedPubkey,codeHash:u(Q.code),windowStart:Q.timestamp}),G=this.normalizePubkey(q.delegatedPubkey),N=g.default.decode($),K=G.toBytes();if(J.length!==64||U.length!==32)return!1;if(N.length!==64||K.length!==32)return!1;let j=P.default.sign.detached.verify(Z,J,U),R=P.default.sign.detached.verify(z,N,K);return j&&R}catch{return!1}}static createProtocolMetaIx(Q){let $=T8(Q);return h.createMemoInstruction($)}getProtocolMeta(Q){try{let $=this.deserializeTransaction(Q);for(let q of this.getMemoInstructions($)){let Z=q.data;try{let Y=new TextDecoder().decode(Z);if(U8(Y))return Y}catch{}}return null}catch{return null}}deserializeTransaction(Q){try{let $=D.VersionedTransaction.deserialize(Buffer.from(Q,"base64"));if($.message instanceof D.MessageV0)return $;else return D.Transaction.from(Buffer.from(Q,"base64"))}catch{try{return D.Transaction.from(Buffer.from(Q,"base64"))}catch{throw X.invalidTransactionFormat("Invalid base64 transaction format")}}}parseMeta(Q){let $=this.getProtocolMeta(Q);if(!$)return null;return U8($)}getMemoInstructions(Q){if(Q instanceof D.Transaction)return Q.instructions.filter(($)=>$.programId.equals(h.MEMO_PROGRAM_ID));else{let q=Q.message;if(q instanceof D.MessageV0){let Z=[];for(let Y of q.compiledInstructions){let J=q.staticAccountKeys[Y.programIdIndex];if(J&&J.equals(h.MEMO_PROGRAM_ID)){let U=Y.accountKeyIndexes.map((z)=>({pubkey:q.staticAccountKeys[z],isSigner:!1,isWritable:!1}));Z.push(new D.TransactionInstruction({keys:U,programId:J,data:Y.data}))}}return Z}return[]}}verifyTransactionMatchesCode(Q,$){let q=Date.now();if(q>Q.expiresAt)throw X.expiredCode(Q.code,Q.expiresAt,q);let Z=this.parseMeta($);if(!Z)throw X.missingMeta();if(Z.ver!==2)throw X.metaMismatch("2",String(Z.ver),"ver");let Y=u(Q.code);if(Z.id!==Y)throw X.metaMismatch(Y,Z.id,"id");if(Z.int!==Q.pubkey)throw X.metaMismatch(Q.pubkey,Z.int,"int")}verifyTransactionSignedByIntentOwner(Q){let $=this.parseMeta(Q);if(!$)throw X.missingMeta();let{int:q,iss:Z}=$;if(!q)throw X.invalidMetaFormat("Missing 'int' (intendedFor) field");let Y,J;try{Y=new D.PublicKey(q)}catch{throw X.invalidPubkeyFormat(q,"Invalid public key format")}try{if(Z)J=new D.PublicKey(Z)}catch{throw X.invalidPubkeyFormat(Z||"","Invalid public key format")}let U=this.deserializeTransaction(Q),z=[];if(U instanceof D.Transaction){let G=!1,N=!1;if(U.signatures.forEach((K)=>{if(!K.signature)return;if(z.push(K.publicKey.toString()),K.publicKey.equals(Y))G=!0;if(Z&&K.publicKey.equals(J))N=!0}),!G)throw X.transactionNotSignedByIntendedOwner(q,z);if(Z&&!N)throw X.transactionNotSignedByIssuer(Z,z);return}if(U instanceof D.VersionedTransaction){let G=U.message;if(G instanceof D.MessageV0){let N=!1,K=!1,j=G.header.numRequiredSignatures;for(let R=0;R<j;R++){let W=G.staticAccountKeys[R];if(W){if(z.push(W.toString()),W.equals(Y))N=!0;if(Z&&W.equals(J))K=!0}}if(!N)throw X.transactionNotSignedByIntendedOwner(q,z);if(Z&&!K)throw X.transactionNotSignedByIssuer(Z,z);return}}throw X.invalidTransactionFormat("Unsupported transaction format")}verifyMessageSignedByIntentOwner(Q,$,q){try{let Z=new TextEncoder().encode(Q),Y=g.default.decode($),U=this.normalizePubkey(q).toBytes();if(!P.default.sign.detached.verify(Z,Y,U))throw X.invalidSignature("Signature verification failed")}catch(Z){if(Z instanceof Error&&Z.message.includes("Signature verification failed"))throw Z;throw X.invalidSignature("Invalid signature format")}}static async attachProtocolMeta(Q,$,q){if(new e().getProtocolMeta(Q))throw X.invalidTransactionFormat("Transaction already contains protocol meta. Cannot attach additional protocol meta.");let J=e.createProtocolMetaIx($);try{let U=D.VersionedTransaction.deserialize(Buffer.from(Q,"base64"));if(U.message instanceof D.MessageV0){let z=U.message,G=z.addressTableLookups&&z.addressTableLookups.length>0,N=z.staticAccountKeys.length,K=z.compiledInstructions.some((j)=>j.accountKeyIndexes.some((R)=>R>=N));if(G&&K){if(!q)throw X.invalidTransactionFormat("Connection required: Transaction uses address lookup tables and instructions reference accounts from those tables. A Solana connection is needed to resolve lookup tables and correctly recalculate account indices.");let j=[];for(let w of z.addressTableLookups)try{let V=await q.getAddressLookupTable(w.accountKey);if(V.value)j.push(V.value)}catch(V){throw X.invalidTransactionFormat(`Failed to resolve address lookup table ${w.accountKey.toString()}: ${V}`)}let R=D.TransactionMessage.decompile(z,{addressLookupTableAccounts:j});R.instructions.push(J);let W=R.compileToV0Message(j),F=new D.VersionedTransaction(W);return F.signatures=U.signatures,Buffer.from(F.serialize()).toString("base64")}else{let j=[...z.staticAccountKeys];if(!j.some((V)=>V.equals(h.MEMO_PROGRAM_ID)))j.push(h.MEMO_PROGRAM_ID);let W={programIdIndex:j.findIndex((V)=>V.equals(h.MEMO_PROGRAM_ID)),accountKeyIndexes:[],data:J.data},F=new D.MessageV0({header:z.header,staticAccountKeys:j,recentBlockhash:z.recentBlockhash,compiledInstructions:[...z.compiledInstructions,W],addressTableLookups:z.addressTableLookups}),w=new D.VersionedTransaction(F);return w.signatures=U.signatures,Buffer.from(w.serialize()).toString("base64")}}else{let z=D.Transaction.from(Buffer.from(Q,"base64"));return z.add(J),Buffer.from(z.serialize({requireAllSignatures:!1})).toString("base64")}}catch(U){if(U instanceof X)throw U;try{let z=D.Transaction.from(Buffer.from(Q,"base64"));return z.add(J),Buffer.from(z.serialize({requireAllSignatures:!1})).toString("base64")}catch{throw X.invalidTransactionFormat(`Invalid base64 transaction format: ${U}`)}}}}class k0{config;adapters={};_walletStrategy;_delegationStrategy;constructor(Q){this.config=Q;this.adapters.solana=new e,this._walletStrategy=new t(Q),this._delegationStrategy=new I8(Q)}getConfig(){return this.config}registerAdapter(Q,$){this.adapters[Q]=$}getAdapter(Q){return this.adapters[Q]}get adapter(){return{solana:this.adapters.solana}}get walletStrategy(){return this._walletStrategy}get delegationStrategy(){return this._delegationStrategy}async generate(Q,$,q,Z){if(!q||!M8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=w8($),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return this.walletStrategy.generateCode(Y,q,J)}else{let Y=$,J=w8(Y.delegatedPubkey),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return this.delegationStrategy.generateDelegatedCode(Y,J,q,U)}}async revoke(Q,$,q,Z){if(!q||!M8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=l({codeHash:u($.code),pubkey:$.pubkey,windowStart:$.timestamp}),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return{...$,revokeSignature:J}}else{let Y=$,J=l({codeHash:u($.code),pubkey:Y.delegationProof.delegatedPubkey,windowStart:$.timestamp}),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return{...$,revokeSignature:U}}}validate(Q,$){if(Q==="wallet"){this.walletStrategy.validateCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithWallet($))throw X.invalidSignature("Wallet signature verification failed")}else{this.delegationStrategy.validateDelegatedCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithDelegation($))throw X.invalidSignature("Delegation signature verification failed")}}}
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=6915C04B98BCC01C64756E2164756E21
|
package/dist/index.cjs.map
CHANGED
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"import { PROTOCOL_META_MAX_BYTES, PROTOCOL_NORMALIZATION } from \"../constants\";\n\n// v2 protocol meta\nexport interface ProtocolMetaFields {\n ver: 2;\n id: string; // code id (usually hex/hash)\n int: string; // intent owner who created the code\n iss?: string; // issuer of the code, if not provided, int is both issuer and code owner, otherwise int is the intent owner and iss is the code issuer\n p?: Record<string, unknown>; // optional parameters as JSON object\n}\n\nexport const SCHEME = \"actioncodes:\";\n\nexport function buildProtocolMeta(fields: ProtocolMetaFields): string {\n const norm = normalizeFields(fields);\n if (norm.int != null) guardParamSize(norm.int);\n\n const parts = [\n `ver=${norm.ver}`,\n `id=${encodeURIComponent(norm.id)}`,\n `int=${encodeURIComponent(norm.int)}`,\n ];\n \n // if iss is provided and is not the same as int, add it to the parts\n if (norm.iss != null && norm.iss !== norm.int) {\n parts.push(`iss=${encodeURIComponent(norm.iss)}`);\n }\n\n if (norm.p != null && Object.keys(norm.p).length > 0) {\n const paramsJson = JSON.stringify(norm.p);\n guardParamSize(paramsJson);\n parts.push(`p=${encodeURIComponent(paramsJson)}`);\n }\n\n const out = SCHEME + parts.join(\"&\");\n guardSize(out);\n return out;\n}\n\nexport function parseProtocolMeta(input: string): ProtocolMetaFields {\n if (!input.startsWith(SCHEME))\n throw new Error(\"protocol meta must start with actioncodes:\");\n const q = input.slice(SCHEME.length);\n const pairs = q.split(\"&\").filter(Boolean);\n const map = new Map<string, string>();\n for (const pair of pairs) {\n const [k, vRaw] = pair.split(\"=\", 2);\n if (!k) continue;\n const v = vRaw != null ? decodeURIComponent(vRaw) : \"\";\n map.set(k, v);\n }\n const verStr = map.get(\"ver\");\n const id = map.get(\"id\");\n const int = map.get(\"int\");\n const iss = map.get(\"iss\");\n const pStr = map.get(\"p\");\n if (verStr == null || id == null || int == null)\n throw new Error(\"protocol meta missing required fields ver or id or int\");\n const ver = Number(verStr);\n if (!Number.isInteger(ver) || ver <= 0)\n throw new Error(\"protocol meta ver must be positive integer\");\n\n let p: Record<string, unknown> | undefined;\n if (pStr != null && pStr !== \"\") {\n try {\n p = JSON.parse(pStr);\n if (typeof p !== \"object\" || p === null || Array.isArray(p)) {\n throw new Error(\"protocol meta p must be a JSON object\");\n }\n } catch {\n throw new Error(\"protocol meta p must be valid JSON\");\n }\n }\n\n const norm = normalizeFields({ ver: ver as 2, id, int, iss, p });\n if (norm.int != null) guardParamSize(norm.int);\n if (norm.iss != null) guardParamSize(norm.iss);\n if (norm.p != null) guardParamSize(JSON.stringify(norm.p));\n const unknownKeys = [...map.keys()].filter(\n (k) => k !== \"ver\" && k !== \"id\" && k !== \"int\" && k !== \"iss\" && k !== \"p\"\n );\n if (unknownKeys.length > 0)\n throw new Error(\"protocol meta contains unsupported keys\");\n guardSize(buildProtocolMeta(norm));\n return norm;\n}\n\nexport function validateProtocolMetaFormat(\n input: string\n): { ok: true } | { ok: false; reason: string } {\n try {\n parseProtocolMeta(input);\n return { ok: true };\n } catch (e: unknown) {\n return { ok: false, reason: String(e) };\n }\n}\n\nfunction normalizeFields(fields: ProtocolMetaFields): ProtocolMetaFields {\n const id = fields.id.normalize(PROTOCOL_NORMALIZATION).trim();\n const out: ProtocolMetaFields = { ver: fields.ver, id, int: fields.int };\n if (fields.int != null)\n out.int = fields.int.normalize(PROTOCOL_NORMALIZATION).trim();\n if (fields.iss != null)\n out.iss = fields.iss.normalize(PROTOCOL_NORMALIZATION).trim();\n if (fields.p != null) {\n // For JSON objects, we don't normalize the object itself, just ensure it's valid\n out.p = fields.p;\n }\n return out;\n}\n\nfunction guardSize(s: string): void {\n const bytes = new TextEncoder().encode(s);\n if (bytes.length > PROTOCOL_META_MAX_BYTES)\n throw new Error(`protocol meta exceeds ${PROTOCOL_META_MAX_BYTES} bytes`);\n}\n\nfunction guardParamSize(value: string): void {\n const bytes = new TextEncoder().encode(value);\n if (bytes.length > PROTOCOL_META_MAX_BYTES)\n throw new Error(\n `protocol meta params exceed ${PROTOCOL_META_MAX_BYTES} bytes`\n );\n}\n",
|
|
17
17
|
"import type { ActionCode, CodeGenerationConfig, Chain } from \"../types\";\nimport { hmacSha256, truncateBits, digestToDigits } from \"../utils/crypto\";\nimport { CODE_MAX_LENGTH, CODE_MIN_LENGTH } from \"../constants\";\nimport { serializeCanonical } from \"../utils/canonical\";\nimport { ProtocolError } from \"../errors\";\nimport bs58 from \"bs58\";\n\nexport class WalletStrategy {\n constructor(private config: CodeGenerationConfig) {}\n\n generateCode(\n canonicalMessage: Uint8Array,\n chain: Chain,\n signature: string\n ): ActionCode {\n const canonical = canonicalMessage;\n\n // Parse pubkey and windowStart from canonical message\n const decoded = JSON.parse(new TextDecoder().decode(canonical));\n const pubkey = decoded.pubkey;\n const windowStart = decoded.windowStart;\n\n // Use signature as the primary entropy source\n // Decode Base58 signature to bytes\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(signature);\n } catch {\n throw ProtocolError.invalidSignature(\"Invalid Base58 signature format\");\n }\n const digest = hmacSha256(signatureBytes, canonical);\n\n const clamped = Math.max(\n CODE_MIN_LENGTH,\n Math.min(CODE_MAX_LENGTH, this.config.codeLength)\n );\n const bitsNeeded = 8 * Math.ceil(clamped / 2);\n const truncated = truncateBits(digest, bitsNeeded);\n const code = digestToDigits(truncated, clamped);\n\n const actionCode: ActionCode = {\n chain,\n code,\n pubkey,\n timestamp: windowStart,\n expiresAt: windowStart + this.config.ttlMs,\n signature,\n };\n\n return actionCode;\n }\n\n validateCode(actionCode: ActionCode): void {\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt + (this.config.clockSkewMs ?? 0)) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const canonical = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n\n // Use same digest method as generation\n if (!actionCode.signature) {\n throw ProtocolError.missingRequiredField(\"signature\");\n }\n\n // Use signature as the primary entropy source\n // Decode Base58 signature to bytes\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(actionCode.signature);\n } catch {\n throw ProtocolError.invalidSignature(\"Invalid Base58 signature format\");\n }\n const digest = hmacSha256(signatureBytes, canonical);\n\n const clamped = Math.max(\n CODE_MIN_LENGTH,\n Math.min(CODE_MAX_LENGTH, this.config.codeLength)\n );\n const truncated = truncateBits(digest, 8 * Math.ceil(clamped / 2));\n const expected = digestToDigits(truncated, clamped);\n\n if (expected !== actionCode.code) {\n throw ProtocolError.invalidCode();\n }\n }\n}\n",
|
|
18
18
|
"import { WalletStrategy } from \"./WalletStrategy\";\nimport { serializeCanonical } from \"../utils/canonical\";\nimport { ProtocolError } from \"../errors\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\n\nimport type {\n DelegationProof,\n DelegatedActionCode,\n CodeGenerationConfig,\n Chain,\n} from \"../types\";\n\nexport class DelegationStrategy {\n private walletStrategy: WalletStrategy;\n private config: CodeGenerationConfig;\n\n constructor(config: CodeGenerationConfig) {\n this.config = config;\n this.walletStrategy = new WalletStrategy(config);\n }\n\n /**\n * Generate a delegated action code using a delegation proof and signature over message to generate code via delegated keypair\n */\n generateDelegatedCode(\n delegationProof: DelegationProof,\n canonicalMessage: Uint8Array,\n chain: Chain,\n signature: string // this is the signature over message to generate code via delegated keypair\n ): DelegatedActionCode {\n // Validate delegation proof format and expiration\n this.validateDelegationProof(delegationProof);\n\n // Generate code using existing WalletStrategy with the original canonical message\n // The signature was created over this message by the delegated keypair\n const result = this.walletStrategy.generateCode(\n canonicalMessage,\n chain,\n signature // Use signature from delegated keypair\n );\n\n // Create delegated action code\n const delegatedActionCode: DelegatedActionCode = {\n ...result,\n delegationProof: delegationProof,\n };\n\n return delegatedActionCode;\n }\n\n /**\n * Validate a delegated action code\n */\n validateDelegatedCode(\n actionCode: DelegatedActionCode,\n ): void {\n // Basic validation checks (similar to WalletStrategy.validateCode)\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt + (this.config.clockSkewMs ?? 0)) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n // Verify delegation proof is still valid\n this.validateDelegationProof(actionCode.delegationProof);\n\n // Verify the delegation proof matches the action code\n // The action code pubkey should be the delegated signer (who signed the message)\n if (actionCode.pubkey !== actionCode.delegationProof.delegatedPubkey) {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n actionCode.delegationProof.delegatedPubkey,\n \"Action code pubkey does not match delegated signer\"\n );\n }\n\n // Verify that the generated code doesn't expire after the delegation proof\n // This prevents codes from outliving their authorization\n if (actionCode.expiresAt > actionCode.delegationProof.expiresAt) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n actionCode.expiresAt,\n \"Action code cannot expire after delegation proof expiration\"\n );\n }\n\n // Verify delegated signature is present\n if (!actionCode.delegationProof.signature) {\n throw ProtocolError.missingRequiredField(\"delegationProof.signature\");\n }\n\n // Finally, verify the delegated signature against the canonical message\n // The signature was created by signing a message with the DELEGATED pubkey\n // even though the ActionCode.pubkey is the wallet owner\n const canonicalMessage = serializeCanonical({\n pubkey: actionCode.delegationProof.delegatedPubkey,\n windowStart: actionCode.timestamp,\n });\n\n // Decode and verify the delegated signature\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(actionCode.signature ?? \"\");\n } catch {\n throw ProtocolError.invalidSignature(\n \"Invalid Base58 delegated signature format\"\n );\n }\n\n // Verify the signature using the delegated keypair's public key\n const delegatedPubkeyBytes = bs58.decode(actionCode.delegationProof.delegatedPubkey);\n const isValidSignature = nacl.sign.detached.verify(\n canonicalMessage,\n signatureBytes,\n delegatedPubkeyBytes\n );\n\n if (!isValidSignature) {\n throw ProtocolError.invalidSignature(\n \"Delegated signature verification failed\"\n );\n }\n }\n\n /**\n * Validate a delegation proof with comprehensive input validation\n */\n private validateDelegationProof(delegationProof: DelegationProof): void {\n // Validate walletPubkey using Solana's PublicKey constructor\n if (\n !delegationProof.walletPubkey ||\n typeof delegationProof.walletPubkey !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"walletPubkey\",\n delegationProof.walletPubkey,\n \"Wallet pubkey is required and must be a string\"\n );\n }\n try {\n new PublicKey(delegationProof.walletPubkey);\n } catch {\n throw ProtocolError.invalidInput(\n \"walletPubkey\",\n delegationProof.walletPubkey,\n \"Invalid wallet pubkey format\"\n );\n }\n\n // Validate delegatedPubkey using Solana's PublicKey constructor\n if (\n !delegationProof.delegatedPubkey ||\n typeof delegationProof.delegatedPubkey !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n delegationProof.delegatedPubkey,\n \"Delegated pubkey is required and must be a string\"\n );\n }\n try {\n new PublicKey(delegationProof.delegatedPubkey);\n } catch {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n delegationProof.delegatedPubkey,\n \"Invalid delegated pubkey format\"\n );\n }\n\n // Validate chain\n if (!delegationProof.chain || typeof delegationProof.chain !== \"string\") {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain is required and must be a string\"\n );\n }\n if (\n delegationProof.chain.length === 0 ||\n delegationProof.chain.length > 50\n ) {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain must be between 1 and 50 characters\"\n );\n }\n if (!/^[a-z0-9-]+$/.test(delegationProof.chain)) {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)\"\n );\n }\n\n // Validate expiresAt\n if (\n typeof delegationProof.expiresAt !== \"number\" ||\n !Number.isInteger(delegationProof.expiresAt)\n ) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time must be a valid integer timestamp\"\n );\n }\n if (delegationProof.expiresAt <= 0) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time must be positive\"\n );\n }\n\n // Check for reasonable expiration bounds (not too far in the future)\n const now = Date.now();\n const maxFuture = 365 * 24 * 60 * 60 * 1000; // 1 year from now\n\n if (delegationProof.expiresAt > now + maxFuture) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time is too far in the future\"\n );\n }\n\n // Check if delegation has expired\n if (delegationProof.expiresAt < now) {\n throw ProtocolError.expiredCode(\n \"Delegation proof has expired\",\n delegationProof.expiresAt,\n now\n );\n }\n\n // Validate signature\n if (\n !delegationProof.signature ||\n typeof delegationProof.signature !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"signature\",\n delegationProof.signature,\n \"Delegation signature is required and must be a string\"\n );\n }\n if (\n delegationProof.signature.length === 0 ||\n delegationProof.signature.length > 200\n ) {\n throw ProtocolError.invalidInput(\n \"signature\",\n delegationProof.signature,\n \"Delegation signature must be between 1 and 200 characters\"\n );\n }\n // Note: Signature format validation will be done during actual verification\n }\n}\n",
|
|
19
|
-
"import nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n TransactionInstruction,\n MessageV0,\n} from \"@solana/web3.js\";\nimport { createMemoInstruction, MEMO_PROGRAM_ID } from \"@solana/spl-memo\";\nimport { BaseChainAdapter } from \"./BaseChainAdapter\";\nimport {\n buildProtocolMeta,\n parseProtocolMeta,\n type ProtocolMetaFields,\n} from \"../utils/protocolMeta\";\nimport { codeHash } from \"../utils/crypto\";\nimport type { ActionCode, DelegatedActionCode } from \"../types\";\nimport { ProtocolError } from \"../errors\";\nimport {\n serializeCanonical,\n serializeCanonicalRevoke,\n serializeDelegationProof,\n} from \"../utils/canonical\";\n\n/** Union of supported Solana txn types */\nexport type SolanaTransaction = Transaction | VersionedTransaction;\n\nexport const ADAPTER_CHAIN_NAME = \"solana\" as const;\n\nexport class SolanaAdapter extends BaseChainAdapter {\n /** Normalize pubkey input to PublicKey */\n private normalizePubkey(input: string | PublicKey): PublicKey {\n if (typeof input === \"string\") {\n return new PublicKey(input);\n }\n return input;\n }\n\n /** Verify the signature over canonical message (protocol-level) */\n verifyWithWallet(actionCode: ActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !actionCode.signature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(actionCode.signature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify delegation proof signature */\n verifyWithDelegation(delegatedActionCode: DelegatedActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n // this check if delegation correct\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n // this check if generated code correct by delegated keypair\n // The signature was created by signing a message with the DELEGATED pubkey\n const canonicalMessage = serializeCanonical({\n pubkey: proof.delegatedPubkey,\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(delegatedActionCode.signature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const canonicalMessageOk = nacl.sign.detached.verify(\n canonicalMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && canonicalMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify the signature over canonical revoke message (protocol-level) */\n verifyRevokeWithWallet(\n actionCode: ActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !revokeSignature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonicalRevoke({\n pubkey: actionCode.pubkey,\n codeHash: codeHash(actionCode.code),\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(revokeSignature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n verifyRevokeWithDelegation(\n delegatedActionCode: DelegatedActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature ||\n !delegatedActionCode.delegationProof\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n const revokeMessage = serializeCanonicalRevoke({\n pubkey: proof.delegatedPubkey, // Revoke signature is from delegated keypair\n codeHash: codeHash(delegatedActionCode.code),\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(revokeSignature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const revokeMessageOk = nacl.sign.detached.verify(\n revokeMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && revokeMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Create a Solana memo instruction carrying protocol meta (for SDK/clients) */\n static createProtocolMetaIx(\n meta: ProtocolMetaFields\n ): TransactionInstruction {\n const metaString = buildProtocolMeta(meta);\n return createMemoInstruction(metaString);\n }\n\n /** Extract protocol metadata string (memo) from a base64-encoded transaction, or null */\n getProtocolMeta(txString: string): string | null {\n try {\n const tx = this.deserializeTransaction(txString);\n for (const ix of this.getMemoInstructions(tx)) {\n const data = ix.data;\n try {\n const s = new TextDecoder().decode(data);\n // Optionally: test parse\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /** Deserialize a base64-encoded transaction string to SolanaTransaction */\n private deserializeTransaction(txString: string): SolanaTransaction {\n try {\n // Try versioned first (most common now)\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n return versionedTx;\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n return Transaction.from(Buffer.from(txString, \"base64\"));\n }\n } catch {\n try {\n // Fallback to legacy\n return Transaction.from(Buffer.from(txString, \"base64\"));\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n\n /** Get parsed ProtocolMeta object from base64-encoded transaction, or null if none or invalid */\n parseMeta(txString: string): ProtocolMetaFields | null {\n const s = this.getProtocolMeta(txString);\n if (!s) return null;\n return parseProtocolMeta(s);\n }\n\n /** List memo instructions from the transaction (legacy & versioned) */\n private getMemoInstructions(tx: SolanaTransaction): TransactionInstruction[] {\n if (tx instanceof Transaction) {\n return tx.instructions.filter((ix) =>\n ix.programId.equals(MEMO_PROGRAM_ID)\n );\n } else {\n // VersionedTransaction: inspect `message.compiledInstructions` / static keys\n const vtx = tx as VersionedTransaction;\n const msg = vtx.message;\n if (msg instanceof MessageV0) {\n const memos: TransactionInstruction[] = [];\n for (const ix of msg.compiledInstructions) {\n const pid = msg.staticAccountKeys[ix.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n // reconstruct a TransactionInstruction for inspection\n const keys = ix.accountKeyIndexes.map((i) => ({\n pubkey: msg.staticAccountKeys[i]!,\n isSigner: false,\n isWritable: false,\n }));\n memos.push(\n new TransactionInstruction({\n keys,\n programId: pid,\n data: ix.data as Buffer,\n })\n );\n }\n }\n return memos;\n }\n return [];\n }\n }\n\n /**\n * Validate that a base64-encoded transaction's memo meta aligns with the bound `actionCode`.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionMatchesCode(actionCode: ActionCode, txString: string): void {\n // Check expiration first\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n // Check version\n if (meta.ver !== 2) {\n throw ProtocolError.metaMismatch(\"2\", String(meta.ver), \"ver\");\n }\n\n // Check code ID - should be codeHash of the code, not the code itself\n const expectedCodeHash = codeHash(actionCode.code);\n if (meta.id !== expectedCodeHash) {\n throw ProtocolError.metaMismatch(expectedCodeHash, meta.id, \"id\");\n }\n\n // Check intended pubkey\n if (meta.int !== actionCode.pubkey) {\n throw ProtocolError.metaMismatch(actionCode.pubkey, meta.int, \"int\");\n }\n }\n\n /**\n * Verify that the base64-encoded transaction is signed by the \"intendedFor\" pubkey\n * as declared in the protocol meta of the transaction.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionSignedByIntentOwner(txString: string): void {\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n const intended = meta.int;\n const issuer = meta.iss;\n if (!intended) {\n throw ProtocolError.invalidMetaFormat(\n \"Missing 'int' (intendedFor) field\"\n );\n }\n\n let intendedPubkey: PublicKey;\n let issuerPubkey: PublicKey;\n try {\n intendedPubkey = new PublicKey(intended);\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n intended,\n \"Invalid public key format\"\n );\n }\n\n try {\n if (issuer) {\n issuerPubkey = new PublicKey(issuer);\n }\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n issuer || \"\",\n \"Invalid public key format\"\n );\n }\n\n const tx = this.deserializeTransaction(txString);\n const actualSigners: string[] = [];\n\n // For legacy Transaction\n if (tx instanceof Transaction) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n\n tx.signatures.forEach((sig) => {\n if (!sig.signature) return;\n actualSigners.push(sig.publicKey.toString());\n\n if (sig.publicKey.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && sig.publicKey.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n });\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n\n // For VersionedTransaction (MessageV0)\n if (tx instanceof VersionedTransaction) {\n const msg = tx.message;\n if (msg instanceof MessageV0) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n const signerCount = msg.header.numRequiredSignatures;\n for (let i = 0; i < signerCount; i++) {\n const key = msg.staticAccountKeys[i];\n if (key) {\n actualSigners.push(key.toString());\n if (key.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && key.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n }\n }\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n }\n\n throw ProtocolError.invalidTransactionFormat(\n \"Unsupported transaction format\"\n );\n }\n\n verifyMessageSignedByIntentOwner(\n message: string,\n signature: string,\n pubkey: string\n ): void {\n try {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = bs58.decode(signature);\n const pubkeyObj = this.normalizePubkey(pubkey);\n const pubBytes = pubkeyObj.toBytes();\n\n const isValid = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n pubBytes\n );\n\n if (!isValid) {\n throw ProtocolError.invalidSignature(\"Signature verification failed\");\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Signature verification failed\")\n ) {\n throw error;\n }\n throw ProtocolError.invalidSignature(\"Invalid signature format\");\n }\n }\n\n /**\n * Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.\n * Throws ProtocolError if the transaction already contains protocol meta.\n */\n static attachProtocolMeta(\n txString: string,\n meta: ProtocolMetaFields\n ): string {\n // Check if transaction already has protocol meta\n const adapter = new SolanaAdapter();\n const existingMeta = adapter.getProtocolMeta(txString);\n if (existingMeta) {\n throw ProtocolError.invalidTransactionFormat(\n \"Transaction already contains protocol meta. Cannot attach additional protocol meta.\"\n );\n }\n\n const metaIx = SolanaAdapter.createProtocolMetaIx(meta);\n\n try {\n // Try to deserialize as versioned first\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n const msg = versionedTx.message;\n\n // Extend static account keys with programId if missing\n const newStaticKeys = [...msg.staticAccountKeys];\n if (!newStaticKeys.some((k) => k.equals(MEMO_PROGRAM_ID))) {\n newStaticKeys.push(MEMO_PROGRAM_ID);\n }\n\n // Program ID index\n const programIdIndex = newStaticKeys.findIndex((k) =>\n k.equals(MEMO_PROGRAM_ID)\n );\n\n // Memo instruction as compiled instruction\n const compiledIx = {\n programIdIndex,\n accountKeyIndexes: [],\n data: metaIx.data,\n };\n\n const newMsg = new MessageV0({\n header: msg.header,\n staticAccountKeys: newStaticKeys,\n recentBlockhash: msg.recentBlockhash,\n compiledInstructions: [...msg.compiledInstructions, compiledIx],\n addressTableLookups: msg.addressTableLookups,\n });\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(newMsg);\n // Preserve existing signatures if any\n newTx.signatures = versionedTx.signatures;\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n }\n } catch {\n try {\n // Fallback to legacy transaction\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n}\n",
|
|
19
|
+
"import nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n TransactionInstruction,\n MessageV0,\n Connection,\n TransactionMessage,\n AddressLookupTableAccount,\n} from \"@solana/web3.js\";\nimport { createMemoInstruction, MEMO_PROGRAM_ID } from \"@solana/spl-memo\";\nimport { BaseChainAdapter } from \"./BaseChainAdapter\";\nimport {\n buildProtocolMeta,\n parseProtocolMeta,\n type ProtocolMetaFields,\n} from \"../utils/protocolMeta\";\nimport { codeHash } from \"../utils/crypto\";\nimport type { ActionCode, DelegatedActionCode } from \"../types\";\nimport { ProtocolError } from \"../errors\";\nimport {\n serializeCanonical,\n serializeCanonicalRevoke,\n serializeDelegationProof,\n} from \"../utils/canonical\";\n\n/** Union of supported Solana txn types */\nexport type SolanaTransaction = Transaction | VersionedTransaction;\n\nexport const ADAPTER_CHAIN_NAME = \"solana\" as const;\n\nexport class SolanaAdapter extends BaseChainAdapter {\n /** Normalize pubkey input to PublicKey */\n private normalizePubkey(input: string | PublicKey): PublicKey {\n if (typeof input === \"string\") {\n return new PublicKey(input);\n }\n return input;\n }\n\n /** Verify the signature over canonical message (protocol-level) */\n verifyWithWallet(actionCode: ActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !actionCode.signature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(actionCode.signature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify delegation proof signature */\n verifyWithDelegation(delegatedActionCode: DelegatedActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n // this check if delegation correct\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n // this check if generated code correct by delegated keypair\n // The signature was created by signing a message with the DELEGATED pubkey\n const canonicalMessage = serializeCanonical({\n pubkey: proof.delegatedPubkey,\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(delegatedActionCode.signature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const canonicalMessageOk = nacl.sign.detached.verify(\n canonicalMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && canonicalMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify the signature over canonical revoke message (protocol-level) */\n verifyRevokeWithWallet(\n actionCode: ActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !revokeSignature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonicalRevoke({\n pubkey: actionCode.pubkey,\n codeHash: codeHash(actionCode.code),\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(revokeSignature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n verifyRevokeWithDelegation(\n delegatedActionCode: DelegatedActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature ||\n !delegatedActionCode.delegationProof\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n const revokeMessage = serializeCanonicalRevoke({\n pubkey: proof.delegatedPubkey, // Revoke signature is from delegated keypair\n codeHash: codeHash(delegatedActionCode.code),\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(revokeSignature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const revokeMessageOk = nacl.sign.detached.verify(\n revokeMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && revokeMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Create a Solana memo instruction carrying protocol meta (for SDK/clients) */\n static createProtocolMetaIx(\n meta: ProtocolMetaFields\n ): TransactionInstruction {\n const metaString = buildProtocolMeta(meta);\n return createMemoInstruction(metaString);\n }\n\n /** Extract protocol metadata string (memo) from a base64-encoded transaction, or null */\n getProtocolMeta(txString: string): string | null {\n try {\n const tx = this.deserializeTransaction(txString);\n for (const ix of this.getMemoInstructions(tx)) {\n const data = ix.data;\n try {\n const s = new TextDecoder().decode(data);\n // Optionally: test parse\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /** Deserialize a base64-encoded transaction string to SolanaTransaction */\n private deserializeTransaction(txString: string): SolanaTransaction {\n try {\n // Try versioned first (most common now)\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n return versionedTx;\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n return Transaction.from(Buffer.from(txString, \"base64\"));\n }\n } catch {\n try {\n // Fallback to legacy\n return Transaction.from(Buffer.from(txString, \"base64\"));\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n\n /** Get parsed ProtocolMeta object from base64-encoded transaction, or null if none or invalid */\n parseMeta(txString: string): ProtocolMetaFields | null {\n const s = this.getProtocolMeta(txString);\n if (!s) return null;\n return parseProtocolMeta(s);\n }\n\n /** List memo instructions from the transaction (legacy & versioned) */\n private getMemoInstructions(tx: SolanaTransaction): TransactionInstruction[] {\n if (tx instanceof Transaction) {\n return tx.instructions.filter((ix) =>\n ix.programId.equals(MEMO_PROGRAM_ID)\n );\n } else {\n // VersionedTransaction: inspect `message.compiledInstructions` / static keys\n const vtx = tx as VersionedTransaction;\n const msg = vtx.message;\n if (msg instanceof MessageV0) {\n const memos: TransactionInstruction[] = [];\n for (const ix of msg.compiledInstructions) {\n const pid = msg.staticAccountKeys[ix.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n // reconstruct a TransactionInstruction for inspection\n const keys = ix.accountKeyIndexes.map((i) => ({\n pubkey: msg.staticAccountKeys[i]!,\n isSigner: false,\n isWritable: false,\n }));\n memos.push(\n new TransactionInstruction({\n keys,\n programId: pid,\n data: ix.data as Buffer,\n })\n );\n }\n }\n return memos;\n }\n return [];\n }\n }\n\n /**\n * Validate that a base64-encoded transaction's memo meta aligns with the bound `actionCode`.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionMatchesCode(actionCode: ActionCode, txString: string): void {\n // Check expiration first\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n // Check version\n if (meta.ver !== 2) {\n throw ProtocolError.metaMismatch(\"2\", String(meta.ver), \"ver\");\n }\n\n // Check code ID - should be codeHash of the code, not the code itself\n const expectedCodeHash = codeHash(actionCode.code);\n if (meta.id !== expectedCodeHash) {\n throw ProtocolError.metaMismatch(expectedCodeHash, meta.id, \"id\");\n }\n\n // Check intended pubkey\n if (meta.int !== actionCode.pubkey) {\n throw ProtocolError.metaMismatch(actionCode.pubkey, meta.int, \"int\");\n }\n }\n\n /**\n * Verify that the base64-encoded transaction is signed by the \"intendedFor\" pubkey\n * as declared in the protocol meta of the transaction.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionSignedByIntentOwner(txString: string): void {\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n const intended = meta.int;\n const issuer = meta.iss;\n if (!intended) {\n throw ProtocolError.invalidMetaFormat(\n \"Missing 'int' (intendedFor) field\"\n );\n }\n\n let intendedPubkey: PublicKey;\n let issuerPubkey: PublicKey;\n try {\n intendedPubkey = new PublicKey(intended);\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n intended,\n \"Invalid public key format\"\n );\n }\n\n try {\n if (issuer) {\n issuerPubkey = new PublicKey(issuer);\n }\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n issuer || \"\",\n \"Invalid public key format\"\n );\n }\n\n const tx = this.deserializeTransaction(txString);\n const actualSigners: string[] = [];\n\n // For legacy Transaction\n if (tx instanceof Transaction) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n\n tx.signatures.forEach((sig) => {\n if (!sig.signature) return;\n actualSigners.push(sig.publicKey.toString());\n\n if (sig.publicKey.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && sig.publicKey.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n });\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n\n // For VersionedTransaction (MessageV0)\n if (tx instanceof VersionedTransaction) {\n const msg = tx.message;\n if (msg instanceof MessageV0) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n const signerCount = msg.header.numRequiredSignatures;\n for (let i = 0; i < signerCount; i++) {\n const key = msg.staticAccountKeys[i];\n if (key) {\n actualSigners.push(key.toString());\n if (key.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && key.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n }\n }\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n }\n\n throw ProtocolError.invalidTransactionFormat(\n \"Unsupported transaction format\"\n );\n }\n\n verifyMessageSignedByIntentOwner(\n message: string,\n signature: string,\n pubkey: string\n ): void {\n try {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = bs58.decode(signature);\n const pubkeyObj = this.normalizePubkey(pubkey);\n const pubBytes = pubkeyObj.toBytes();\n\n const isValid = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n pubBytes\n );\n\n if (!isValid) {\n throw ProtocolError.invalidSignature(\"Signature verification failed\");\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Signature verification failed\")\n ) {\n throw error;\n }\n throw ProtocolError.invalidSignature(\"Invalid signature format\");\n }\n }\n\n /**\n * Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.\n * Throws ProtocolError if the transaction already contains protocol meta.\n * \n * @param txString - Base64-encoded transaction string\n * @param meta - Protocol metadata to attach\n * @param connection - Optional Solana connection. Required if transaction has address lookup tables\n * and instructions reference accounts from those tables.\n * @returns Base64-encoded transaction with protocol meta attached\n */\n static async attachProtocolMeta(\n txString: string,\n meta: ProtocolMetaFields,\n connection?: Connection\n ): Promise<string> {\n // Check if transaction already has protocol meta\n const adapter = new SolanaAdapter();\n const existingMeta = adapter.getProtocolMeta(txString);\n if (existingMeta) {\n throw ProtocolError.invalidTransactionFormat(\n \"Transaction already contains protocol meta. Cannot attach additional protocol meta.\"\n );\n }\n\n const metaIx = SolanaAdapter.createProtocolMetaIx(meta);\n\n try {\n // Try to deserialize as versioned first\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n const msg = versionedTx.message;\n\n // Check if we need to handle address lookup tables\n const hasAddressTableLookups =\n msg.addressTableLookups && msg.addressTableLookups.length > 0;\n\n // Check if any instruction references accounts beyond static account keys\n // (which would indicate they reference lookup table accounts)\n const numStaticAccounts = msg.staticAccountKeys.length;\n const referencesLookupAccounts = msg.compiledInstructions.some((ix) =>\n ix.accountKeyIndexes.some((idx) => idx >= numStaticAccounts)\n );\n\n // If we have lookup tables and instructions reference them, we need a connection\n if (hasAddressTableLookups && referencesLookupAccounts) {\n if (!connection) {\n throw ProtocolError.invalidTransactionFormat(\n \"Connection required: Transaction uses address lookup tables and instructions reference accounts from those tables. A Solana connection is needed to resolve lookup tables and correctly recalculate account indices.\"\n );\n }\n\n // Resolve address lookup tables\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n for (const lookup of msg.addressTableLookups) {\n try {\n const lookupTableAccount = await connection.getAddressLookupTable(\n lookup.accountKey\n );\n if (lookupTableAccount.value) {\n addressLookupTableAccounts.push(lookupTableAccount.value);\n }\n } catch (error) {\n throw ProtocolError.invalidTransactionFormat(\n `Failed to resolve address lookup table ${lookup.accountKey.toString()}: ${error}`\n );\n }\n }\n\n // Decompile the message with resolved lookup tables\n const decompiledMessage = TransactionMessage.decompile(msg, {\n addressLookupTableAccounts,\n });\n\n // Add memo instruction (programId will be added automatically during compilation)\n decompiledMessage.instructions.push(metaIx);\n\n // Recompile - this will correctly recalculate all account indices\n const recompiledMessage =\n decompiledMessage.compileToV0Message(addressLookupTableAccounts);\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(recompiledMessage);\n // Preserve existing signatures if any\n newTx.signatures = versionedTx.signatures;\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n } else {\n // Simple case: no lookup tables or no instructions reference them\n // Use the original simple approach\n const newStaticKeys = [...msg.staticAccountKeys];\n if (!newStaticKeys.some((k) => k.equals(MEMO_PROGRAM_ID))) {\n newStaticKeys.push(MEMO_PROGRAM_ID);\n }\n\n // Program ID index\n const programIdIndex = newStaticKeys.findIndex((k) =>\n k.equals(MEMO_PROGRAM_ID)\n );\n\n // Memo instruction as compiled instruction\n const compiledIx = {\n programIdIndex,\n accountKeyIndexes: [],\n data: metaIx.data,\n };\n\n const newMsg = new MessageV0({\n header: msg.header,\n staticAccountKeys: newStaticKeys,\n recentBlockhash: msg.recentBlockhash,\n compiledInstructions: [...msg.compiledInstructions, compiledIx],\n addressTableLookups: msg.addressTableLookups,\n });\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(newMsg);\n // Preserve existing signatures if any\n newTx.signatures = versionedTx.signatures;\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n }\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n }\n } catch (error) {\n // If it's already a ProtocolError, re-throw it\n if (error instanceof ProtocolError) {\n throw error;\n }\n\n try {\n // Fallback to legacy transaction\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n `Invalid base64 transaction format: ${error}`\n );\n }\n }\n }\n}\n",
|
|
20
20
|
"import type {\n ActionCode,\n CodeGenerationConfig,\n DelegationProof,\n DelegatedActionCode,\n Chain,\n ActionCodeRevoke,\n DelegatedActionCodeRevoke,\n} from \"./types\";\nimport type { ChainAdapter, SignFn } from \"./adapters/BaseChainAdapter\";\nimport { WalletStrategy } from \"./strategy/WalletStrategy\";\nimport { DelegationStrategy } from \"./strategy/DelegationStrategy\";\nimport { SolanaAdapter } from \"./adapters/SolanaAdapter\";\nimport { ProtocolError } from \"./errors\";\nimport { SUPPORTED_CHAINS } from \"./constants\";\nimport {\n getCanonicalMessageParts,\n serializeCanonicalRevoke,\n} from \"./utils/canonical\";\nimport { codeHash } from \"./utils/crypto\";\n\nexport class ActionCodesProtocol {\n private adapters: Record<string, ChainAdapter> = {};\n private _walletStrategy: WalletStrategy;\n private _delegationStrategy: DelegationStrategy;\n\n constructor(private readonly config: CodeGenerationConfig) {\n // Register default adapters\n this.adapters.solana = new SolanaAdapter();\n\n // Initialize strategies\n this._walletStrategy = new WalletStrategy(config);\n this._delegationStrategy = new DelegationStrategy(config);\n }\n\n public getConfig(): CodeGenerationConfig {\n return this.config;\n }\n\n /** Register a chain adapter */\n registerAdapter(chain: string, adapter: ChainAdapter): void {\n this.adapters[chain] = adapter;\n }\n\n /** Get a registered adapter */\n getAdapter(chain: string): ChainAdapter | undefined {\n return this.adapters[chain];\n }\n\n /** Typed access to specific adapters */\n get adapter() {\n return {\n solana: this.adapters.solana as unknown as SolanaAdapter,\n };\n }\n\n /** Access to strategies */\n get walletStrategy() {\n return this._walletStrategy;\n }\n\n get delegationStrategy() {\n return this._delegationStrategy;\n }\n\n // Generate code\n async generate(\n strategy: \"wallet\",\n pubkey: string,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCode>;\n async generate(\n strategy: \"delegation\",\n delegationProof: DelegationProof,\n chain: Chain,\n signFn: SignFn\n ): Promise<DelegatedActionCode>;\n async generate(\n strategy: \"wallet\" | \"delegation\",\n pubkeyOrProof: string | DelegationProof,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCode | DelegatedActionCode> {\n if (!chain || !SUPPORTED_CHAINS[chain]) {\n throw ProtocolError.invalidAdapter(chain);\n }\n\n if (!signFn || typeof signFn !== \"function\") {\n throw ProtocolError.invalidSignature(\"Missing signature function\");\n }\n\n if (strategy === \"wallet\") {\n const canonical = getCanonicalMessageParts(pubkeyOrProof as string);\n // For now we have to pass Solana as only chain\n // later we will allow to pass the chain dynamically\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be Uint8Array (canonical message)\n if (!signature) {\n throw ProtocolError.invalidSignature(\n \"Missing signature over canonical message\"\n );\n }\n return this.walletStrategy.generateCode(canonical, chain, signature);\n } else {\n const proof = pubkeyOrProof as DelegationProof;\n const canonical = getCanonicalMessageParts(proof.delegatedPubkey); // Use delegated pubkey for signing\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be DelegationProof\n if (!signature) {\n throw ProtocolError.invalidSignature(\"Missing delegated signature\");\n }\n return this.delegationStrategy.generateDelegatedCode(\n proof as DelegationProof,\n canonical,\n chain,\n signature\n );\n }\n }\n\n async revoke(\n strategy: \"wallet\",\n actionCode: ActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCodeRevoke>;\n async revoke(\n strategy: \"delegation\",\n actionCode: DelegatedActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<DelegatedActionCodeRevoke>;\n async revoke(\n strategy: \"wallet\" | \"delegation\",\n actionCode: ActionCode | DelegatedActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCodeRevoke | DelegatedActionCodeRevoke> {\n if (!chain || !SUPPORTED_CHAINS[chain]) {\n throw ProtocolError.invalidAdapter(chain);\n }\n\n if (!signFn || typeof signFn !== \"function\") {\n throw ProtocolError.invalidSignature(\"Missing signature function\");\n }\n\n if (strategy === \"wallet\") {\n const canonical = serializeCanonicalRevoke({\n codeHash: codeHash(actionCode.code),\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n // For now we have to pass Solana as only chain\n // later we will allow to pass the chain dynamically\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be Uint8Array (canonical message)\n if (!signature) {\n throw ProtocolError.invalidSignature(\n \"Missing signature over canonical message\"\n );\n }\n\n return {\n ...actionCode,\n revokeSignature: signature,\n };\n } else {\n const delegatedActionCode = actionCode as DelegatedActionCode;\n const canonical = serializeCanonicalRevoke({\n codeHash: codeHash(actionCode.code),\n pubkey: delegatedActionCode.delegationProof.delegatedPubkey, // Use delegated pubkey for signature\n windowStart: actionCode.timestamp,\n });\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be DelegationProof\n if (!signature) {\n throw ProtocolError.invalidSignature(\"Missing delegated signature\");\n }\n\n return {\n ...actionCode,\n revokeSignature: signature,\n };\n }\n }\n\n // Overloaded validateCode methods with strategy parameter\n validate(strategy: \"wallet\", actionCode: ActionCode): void;\n validate(strategy: \"delegation\", actionCode: DelegatedActionCode): void;\n validate(\n strategy: \"wallet\" | \"delegation\",\n actionCode: ActionCode | DelegatedActionCode\n ): void {\n if (strategy === \"wallet\") {\n // This will throw if validation fails\n this.walletStrategy.validateCode(actionCode as ActionCode);\n\n const adapter = this.getAdapter(actionCode.chain);\n if (!adapter) throw ProtocolError.invalidAdapter(actionCode.chain);\n\n const ok = adapter.verifyWithWallet(actionCode);\n\n if (!ok) {\n throw ProtocolError.invalidSignature(\n \"Wallet signature verification failed\"\n );\n }\n } else {\n this.delegationStrategy.validateDelegatedCode(\n actionCode as DelegatedActionCode\n );\n\n // Then verify the delegation proof signature\n const adapter = this.getAdapter(actionCode.chain);\n if (!adapter) throw ProtocolError.invalidAdapter(actionCode.chain);\n\n const ok = adapter.verifyWithDelegation(\n actionCode as DelegatedActionCode\n );\n\n if (!ok) {\n throw ProtocolError.invalidSignature(\n \"Delegation signature verification failed\"\n );\n }\n }\n }\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "ozDAiBO,MAAe,EAAyC,CAW/D,uECtBO,SAAS,EAAO,CAAC,EAAG,CACvB,OAAO,aAAa,YAAe,YAAY,OAAO,CAAC,GAAK,EAAE,YAAY,OAAS,aAGhF,SAAS,EAAO,CAAC,EAAG,EAAQ,GAAI,CACnC,GAAI,CAAC,OAAO,cAAc,CAAC,GAAK,EAAI,EAAG,CACnC,IAAM,EAAS,GAAS,IAAI,MAC5B,MAAU,MAAM,GAAG,+BAAoC,GAAG,GAI3D,SAAS,CAAM,CAAC,EAAO,EAAQ,EAAQ,GAAI,CAC9C,IAAM,EAAQ,GAAQ,CAAK,EACrB,EAAM,GAAO,OACb,EAAW,IAAW,OAC5B,GAAI,CAAC,GAAU,GAAY,IAAQ,EAAS,CACxC,IAAM,EAAS,GAAS,IAAI,MACtB,EAAQ,EAAW,cAAc,IAAW,GAC5C,EAAM,EAAQ,UAAU,IAAQ,QAAQ,OAAO,IACrD,MAAU,MAAM,EAAS,sBAAwB,EAAQ,SAAW,CAAG,EAE3E,OAAO,EAGJ,SAAS,EAAK,CAAC,EAAG,CACrB,GAAI,OAAO,IAAM,YAAc,OAAO,EAAE,SAAW,WAC/C,MAAU,MAAM,yCAAyC,EAC7D,GAAQ,EAAE,SAAS,EACnB,GAAQ,EAAE,QAAQ,EAGf,SAAS,CAAO,CAAC,EAAU,EAAgB,GAAM,CACpD,GAAI,EAAS,UACT,MAAU,MAAM,kCAAkC,EACtD,GAAI,GAAiB,EAAS,SAC1B,MAAU,MAAM,uCAAuC,EAGxD,SAAS,EAAO,CAAC,EAAK,EAAU,CACnC,EAAO,EAAK,OAAW,qBAAqB,EAC5C,IAAM,EAAM,EAAS,UACrB,GAAI,EAAI,OAAS,EACb,MAAU,MAAM,oDAAsD,CAAG,EAY1E,SAAS,CAAK,IAAI,EAAQ,CAC7B,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC/B,EAAO,GAAG,KAAK,CAAC,EAIjB,SAAS,EAAU,CAAC,EAAK,CAC5B,OAAO,IAAI,SAAS,EAAI,OAAQ,EAAI,WAAY,EAAI,UAAU,EAG3D,SAAS,CAAI,CAAC,EAAM,EAAO,CAC9B,OAAQ,GAAS,GAAK,EAAW,IAAS,EAsJvC,SAAS,EAAY,CAAC,EAAU,EAAO,CAAC,EAAG,CAC9C,IAAM,EAAQ,CAAC,EAAK,IAAS,EAAS,CAAI,EAAE,OAAO,CAAG,EAAE,OAAO,EACzD,EAAM,EAAS,MAAS,EAK9B,OAJA,EAAM,UAAY,EAAI,UACtB,EAAM,SAAW,EAAI,SACrB,EAAM,OAAS,CAAC,IAAS,EAAS,CAAI,EACtC,OAAO,OAAO,EAAO,CAAI,EAClB,OAAO,OAAO,CAAK,EAUvB,IAAM,GAAU,CAAC,KAAY,CAChC,IAAK,WAAW,KAAK,CAAC,EAAM,EAAM,GAAM,IAAM,GAAM,EAAM,IAAM,EAAM,EAAM,EAAM,CAAM,CAAC,CAC7F,GC1OO,SAAS,EAAG,CAAC,EAAG,EAAG,EAAG,CACzB,OAAQ,EAAI,EAAM,CAAC,EAAI,EAGpB,SAAS,EAAG,CAAC,EAAG,EAAG,EAAG,CACzB,OAAQ,EAAI,EAAM,EAAI,EAAM,EAAI,EAM7B,MAAM,EAAO,CAChB,SACA,UACA,UACA,KAEA,OACA,KACA,SAAW,GACX,OAAS,EACT,IAAM,EACN,UAAY,GACZ,WAAW,CAAC,EAAU,EAAW,EAAW,EAAM,CAC9C,KAAK,SAAW,EAChB,KAAK,UAAY,EACjB,KAAK,UAAY,EACjB,KAAK,KAAO,EACZ,KAAK,OAAS,IAAI,WAAW,CAAQ,EACrC,KAAK,KAAO,GAAW,KAAK,MAAM,EAEtC,MAAM,CAAC,EAAM,CACT,EAAQ,IAAI,EACZ,EAAO,CAAI,EACX,IAAQ,OAAM,SAAQ,YAAa,KAC7B,EAAM,EAAK,OACjB,QAAS,EAAM,EAAG,EAAM,GAAM,CAC1B,IAAM,EAAO,KAAK,IAAI,EAAW,KAAK,IAAK,EAAM,CAAG,EAEpD,GAAI,IAAS,EAAU,CACnB,IAAM,EAAW,GAAW,CAAI,EAChC,KAAO,GAAY,EAAM,EAAK,GAAO,EACjC,KAAK,QAAQ,EAAU,CAAG,EAC9B,SAKJ,GAHA,EAAO,IAAI,EAAK,SAAS,EAAK,EAAM,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAO,EACZ,GAAO,EACH,KAAK,MAAQ,EACb,KAAK,QAAQ,EAAM,CAAC,EACpB,KAAK,IAAM,EAKnB,OAFA,KAAK,QAAU,EAAK,OACpB,KAAK,WAAW,EACT,KAEX,UAAU,CAAC,EAAK,CACZ,EAAQ,IAAI,EACZ,GAAQ,EAAK,IAAI,EACjB,KAAK,SAAW,GAIhB,IAAQ,SAAQ,OAAM,WAAU,QAAS,MACnC,OAAQ,KAMd,GAJA,EAAO,KAAS,IAChB,EAAM,KAAK,OAAO,SAAS,CAAG,CAAC,EAG3B,KAAK,UAAY,EAAW,EAC5B,KAAK,QAAQ,EAAM,CAAC,EACpB,EAAM,EAGV,QAAS,EAAI,EAAK,EAAI,EAAU,IAC5B,EAAO,GAAK,EAIhB,EAAK,aAAa,EAAW,EAAG,OAAO,KAAK,OAAS,CAAC,EAAG,CAAI,EAC7D,KAAK,QAAQ,EAAM,CAAC,EACpB,IAAM,EAAQ,GAAW,CAAG,EACtB,EAAM,KAAK,UAEjB,GAAI,EAAM,EACN,MAAU,MAAM,2CAA2C,EAC/D,IAAM,EAAS,EAAM,EACf,EAAQ,KAAK,IAAI,EACvB,GAAI,EAAS,EAAM,OACf,MAAU,MAAM,oCAAoC,EACxD,QAAS,EAAI,EAAG,EAAI,EAAQ,IACxB,EAAM,UAAU,EAAI,EAAG,EAAM,GAAI,CAAI,EAE7C,MAAM,EAAG,CACL,IAAQ,SAAQ,aAAc,KAC9B,KAAK,WAAW,CAAM,EACtB,IAAM,EAAM,EAAO,MAAM,EAAG,CAAS,EAErC,OADA,KAAK,QAAQ,EACN,EAEX,UAAU,CAAC,EAAI,CACX,IAAO,IAAI,KAAK,YAChB,EAAG,IAAI,GAAG,KAAK,IAAI,CAAC,EACpB,IAAQ,WAAU,SAAQ,SAAQ,WAAU,YAAW,OAAQ,KAK/D,GAJA,EAAG,UAAY,EACf,EAAG,SAAW,EACd,EAAG,OAAS,EACZ,EAAG,IAAM,EACL,EAAS,EACT,EAAG,OAAO,IAAI,CAAM,EACxB,OAAO,EAEX,KAAK,EAAG,CACJ,OAAO,KAAK,WAAW,EAE/B,CAMO,IAAM,EAA4B,YAAY,KAAK,CACtD,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACxF,CAAC,EAEY,EAA4B,YAAY,KAAK,CACtD,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UACxF,CAAC,EAEY,EAA4B,YAAY,KAAK,CACtD,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACxF,CAAC,EAEY,EAA4B,YAAY,KAAK,CACtD,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,SACxF,CAAC,EC5ID,IAAM,GAA6B,OAAO,UAAW,EAC/C,GAAuB,OAAO,EAAE,EACtC,SAAS,EAAO,CAAC,EAAG,EAAK,GAAO,CAC5B,GAAI,EACA,MAAO,CAAE,EAAG,OAAO,EAAI,EAAU,EAAG,EAAG,OAAQ,GAAK,GAAQ,EAAU,CAAE,EAC5E,MAAO,CAAE,EAAG,OAAQ,GAAK,GAAQ,EAAU,EAAI,EAAG,EAAG,OAAO,EAAI,EAAU,EAAI,CAAE,EAEpF,SAAS,EAAK,CAAC,EAAK,EAAK,GAAO,CAC5B,IAAM,EAAM,EAAI,OACZ,EAAK,IAAI,YAAY,CAAG,EACxB,EAAK,IAAI,YAAY,CAAG,EAC5B,QAAS,EAAI,EAAG,EAAI,EAAK,IAAK,CAC1B,IAAQ,IAAG,KAAM,GAAQ,EAAI,GAAI,CAAE,EACnC,CAAC,EAAG,GAAI,EAAG,EAAE,EAAI,CAAC,EAAG,CAAC,EAE1B,MAAO,CAAC,EAAI,CAAE,EAIlB,IAAM,GAAQ,CAAC,EAAG,EAAI,IAAM,IAAM,EAC5B,GAAQ,CAAC,EAAG,EAAG,IAAO,GAAM,GAAK,EAAO,IAAM,EAE9C,EAAS,CAAC,EAAG,EAAG,IAAO,IAAM,EAAM,GAAM,GAAK,EAC9C,EAAS,CAAC,EAAG,EAAG,IAAO,GAAM,GAAK,EAAO,IAAM,EAE/C,GAAS,CAAC,EAAG,EAAG,IAAO,GAAM,GAAK,EAAO,IAAO,EAAI,GACpD,GAAS,CAAC,EAAG,EAAG,IAAO,IAAO,EAAI,GAAQ,GAAM,GAAK,EAY3D,SAAS,CAAG,CAAC,EAAI,EAAI,EAAI,EAAI,CACzB,IAAM,GAAK,IAAO,IAAM,IAAO,GAC/B,MAAO,CAAE,EAAI,EAAK,GAAO,EAAI,WAAW,GAAM,EAAG,EAAG,EAAI,CAAE,EAG9D,IAAM,GAAQ,CAAC,EAAI,EAAI,KAAQ,IAAO,IAAM,IAAO,IAAM,IAAO,GAC1D,GAAQ,CAAC,EAAK,EAAI,EAAI,IAAQ,EAAK,EAAK,GAAO,EAAM,WAAW,GAAM,EACtE,GAAQ,CAAC,EAAI,EAAI,EAAI,KAAQ,IAAO,IAAM,IAAO,IAAM,IAAO,IAAM,IAAO,GAC3E,GAAQ,CAAC,EAAK,EAAI,EAAI,EAAI,IAAQ,EAAK,EAAK,EAAK,GAAO,EAAM,WAAW,GAAM,EAC/E,GAAQ,CAAC,EAAI,EAAI,EAAI,EAAI,KAAQ,IAAO,IAAM,IAAO,IAAM,IAAO,IAAM,IAAO,IAAM,IAAO,GAC5F,GAAQ,CAAC,EAAK,EAAI,EAAI,EAAI,EAAI,IAAQ,EAAK,EAAK,EAAK,EAAK,GAAO,EAAM,WAAW,GAAM,ECtC9F,IAAM,GAA2B,YAAY,KAAK,CAC9C,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACxF,CAAC,EAEK,EAA2B,IAAI,YAAY,EAAE,EAEnD,MAAM,WAAiB,EAAO,CAC1B,WAAW,CAAC,EAAW,CACnB,MAAM,GAAI,EAAW,EAAG,EAAK,EAEjC,GAAG,EAAG,CACF,IAAQ,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAM,KACnC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAGlC,GAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CACxB,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EACb,KAAK,EAAI,EAAI,EAEjB,OAAO,CAAC,EAAM,EAAQ,CAElB,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,GAAU,EACnC,EAAS,GAAK,EAAK,UAAU,EAAQ,EAAK,EAC9C,QAAS,EAAI,GAAI,EAAI,GAAI,IAAK,CAC1B,IAAM,EAAM,EAAS,EAAI,IACnB,EAAK,EAAS,EAAI,GAClB,EAAK,EAAK,EAAK,CAAC,EAAI,EAAK,EAAK,EAAE,EAAK,IAAQ,EAC7C,EAAK,EAAK,EAAI,EAAE,EAAI,EAAK,EAAI,EAAE,EAAK,IAAO,GACjD,EAAS,GAAM,EAAK,EAAS,EAAI,GAAK,EAAK,EAAS,EAAI,IAAO,EAGnE,IAAM,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAG,KAAM,KACjC,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,CACzB,IAAM,EAAS,EAAK,EAAG,CAAC,EAAI,EAAK,EAAG,EAAE,EAAI,EAAK,EAAG,EAAE,EAC9C,EAAM,EAAI,EAAS,GAAI,EAAG,EAAG,CAAC,EAAI,GAAS,GAAK,EAAS,GAAM,EAE/D,GADS,EAAK,EAAG,CAAC,EAAI,EAAK,EAAG,EAAE,EAAI,EAAK,EAAG,EAAE,GAC/B,GAAI,EAAG,EAAG,CAAC,EAAK,EACrC,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EAAK,EAAI,EAAM,EACf,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EAAK,EAAK,EAAM,EAGpB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,EAAK,EAAI,KAAK,EAAK,EACnB,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAEnC,UAAU,EAAG,CACT,EAAM,CAAQ,EAElB,OAAO,EAAG,CACN,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC/B,EAAM,KAAK,MAAM,EAEzB,CAEO,MAAM,WAAgB,EAAS,CAGlC,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,WAAW,EAAG,CACV,MAAM,EAAE,EAEhB,CAEO,MAAM,WAAgB,EAAS,CAClC,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,EAAI,EAAU,GAAK,EACnB,WAAW,EAAG,CACV,MAAM,EAAE,EAEhB,CAKA,IAAM,IAAwB,IAAU,GAAM,CAC1C,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,oBACtE,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAClB,IAA6B,IAAM,GAAK,IAAI,EAC5C,IAA6B,IAAM,GAAK,IAAI,EAE5C,EAA6B,IAAI,YAAY,EAAE,EAC/C,EAA6B,IAAI,YAAY,EAAE,EAErD,MAAM,WAAiB,EAAO,CAC1B,WAAW,CAAC,EAAW,CACnB,MAAM,IAAK,EAAW,GAAI,EAAK,EAGnC,GAAG,EAAG,CACF,IAAQ,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAO,KAC3E,MAAO,CAAC,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAAE,EAG1E,GAAG,CAAC,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAChE,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EACf,KAAK,GAAK,EAAK,EAEnB,OAAO,CAAC,EAAM,EAAQ,CAElB,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,GAAU,EACnC,EAAW,GAAK,EAAK,UAAU,CAAM,EACrC,EAAW,GAAK,EAAK,UAAW,GAAU,CAAE,EAEhD,QAAS,EAAI,GAAI,EAAI,GAAI,IAAK,CAE1B,IAAM,EAAO,EAAW,EAAI,IAAM,EAC5B,EAAO,EAAW,EAAI,IAAM,EAC5B,GAAU,EAAO,EAAM,EAAM,CAAC,EAAQ,EAAO,EAAM,EAAM,CAAC,EAAQ,GAAM,EAAM,EAAM,CAAC,EACrF,GAAU,EAAO,EAAM,EAAM,CAAC,EAAQ,EAAO,EAAM,EAAM,CAAC,EAAQ,GAAM,EAAM,EAAM,CAAC,EAErF,EAAM,EAAW,EAAI,GAAK,EAC1B,EAAM,EAAW,EAAI,GAAK,EAC1B,GAAU,EAAO,EAAK,EAAK,EAAE,EAAQ,GAAO,EAAK,EAAK,EAAE,EAAQ,GAAM,EAAK,EAAK,CAAC,EACjF,GAAU,EAAO,EAAK,EAAK,EAAE,EAAQ,GAAO,EAAK,EAAK,EAAE,EAAQ,GAAM,EAAK,EAAK,CAAC,EAEjF,GAAW,GAAM,GAAK,GAAK,EAAW,EAAI,GAAI,EAAW,EAAI,GAAG,EAChE,GAAW,GAAM,GAAM,GAAK,GAAK,EAAW,EAAI,GAAI,EAAW,EAAI,GAAG,EAC5E,EAAW,GAAK,GAAO,EACvB,EAAW,GAAK,GAAO,EAE3B,IAAM,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAO,KAEzE,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,CAEzB,IAAM,EAAc,EAAO,EAAI,EAAI,EAAE,EAAQ,EAAO,EAAI,EAAI,EAAE,EAAQ,GAAO,EAAI,EAAI,EAAE,EACjF,EAAc,EAAO,EAAI,EAAI,EAAE,EAAQ,EAAO,EAAI,EAAI,EAAE,EAAQ,GAAO,EAAI,EAAI,EAAE,EAEjF,GAAQ,EAAK,EAAO,CAAC,EAAK,EAC1B,GAAQ,EAAK,EAAO,CAAC,EAAK,EAG1B,EAAW,GAAM,EAAI,EAAS,GAAM,GAAU,GAAI,EAAW,EAAE,EAC/D,EAAU,GAAM,EAAM,EAAI,EAAS,GAAM,GAAU,GAAI,EAAW,EAAE,EACpE,GAAM,EAAO,EAEb,GAAc,EAAO,EAAI,EAAI,EAAE,EAAQ,GAAO,EAAI,EAAI,EAAE,EAAQ,GAAO,EAAI,EAAI,EAAE,EACjF,GAAc,EAAO,EAAI,EAAI,EAAE,EAAQ,GAAO,EAAI,EAAI,EAAE,EAAQ,GAAO,EAAI,EAAI,EAAE,EACjF,GAAQ,EAAK,EAAO,EAAK,EAAO,EAAK,EACrC,GAAQ,EAAK,EAAO,EAAK,EAAO,EAAK,EAC3C,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACT,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,EAAK,EAAG,EAAK,EAAG,EAAM,EAAG,GAAM,CAAC,EAC5D,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAK,EAAK,EACV,IAAM,GAAU,GAAM,GAAK,GAAS,EAAI,EACxC,EAAS,GAAM,GAAK,EAAK,GAAS,EAAI,EACtC,EAAK,GAAM,GAGd,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,GACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACnE,CAAE,EAAG,EAAI,EAAG,CAAG,EAAQ,EAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAK,EAAG,EAAK,CAAC,EACpE,KAAK,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAAE,EAE3E,UAAU,EAAG,CACT,EAAM,EAAY,CAAU,EAEhC,OAAO,EAAG,CACN,EAAM,KAAK,MAAM,EACjB,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAE/D,CAEO,MAAM,WAAgB,EAAS,CAClC,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,WAAW,EAAG,CACV,MAAM,EAAE,EAEhB,CAEO,MAAM,WAAgB,EAAS,CAClC,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,GAAK,EACpB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,GAAK,EAAU,IAAM,EACrB,WAAW,EAAG,CACV,MAAM,EAAE,EAEhB,CAQA,IAAM,EAA0B,YAAY,KAAK,CAC7C,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,UACxF,CAAC,EAEK,EAA0B,YAAY,KAAK,CAC7C,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UACxF,CAAC,EAEM,MAAM,WAAoB,EAAS,CACtC,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,WAAW,EAAG,CACV,MAAM,EAAE,EAEhB,CAEO,MAAM,WAAoB,EAAS,CACtC,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,GAAK,EAClB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,GAAK,EAAQ,IAAM,EACnB,WAAW,EAAG,CACV,MAAM,EAAE,EAEhB,CASO,IAAM,GAAyB,GAAa,IAAM,IAAI,GAC7C,GAAQ,CAAI,CAAC,EChXtB,MAAM,EAAM,CACf,MACA,MACA,SACA,UACA,SAAW,GACX,UAAY,GACZ,WAAW,CAAC,EAAM,EAAK,CAInB,GAHA,GAAM,CAAI,EACV,EAAO,EAAK,OAAW,KAAK,EAC5B,KAAK,MAAQ,EAAK,OAAO,EACrB,OAAO,KAAK,MAAM,SAAW,WAC7B,MAAU,MAAM,qDAAqD,EACzE,KAAK,SAAW,KAAK,MAAM,SAC3B,KAAK,UAAY,KAAK,MAAM,UAC5B,IAAM,EAAW,KAAK,SAChB,EAAM,IAAI,WAAW,CAAQ,EAEnC,EAAI,IAAI,EAAI,OAAS,EAAW,EAAK,OAAO,EAAE,OAAO,CAAG,EAAE,OAAO,EAAI,CAAG,EACxE,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC5B,EAAI,IAAM,GACd,KAAK,MAAM,OAAO,CAAG,EAErB,KAAK,MAAQ,EAAK,OAAO,EAEzB,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC5B,EAAI,IAAM,IACd,KAAK,MAAM,OAAO,CAAG,EACrB,EAAM,CAAG,EAEb,MAAM,CAAC,EAAK,CAGR,OAFA,EAAQ,IAAI,EACZ,KAAK,MAAM,OAAO,CAAG,EACd,KAEX,UAAU,CAAC,EAAK,CACZ,EAAQ,IAAI,EACZ,EAAO,EAAK,KAAK,UAAW,QAAQ,EACpC,KAAK,SAAW,GAChB,KAAK,MAAM,WAAW,CAAG,EACzB,KAAK,MAAM,OAAO,CAAG,EACrB,KAAK,MAAM,WAAW,CAAG,EACzB,KAAK,QAAQ,EAEjB,MAAM,EAAG,CACL,IAAM,EAAM,IAAI,WAAW,KAAK,MAAM,SAAS,EAE/C,OADA,KAAK,WAAW,CAAG,EACZ,EAEX,UAAU,CAAC,EAAI,CAEX,IAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,CAAC,CAAC,EACpD,IAAQ,QAAO,QAAO,WAAU,YAAW,WAAU,aAAc,KAQnE,OAPA,EAAK,EACL,EAAG,SAAW,EACd,EAAG,UAAY,EACf,EAAG,SAAW,EACd,EAAG,UAAY,EACf,EAAG,MAAQ,EAAM,WAAW,EAAG,KAAK,EACpC,EAAG,MAAQ,EAAM,WAAW,EAAG,KAAK,EAC7B,EAEX,KAAK,EAAG,CACJ,OAAO,KAAK,WAAW,EAE3B,OAAO,EAAG,CACN,KAAK,UAAY,GACjB,KAAK,MAAM,QAAQ,EACnB,KAAK,MAAM,QAAQ,EAE3B,CAWO,IAAM,EAAO,CAAC,EAAM,EAAK,IAAY,IAAI,GAAM,EAAM,CAAG,EAAE,OAAO,CAAO,EAAE,OAAO,EACxF,EAAK,OAAS,CAAC,EAAM,IAAQ,IAAI,GAAM,EAAM,CAAG,EC1EzC,SAAS,EAAO,CAAC,EAAM,EAAK,EAAM,CAKrC,GAJA,GAAM,CAAI,EAIN,IAAS,OACT,EAAO,IAAI,WAAW,EAAK,SAAS,EACxC,OAAO,EAAK,EAAM,EAAM,CAAG,EAE/B,IAAM,GAA+B,WAAW,GAAG,CAAC,EAC9C,GAA+B,WAAW,GAAG,EAQ5C,SAAS,EAAM,CAAC,EAAM,EAAK,EAAM,EAAS,GAAI,CACjD,GAAM,CAAI,EACV,GAAQ,EAAQ,QAAQ,EACxB,IAAM,EAAO,EAAK,UAClB,GAAI,EAAS,IAAM,EACf,MAAU,MAAM,+BAA+B,EACnD,IAAM,EAAS,KAAK,KAAK,EAAS,CAAI,EACtC,GAAI,IAAS,OACT,EAAO,GAEP,OAAO,EAAM,OAAW,MAAM,EAElC,IAAM,EAAM,IAAI,WAAW,EAAS,CAAI,EAElC,EAAO,EAAK,OAAO,EAAM,CAAG,EAC5B,EAAU,EAAK,WAAW,EAC1B,EAAI,IAAI,WAAW,EAAK,SAAS,EACvC,QAAS,EAAU,EAAG,EAAU,EAAQ,IACpC,GAAa,GAAK,EAAU,EAG5B,EAAQ,OAAO,IAAY,EAAI,GAAe,CAAC,EAC1C,OAAO,CAAI,EACX,OAAO,EAAY,EACnB,WAAW,CAAC,EACjB,EAAI,IAAI,EAAG,EAAO,CAAO,EACzB,EAAK,WAAW,CAAO,EAK3B,OAHA,EAAK,QAAQ,EACb,EAAQ,QAAQ,EAChB,EAAM,EAAG,EAAY,EACd,EAAI,MAAM,EAAG,CAAM,EAmBvB,IAAM,GAAO,CAAC,EAAM,EAAK,EAAM,EAAM,IAAW,GAAO,EAAM,GAAQ,EAAM,EAAK,CAAI,EAAG,EAAM,CAAM,EC9E1G,SAAS,CAAO,CAAC,EAAwC,CACvD,GAAI,OAAO,IAAU,SAAU,OAAO,IAAI,YAAY,EAAE,OAAO,CAAK,EACpE,OAAO,EAGF,SAAS,EAAM,CAAC,EAAuC,CAC5D,OAAO,GAAY,EAAQ,CAAI,CAAC,EAG3B,SAAS,EAAU,CACxB,EACA,EACY,CACZ,OAAO,EAAK,GAAa,EAAQ,CAAG,EAAG,EAAQ,CAAI,CAAC,EAI/C,SAAS,EAAU,CACxB,EACA,GAEE,OACA,QAC8D,CAAC,EACrD,CACZ,IAAM,EAAU,EAAO,EAAQ,CAAI,EAAI,IAAI,WAAW,EAAE,EAClD,EAAS,EAAQ,CAAG,EACpB,EAAU,EAAO,EAAQ,CAAI,EAAI,IAAI,WAAW,CAAC,EAEvD,OAAO,GAAK,GAAa,EAAQ,EAAS,EAAS,CAAM,EAI3D,IAAM,GAAqB,mCAEpB,SAAS,EAAqB,CAAC,EAA0B,CAC9D,IAAI,EAAO,EACP,EAAQ,EACR,EAAS,GACb,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,EAAS,GAAS,EAAK,EAAK,GAC5B,GAAQ,EACR,MAAO,GAAQ,EACb,GAAU,GAAoB,IAAW,EAAO,EAAM,IACtD,GAAQ,EAGZ,GAAI,EAAO,EACT,GAAU,GAAoB,GAAU,EAAI,EAAS,IAEvD,OAAO,EAGF,SAAS,EAAY,CAAC,EAAmB,EAA+B,CAC7E,IAAM,EAAa,KAAK,KAAK,EAAY,CAAC,EACpC,EAAM,IAAI,WAAW,CAAU,EAC/B,EAAY,KAAK,IAAI,EAAY,EAAM,MAAM,EACnD,EAAI,IAAI,EAAM,SAAS,EAAG,CAAS,CAAC,EAEpC,IAAM,EAAY,EAAa,EAAI,EACnC,GAAI,EAAY,EAAG,CACjB,IAAM,EAAO,KAAQ,EACrB,EAAI,EAAa,GAAK,EAAI,EAAa,GAAM,EAE/C,OAAO,EAIF,SAAS,EAAc,CAAC,EAAoB,EAAwB,CACzE,GAAI,EAAO,SAAW,EAAG,MAAU,MAAM,8BAA8B,EAGvE,IAAI,EAAM,GACJ,EAAS,EAAO,EAAO,OAAS,GAAM,GAC5C,QAAS,EAAI,EAAG,EAAI,OAAS,EAAQ,IAAK,CACxC,IAAM,GAAO,EAAS,EAAI,GAAK,KAAK,IAAI,EAAG,EAAO,OAAS,CAAC,EAOtD,KALF,EAAO,GAAQ,MAAS,GACzB,EAAO,EAAM,IAAO,GACpB,EAAO,EAAM,IAAO,EACrB,EAAO,EAAM,IACC,KACE,SAAS,EAAE,SAAS,EAAG,GAAG,EAC5C,GAAO,EAET,OAAO,EAAI,MAAM,EAAG,CAAM,EAIrB,SAAS,CAAQ,CAAC,EAAsB,CAC7C,IAAM,EAAO,GAAO,CAAI,EACxB,OAAO,MAAM,KAAK,CAAI,EACnB,IAAI,CAAC,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,ECjGL,IAAK,IAAL,CAAK,IAAL,CAEL,eAAe,eACf,eAAe,eACf,sBAAsB,sBACtB,oBAAoB,oBAGpB,eAAe,eACf,sBAAsB,sBACtB,gBAAgB,gBAChB,iBAAiB,iBAGjB,2CAA2C,2CAC3C,mCAAmC,mCACnC,6BAA6B,6BAC7B,wBAAwB,wBAGxB,gBAAgB,gBAChB,yBAAyB,yBAGzB,eAAe,eACf,iBAAiB,iBAGjB,kBAAkB,oBA5BR,SA+BL,MAAM,UAAsB,KAAM,CAErB,KAEA,QAHlB,WAAW,CACO,EAChB,EACgB,EAChB,CACA,MAAM,CAAO,EAJG,YAEA,eAGhB,KAAK,KAAO,sBAIP,YAAW,CAAC,EAAc,EAAmB,EAAuC,CACzF,OAAO,IAAI,GAAiB,EAAM,EAAW,CAAW,QAGnD,YAAW,EAAkB,CAClC,OAAO,IAAI,EACT,eACA,wBACA,CAAC,CACH,QAGK,kBAAiB,CAAC,EAAc,EAAwC,CAC7E,OAAO,IAAI,GAAuB,EAAM,CAAM,QAGzC,iBAAgB,CAAC,EAAuC,CAC7D,OAAO,IAAI,GAAsB,CAAM,QAIlC,YAAW,EAAqB,CACrC,OAAO,IAAI,SAGN,kBAAiB,CAAC,EAA+B,CACtD,OAAO,IAAI,EACT,sBACA,iCAAiC,IACjC,CAAE,QAAO,CACX,QAGK,aAAY,CAAC,EAAkB,EAAgB,EAAkC,CACtF,OAAO,IAAI,GAAkB,EAAU,EAAQ,CAAK,QAG/C,aAAY,CAAC,EAAkB,EAAoC,CACxE,OAAO,IAAI,EACT,iBACA,4BAA4B,iBAA2B,KACvD,CAAE,WAAU,aAAY,CAC1B,QAIK,oCAAmC,CAAC,EAAkB,EAAmE,CAC9H,OAAO,IAAI,GAAyC,EAAU,CAAa,QAGtE,6BAA4B,CAAC,EAAgB,EAA4D,CAC9G,OAAO,IAAI,GAAkC,EAAQ,CAAa,QAG7D,yBAAwB,CAAC,EAA+B,CAC7D,OAAO,IAAI,EACT,6BACA,+BAA+B,IAC/B,CAAE,QAAO,CACX,QAGK,oBAAmB,CAAC,EAAgB,EAA0C,CACnF,OAAO,IAAI,GAAyB,EAAQ,CAAM,QAI7C,aAAY,CAAC,EAAe,EAAgB,EAA+B,CAChF,OAAO,IAAI,EACT,gBACA,WAAW,MAAU,IACrB,CAAE,QAAO,QAAO,QAAO,CACzB,QAGK,qBAAoB,CAAC,EAA8B,CACxD,OAAO,IAAI,EACT,yBACA,2BAA2B,IAC3B,CAAE,OAAM,CACV,QAIK,YAAW,CAAC,EAAmB,EAA+B,CACnE,OAAO,IAAI,EACT,eACA,mBAAmB,MAAc,IACjC,CAAE,YAAW,QAAO,CACtB,QAGK,cAAa,CAAC,EAA+B,CAClD,OAAO,IAAI,EACT,iBACA,mBAAmB,IACnB,CAAE,QAAO,CACX,QAIK,eAAc,CAAC,EAAsC,CAC1D,OAAO,IAAI,GAAoB,CAAO,QAIjC,OAAM,CAAC,EAAyB,EAAiB,EAAkD,CACxG,OAAO,IAAI,EAAc,EAAM,EAAS,CAAO,EAEnD,CAGO,MAAM,WAAyB,CAAc,CAClD,WAAW,CAAC,EAAc,EAAmB,EAAqB,CAChE,MACE,eACA,gBAAgB,iBAChB,CAAE,OAAM,YAAW,aAAY,CACjC,EACA,KAAK,KAAO,mBAEhB,CAEO,MAAM,WAAyB,CAAc,CAClD,WAAW,EAAG,CACZ,MACE,eACA,kDACF,EACA,KAAK,KAAO,mBAEhB,CAEO,MAAM,WAA0B,CAAc,CACnD,WAAW,CAAC,EAAkB,EAAgB,EAAe,CAC3D,MACE,gBACA,QAAQ,yBAA6B,YAAmB,KACxD,CAAE,WAAU,SAAQ,OAAM,CAC5B,EACA,KAAK,KAAO,oBAEhB,CAEO,MAAM,WAAiD,CAAc,CAC1E,WAAW,CAAC,EAAkB,EAAyB,CACrD,MACE,2CACA,6CAA6C,wBAA+B,EAAc,KACxF,IACF,KACA,CAAE,WAAU,eAAc,CAC5B,EACA,KAAK,KAAO,2CAEhB,CAEO,MAAM,WAA0C,CAAc,CACnE,WAAW,CAAC,EAAgB,EAAyB,CACnD,MACE,mCACA,qCAAqC,wBAA6B,EAAc,KAC9E,IACF,KACA,CAAE,SAAQ,eAAc,CAC1B,EACA,KAAK,KAAO,oCAEhB,CAEO,MAAM,WAAiC,CAAc,CAC1D,WAAW,CAAC,EAAgB,EAAgB,CAC1C,MACE,wBACA,8BAA8B,OAAY,IAC1C,CAAE,SAAQ,QAAO,CACnB,EACA,KAAK,KAAO,2BAEhB,CAEO,MAAM,WAA8B,CAAc,CACvD,WAAW,CAAC,EAAgB,CAC1B,MAAM,oBAAqC,sBAAsB,IAAU,CACzE,QACF,CAAC,EACD,KAAK,KAAO,wBAEhB,CAEO,MAAM,WAA+B,CAAc,CACxD,WAAW,CAAC,EAAc,EAAgB,CACxC,MACE,sBACA,wBAAwB,OAAU,IAClC,CAAE,OAAM,QAAO,CACjB,EACA,KAAK,KAAO,yBAEhB,CAEO,MAAM,WAA4B,CAAc,CACrD,WAAW,CAAC,EAAiB,CAC3B,MAAM,kBAAmC,oBAAoB,IAAW,CAAE,SAAQ,CAAC,EACnF,KAAK,KAAO,sBAEhB,CCjPO,IAAM,GAA4B,EAC5B,GAA2B,cAC3B,GAAkC,qBAExC,SAAS,CAAkB,CAAC,EAA0C,CAE3E,GAAI,OAAO,EAAM,SAAW,SAC1B,MAAM,EAAc,aAClB,SACA,EAAM,OACN,kBACF,EAIF,GAAI,EAAM,OAAO,SAAW,EAC1B,MAAM,EAAc,aAAa,SAAU,EAAM,OAAQ,iBAAiB,EAE5E,GAAI,EAAM,OAAO,OAAS,IACxB,MAAM,EAAc,aAAa,SAAU,EAAM,OAAQ,+BAA+B,EAM1F,GAAI,0BAA0B,KAAK,EAAM,MAAM,EAC7C,MAAM,EAAc,aAClB,SACA,EAAM,OACN,oDACF,EAGF,IAAM,EAAO,KAAK,UAAU,CAC1B,GAAI,GACJ,IAAK,GACL,OAAQ,EAAM,OACd,YAAa,EAAM,WACrB,CAAC,EACD,OAAO,IAAI,YAAY,EAAE,OAAO,CAAI,EAG/B,SAAS,CAAwB,CACtC,EACY,CAEZ,GAAI,OAAO,EAAM,SAAW,SAC1B,MAAM,EAAc,aAClB,SACA,EAAM,OACN,kBACF,EAGF,GAAI,OAAO,EAAM,WAAa,SAC5B,MAAM,EAAc,aAClB,WACA,EAAM,SACN,kBACF,EAIF,GAAI,EAAM,OAAO,SAAW,EAC1B,MAAM,EAAc,aAAa,SAAU,EAAM,OAAQ,iBAAiB,EAE5E,GAAI,EAAM,OAAO,OAAS,IACxB,MAAM,EAAc,aAAa,SAAU,EAAM,OAAQ,+BAA+B,EAG1F,GAAI,EAAM,SAAS,SAAW,EAC5B,MAAM,EAAc,aAAa,WAAY,EAAM,SAAU,iBAAiB,EAEhF,GAAI,EAAM,SAAS,OAAS,IAC1B,MAAM,EAAc,aAAa,WAAY,EAAM,SAAU,+BAA+B,EAI9F,GAAI,0BAA0B,KAAK,EAAM,MAAM,GAAK,0BAA0B,KAAK,EAAM,QAAQ,EAC/F,MAAM,EAAc,aAAa,QAAS,sDAAuD,6BAA6B,EAGhI,IAAM,EAAO,KAAK,UAAU,CAC1B,GAAI,GACJ,IAAK,GACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,YAAa,EAAM,WACrB,CAAC,EACD,OAAO,IAAI,YAAY,EAAE,OAAO,CAAI,EAG/B,SAAS,EAAwB,CAAC,EAA4B,CACnE,OAAO,EAAmB,CAAE,SAAQ,YAAa,KAAK,IAAI,CAAE,CAAC,EAGxD,SAAS,EAAwB,CACtC,EACY,CAEZ,IAAM,EAAS,CAAC,eAAgB,kBAAmB,OAAO,EAC1D,QAAW,KAAS,EAAQ,CAC1B,IAAM,EAAQ,EAAM,GACpB,GAAI,OAAO,IAAU,SACnB,MAAM,EAAc,aAAa,EAAO,EAAO,kBAAkB,EAInE,GAAI,EAAM,SAAW,EACnB,MAAM,EAAc,aAAa,EAAO,EAAO,iBAAiB,EAElE,GAAI,EAAM,OAAS,IACjB,MAAM,EAAc,aAAa,EAAO,EAAO,+BAA+B,EAIhF,GAAI,0BAA0B,KAAK,CAAK,EACtC,MAAM,EAAc,aAAa,EAAO,EAAO,qDAAqD,EAIxG,IAAM,EAAO,KAAK,UAAU,CAC1B,aAAc,EAAM,aACpB,gBAAiB,EAAM,gBACvB,UAAW,EAAM,UACjB,MAAO,EAAM,KACf,CAAC,EACD,OAAO,IAAI,YAAY,EAAE,OAAO,CAAI,ECpI/B,IAAM,GAAyB,MACzB,EAA0B,IAE1B,GAAkB,EAClB,GAAkB,GAClB,GAAsB,EAGtB,GAAsB,aAEtB,GAAmB,CAC5B,OAAQ,QACZ,ECHO,IAAM,GAAS,eAEf,SAAS,EAAiB,CAAC,EAAoC,CACpE,IAAM,EAAO,GAAgB,CAAM,EACnC,GAAI,EAAK,KAAO,KAAM,GAAe,EAAK,GAAG,EAE7C,IAAM,EAAQ,CACZ,OAAO,EAAK,MACZ,MAAM,mBAAmB,EAAK,EAAE,IAChC,OAAO,mBAAmB,EAAK,GAAG,GACpC,EAGA,GAAI,EAAK,KAAO,MAAQ,EAAK,MAAQ,EAAK,IACxC,EAAM,KAAK,OAAO,mBAAmB,EAAK,GAAG,GAAG,EAGlD,GAAI,EAAK,GAAK,MAAQ,OAAO,KAAK,EAAK,CAAC,EAAE,OAAS,EAAG,CACpD,IAAM,EAAa,KAAK,UAAU,EAAK,CAAC,EACxC,GAAe,CAAU,EACzB,EAAM,KAAK,KAAK,mBAAmB,CAAU,GAAG,EAGlD,IAAM,EAAM,GAAS,EAAM,KAAK,GAAG,EAEnC,OADA,GAAU,CAAG,EACN,EAGF,SAAS,EAAiB,CAAC,EAAmC,CACnE,GAAI,CAAC,EAAM,WAAW,EAAM,EAC1B,MAAU,MAAM,4CAA4C,EAE9D,IAAM,EADI,EAAM,MAAM,GAAO,MAAM,EACnB,MAAM,GAAG,EAAE,OAAO,OAAO,EACnC,EAAM,IAAI,IAChB,QAAW,KAAQ,EAAO,CACxB,IAAO,EAAG,GAAQ,EAAK,MAAM,IAAK,CAAC,EACnC,GAAI,CAAC,EAAG,SACR,IAAM,EAAI,GAAQ,KAAO,mBAAmB,CAAI,EAAI,GACpD,EAAI,IAAI,EAAG,CAAC,EAEd,IAAM,EAAS,EAAI,IAAI,KAAK,EACtB,EAAK,EAAI,IAAI,IAAI,EACjB,EAAM,EAAI,IAAI,KAAK,EACnB,EAAM,EAAI,IAAI,KAAK,EACnB,EAAO,EAAI,IAAI,GAAG,EACxB,GAAI,GAAU,MAAQ,GAAM,MAAQ,GAAO,KACzC,MAAU,MAAM,wDAAwD,EAC1E,IAAM,EAAM,OAAO,CAAM,EACzB,GAAI,CAAC,OAAO,UAAU,CAAG,GAAK,GAAO,EACnC,MAAU,MAAM,4CAA4C,EAE9D,IAAI,EACJ,GAAI,GAAQ,MAAQ,IAAS,GAC3B,GAAI,CAEF,GADA,EAAI,KAAK,MAAM,CAAI,EACf,OAAO,IAAM,UAAY,IAAM,MAAQ,MAAM,QAAQ,CAAC,EACxD,MAAU,MAAM,uCAAuC,EAEzD,KAAM,CACN,MAAU,MAAM,oCAAoC,EAIxD,IAAM,EAAO,GAAgB,CAAE,IAAK,EAAU,KAAI,MAAK,MAAK,GAAE,CAAC,EAC/D,GAAI,EAAK,KAAO,KAAM,GAAe,EAAK,GAAG,EAC7C,GAAI,EAAK,KAAO,KAAM,GAAe,EAAK,GAAG,EAC7C,GAAI,EAAK,GAAK,KAAM,GAAe,KAAK,UAAU,EAAK,CAAC,CAAC,EAIzD,GAHoB,CAAC,GAAG,EAAI,KAAK,CAAC,EAAE,OAClC,CAAC,IAAM,IAAM,OAAS,IAAM,MAAQ,IAAM,OAAS,IAAM,OAAS,IAAM,GAC1E,EACgB,OAAS,EACvB,MAAU,MAAM,yCAAyC,EAE3D,OADA,GAAU,GAAkB,CAAI,CAAC,EAC1B,EAGF,SAAS,EAA0B,CACxC,EAC8C,CAC9C,GAAI,CAEF,OADA,GAAkB,CAAK,EAChB,CAAE,GAAI,EAAK,EAClB,MAAO,EAAY,CACnB,MAAO,CAAE,GAAI,GAAO,OAAQ,OAAO,CAAC,CAAE,GAI1C,SAAS,EAAe,CAAC,EAAgD,CACvE,IAAM,EAAK,EAAO,GAAG,UAAU,EAAsB,EAAE,KAAK,EACtD,EAA0B,CAAE,IAAK,EAAO,IAAK,KAAI,IAAK,EAAO,GAAI,EACvE,GAAI,EAAO,KAAO,KAChB,EAAI,IAAM,EAAO,IAAI,UAAU,EAAsB,EAAE,KAAK,EAC9D,GAAI,EAAO,KAAO,KAChB,EAAI,IAAM,EAAO,IAAI,UAAU,EAAsB,EAAE,KAAK,EAC9D,GAAI,EAAO,GAAK,KAEd,EAAI,EAAI,EAAO,EAEjB,OAAO,EAGT,SAAS,EAAS,CAAC,EAAiB,CAElC,GADc,IAAI,YAAY,EAAE,OAAO,CAAC,EAC9B,OAAS,EACjB,MAAU,MAAM,yBAAyB,SAA+B,EAG5E,SAAS,EAAc,CAAC,EAAqB,CAE3C,GADc,IAAI,YAAY,EAAE,OAAO,CAAK,EAClC,OAAS,EACjB,MAAU,MACR,+BAA+B,SACjC,ECtHa,IAAjB,uBAEO,MAAM,CAAe,CACN,OAApB,WAAW,CAAS,EAA8B,CAA9B,cAEpB,YAAY,CACV,EACA,EACA,EACY,CACZ,IAAM,EAAY,EAGZ,EAAU,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,CAAS,CAAC,EACxD,EAAS,EAAQ,OACjB,EAAc,EAAQ,YAIxB,EACJ,GAAI,CACF,EAAiB,WAAK,OAAO,CAAS,EACtC,KAAM,CACN,MAAM,EAAc,iBAAiB,iCAAiC,EAExE,IAAM,EAAS,GAAW,EAAgB,CAAS,EAE7C,EAAU,KAAK,IACnB,GACA,KAAK,IAAI,GAAiB,KAAK,OAAO,UAAU,CAClD,EACM,EAAa,EAAI,KAAK,KAAK,EAAU,CAAC,EACtC,EAAY,GAAa,EAAQ,CAAU,EAC3C,EAAO,GAAe,EAAW,CAAO,EAW9C,MAT+B,CAC7B,QACA,OACA,SACA,UAAW,EACX,UAAW,EAAc,KAAK,OAAO,MACrC,WACF,EAKF,YAAY,CAAC,EAA8B,CACzC,IAAM,EAAc,KAAK,IAAI,EAC7B,GAAI,EAAc,EAAW,WAAa,KAAK,OAAO,aAAe,GACnE,MAAM,EAAc,YAClB,EAAW,KACX,EAAW,UACX,CACF,EAGF,IAAM,EAAY,EAAmB,CACnC,OAAQ,EAAW,OACnB,YAAa,EAAW,SAC1B,CAAC,EAGD,GAAI,CAAC,EAAW,UACd,MAAM,EAAc,qBAAqB,WAAW,EAKtD,IAAI,EACJ,GAAI,CACF,EAAiB,WAAK,OAAO,EAAW,SAAS,EACjD,KAAM,CACN,MAAM,EAAc,iBAAiB,iCAAiC,EAExE,IAAM,EAAS,GAAW,EAAgB,CAAS,EAE7C,EAAU,KAAK,IACnB,GACA,KAAK,IAAI,GAAiB,KAAK,OAAO,UAAU,CAClD,EACM,EAAY,GAAa,EAAQ,EAAI,KAAK,KAAK,EAAU,CAAC,CAAC,EAGjE,GAFiB,GAAe,EAAW,CAAO,IAEjC,EAAW,KAC1B,MAAM,EAAc,YAAY,EAGtC,CC1F0B,IAA1B,8BACA,4BACA,uBASO,MAAM,EAAmB,CACtB,eACA,OAER,WAAW,CAAC,EAA8B,CACxC,KAAK,OAAS,EACd,KAAK,eAAiB,IAAI,EAAe,CAAM,EAMjD,qBAAqB,CACnB,EACA,EACA,EACA,EACqB,CAkBrB,OAhBA,KAAK,wBAAwB,CAAe,EAWK,IAPlC,KAAK,eAAe,aACjC,EACA,EACA,CACF,EAKE,gBAAiB,CACnB,EAQF,qBAAqB,CACnB,EACM,CAEN,IAAM,EAAc,KAAK,IAAI,EAC7B,GAAI,EAAc,EAAW,WAAa,KAAK,OAAO,aAAe,GACnE,MAAM,EAAc,YAClB,EAAW,KACX,EAAW,UACX,CACF,EAQF,GAJA,KAAK,wBAAwB,EAAW,eAAe,EAInD,EAAW,SAAW,EAAW,gBAAgB,gBACnD,MAAM,EAAc,aAClB,kBACA,EAAW,gBAAgB,gBAC3B,oDACF,EAKF,GAAI,EAAW,UAAY,EAAW,gBAAgB,UACpD,MAAM,EAAc,aAClB,YACA,EAAW,UACX,6DACF,EAIF,GAAI,CAAC,EAAW,gBAAgB,UAC9B,MAAM,EAAc,qBAAqB,2BAA2B,EAMtE,IAAM,EAAmB,EAAmB,CAC1C,OAAQ,EAAW,gBAAgB,gBACnC,YAAa,EAAW,SAC1B,CAAC,EAGG,EACJ,GAAI,CACF,EAAiB,WAAK,OAAO,EAAW,WAAa,EAAE,EACvD,KAAM,CACN,MAAM,EAAc,iBAClB,2CACF,EAIF,IAAM,EAAuB,WAAK,OAAO,EAAW,gBAAgB,eAAe,EAOnF,GAAI,CANqB,WAAK,KAAK,SAAS,OAC1C,EACA,EACA,CACF,EAGE,MAAM,EAAc,iBAClB,yCACF,EAOI,uBAAuB,CAAC,EAAwC,CAEtE,GACE,CAAC,EAAgB,cACjB,OAAO,EAAgB,eAAiB,SAExC,MAAM,EAAc,aAClB,eACA,EAAgB,aAChB,gDACF,EAEF,GAAI,CACF,IAAI,aAAU,EAAgB,YAAY,EAC1C,KAAM,CACN,MAAM,EAAc,aAClB,eACA,EAAgB,aAChB,8BACF,EAIF,GACE,CAAC,EAAgB,iBACjB,OAAO,EAAgB,kBAAoB,SAE3C,MAAM,EAAc,aAClB,kBACA,EAAgB,gBAChB,mDACF,EAEF,GAAI,CACF,IAAI,aAAU,EAAgB,eAAe,EAC7C,KAAM,CACN,MAAM,EAAc,aAClB,kBACA,EAAgB,gBAChB,iCACF,EAIF,GAAI,CAAC,EAAgB,OAAS,OAAO,EAAgB,QAAU,SAC7D,MAAM,EAAc,aAClB,QACA,EAAgB,MAChB,wCACF,EAEF,GACE,EAAgB,MAAM,SAAW,GACjC,EAAgB,MAAM,OAAS,GAE/B,MAAM,EAAc,aAClB,QACA,EAAgB,MAChB,2CACF,EAEF,GAAI,CAAC,eAAe,KAAK,EAAgB,KAAK,EAC5C,MAAM,EAAc,aAClB,QACA,EAAgB,MAChB,0FACF,EAIF,GACE,OAAO,EAAgB,YAAc,UACrC,CAAC,OAAO,UAAU,EAAgB,SAAS,EAE3C,MAAM,EAAc,aAClB,YACA,EAAgB,UAChB,mDACF,EAEF,GAAI,EAAgB,WAAa,EAC/B,MAAM,EAAc,aAClB,YACA,EAAgB,UAChB,kCACF,EAIF,IAAM,EAAM,KAAK,IAAI,EACf,EAAY,YAElB,GAAI,EAAgB,UAAY,EAAM,EACpC,MAAM,EAAc,aAClB,YACA,EAAgB,UAChB,0CACF,EAIF,GAAI,EAAgB,UAAY,EAC9B,MAAM,EAAc,YAClB,+BACA,EAAgB,UAChB,CACF,EAIF,GACE,CAAC,EAAgB,WACjB,OAAO,EAAgB,YAAc,SAErC,MAAM,EAAc,aAClB,YACA,EAAgB,UAChB,uDACF,EAEF,GACE,EAAgB,UAAU,SAAW,GACrC,EAAgB,UAAU,OAAS,IAEnC,MAAM,EAAc,aAClB,YACA,EAAgB,UAChB,2DACF,EAIN,CCxQiB,IAAjB,2BACA,sBACA,6BAUA,8BAmBO,IAAM,EAAqB,SAE3B,MAAM,UAAsB,EAAiB,CAE1C,eAAe,CAAC,EAAsC,CAC5D,GAAI,OAAO,IAAU,SACnB,OAAO,IAAI,YAAU,CAAK,EAE5B,OAAO,EAIT,gBAAgB,CAAC,EAAiC,CAEhD,GAAI,EAAW,QAAU,EAAoB,MAAO,GACpD,GAAI,CAAC,EAAW,QAAU,CAAC,EAAW,WAAa,CAAC,EAAW,UAC7D,MAAO,GAGT,GAAI,CACF,IAAM,EAAU,EAAmB,CACjC,OAAQ,EAAW,OACnB,YAAa,EAAW,SAC1B,CAAC,EACK,EAAM,KAAK,gBAAgB,EAAW,MAAM,EAC5C,EAAW,UAAK,OAAO,EAAW,SAAS,EAC3C,EAAW,EAAI,QAAQ,EAG7B,GAAI,EAAS,SAAW,IAAM,EAAS,SAAW,GAChD,MAAO,GAIT,OAAO,UAAK,KAAK,SAAS,OAAO,EAAS,EAAU,CAAQ,EAC5D,KAAM,CAEN,MAAO,IAKX,oBAAoB,CAAC,EAAmD,CAEtE,GAAI,EAAoB,QAAU,EAAoB,MAAO,GAC7D,GACE,CAAC,EAAoB,QACrB,CAAC,EAAoB,WACrB,CAAC,EAAoB,UAErB,MAAO,GAET,IAAM,EAAQ,EAAoB,gBAGlC,GACE,CAAC,EAAM,cACP,CAAC,EAAM,iBACP,CAAC,EAAM,OACP,CAAC,EAAM,WACP,CAAC,EAAM,UAEP,MAAO,GAIT,GAAI,EAAM,QAAU,EAClB,MAAO,GAIT,GAAI,EAAoB,SAAW,EAAM,gBAAiB,MAAO,GAGjE,GAAI,EAAM,UAAY,KAAK,IAAI,EAAG,MAAO,GAGzC,GAAI,CAEF,IAAM,EAAoB,GAAyB,CAAK,EAClD,EAAY,KAAK,gBAAgB,EAAM,YAAY,EACnD,EAAiB,UAAK,OAAO,EAAM,SAAS,EAC5C,EAAiB,EAAU,QAAQ,EAInC,EAAmB,EAAmB,CAC1C,OAAQ,EAAM,gBACd,YAAa,EAAoB,SACnC,CAAC,EACK,EAAe,KAAK,gBAAgB,EAAM,eAAe,EACzD,EAAoB,UAAK,OAAO,EAAoB,SAAS,EAC7D,EAAoB,EAAa,QAAQ,EAG/C,GAAI,EAAe,SAAW,IAAM,EAAe,SAAW,GAC5D,MAAO,GAET,GAAI,EAAkB,SAAW,IAAM,EAAkB,SAAW,GAClE,MAAO,GAKT,IAAM,EAAoB,UAAK,KAAK,SAAS,OAC3C,EACA,EACA,CACF,EAEM,EAAqB,UAAK,KAAK,SAAS,OAC5C,EACA,EACA,CACF,EAGA,OAAO,GAAqB,EAC5B,KAAM,CAEN,MAAO,IAKX,sBAAsB,CACpB,EACA,EACS,CAET,GAAI,EAAW,QAAU,EAAoB,MAAO,GACpD,GAAI,CAAC,EAAW,QAAU,CAAC,EAAW,WAAa,CAAC,EAClD,MAAO,GAGT,GAAI,CACF,IAAM,EAAU,EAAyB,CACvC,OAAQ,EAAW,OACnB,SAAU,EAAS,EAAW,IAAI,EAClC,YAAa,EAAW,SAC1B,CAAC,EACK,EAAM,KAAK,gBAAgB,EAAW,MAAM,EAC5C,EAAW,UAAK,OAAO,CAAe,EACtC,EAAW,EAAI,QAAQ,EAG7B,GAAI,EAAS,SAAW,IAAM,EAAS,SAAW,GAChD,MAAO,GAIT,OAAO,UAAK,KAAK,SAAS,OAAO,EAAS,EAAU,CAAQ,EAC5D,KAAM,CAEN,MAAO,IAIX,0BAA0B,CACxB,EACA,EACS,CAET,GAAI,EAAoB,QAAU,EAAoB,MAAO,GAC7D,GACE,CAAC,EAAoB,QACrB,CAAC,EAAoB,WACrB,CAAC,EAAoB,WACrB,CAAC,EAAoB,gBAErB,MAAO,GAET,IAAM,EAAQ,EAAoB,gBAGlC,GACE,CAAC,EAAM,cACP,CAAC,EAAM,iBACP,CAAC,EAAM,OACP,CAAC,EAAM,WACP,CAAC,EAAM,UAEP,MAAO,GAIT,GAAI,EAAM,QAAU,EAClB,MAAO,GAIT,GAAI,EAAoB,SAAW,EAAM,gBAAiB,MAAO,GAGjE,GAAI,EAAM,UAAY,KAAK,IAAI,EAAG,MAAO,GAGzC,GAAI,CACF,IAAM,EAAoB,GAAyB,CAAK,EAClD,EAAY,KAAK,gBAAgB,EAAM,YAAY,EACnD,EAAiB,UAAK,OAAO,EAAM,SAAS,EAC5C,EAAiB,EAAU,QAAQ,EAEnC,EAAgB,EAAyB,CAC7C,OAAQ,EAAM,gBACd,SAAU,EAAS,EAAoB,IAAI,EAC3C,YAAa,EAAoB,SACnC,CAAC,EACK,EAAe,KAAK,gBAAgB,EAAM,eAAe,EACzD,EAAoB,UAAK,OAAO,CAAe,EAC/C,EAAoB,EAAa,QAAQ,EAG/C,GAAI,EAAe,SAAW,IAAM,EAAe,SAAW,GAC5D,MAAO,GAET,GAAI,EAAkB,SAAW,IAAM,EAAkB,SAAW,GAClE,MAAO,GAKT,IAAM,EAAoB,UAAK,KAAK,SAAS,OAC3C,EACA,EACA,CACF,EAEM,EAAkB,UAAK,KAAK,SAAS,OACzC,EACA,EACA,CACF,EAGA,OAAO,GAAqB,EAC5B,KAAM,CAEN,MAAO,UAKJ,qBAAoB,CACzB,EACwB,CACxB,IAAM,EAAa,GAAkB,CAAI,EACzC,OAAO,wBAAsB,CAAU,EAIzC,eAAe,CAAC,EAAiC,CAC/C,GAAI,CACF,IAAM,EAAK,KAAK,uBAAuB,CAAQ,EAC/C,QAAW,KAAM,KAAK,oBAAoB,CAAE,EAAG,CAC7C,IAAM,EAAO,EAAG,KAChB,GAAI,CACF,IAAM,EAAI,IAAI,YAAY,EAAE,OAAO,CAAI,EAGvC,GADe,GAAkB,CAAC,EACtB,OAAO,EACnB,KAAM,GAIV,OAAO,KACP,KAAM,CACN,OAAO,MAKH,sBAAsB,CAAC,EAAqC,CAClE,GAAI,CAEF,IAAM,EAAc,uBAAqB,YACvC,OAAO,KAAK,EAAU,QAAQ,CAChC,EAGA,GAAI,EAAY,mBAAmB,YACjC,OAAO,EAIP,YAAO,cAAY,KAAK,OAAO,KAAK,EAAU,QAAQ,CAAC,EAEzD,KAAM,CACN,GAAI,CAEF,OAAO,cAAY,KAAK,OAAO,KAAK,EAAU,QAAQ,CAAC,EACvD,KAAM,CACN,MAAM,EAAc,yBAClB,mCACF,IAMN,SAAS,CAAC,EAA6C,CACrD,IAAM,EAAI,KAAK,gBAAgB,CAAQ,EACvC,GAAI,CAAC,EAAG,OAAO,KACf,OAAO,GAAkB,CAAC,EAIpB,mBAAmB,CAAC,EAAiD,CAC3E,GAAI,aAAc,cAChB,OAAO,EAAG,aAAa,OAAO,CAAC,IAC7B,EAAG,UAAU,OAAO,iBAAe,CACrC,EACK,KAGL,IAAM,EADM,EACI,QAChB,GAAI,aAAe,YAAW,CAC5B,IAAM,EAAkC,CAAC,EACzC,QAAW,KAAM,EAAI,qBAAsB,CACzC,IAAM,EAAM,EAAI,kBAAkB,EAAG,gBACrC,GAAI,GAAO,EAAI,OAAO,iBAAe,EAAG,CAEtC,IAAM,EAAO,EAAG,kBAAkB,IAAI,CAAC,KAAO,CAC5C,OAAQ,EAAI,kBAAkB,GAC9B,SAAU,GACV,WAAY,EACd,EAAE,EACF,EAAM,KACJ,IAAI,yBAAuB,CACzB,OACA,UAAW,EACX,KAAM,EAAG,IACX,CAAC,CACH,GAGJ,OAAO,EAET,MAAO,CAAC,GAQZ,4BAA4B,CAAC,EAAwB,EAAwB,CAE3E,IAAM,EAAc,KAAK,IAAI,EAC7B,GAAI,EAAc,EAAW,UAC3B,MAAM,EAAc,YAClB,EAAW,KACX,EAAW,UACX,CACF,EAGF,IAAM,EAAO,KAAK,UAAU,CAAQ,EACpC,GAAI,CAAC,EACH,MAAM,EAAc,YAAY,EAIlC,GAAI,EAAK,MAAQ,EACf,MAAM,EAAc,aAAa,IAAK,OAAO,EAAK,GAAG,EAAG,KAAK,EAI/D,IAAM,EAAmB,EAAS,EAAW,IAAI,EACjD,GAAI,EAAK,KAAO,EACd,MAAM,EAAc,aAAa,EAAkB,EAAK,GAAI,IAAI,EAIlE,GAAI,EAAK,MAAQ,EAAW,OAC1B,MAAM,EAAc,aAAa,EAAW,OAAQ,EAAK,IAAK,KAAK,EASvE,oCAAoC,CAAC,EAAwB,CAC3D,IAAM,EAAO,KAAK,UAAU,CAAQ,EACpC,GAAI,CAAC,EACH,MAAM,EAAc,YAAY,EAGlC,IAAsB,IAAhB,EACc,IAAd,GAAS,EACf,GAAI,CAAC,EACH,MAAM,EAAc,kBAClB,mCACF,EAGF,IAAI,EACA,EACJ,GAAI,CACF,EAAiB,IAAI,YAAU,CAAQ,EACvC,KAAM,CACN,MAAM,EAAc,oBAClB,EACA,2BACF,EAGF,GAAI,CACF,GAAI,EACF,EAAe,IAAI,YAAU,CAAM,EAErC,KAAM,CACN,MAAM,EAAc,oBAClB,GAAU,GACV,2BACF,EAGF,IAAM,EAAK,KAAK,uBAAuB,CAAQ,EACzC,EAA0B,CAAC,EAGjC,GAAI,aAAc,cAAa,CAC7B,IAAI,EAAqB,GACrB,EAAmB,GAcvB,GAZA,EAAG,WAAW,QAAQ,CAAC,IAAQ,CAC7B,GAAI,CAAC,EAAI,UAAW,OAGpB,GAFA,EAAc,KAAK,EAAI,UAAU,SAAS,CAAC,EAEvC,EAAI,UAAU,OAAO,CAAc,EACrC,EAAqB,GAEvB,GAAI,GAAU,EAAI,UAAU,OAAO,CAAa,EAC9C,EAAmB,GAEtB,EAEG,CAAC,EACH,MAAM,EAAc,oCAClB,EACA,CACF,EAGF,GAAI,GAAU,CAAC,EACb,MAAM,EAAc,6BAClB,EACA,CACF,EAEF,OAIF,GAAI,aAAc,uBAAsB,CACtC,IAAM,EAAM,EAAG,QACf,GAAI,aAAe,YAAW,CAC5B,IAAI,EAAqB,GACrB,EAAmB,GACjB,EAAc,EAAI,OAAO,sBAC/B,QAAS,EAAI,EAAG,EAAI,EAAa,IAAK,CACpC,IAAM,EAAM,EAAI,kBAAkB,GAClC,GAAI,EAAK,CAEP,GADA,EAAc,KAAK,EAAI,SAAS,CAAC,EAC7B,EAAI,OAAO,CAAc,EAC3B,EAAqB,GAEvB,GAAI,GAAU,EAAI,OAAO,CAAa,EACpC,EAAmB,IAIzB,GAAI,CAAC,EACH,MAAM,EAAc,oCAClB,EACA,CACF,EAEF,GAAI,GAAU,CAAC,EACb,MAAM,EAAc,6BAClB,EACA,CACF,EAEF,QAIJ,MAAM,EAAc,yBAClB,gCACF,EAGF,gCAAgC,CAC9B,EACA,EACA,EACM,CACN,GAAI,CACF,IAAM,EAAe,IAAI,YAAY,EAAE,OAAO,CAAO,EAC/C,EAAiB,UAAK,OAAO,CAAS,EAEtC,EADY,KAAK,gBAAgB,CAAM,EAClB,QAAQ,EAQnC,GAAI,CANY,UAAK,KAAK,SAAS,OACjC,EACA,EACA,CACF,EAGE,MAAM,EAAc,iBAAiB,+BAA+B,EAEtE,MAAO,EAAO,CACd,GACE,aAAiB,OACjB,EAAM,QAAQ,SAAS,+BAA+B,EAEtD,MAAM,EAER,MAAM,EAAc,iBAAiB,0BAA0B,eActD,mBAAkB,CAC7B,EACA,EACA,EACiB,CAIjB,GAFgB,IAAI,EAAc,EACL,gBAAgB,CAAQ,EAEnD,MAAM,EAAc,yBAClB,qFACF,EAGF,IAAM,EAAS,EAAc,qBAAqB,CAAI,EAEtD,GAAI,CAEF,IAAM,EAAc,uBAAqB,YACvC,OAAO,KAAK,EAAU,QAAQ,CAChC,EAGA,GAAI,EAAY,mBAAmB,YAAW,CAC5C,IAAM,EAAM,EAAY,QAGlB,EACJ,EAAI,qBAAuB,EAAI,oBAAoB,OAAS,EAIxD,EAAoB,EAAI,kBAAkB,OAC1C,EAA2B,EAAI,qBAAqB,KAAK,CAAC,IAC9D,EAAG,kBAAkB,KAAK,CAAC,IAAQ,GAAO,CAAiB,CAC7D,EAGA,GAAI,GAA0B,EAA0B,CACtD,GAAI,CAAC,EACH,MAAM,EAAc,yBAClB,sNACF,EAIF,IAAM,EAA0D,CAAC,EACjE,QAAW,KAAU,EAAI,oBACvB,GAAI,CACF,IAAM,EAAqB,MAAM,EAAW,sBAC1C,EAAO,UACT,EACA,GAAI,EAAmB,MACrB,EAA2B,KAAK,EAAmB,KAAK,EAE1D,MAAO,EAAO,CACd,MAAM,EAAc,yBAClB,0CAA0C,EAAO,WAAW,SAAS,MAAM,GAC7E,EAKJ,IAAM,EAAoB,qBAAmB,UAAU,EAAK,CAC1D,4BACF,CAAC,EAGD,EAAkB,aAAa,KAAK,CAAM,EAG1C,IAAM,EACJ,EAAkB,mBAAmB,CAA0B,EAG3D,EAAQ,IAAI,uBAAqB,CAAiB,EAIxD,OAFA,EAAM,WAAa,EAAY,WAExB,OAAO,KAAK,EAAM,UAAU,CAAC,EAAE,SAAS,QAAQ,EAClD,KAGL,IAAM,EAAgB,CAAC,GAAG,EAAI,iBAAiB,EAC/C,GAAI,CAAC,EAAc,KAAK,CAAC,IAAM,EAAE,OAAO,iBAAe,CAAC,EACtD,EAAc,KAAK,iBAAe,EASpC,IAAM,EAAa,CACjB,eANqB,EAAc,UAAU,CAAC,IAC9C,EAAE,OAAO,iBAAe,CAC1B,EAKE,kBAAmB,CAAC,EACpB,KAAM,EAAO,IACf,EAEM,EAAS,IAAI,YAAU,CAC3B,OAAQ,EAAI,OACZ,kBAAmB,EACnB,gBAAiB,EAAI,gBACrB,qBAAsB,CAAC,GAAG,EAAI,qBAAsB,CAAU,EAC9D,oBAAqB,EAAI,mBAC3B,CAAC,EAGK,EAAQ,IAAI,uBAAqB,CAAM,EAI7C,OAFA,EAAM,WAAa,EAAY,WAExB,OAAO,KAAK,EAAM,UAAU,CAAC,EAAE,SAAS,QAAQ,GAEpD,KAGL,IAAM,EAAW,cAAY,KAAK,OAAO,KAAK,EAAU,QAAQ,CAAC,EAKjE,OAFA,EAAS,IAAI,CAAM,EAEZ,OAAO,KACZ,EAAS,UAAU,CAAE,qBAAsB,EAAM,CAAC,CACpD,EAAE,SAAS,QAAQ,GAErB,MAAO,EAAO,CAEd,GAAI,aAAiB,EACnB,MAAM,EAGR,GAAI,CAEF,IAAM,EAAW,cAAY,KAAK,OAAO,KAAK,EAAU,QAAQ,CAAC,EAKjE,OAFA,EAAS,IAAI,CAAM,EAEZ,OAAO,KACZ,EAAS,UAAU,CAAE,qBAAsB,EAAM,CAAC,CACpD,EAAE,SAAS,QAAQ,EACnB,KAAM,CACN,MAAM,EAAc,yBAClB,sCAAsC,GACxC,IAIR,CCzrBO,MAAM,EAAoB,CAKF,OAJrB,SAAyC,CAAC,EAC1C,gBACA,oBAER,WAAW,CAAkB,EAA8B,CAA9B,cAE3B,KAAK,SAAS,OAAS,IAAI,EAG3B,KAAK,gBAAkB,IAAI,EAAe,CAAM,EAChD,KAAK,oBAAsB,IAAI,GAAmB,CAAM,EAGnD,SAAS,EAAyB,CACvC,OAAO,KAAK,OAId,eAAe,CAAC,EAAe,EAA6B,CAC1D,KAAK,SAAS,GAAS,EAIzB,UAAU,CAAC,EAAyC,CAClD,OAAO,KAAK,SAAS,MAInB,QAAO,EAAG,CACZ,MAAO,CACL,OAAQ,KAAK,SAAS,MACxB,KAIE,eAAc,EAAG,CACnB,OAAO,KAAK,mBAGV,mBAAkB,EAAG,CACvB,OAAO,KAAK,yBAgBR,SAAQ,CACZ,EACA,EACA,EACA,EAC2C,CAC3C,GAAI,CAAC,GAAS,CAAC,GAAiB,GAC9B,MAAM,EAAc,eAAe,CAAK,EAG1C,GAAI,CAAC,GAAU,OAAO,IAAW,WAC/B,MAAM,EAAc,iBAAiB,4BAA4B,EAGnE,GAAI,IAAa,SAAU,CACzB,IAAM,EAAY,GAAyB,CAAuB,EAG5D,EAAY,MAAM,EAAO,EAAW,CAAK,EAG/C,GAAI,CAAC,EACH,MAAM,EAAc,iBAClB,0CACF,EAEF,OAAO,KAAK,eAAe,aAAa,EAAW,EAAO,CAAS,EAC9D,KACL,IAAM,EAAQ,EACR,EAAY,GAAyB,EAAM,eAAe,EAC1D,EAAY,MAAM,EAAO,EAAW,CAAK,EAG/C,GAAI,CAAC,EACH,MAAM,EAAc,iBAAiB,6BAA6B,EAEpE,OAAO,KAAK,mBAAmB,sBAC7B,EACA,EACA,EACA,CACF,QAgBE,OAAM,CACV,EACA,EACA,EACA,EACuD,CACvD,GAAI,CAAC,GAAS,CAAC,GAAiB,GAC9B,MAAM,EAAc,eAAe,CAAK,EAG1C,GAAI,CAAC,GAAU,OAAO,IAAW,WAC/B,MAAM,EAAc,iBAAiB,4BAA4B,EAGnE,GAAI,IAAa,SAAU,CACzB,IAAM,EAAY,EAAyB,CACzC,SAAU,EAAS,EAAW,IAAI,EAClC,OAAQ,EAAW,OACnB,YAAa,EAAW,SAC1B,CAAC,EAGK,EAAY,MAAM,EAAO,EAAW,CAAK,EAG/C,GAAI,CAAC,EACH,MAAM,EAAc,iBAClB,0CACF,EAGF,MAAO,IACF,EACH,gBAAiB,CACnB,EACK,KACL,IAAM,EAAsB,EACtB,EAAY,EAAyB,CACzC,SAAU,EAAS,EAAW,IAAI,EAClC,OAAQ,EAAoB,gBAAgB,gBAC5C,YAAa,EAAW,SAC1B,CAAC,EACK,EAAY,MAAM,EAAO,EAAW,CAAK,EAG/C,GAAI,CAAC,EACH,MAAM,EAAc,iBAAiB,6BAA6B,EAGpE,MAAO,IACF,EACH,gBAAiB,CACnB,GAOJ,QAAQ,CACN,EACA,EACM,CACN,GAAI,IAAa,SAAU,CAEzB,KAAK,eAAe,aAAa,CAAwB,EAEzD,IAAM,EAAU,KAAK,WAAW,EAAW,KAAK,EAChD,GAAI,CAAC,EAAS,MAAM,EAAc,eAAe,EAAW,KAAK,EAIjE,GAAI,CAFO,EAAQ,iBAAiB,CAAU,EAG5C,MAAM,EAAc,iBAClB,sCACF,EAEG,KACL,KAAK,mBAAmB,sBACtB,CACF,EAGA,IAAM,EAAU,KAAK,WAAW,EAAW,KAAK,EAChD,GAAI,CAAC,EAAS,MAAM,EAAc,eAAe,EAAW,KAAK,EAMjE,GAAI,CAJO,EAAQ,qBACjB,CACF,EAGE,MAAM,EAAc,iBAClB,0CACF,GAIR",
|
|
23
|
+
"debugId": "6915C04B98BCC01C64756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
class w8{}/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function w0(Q){return Q instanceof Uint8Array||ArrayBuffer.isView(Q)&&Q.constructor.name==="Uint8Array"}function U8(Q,$=""){if(!Number.isSafeInteger(Q)||Q<0){let q=$&&`"${$}" `;throw Error(`${q}expected integer >= 0, got ${Q}`)}}function H(Q,$,q=""){let Z=w0(Q),Y=Q?.length,J=$!==void 0;if(!Z||J&&Y!==$){let U=q&&`"${q}" `,K=J?` of length ${$}`:"",j=Z?`length=${Y}`:`type=${typeof Q}`;throw Error(U+"expected Uint8Array"+K+", got "+j)}return Q}function r(Q){if(typeof Q!=="function"||typeof Q.create!=="function")throw Error("Hash must wrapped by utils.createHasher");U8(Q.outputLen),U8(Q.blockLen)}function c(Q,$=!0){if(Q.destroyed)throw Error("Hash instance has been destroyed");if($&&Q.finished)throw Error("Hash#digest() has already been called")}function p8(Q,$){H(Q,void 0,"digestInto() output");let q=$.outputLen;if(Q.length<q)throw Error('"digestInto() output" expected to be of length >='+q)}function V(...Q){for(let $=0;$<Q.length;$++)Q[$].fill(0)}function z8(Q){return new DataView(Q.buffer,Q.byteOffset,Q.byteLength)}function k(Q,$){return Q<<32-$|Q>>>$}function A8(Q,$={}){let q=(Y,J)=>Q(J).update(Y).digest(),Z=Q(void 0);return q.outputLen=Z.outputLen,q.blockLen=Z.blockLen,q.create=(Y)=>Q(Y),Object.assign(q,$),Object.freeze(q)}var u8=(Q)=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,Q])});function g8(Q,$,q){return Q&$^~Q&q}function h8(Q,$,q){return Q&$^Q&q^$&q}class K8{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(Q,$,q,Z){this.blockLen=Q,this.outputLen=$,this.padOffset=q,this.isLE=Z,this.buffer=new Uint8Array(Q),this.view=z8(this.buffer)}update(Q){c(this),H(Q);let{view:$,buffer:q,blockLen:Z}=this,Y=Q.length;for(let J=0;J<Y;){let U=Math.min(Z-this.pos,Y-J);if(U===Z){let K=z8(Q);for(;Z<=Y-J;J+=Z)this.process(K,J);continue}if(q.set(Q.subarray(J,J+U),this.pos),this.pos+=U,J+=U,this.pos===Z)this.process($,0),this.pos=0}return this.length+=Q.length,this.roundClean(),this}digestInto(Q){c(this),p8(Q,this),this.finished=!0;let{buffer:$,view:q,blockLen:Z,isLE:Y}=this,{pos:J}=this;if($[J++]=128,V(this.buffer.subarray(J)),this.padOffset>Z-J)this.process(q,0),J=0;for(let z=J;z<Z;z++)$[z]=0;q.setBigUint64(Z-8,BigInt(this.length*8),Y),this.process(q,0);let U=z8(Q),K=this.outputLen;if(K%4)throw Error("_sha2: outputLen must be aligned to 32bit");let j=K/4,G=this.get();if(j>G.length)throw Error("_sha2: outputLen bigger than state");for(let z=0;z<j;z++)U.setUint32(4*z,G[z],Y)}digest(){let{buffer:Q,outputLen:$}=this;this.digestInto(Q);let q=Q.slice(0,$);return this.destroy(),q}_cloneInto(Q){Q||=new this.constructor,Q.set(...this.get());let{blockLen:$,buffer:q,length:Z,finished:Y,destroyed:J,pos:U}=this;if(Q.destroyed=J,Q.finished=Y,Q.length=Z,Q.pos=U,Z%$)Q.buffer.set(q);return Q}clone(){return this._cloneInto()}}var b=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),B=Uint32Array.from([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]),F=Uint32Array.from([3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]),w=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var j8=BigInt(4294967295),c8=BigInt(32);function x0(Q,$=!1){if($)return{h:Number(Q&j8),l:Number(Q>>c8&j8)};return{h:Number(Q>>c8&j8)|0,l:Number(Q&j8)|0}}function d8(Q,$=!1){let q=Q.length,Z=new Uint32Array(q),Y=new Uint32Array(q);for(let J=0;J<q;J++){let{h:U,l:K}=x0(Q[J],$);[Z[J],Y[J]]=[U,K]}return[Z,Y]}var x8=(Q,$,q)=>Q>>>q,L8=(Q,$,q)=>Q<<32-q|$>>>q,A=(Q,$,q)=>Q>>>q|$<<32-q,u=(Q,$,q)=>Q<<32-q|$>>>q,a=(Q,$,q)=>Q<<64-q|$>>>q-32,t=(Q,$,q)=>Q>>>q-32|$<<64-q;function T(Q,$,q,Z){let Y=($>>>0)+(Z>>>0);return{h:Q+q+(Y/4294967296|0)|0,l:Y|0}}var l8=(Q,$,q)=>(Q>>>0)+($>>>0)+(q>>>0),n8=(Q,$,q,Z)=>$+q+Z+(Q/4294967296|0)|0,s8=(Q,$,q,Z)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0),i8=(Q,$,q,Z,Y)=>$+q+Z+Y+(Q/4294967296|0)|0,r8=(Q,$,q,Z,Y)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0)+(Y>>>0),a8=(Q,$,q,Z,Y,J)=>$+q+Z+Y+J+(Q/4294967296|0)|0;var M0=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),P=new Uint32Array(64);class M8 extends K8{constructor(Q){super(64,Q,8,!1)}get(){let{A:Q,B:$,C:q,D:Z,E:Y,F:J,G:U,H:K}=this;return[Q,$,q,Z,Y,J,U,K]}set(Q,$,q,Z,Y,J,U,K){this.A=Q|0,this.B=$|0,this.C=q|0,this.D=Z|0,this.E=Y|0,this.F=J|0,this.G=U|0,this.H=K|0}process(Q,$){for(let z=0;z<16;z++,$+=4)P[z]=Q.getUint32($,!1);for(let z=16;z<64;z++){let N=P[z-15],R=P[z-2],W=k(N,7)^k(N,18)^N>>>3,O=k(R,17)^k(R,19)^R>>>10;P[z]=O+P[z-7]+W+P[z-16]|0}let{A:q,B:Z,C:Y,D:J,E:U,F:K,G:j,H:G}=this;for(let z=0;z<64;z++){let N=k(U,6)^k(U,11)^k(U,25),R=G+N+g8(U,K,j)+M0[z]+P[z]|0,O=(k(q,2)^k(q,13)^k(q,22))+h8(q,Z,Y)|0;G=j,j=K,K=U,U=J+R|0,J=Y,Y=Z,Z=q,q=R+O|0}q=q+this.A|0,Z=Z+this.B|0,Y=Y+this.C|0,J=J+this.D|0,U=U+this.E|0,K=K+this.F|0,j=j+this.G|0,G=G+this.H|0,this.set(q,Z,Y,J,U,K,j,G)}roundClean(){V(P)}destroy(){this.set(0,0,0,0,0,0,0,0),V(this.buffer)}}class t8 extends M8{A=b[0]|0;B=b[1]|0;C=b[2]|0;D=b[3]|0;E=b[4]|0;F=b[5]|0;G=b[6]|0;H=b[7]|0;constructor(){super(32)}}class V0 extends M8{A=B[0]|0;B=B[1]|0;C=B[2]|0;D=B[3]|0;E=B[4]|0;F=B[5]|0;G=B[6]|0;H=B[7]|0;constructor(){super(28)}}var e8=(()=>d8(["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((Q)=>BigInt(Q))))(),k0=(()=>e8[0])(),T0=(()=>e8[1])(),_=new Uint32Array(80),S=new Uint32Array(80);class e extends K8{constructor(Q){super(128,Q,16,!1)}get(){let{Ah:Q,Al:$,Bh:q,Bl:Z,Ch:Y,Cl:J,Dh:U,Dl:K,Eh:j,El:G,Fh:z,Fl:N,Gh:R,Gl:W,Hh:O,Hl:M}=this;return[Q,$,q,Z,Y,J,U,K,j,G,z,N,R,W,O,M]}set(Q,$,q,Z,Y,J,U,K,j,G,z,N,R,W,O,M){this.Ah=Q|0,this.Al=$|0,this.Bh=q|0,this.Bl=Z|0,this.Ch=Y|0,this.Cl=J|0,this.Dh=U|0,this.Dl=K|0,this.Eh=j|0,this.El=G|0,this.Fh=z|0,this.Fl=N|0,this.Gh=R|0,this.Gl=W|0,this.Hh=O|0,this.Hl=M|0}process(Q,$){for(let D=0;D<16;D++,$+=4)_[D]=Q.getUint32($),S[D]=Q.getUint32($+=4);for(let D=16;D<80;D++){let y=_[D-15]|0,E=S[D-15]|0,D8=A(y,E,1)^A(y,E,8)^x8(y,E,7),v8=u(y,E,1)^u(y,E,8)^L8(y,E,7),I=_[D-2]|0,m=S[D-2]|0,J8=A(I,m,19)^a(I,m,61)^x8(I,m,6),O8=u(I,m,19)^t(I,m,61)^L8(I,m,6),X8=s8(v8,O8,S[D-7],S[D-16]),F8=i8(X8,D8,J8,_[D-7],_[D-16]);_[D]=F8|0,S[D]=X8|0}let{Ah:q,Al:Z,Bh:Y,Bl:J,Ch:U,Cl:K,Dh:j,Dl:G,Eh:z,El:N,Fh:R,Fl:W,Gh:O,Gl:M,Hh:p,Hl:v}=this;for(let D=0;D<80;D++){let y=A(z,N,14)^A(z,N,18)^a(z,N,41),E=u(z,N,14)^u(z,N,18)^t(z,N,41),D8=z&R^~z&O,v8=N&W^~N&M,I=r8(v,E,v8,T0[D],S[D]),m=a8(I,p,y,D8,k0[D],_[D]),J8=I|0,O8=A(q,Z,28)^a(q,Z,34)^a(q,Z,39),X8=u(q,Z,28)^t(q,Z,34)^t(q,Z,39),F8=q&Y^q&U^Y&U,F0=Z&J^Z&K^J&K;p=O|0,v=M|0,O=R|0,M=W|0,R=z|0,W=N|0,{h:z,l:N}=T(j|0,G|0,m|0,J8|0),j=U|0,G=K|0,U=Y|0,K=J|0,Y=q|0,J=Z|0;let C8=l8(J8,X8,F0);q=n8(C8,m,O8,F8),Z=C8|0}({h:q,l:Z}=T(this.Ah|0,this.Al|0,q|0,Z|0)),{h:Y,l:J}=T(this.Bh|0,this.Bl|0,Y|0,J|0),{h:U,l:K}=T(this.Ch|0,this.Cl|0,U|0,K|0),{h:j,l:G}=T(this.Dh|0,this.Dl|0,j|0,G|0),{h:z,l:N}=T(this.Eh|0,this.El|0,z|0,N|0),{h:R,l:W}=T(this.Fh|0,this.Fl|0,R|0,W|0),{h:O,l:M}=T(this.Gh|0,this.Gl|0,O|0,M|0),{h:p,l:v}=T(this.Hh|0,this.Hl|0,p|0,v|0),this.set(q,Z,Y,J,U,K,j,G,z,N,R,W,O,M,p,v)}roundClean(){V(_,S)}destroy(){V(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class I0 extends e{Ah=w[0]|0;Al=w[1]|0;Bh=w[2]|0;Bl=w[3]|0;Ch=w[4]|0;Cl=w[5]|0;Dh=w[6]|0;Dl=w[7]|0;Eh=w[8]|0;El=w[9]|0;Fh=w[10]|0;Fl=w[11]|0;Gh=w[12]|0;Gl=w[13]|0;Hh=w[14]|0;Hl=w[15]|0;constructor(){super(64)}}class m0 extends e{Ah=F[0]|0;Al=F[1]|0;Bh=F[2]|0;Bl=F[3]|0;Ch=F[4]|0;Cl=F[5]|0;Dh=F[6]|0;Dl=F[7]|0;Eh=F[8]|0;El=F[9]|0;Fh=F[10]|0;Fl=F[11]|0;Gh=F[12]|0;Gl=F[13]|0;Hh=F[14]|0;Hl=F[15]|0;constructor(){super(48)}}var x=Uint32Array.from([2352822216,424955298,1944164710,2312950998,502970286,855612546,1738396948,1479516111,258812777,2077511080,2011393907,79989058,1067287976,1780299464,286451373,2446758561]),L=Uint32Array.from([573645204,4230739756,2673172387,3360449730,596883563,1867755857,2520282905,1497426621,2519219938,2827943907,3193839141,1401305490,721525244,746961066,246885852,2177182882]);class b0 extends e{Ah=x[0]|0;Al=x[1]|0;Bh=x[2]|0;Bl=x[3]|0;Ch=x[4]|0;Cl=x[5]|0;Dh=x[6]|0;Dl=x[7]|0;Eh=x[8]|0;El=x[9]|0;Fh=x[10]|0;Fl=x[11]|0;Gh=x[12]|0;Gl=x[13]|0;Hh=x[14]|0;Hl=x[15]|0;constructor(){super(28)}}class B0 extends e{Ah=L[0]|0;Al=L[1]|0;Bh=L[2]|0;Bl=L[3]|0;Ch=L[4]|0;Cl=L[5]|0;Dh=L[6]|0;Dl=L[7]|0;Eh=L[8]|0;El=L[9]|0;Fh=L[10]|0;Fl=L[11]|0;Gh=L[12]|0;Gl=L[13]|0;Hh=L[14]|0;Hl=L[15]|0;constructor(){super(32)}}var G8=A8(()=>new t8,u8(1));class V8{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(Q,$){if(r(Q),H($,void 0,"key"),this.iHash=Q.create(),typeof this.iHash.update!=="function")throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let q=this.blockLen,Z=new Uint8Array(q);Z.set($.length>q?Q.create().update($).digest():$);for(let Y=0;Y<Z.length;Y++)Z[Y]^=54;this.iHash.update(Z),this.oHash=Q.create();for(let Y=0;Y<Z.length;Y++)Z[Y]^=106;this.oHash.update(Z),V(Z)}update(Q){return c(this),this.iHash.update(Q),this}digestInto(Q){c(this),H(Q,this.outputLen,"output"),this.finished=!0,this.iHash.digestInto(Q),this.oHash.update(Q),this.oHash.digestInto(Q),this.destroy()}digest(){let Q=new Uint8Array(this.oHash.outputLen);return this.digestInto(Q),Q}_cloneInto(Q){Q||=Object.create(Object.getPrototypeOf(this),{});let{oHash:$,iHash:q,finished:Z,destroyed:Y,blockLen:J,outputLen:U}=this;return Q=Q,Q.finished=Z,Q.destroyed=Y,Q.blockLen=J,Q.outputLen=U,Q.oHash=$._cloneInto(Q.oHash),Q.iHash=q._cloneInto(Q.iHash),Q}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}var d=(Q,$,q)=>new V8(Q,$).update(q).digest();d.create=(Q,$)=>new V8(Q,$);function y0(Q,$,q){if(r(Q),q===void 0)q=new Uint8Array(Q.outputLen);return d(Q,q,$)}var k8=Uint8Array.of(0),o8=Uint8Array.of();function E0(Q,$,q,Z=32){r(Q),U8(Z,"length");let Y=Q.outputLen;if(Z>255*Y)throw Error("Length must be <= 255*HashLen");let J=Math.ceil(Z/Y);if(q===void 0)q=o8;else H(q,void 0,"info");let U=new Uint8Array(J*Y),K=d.create(Q,$),j=K._cloneInto(),G=new Uint8Array(K.outputLen);for(let z=0;z<J;z++)k8[0]=z+1,j.update(z===0?o8:G).update(q).update(k8).digestInto(G),U.set(G,Y*z),K._cloneInto(j);return K.destroy(),j.destroy(),V(G,k8),U.slice(0,Z)}var Q0=(Q,$,q,Z,Y)=>E0(Q,y0(Q,$,q),Z,Y);function l(Q){if(typeof Q==="string")return new TextEncoder().encode(Q);return Q}function H0(Q){return G8(l(Q))}function T8(Q,$){return d(G8,l(Q),l($))}function QQ(Q,$,{salt:q,info:Z}={}){let Y=q?l(q):new Uint8Array(32),J=l(Q),U=Z?l(Z):new Uint8Array(0);return Q0(G8,J,Y,U,$)}var $0="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function $Q(Q){let $=0,q=0,Z="";for(let Y=0;Y<Q.length;Y++){q=q<<8|Q[Y],$+=8;while($>=5)Z+=$0[q>>>$-5&31],$-=5}if($>0)Z+=$0[q<<5-$&31];return Z}function I8(Q,$){let q=Math.ceil($/8),Z=new Uint8Array(q),Y=Math.min(q,Q.length);Z.set(Q.subarray(0,Y));let J=q*8-$;if(J>0){let U=255<<J;Z[q-1]=Z[q-1]&U}return Z}function m8(Q,$){if(Q.length===0)throw Error("digestToDigits: empty digest");let q="",Z=Q[Q.length-1]&15;for(let Y=0;q.length<$;Y++){let J=(Z+Y*4)%Math.max(1,Q.length-4),j=(((Q[J]&127)<<24|Q[J+1]<<16|Q[J+2]<<8|Q[J+3])%1e9).toString().padStart(9,"0");q+=j}return q.slice(0,$)}function g(Q){let $=H0(Q);return Array.from($).map((q)=>q.toString(16).padStart(2,"0")).join("")}var P0;((v)=>{v.EXPIRED_CODE="EXPIRED_CODE";v.INVALID_CODE="INVALID_CODE";v.INVALID_CODE_FORMAT="INVALID_CODE_FORMAT";v.INVALID_SIGNATURE="INVALID_SIGNATURE";v.MISSING_META="MISSING_META";v.INVALID_META_FORMAT="INVALID_META_FORMAT";v.META_MISMATCH="META_MISMATCH";v.META_TOO_LARGE="META_TOO_LARGE";v.TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER="TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER";v.TRANSACTION_NOT_SIGNED_BY_ISSUER="TRANSACTION_NOT_SIGNED_BY_ISSUER";v.INVALID_TRANSACTION_FORMAT="INVALID_TRANSACTION_FORMAT";v.INVALID_PUBKEY_FORMAT="INVALID_PUBKEY_FORMAT";v.INVALID_INPUT="INVALID_INPUT";v.MISSING_REQUIRED_FIELD="MISSING_REQUIRED_FIELD";v.CRYPTO_ERROR="CRYPTO_ERROR";v.INVALID_DIGEST="INVALID_DIGEST";v.INVALID_ADAPTER="INVALID_ADAPTER"})(P0||={});class X extends Error{code;details;constructor(Q,$,q){super($);this.code=Q;this.details=q;this.name="ProtocolError"}static expiredCode(Q,$,q){return new q0(Q,$,q)}static invalidCode(){return new X("INVALID_CODE","Invalid code provided",{})}static invalidCodeFormat(Q,$){return new K0(Q,$)}static invalidSignature(Q){return new z0(Q)}static missingMeta(){return new Z0}static invalidMetaFormat(Q){return new X("INVALID_META_FORMAT",`Invalid protocol meta format: ${Q}`,{reason:Q})}static metaMismatch(Q,$,q){return new Y0(Q,$,q)}static metaTooLarge(Q,$){return new X("META_TOO_LARGE",`Protocol meta too large: ${$} bytes (max: ${Q})`,{maxBytes:Q,actualBytes:$})}static transactionNotSignedByIntendedOwner(Q,$){return new J0(Q,$)}static transactionNotSignedByIssuer(Q,$){return new X0(Q,$)}static invalidTransactionFormat(Q){return new X("INVALID_TRANSACTION_FORMAT",`Invalid transaction format: ${Q}`,{reason:Q})}static invalidPubkeyFormat(Q,$){return new U0(Q,$)}static invalidInput(Q,$,q){return new X("INVALID_INPUT",`Invalid ${Q}: ${q}`,{field:Q,value:$,reason:q})}static missingRequiredField(Q){return new X("MISSING_REQUIRED_FIELD",`Missing required field: ${Q}`,{field:Q})}static cryptoError(Q,$){return new X("CRYPTO_ERROR",`Crypto error in ${Q}: ${$}`,{operation:Q,reason:$})}static invalidDigest(Q){return new X("INVALID_DIGEST",`Invalid digest: ${Q}`,{reason:Q})}static invalidAdapter(Q){return new j0(Q)}static create(Q,$,q){return new X(Q,$,q)}}class q0 extends X{constructor(Q,$,q){super("EXPIRED_CODE",`Action code '${Q}' has expired`,{code:Q,expiresAt:$,currentTime:q});this.name="ExpiredCodeError"}}class Z0 extends X{constructor(){super("MISSING_META","Transaction does not contain valid protocol meta");this.name="MissingMetaError"}}class Y0 extends X{constructor(Q,$,q){super("META_MISMATCH",`Meta ${q} mismatch: expected '${Q}', got '${$}'`,{expected:Q,actual:$,field:q});this.name="MetaMismatchError"}}class J0 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER",`Transaction not signed by intended owner '${Q}'. Actual signers: [${$.join(", ")}]`,{intended:Q,actualSigners:$});this.name="TransactionNotSignedByIntendedOwnerError"}}class X0 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_ISSUER",`Transaction not signed by issuer '${Q}'. Actual signers: [${$.join(", ")}]`,{issuer:Q,actualSigners:$});this.name="TransactionNotSignedByIssuerError"}}class U0 extends X{constructor(Q,$){super("INVALID_PUBKEY_FORMAT",`Invalid public key format '${Q}': ${$}`,{pubkey:Q,reason:$});this.name="InvalidPubkeyFormatError"}}class z0 extends X{constructor(Q){super("INVALID_SIGNATURE",`Invalid signature: ${Q}`,{reason:Q});this.name="InvalidSignatureError"}}class K0 extends X{constructor(Q,$){super("INVALID_CODE_FORMAT",`Invalid code format '${Q}': ${$}`,{code:Q,reason:$});this.name="InvalidCodeFormatError"}}class j0 extends X{constructor(Q){super("INVALID_ADAPTER",`Invalid adapter: ${Q}`,{adapter:Q});this.name="InvalidAdapterError"}}var G0=1,_0="actioncodes",S0="actioncodes-revoke";function f(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey))throw X.invalidInput("pubkey",Q.pubkey,"contains invalid characters for public key or JSON");let $=JSON.stringify({id:_0,ver:G0,pubkey:Q.pubkey,windowStart:Q.windowStart});return new TextEncoder().encode($)}function n(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(typeof Q.codeHash!=="string")throw X.invalidInput("codeHash",Q.codeHash,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(Q.codeHash.length===0)throw X.invalidInput("codeHash",Q.codeHash,"cannot be empty");if(Q.codeHash.length>100)throw X.invalidInput("codeHash",Q.codeHash,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey)||/["\\\x00-\x1f\x7f-\x9f]/.test(Q.codeHash))throw X.invalidInput("input","contains invalid characters for identifiers or JSON","contains invalid characters");let $=JSON.stringify({id:S0,ver:G0,pubkey:Q.pubkey,codeHash:Q.codeHash,windowStart:Q.windowStart});return new TextEncoder().encode($)}function b8(Q){return f({pubkey:Q,windowStart:Date.now()})}function B8(Q){let $=["walletPubkey","delegatedPubkey","chain"];for(let Z of $){let Y=Q[Z];if(typeof Y!=="string")throw X.invalidInput(Z,Y,"must be a string");if(Y.length===0)throw X.invalidInput(Z,Y,"cannot be empty");if(Y.length>100)throw X.invalidInput(Z,Y,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Y))throw X.invalidInput(Z,Y,"contains invalid characters for identifiers or JSON")}let q=JSON.stringify({walletPubkey:Q.walletPubkey,delegatedPubkey:Q.delegatedPubkey,expiresAt:Q.expiresAt,chain:Q.chain});return new TextEncoder().encode(q)}var N8="NFC",o=512,y8=6,E8=24,XQ=8,UQ="0123456789",H8={solana:"solana"};var P8="actioncodes:";function _8(Q){let $=N0(Q);if($.int!=null)Q8($.int);let q=[`ver=${$.ver}`,`id=${encodeURIComponent($.id)}`,`int=${encodeURIComponent($.int)}`];if($.iss!=null&&$.iss!==$.int)q.push(`iss=${encodeURIComponent($.iss)}`);if($.p!=null&&Object.keys($.p).length>0){let Y=JSON.stringify($.p);Q8(Y),q.push(`p=${encodeURIComponent(Y)}`)}let Z=P8+q.join("&");return R0(Z),Z}function R8(Q){if(!Q.startsWith(P8))throw Error("protocol meta must start with actioncodes:");let q=Q.slice(P8.length).split("&").filter(Boolean),Z=new Map;for(let W of q){let[O,M]=W.split("=",2);if(!O)continue;let p=M!=null?decodeURIComponent(M):"";Z.set(O,p)}let Y=Z.get("ver"),J=Z.get("id"),U=Z.get("int"),K=Z.get("iss"),j=Z.get("p");if(Y==null||J==null||U==null)throw Error("protocol meta missing required fields ver or id or int");let G=Number(Y);if(!Number.isInteger(G)||G<=0)throw Error("protocol meta ver must be positive integer");let z;if(j!=null&&j!=="")try{if(z=JSON.parse(j),typeof z!=="object"||z===null||Array.isArray(z))throw Error("protocol meta p must be a JSON object")}catch{throw Error("protocol meta p must be valid JSON")}let N=N0({ver:G,id:J,int:U,iss:K,p:z});if(N.int!=null)Q8(N.int);if(N.iss!=null)Q8(N.iss);if(N.p!=null)Q8(JSON.stringify(N.p));if([...Z.keys()].filter((W)=>W!=="ver"&&W!=="id"&&W!=="int"&&W!=="iss"&&W!=="p").length>0)throw Error("protocol meta contains unsupported keys");return R0(_8(N)),N}function jQ(Q){try{return R8(Q),{ok:!0}}catch($){return{ok:!1,reason:String($)}}}function N0(Q){let $=Q.id.normalize(N8).trim(),q={ver:Q.ver,id:$,int:Q.int};if(Q.int!=null)q.int=Q.int.normalize(N8).trim();if(Q.iss!=null)q.iss=Q.iss.normalize(N8).trim();if(Q.p!=null)q.p=Q.p;return q}function R0(Q){if(new TextEncoder().encode(Q).length>o)throw Error(`protocol meta exceeds ${o} bytes`)}function Q8(Q){if(new TextEncoder().encode(Q).length>o)throw Error(`protocol meta params exceed ${o} bytes`)}import W0 from"bs58";class $8{config;constructor(Q){this.config=Q}generateCode(Q,$,q){let Z=Q,Y=JSON.parse(new TextDecoder().decode(Z)),J=Y.pubkey,U=Y.windowStart,K;try{K=W0.decode(q)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let j=T8(K,Z),G=Math.max(y8,Math.min(E8,this.config.codeLength)),z=8*Math.ceil(G/2),N=I8(j,z),R=m8(N,G);return{chain:$,code:R,pubkey:J,timestamp:U,expiresAt:U+this.config.ttlMs,signature:q}}validateCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);let q=f({pubkey:Q.pubkey,windowStart:Q.timestamp});if(!Q.signature)throw X.missingRequiredField("signature");let Z;try{Z=W0.decode(Q.signature)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let Y=T8(Z,q),J=Math.max(y8,Math.min(E8,this.config.codeLength)),U=I8(Y,8*Math.ceil(J/2));if(m8(U,J)!==Q.code)throw X.invalidCode()}}import{PublicKey as D0}from"@solana/web3.js";import v0 from"tweetnacl";import O0 from"bs58";class S8{walletStrategy;config;constructor(Q){this.config=Q,this.walletStrategy=new $8(Q)}generateDelegatedCode(Q,$,q,Z){return this.validateDelegationProof(Q),{...this.walletStrategy.generateCode($,q,Z),delegationProof:Q}}validateDelegatedCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);if(this.validateDelegationProof(Q.delegationProof),Q.pubkey!==Q.delegationProof.delegatedPubkey)throw X.invalidInput("delegatedPubkey",Q.delegationProof.delegatedPubkey,"Action code pubkey does not match delegated signer");if(Q.expiresAt>Q.delegationProof.expiresAt)throw X.invalidInput("expiresAt",Q.expiresAt,"Action code cannot expire after delegation proof expiration");if(!Q.delegationProof.signature)throw X.missingRequiredField("delegationProof.signature");let q=f({pubkey:Q.delegationProof.delegatedPubkey,windowStart:Q.timestamp}),Z;try{Z=O0.decode(Q.signature??"")}catch{throw X.invalidSignature("Invalid Base58 delegated signature format")}let Y=O0.decode(Q.delegationProof.delegatedPubkey);if(!v0.sign.detached.verify(q,Z,Y))throw X.invalidSignature("Delegated signature verification failed")}validateDelegationProof(Q){if(!Q.walletPubkey||typeof Q.walletPubkey!=="string")throw X.invalidInput("walletPubkey",Q.walletPubkey,"Wallet pubkey is required and must be a string");try{new D0(Q.walletPubkey)}catch{throw X.invalidInput("walletPubkey",Q.walletPubkey,"Invalid wallet pubkey format")}if(!Q.delegatedPubkey||typeof Q.delegatedPubkey!=="string")throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Delegated pubkey is required and must be a string");try{new D0(Q.delegatedPubkey)}catch{throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Invalid delegated pubkey format")}if(!Q.chain||typeof Q.chain!=="string")throw X.invalidInput("chain",Q.chain,"Chain is required and must be a string");if(Q.chain.length===0||Q.chain.length>50)throw X.invalidInput("chain",Q.chain,"Chain must be between 1 and 50 characters");if(!/^[a-z0-9-]+$/.test(Q.chain))throw X.invalidInput("chain",Q.chain,"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)");if(typeof Q.expiresAt!=="number"||!Number.isInteger(Q.expiresAt))throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be a valid integer timestamp");if(Q.expiresAt<=0)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be positive");let $=Date.now(),q=31536000000;if(Q.expiresAt>$+q)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time is too far in the future");if(Q.expiresAt<$)throw X.expiredCode("Delegation proof has expired",Q.expiresAt,$);if(!Q.signature||typeof Q.signature!=="string")throw X.invalidInput("signature",Q.signature,"Delegation signature is required and must be a string");if(Q.signature.length===0||Q.signature.length>200)throw X.invalidInput("signature",Q.signature,"Delegation signature must be between 1 and 200 characters")}}import C from"tweetnacl";import h from"bs58";import{PublicKey as f8,Transaction as s,VersionedTransaction as W8,TransactionInstruction as f0,MessageV0 as q8}from"@solana/web3.js";import{createMemoInstruction as C0,MEMO_PROGRAM_ID as Z8}from"@solana/spl-memo";var i="solana";class Y8 extends w8{normalizePubkey(Q){if(typeof Q==="string")return new f8(Q);return Q}verifyWithWallet(Q){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;try{let $=f({pubkey:Q.pubkey,windowStart:Q.timestamp}),q=this.normalizePubkey(Q.pubkey),Z=h.decode(Q.signature),Y=q.toBytes();if(Z.length!==64||Y.length!==32)return!1;return C.sign.detached.verify($,Z,Y)}catch{return!1}}verifyWithDelegation(Q){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;let $=Q.delegationProof;if(!$.walletPubkey||!$.delegatedPubkey||!$.chain||!$.expiresAt||!$.signature)return!1;if($.chain!==i)return!1;if(Q.pubkey!==$.delegatedPubkey)return!1;if($.expiresAt<Date.now())return!1;try{let q=B8($),Z=this.normalizePubkey($.walletPubkey),Y=h.decode($.signature),J=Z.toBytes(),U=f({pubkey:$.delegatedPubkey,windowStart:Q.timestamp}),K=this.normalizePubkey($.delegatedPubkey),j=h.decode(Q.signature),G=K.toBytes();if(Y.length!==64||J.length!==32)return!1;if(j.length!==64||G.length!==32)return!1;let z=C.sign.detached.verify(q,Y,J),N=C.sign.detached.verify(U,j,G);return z&&N}catch{return!1}}verifyRevokeWithWallet(Q,$){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!$)return!1;try{let q=n({pubkey:Q.pubkey,codeHash:g(Q.code),windowStart:Q.timestamp}),Z=this.normalizePubkey(Q.pubkey),Y=h.decode($),J=Z.toBytes();if(Y.length!==64||J.length!==32)return!1;return C.sign.detached.verify(q,Y,J)}catch{return!1}}verifyRevokeWithDelegation(Q,$){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature||!Q.delegationProof)return!1;let q=Q.delegationProof;if(!q.walletPubkey||!q.delegatedPubkey||!q.chain||!q.expiresAt||!q.signature)return!1;if(q.chain!==i)return!1;if(Q.pubkey!==q.delegatedPubkey)return!1;if(q.expiresAt<Date.now())return!1;try{let Z=B8(q),Y=this.normalizePubkey(q.walletPubkey),J=h.decode(q.signature),U=Y.toBytes(),K=n({pubkey:q.delegatedPubkey,codeHash:g(Q.code),windowStart:Q.timestamp}),j=this.normalizePubkey(q.delegatedPubkey),G=h.decode($),z=j.toBytes();if(J.length!==64||U.length!==32)return!1;if(G.length!==64||z.length!==32)return!1;let N=C.sign.detached.verify(Z,J,U),R=C.sign.detached.verify(K,G,z);return N&&R}catch{return!1}}static createProtocolMetaIx(Q){let $=_8(Q);return C0($)}getProtocolMeta(Q){try{let $=this.deserializeTransaction(Q);for(let q of this.getMemoInstructions($)){let Z=q.data;try{let Y=new TextDecoder().decode(Z);if(R8(Y))return Y}catch{}}return null}catch{return null}}deserializeTransaction(Q){try{let $=W8.deserialize(Buffer.from(Q,"base64"));if($.message instanceof q8)return $;else return s.from(Buffer.from(Q,"base64"))}catch{try{return s.from(Buffer.from(Q,"base64"))}catch{throw X.invalidTransactionFormat("Invalid base64 transaction format")}}}parseMeta(Q){let $=this.getProtocolMeta(Q);if(!$)return null;return R8($)}getMemoInstructions(Q){if(Q instanceof s)return Q.instructions.filter(($)=>$.programId.equals(Z8));else{let q=Q.message;if(q instanceof q8){let Z=[];for(let Y of q.compiledInstructions){let J=q.staticAccountKeys[Y.programIdIndex];if(J&&J.equals(Z8)){let U=Y.accountKeyIndexes.map((K)=>({pubkey:q.staticAccountKeys[K],isSigner:!1,isWritable:!1}));Z.push(new f0({keys:U,programId:J,data:Y.data}))}}return Z}return[]}}verifyTransactionMatchesCode(Q,$){let q=Date.now();if(q>Q.expiresAt)throw X.expiredCode(Q.code,Q.expiresAt,q);let Z=this.parseMeta($);if(!Z)throw X.missingMeta();if(Z.ver!==2)throw X.metaMismatch("2",String(Z.ver),"ver");let Y=g(Q.code);if(Z.id!==Y)throw X.metaMismatch(Y,Z.id,"id");if(Z.int!==Q.pubkey)throw X.metaMismatch(Q.pubkey,Z.int,"int")}verifyTransactionSignedByIntentOwner(Q){let $=this.parseMeta(Q);if(!$)throw X.missingMeta();let{int:q,iss:Z}=$;if(!q)throw X.invalidMetaFormat("Missing 'int' (intendedFor) field");let Y,J;try{Y=new f8(q)}catch{throw X.invalidPubkeyFormat(q,"Invalid public key format")}try{if(Z)J=new f8(Z)}catch{throw X.invalidPubkeyFormat(Z||"","Invalid public key format")}let U=this.deserializeTransaction(Q),K=[];if(U instanceof s){let j=!1,G=!1;if(U.signatures.forEach((z)=>{if(!z.signature)return;if(K.push(z.publicKey.toString()),z.publicKey.equals(Y))j=!0;if(Z&&z.publicKey.equals(J))G=!0}),!j)throw X.transactionNotSignedByIntendedOwner(q,K);if(Z&&!G)throw X.transactionNotSignedByIssuer(Z,K);return}if(U instanceof W8){let j=U.message;if(j instanceof q8){let G=!1,z=!1,N=j.header.numRequiredSignatures;for(let R=0;R<N;R++){let W=j.staticAccountKeys[R];if(W){if(K.push(W.toString()),W.equals(Y))G=!0;if(Z&&W.equals(J))z=!0}}if(!G)throw X.transactionNotSignedByIntendedOwner(q,K);if(Z&&!z)throw X.transactionNotSignedByIssuer(Z,K);return}}throw X.invalidTransactionFormat("Unsupported transaction format")}verifyMessageSignedByIntentOwner(Q,$,q){try{let Z=new TextEncoder().encode(Q),Y=h.decode($),U=this.normalizePubkey(q).toBytes();if(!C.sign.detached.verify(Z,Y,U))throw X.invalidSignature("Signature verification failed")}catch(Z){if(Z instanceof Error&&Z.message.includes("Signature verification failed"))throw Z;throw X.invalidSignature("Invalid signature format")}}static attachProtocolMeta(Q,$){if(new Y8().getProtocolMeta(Q))throw X.invalidTransactionFormat("Transaction already contains protocol meta. Cannot attach additional protocol meta.");let Y=Y8.createProtocolMetaIx($);try{let J=W8.deserialize(Buffer.from(Q,"base64"));if(J.message instanceof q8){let U=J.message,K=[...U.staticAccountKeys];if(!K.some((R)=>R.equals(Z8)))K.push(Z8);let G={programIdIndex:K.findIndex((R)=>R.equals(Z8)),accountKeyIndexes:[],data:Y.data},z=new q8({header:U.header,staticAccountKeys:K,recentBlockhash:U.recentBlockhash,compiledInstructions:[...U.compiledInstructions,G],addressTableLookups:U.addressTableLookups}),N=new W8(z);return N.signatures=J.signatures,Buffer.from(N.serialize()).toString("base64")}else{let U=s.from(Buffer.from(Q,"base64"));return U.add(Y),Buffer.from(U.serialize({requireAllSignatures:!1})).toString("base64")}}catch{try{let J=s.from(Buffer.from(Q,"base64"));return J.add(Y),Buffer.from(J.serialize({requireAllSignatures:!1})).toString("base64")}catch{throw X.invalidTransactionFormat("Invalid base64 transaction format")}}}}class p0{config;adapters={};_walletStrategy;_delegationStrategy;constructor(Q){this.config=Q;this.adapters.solana=new Y8,this._walletStrategy=new $8(Q),this._delegationStrategy=new S8(Q)}getConfig(){return this.config}registerAdapter(Q,$){this.adapters[Q]=$}getAdapter(Q){return this.adapters[Q]}get adapter(){return{solana:this.adapters.solana}}get walletStrategy(){return this._walletStrategy}get delegationStrategy(){return this._delegationStrategy}async generate(Q,$,q,Z){if(!q||!H8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=b8($),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return this.walletStrategy.generateCode(Y,q,J)}else{let Y=$,J=b8(Y.delegatedPubkey),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return this.delegationStrategy.generateDelegatedCode(Y,J,q,U)}}async revoke(Q,$,q,Z){if(!q||!H8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=n({codeHash:g($.code),pubkey:$.pubkey,windowStart:$.timestamp}),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return{...$,revokeSignature:J}}else{let Y=$,J=n({codeHash:g($.code),pubkey:Y.delegationProof.delegatedPubkey,windowStart:$.timestamp}),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return{...$,revokeSignature:U}}}validate(Q,$){if(Q==="wallet"){this.walletStrategy.validateCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithWallet($))throw X.invalidSignature("Wallet signature verification failed")}else{this.delegationStrategy.validateDelegatedCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithDelegation($))throw X.invalidSignature("Delegation signature verification failed")}}}export{jQ as validateProtocolMetaFormat,I8 as truncateBits,H0 as sha256,B8 as serializeDelegationProof,n as serializeCanonicalRevoke,f as serializeCanonical,R8 as parseProtocolMeta,T8 as hmacSha256,QQ as hkdfSha256,b8 as getCanonicalMessageParts,m8 as digestToDigits,g as codeHash,_8 as buildProtocolMeta,$Q as base32EncodeCrockford,$8 as WalletStrategy,X0 as TransactionNotSignedByIssuerError,J0 as TransactionNotSignedByIntendedOwnerError,Y8 as SolanaAdapter,H8 as SUPPORTED_CHAINS,P8 as SCHEME,P0 as ProtocolErrorCode,X as ProtocolError,N8 as PROTOCOL_NORMALIZATION,o as PROTOCOL_META_MAX_BYTES,Z0 as MissingMetaError,Y0 as MetaMismatchError,z0 as InvalidSignatureError,U0 as InvalidPubkeyFormatError,K0 as InvalidCodeFormatError,j0 as InvalidAdapterError,q0 as ExpiredCodeError,S8 as DelegationStrategy,y8 as CODE_MIN_LENGTH,E8 as CODE_MAX_LENGTH,XQ as CODE_DEFAULT_LENGTH,UQ as CODE_CHARSET_DIGITS,S0 as CANONICAL_REVOKE_MESSAGE_PREFIX,G0 as CANONICAL_MESSAGE_VERSION,_0 as CANONICAL_MESSAGE_PREFIX,w8 as BaseChainAdapter,p0 as ActionCodesProtocol,i as ADAPTER_CHAIN_NAME};
|
|
1
|
+
class w8{}/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function w0(Q){return Q instanceof Uint8Array||ArrayBuffer.isView(Q)&&Q.constructor.name==="Uint8Array"}function z8(Q,$=""){if(!Number.isSafeInteger(Q)||Q<0){let q=$&&`"${$}" `;throw Error(`${q}expected integer >= 0, got ${Q}`)}}function P(Q,$,q=""){let Z=w0(Q),Y=Q?.length,J=$!==void 0;if(!Z||J&&Y!==$){let U=q&&`"${q}" `,z=J?` of length ${$}`:"",G=Z?`length=${Y}`:`type=${typeof Q}`;throw Error(U+"expected Uint8Array"+z+", got "+G)}return Q}function r(Q){if(typeof Q!=="function"||typeof Q.create!=="function")throw Error("Hash must wrapped by utils.createHasher");z8(Q.outputLen),z8(Q.blockLen)}function c(Q,$=!0){if(Q.destroyed)throw Error("Hash instance has been destroyed");if($&&Q.finished)throw Error("Hash#digest() has already been called")}function p8(Q,$){P(Q,void 0,"digestInto() output");let q=$.outputLen;if(Q.length<q)throw Error('"digestInto() output" expected to be of length >='+q)}function k(...Q){for(let $=0;$<Q.length;$++)Q[$].fill(0)}function K8(Q){return new DataView(Q.buffer,Q.byteOffset,Q.byteLength)}function T(Q,$){return Q<<32-$|Q>>>$}function A8(Q,$={}){let q=(Y,J)=>Q(J).update(Y).digest(),Z=Q(void 0);return q.outputLen=Z.outputLen,q.blockLen=Z.blockLen,q.create=(Y)=>Q(Y),Object.assign(q,$),Object.freeze(q)}var u8=(Q)=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,Q])});function g8(Q,$,q){return Q&$^~Q&q}function h8(Q,$,q){return Q&$^Q&q^$&q}class j8{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(Q,$,q,Z){this.blockLen=Q,this.outputLen=$,this.padOffset=q,this.isLE=Z,this.buffer=new Uint8Array(Q),this.view=K8(this.buffer)}update(Q){c(this),P(Q);let{view:$,buffer:q,blockLen:Z}=this,Y=Q.length;for(let J=0;J<Y;){let U=Math.min(Z-this.pos,Y-J);if(U===Z){let z=K8(Q);for(;Z<=Y-J;J+=Z)this.process(z,J);continue}if(q.set(Q.subarray(J,J+U),this.pos),this.pos+=U,J+=U,this.pos===Z)this.process($,0),this.pos=0}return this.length+=Q.length,this.roundClean(),this}digestInto(Q){c(this),p8(Q,this),this.finished=!0;let{buffer:$,view:q,blockLen:Z,isLE:Y}=this,{pos:J}=this;if($[J++]=128,k(this.buffer.subarray(J)),this.padOffset>Z-J)this.process(q,0),J=0;for(let K=J;K<Z;K++)$[K]=0;q.setBigUint64(Z-8,BigInt(this.length*8),Y),this.process(q,0);let U=K8(Q),z=this.outputLen;if(z%4)throw Error("_sha2: outputLen must be aligned to 32bit");let G=z/4,N=this.get();if(G>N.length)throw Error("_sha2: outputLen bigger than state");for(let K=0;K<G;K++)U.setUint32(4*K,N[K],Y)}digest(){let{buffer:Q,outputLen:$}=this;this.digestInto(Q);let q=Q.slice(0,$);return this.destroy(),q}_cloneInto(Q){Q||=new this.constructor,Q.set(...this.get());let{blockLen:$,buffer:q,length:Z,finished:Y,destroyed:J,pos:U}=this;if(Q.destroyed=J,Q.finished=Y,Q.length=Z,Q.pos=U,Z%$)Q.buffer.set(q);return Q}clone(){return this._cloneInto()}}var B=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),y=Uint32Array.from([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]),w=Uint32Array.from([3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]),x=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var G8=BigInt(4294967295),c8=BigInt(32);function x0(Q,$=!1){if($)return{h:Number(Q&G8),l:Number(Q>>c8&G8)};return{h:Number(Q>>c8&G8)|0,l:Number(Q&G8)|0}}function d8(Q,$=!1){let q=Q.length,Z=new Uint32Array(q),Y=new Uint32Array(q);for(let J=0;J<q;J++){let{h:U,l:z}=x0(Q[J],$);[Z[J],Y[J]]=[U,z]}return[Z,Y]}var x8=(Q,$,q)=>Q>>>q,L8=(Q,$,q)=>Q<<32-q|$>>>q,A=(Q,$,q)=>Q>>>q|$<<32-q,u=(Q,$,q)=>Q<<32-q|$>>>q,a=(Q,$,q)=>Q<<64-q|$>>>q-32,t=(Q,$,q)=>Q>>>q-32|$<<64-q;function I(Q,$,q,Z){let Y=($>>>0)+(Z>>>0);return{h:Q+q+(Y/4294967296|0)|0,l:Y|0}}var l8=(Q,$,q)=>(Q>>>0)+($>>>0)+(q>>>0),n8=(Q,$,q,Z)=>$+q+Z+(Q/4294967296|0)|0,s8=(Q,$,q,Z)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0),i8=(Q,$,q,Z,Y)=>$+q+Z+Y+(Q/4294967296|0)|0,r8=(Q,$,q,Z,Y)=>(Q>>>0)+($>>>0)+(q>>>0)+(Z>>>0)+(Y>>>0),a8=(Q,$,q,Z,Y,J)=>$+q+Z+Y+J+(Q/4294967296|0)|0;var V0=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),_=new Uint32Array(64);class V8 extends j8{constructor(Q){super(64,Q,8,!1)}get(){let{A:Q,B:$,C:q,D:Z,E:Y,F:J,G:U,H:z}=this;return[Q,$,q,Z,Y,J,U,z]}set(Q,$,q,Z,Y,J,U,z){this.A=Q|0,this.B=$|0,this.C=q|0,this.D=Z|0,this.E=Y|0,this.F=J|0,this.G=U|0,this.H=z|0}process(Q,$){for(let K=0;K<16;K++,$+=4)_[K]=Q.getUint32($,!1);for(let K=16;K<64;K++){let j=_[K-15],R=_[K-2],W=T(j,7)^T(j,18)^j>>>3,O=T(R,17)^T(R,19)^R>>>10;_[K]=O+_[K-7]+W+_[K-16]|0}let{A:q,B:Z,C:Y,D:J,E:U,F:z,G,H:N}=this;for(let K=0;K<64;K++){let j=T(U,6)^T(U,11)^T(U,25),R=N+j+g8(U,z,G)+V0[K]+_[K]|0,O=(T(q,2)^T(q,13)^T(q,22))+h8(q,Z,Y)|0;N=G,G=z,z=U,U=J+R|0,J=Y,Y=Z,Z=q,q=R+O|0}q=q+this.A|0,Z=Z+this.B|0,Y=Y+this.C|0,J=J+this.D|0,U=U+this.E|0,z=z+this.F|0,G=G+this.G|0,N=N+this.H|0,this.set(q,Z,Y,J,U,z,G,N)}roundClean(){k(_)}destroy(){this.set(0,0,0,0,0,0,0,0),k(this.buffer)}}class t8 extends V8{A=B[0]|0;B=B[1]|0;C=B[2]|0;D=B[3]|0;E=B[4]|0;F=B[5]|0;G=B[6]|0;H=B[7]|0;constructor(){super(32)}}class M0 extends V8{A=y[0]|0;B=y[1]|0;C=y[2]|0;D=y[3]|0;E=y[4]|0;F=y[5]|0;G=y[6]|0;H=y[7]|0;constructor(){super(28)}}var e8=(()=>d8(["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((Q)=>BigInt(Q))))(),k0=(()=>e8[0])(),T0=(()=>e8[1])(),S=new Uint32Array(80),f=new Uint32Array(80);class e extends j8{constructor(Q){super(128,Q,16,!1)}get(){let{Ah:Q,Al:$,Bh:q,Bl:Z,Ch:Y,Cl:J,Dh:U,Dl:z,Eh:G,El:N,Fh:K,Fl:j,Gh:R,Gl:W,Hh:O,Hl:F}=this;return[Q,$,q,Z,Y,J,U,z,G,N,K,j,R,W,O,F]}set(Q,$,q,Z,Y,J,U,z,G,N,K,j,R,W,O,F){this.Ah=Q|0,this.Al=$|0,this.Bh=q|0,this.Bl=Z|0,this.Ch=Y|0,this.Cl=J|0,this.Dh=U|0,this.Dl=z|0,this.Eh=G|0,this.El=N|0,this.Fh=K|0,this.Fl=j|0,this.Gh=R|0,this.Gl=W|0,this.Hh=O|0,this.Hl=F|0}process(Q,$){for(let D=0;D<16;D++,$+=4)S[D]=Q.getUint32($),f[D]=Q.getUint32($+=4);for(let D=16;D<80;D++){let E=S[D-15]|0,H=f[D-15]|0,D8=A(E,H,1)^A(E,H,8)^x8(E,H,7),v8=u(E,H,1)^u(E,H,8)^L8(E,H,7),b=S[D-2]|0,m=f[D-2]|0,X8=A(b,m,19)^a(b,m,61)^x8(b,m,6),O8=u(b,m,19)^t(b,m,61)^L8(b,m,6),U8=s8(v8,O8,f[D-7],f[D-16]),F8=i8(U8,D8,X8,S[D-7],S[D-16]);S[D]=F8|0,f[D]=U8|0}let{Ah:q,Al:Z,Bh:Y,Bl:J,Ch:U,Cl:z,Dh:G,Dl:N,Eh:K,El:j,Fh:R,Fl:W,Gh:O,Gl:F,Hh:L,Hl:v}=this;for(let D=0;D<80;D++){let E=A(K,j,14)^A(K,j,18)^a(K,j,41),H=u(K,j,14)^u(K,j,18)^t(K,j,41),D8=K&R^~K&O,v8=j&W^~j&F,b=r8(v,H,v8,T0[D],f[D]),m=a8(b,L,E,D8,k0[D],S[D]),X8=b|0,O8=A(q,Z,28)^a(q,Z,34)^a(q,Z,39),U8=u(q,Z,28)^t(q,Z,34)^t(q,Z,39),F8=q&Y^q&U^Y&U,F0=Z&J^Z&z^J&z;L=O|0,v=F|0,O=R|0,F=W|0,R=K|0,W=j|0,{h:K,l:j}=I(G|0,N|0,m|0,X8|0),G=U|0,N=z|0,U=Y|0,z=J|0,Y=q|0,J=Z|0;let C8=l8(X8,U8,F0);q=n8(C8,m,O8,F8),Z=C8|0}({h:q,l:Z}=I(this.Ah|0,this.Al|0,q|0,Z|0)),{h:Y,l:J}=I(this.Bh|0,this.Bl|0,Y|0,J|0),{h:U,l:z}=I(this.Ch|0,this.Cl|0,U|0,z|0),{h:G,l:N}=I(this.Dh|0,this.Dl|0,G|0,N|0),{h:K,l:j}=I(this.Eh|0,this.El|0,K|0,j|0),{h:R,l:W}=I(this.Fh|0,this.Fl|0,R|0,W|0),{h:O,l:F}=I(this.Gh|0,this.Gl|0,O|0,F|0),{h:L,l:v}=I(this.Hh|0,this.Hl|0,L|0,v|0),this.set(q,Z,Y,J,U,z,G,N,K,j,R,W,O,F,L,v)}roundClean(){k(S,f)}destroy(){k(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class I0 extends e{Ah=x[0]|0;Al=x[1]|0;Bh=x[2]|0;Bl=x[3]|0;Ch=x[4]|0;Cl=x[5]|0;Dh=x[6]|0;Dl=x[7]|0;Eh=x[8]|0;El=x[9]|0;Fh=x[10]|0;Fl=x[11]|0;Gh=x[12]|0;Gl=x[13]|0;Hh=x[14]|0;Hl=x[15]|0;constructor(){super(64)}}class b0 extends e{Ah=w[0]|0;Al=w[1]|0;Bh=w[2]|0;Bl=w[3]|0;Ch=w[4]|0;Cl=w[5]|0;Dh=w[6]|0;Dl=w[7]|0;Eh=w[8]|0;El=w[9]|0;Fh=w[10]|0;Fl=w[11]|0;Gh=w[12]|0;Gl=w[13]|0;Hh=w[14]|0;Hl=w[15]|0;constructor(){super(48)}}var V=Uint32Array.from([2352822216,424955298,1944164710,2312950998,502970286,855612546,1738396948,1479516111,258812777,2077511080,2011393907,79989058,1067287976,1780299464,286451373,2446758561]),M=Uint32Array.from([573645204,4230739756,2673172387,3360449730,596883563,1867755857,2520282905,1497426621,2519219938,2827943907,3193839141,1401305490,721525244,746961066,246885852,2177182882]);class m0 extends e{Ah=V[0]|0;Al=V[1]|0;Bh=V[2]|0;Bl=V[3]|0;Ch=V[4]|0;Cl=V[5]|0;Dh=V[6]|0;Dl=V[7]|0;Eh=V[8]|0;El=V[9]|0;Fh=V[10]|0;Fl=V[11]|0;Gh=V[12]|0;Gl=V[13]|0;Hh=V[14]|0;Hl=V[15]|0;constructor(){super(28)}}class B0 extends e{Ah=M[0]|0;Al=M[1]|0;Bh=M[2]|0;Bl=M[3]|0;Ch=M[4]|0;Cl=M[5]|0;Dh=M[6]|0;Dl=M[7]|0;Eh=M[8]|0;El=M[9]|0;Fh=M[10]|0;Fl=M[11]|0;Gh=M[12]|0;Gl=M[13]|0;Hh=M[14]|0;Hl=M[15]|0;constructor(){super(32)}}var N8=A8(()=>new t8,u8(1));class M8{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(Q,$){if(r(Q),P($,void 0,"key"),this.iHash=Q.create(),typeof this.iHash.update!=="function")throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let q=this.blockLen,Z=new Uint8Array(q);Z.set($.length>q?Q.create().update($).digest():$);for(let Y=0;Y<Z.length;Y++)Z[Y]^=54;this.iHash.update(Z),this.oHash=Q.create();for(let Y=0;Y<Z.length;Y++)Z[Y]^=106;this.oHash.update(Z),k(Z)}update(Q){return c(this),this.iHash.update(Q),this}digestInto(Q){c(this),P(Q,this.outputLen,"output"),this.finished=!0,this.iHash.digestInto(Q),this.oHash.update(Q),this.oHash.digestInto(Q),this.destroy()}digest(){let Q=new Uint8Array(this.oHash.outputLen);return this.digestInto(Q),Q}_cloneInto(Q){Q||=Object.create(Object.getPrototypeOf(this),{});let{oHash:$,iHash:q,finished:Z,destroyed:Y,blockLen:J,outputLen:U}=this;return Q=Q,Q.finished=Z,Q.destroyed=Y,Q.blockLen=J,Q.outputLen=U,Q.oHash=$._cloneInto(Q.oHash),Q.iHash=q._cloneInto(Q.iHash),Q}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}var d=(Q,$,q)=>new M8(Q,$).update(q).digest();d.create=(Q,$)=>new M8(Q,$);function y0(Q,$,q){if(r(Q),q===void 0)q=new Uint8Array(Q.outputLen);return d(Q,q,$)}var k8=Uint8Array.of(0),o8=Uint8Array.of();function E0(Q,$,q,Z=32){r(Q),z8(Z,"length");let Y=Q.outputLen;if(Z>255*Y)throw Error("Length must be <= 255*HashLen");let J=Math.ceil(Z/Y);if(q===void 0)q=o8;else P(q,void 0,"info");let U=new Uint8Array(J*Y),z=d.create(Q,$),G=z._cloneInto(),N=new Uint8Array(z.outputLen);for(let K=0;K<J;K++)k8[0]=K+1,G.update(K===0?o8:N).update(q).update(k8).digestInto(N),U.set(N,Y*K),z._cloneInto(G);return z.destroy(),G.destroy(),k(N,k8),U.slice(0,Z)}var Q0=(Q,$,q,Z,Y)=>E0(Q,y0(Q,$,q),Z,Y);function l(Q){if(typeof Q==="string")return new TextEncoder().encode(Q);return Q}function H0(Q){return N8(l(Q))}function T8(Q,$){return d(N8,l(Q),l($))}function $Q(Q,$,{salt:q,info:Z}={}){let Y=q?l(q):new Uint8Array(32),J=l(Q),U=Z?l(Z):new Uint8Array(0);return Q0(N8,J,Y,U,$)}var $0="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function qQ(Q){let $=0,q=0,Z="";for(let Y=0;Y<Q.length;Y++){q=q<<8|Q[Y],$+=8;while($>=5)Z+=$0[q>>>$-5&31],$-=5}if($>0)Z+=$0[q<<5-$&31];return Z}function I8(Q,$){let q=Math.ceil($/8),Z=new Uint8Array(q),Y=Math.min(q,Q.length);Z.set(Q.subarray(0,Y));let J=q*8-$;if(J>0){let U=255<<J;Z[q-1]=Z[q-1]&U}return Z}function b8(Q,$){if(Q.length===0)throw Error("digestToDigits: empty digest");let q="",Z=Q[Q.length-1]&15;for(let Y=0;q.length<$;Y++){let J=(Z+Y*4)%Math.max(1,Q.length-4),G=(((Q[J]&127)<<24|Q[J+1]<<16|Q[J+2]<<8|Q[J+3])%1e9).toString().padStart(9,"0");q+=G}return q.slice(0,$)}function g(Q){let $=H0(Q);return Array.from($).map((q)=>q.toString(16).padStart(2,"0")).join("")}var P0;((v)=>{v.EXPIRED_CODE="EXPIRED_CODE";v.INVALID_CODE="INVALID_CODE";v.INVALID_CODE_FORMAT="INVALID_CODE_FORMAT";v.INVALID_SIGNATURE="INVALID_SIGNATURE";v.MISSING_META="MISSING_META";v.INVALID_META_FORMAT="INVALID_META_FORMAT";v.META_MISMATCH="META_MISMATCH";v.META_TOO_LARGE="META_TOO_LARGE";v.TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER="TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER";v.TRANSACTION_NOT_SIGNED_BY_ISSUER="TRANSACTION_NOT_SIGNED_BY_ISSUER";v.INVALID_TRANSACTION_FORMAT="INVALID_TRANSACTION_FORMAT";v.INVALID_PUBKEY_FORMAT="INVALID_PUBKEY_FORMAT";v.INVALID_INPUT="INVALID_INPUT";v.MISSING_REQUIRED_FIELD="MISSING_REQUIRED_FIELD";v.CRYPTO_ERROR="CRYPTO_ERROR";v.INVALID_DIGEST="INVALID_DIGEST";v.INVALID_ADAPTER="INVALID_ADAPTER"})(P0||={});class X extends Error{code;details;constructor(Q,$,q){super($);this.code=Q;this.details=q;this.name="ProtocolError"}static expiredCode(Q,$,q){return new q0(Q,$,q)}static invalidCode(){return new X("INVALID_CODE","Invalid code provided",{})}static invalidCodeFormat(Q,$){return new K0(Q,$)}static invalidSignature(Q){return new z0(Q)}static missingMeta(){return new Z0}static invalidMetaFormat(Q){return new X("INVALID_META_FORMAT",`Invalid protocol meta format: ${Q}`,{reason:Q})}static metaMismatch(Q,$,q){return new Y0(Q,$,q)}static metaTooLarge(Q,$){return new X("META_TOO_LARGE",`Protocol meta too large: ${$} bytes (max: ${Q})`,{maxBytes:Q,actualBytes:$})}static transactionNotSignedByIntendedOwner(Q,$){return new J0(Q,$)}static transactionNotSignedByIssuer(Q,$){return new X0(Q,$)}static invalidTransactionFormat(Q){return new X("INVALID_TRANSACTION_FORMAT",`Invalid transaction format: ${Q}`,{reason:Q})}static invalidPubkeyFormat(Q,$){return new U0(Q,$)}static invalidInput(Q,$,q){return new X("INVALID_INPUT",`Invalid ${Q}: ${q}`,{field:Q,value:$,reason:q})}static missingRequiredField(Q){return new X("MISSING_REQUIRED_FIELD",`Missing required field: ${Q}`,{field:Q})}static cryptoError(Q,$){return new X("CRYPTO_ERROR",`Crypto error in ${Q}: ${$}`,{operation:Q,reason:$})}static invalidDigest(Q){return new X("INVALID_DIGEST",`Invalid digest: ${Q}`,{reason:Q})}static invalidAdapter(Q){return new j0(Q)}static create(Q,$,q){return new X(Q,$,q)}}class q0 extends X{constructor(Q,$,q){super("EXPIRED_CODE",`Action code '${Q}' has expired`,{code:Q,expiresAt:$,currentTime:q});this.name="ExpiredCodeError"}}class Z0 extends X{constructor(){super("MISSING_META","Transaction does not contain valid protocol meta");this.name="MissingMetaError"}}class Y0 extends X{constructor(Q,$,q){super("META_MISMATCH",`Meta ${q} mismatch: expected '${Q}', got '${$}'`,{expected:Q,actual:$,field:q});this.name="MetaMismatchError"}}class J0 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_INTENDED_OWNER",`Transaction not signed by intended owner '${Q}'. Actual signers: [${$.join(", ")}]`,{intended:Q,actualSigners:$});this.name="TransactionNotSignedByIntendedOwnerError"}}class X0 extends X{constructor(Q,$){super("TRANSACTION_NOT_SIGNED_BY_ISSUER",`Transaction not signed by issuer '${Q}'. Actual signers: [${$.join(", ")}]`,{issuer:Q,actualSigners:$});this.name="TransactionNotSignedByIssuerError"}}class U0 extends X{constructor(Q,$){super("INVALID_PUBKEY_FORMAT",`Invalid public key format '${Q}': ${$}`,{pubkey:Q,reason:$});this.name="InvalidPubkeyFormatError"}}class z0 extends X{constructor(Q){super("INVALID_SIGNATURE",`Invalid signature: ${Q}`,{reason:Q});this.name="InvalidSignatureError"}}class K0 extends X{constructor(Q,$){super("INVALID_CODE_FORMAT",`Invalid code format '${Q}': ${$}`,{code:Q,reason:$});this.name="InvalidCodeFormatError"}}class j0 extends X{constructor(Q){super("INVALID_ADAPTER",`Invalid adapter: ${Q}`,{adapter:Q});this.name="InvalidAdapterError"}}var G0=1,_0="actioncodes",S0="actioncodes-revoke";function C(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey))throw X.invalidInput("pubkey",Q.pubkey,"contains invalid characters for public key or JSON");let $=JSON.stringify({id:_0,ver:G0,pubkey:Q.pubkey,windowStart:Q.windowStart});return new TextEncoder().encode($)}function n(Q){if(typeof Q.pubkey!=="string")throw X.invalidInput("pubkey",Q.pubkey,"must be a string");if(typeof Q.codeHash!=="string")throw X.invalidInput("codeHash",Q.codeHash,"must be a string");if(Q.pubkey.length===0)throw X.invalidInput("pubkey",Q.pubkey,"cannot be empty");if(Q.pubkey.length>100)throw X.invalidInput("pubkey",Q.pubkey,"too long (max 100 characters)");if(Q.codeHash.length===0)throw X.invalidInput("codeHash",Q.codeHash,"cannot be empty");if(Q.codeHash.length>100)throw X.invalidInput("codeHash",Q.codeHash,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Q.pubkey)||/["\\\x00-\x1f\x7f-\x9f]/.test(Q.codeHash))throw X.invalidInput("input","contains invalid characters for identifiers or JSON","contains invalid characters");let $=JSON.stringify({id:S0,ver:G0,pubkey:Q.pubkey,codeHash:Q.codeHash,windowStart:Q.windowStart});return new TextEncoder().encode($)}function m8(Q){return C({pubkey:Q,windowStart:Date.now()})}function B8(Q){let $=["walletPubkey","delegatedPubkey","chain"];for(let Z of $){let Y=Q[Z];if(typeof Y!=="string")throw X.invalidInput(Z,Y,"must be a string");if(Y.length===0)throw X.invalidInput(Z,Y,"cannot be empty");if(Y.length>100)throw X.invalidInput(Z,Y,"too long (max 100 characters)");if(/["\\\x00-\x1f\x7f-\x9f]/.test(Y))throw X.invalidInput(Z,Y,"contains invalid characters for identifiers or JSON")}let q=JSON.stringify({walletPubkey:Q.walletPubkey,delegatedPubkey:Q.delegatedPubkey,expiresAt:Q.expiresAt,chain:Q.chain});return new TextEncoder().encode(q)}var R8="NFC",o=512,y8=6,E8=24,UQ=8,zQ="0123456789",H8={solana:"solana"};var P8="actioncodes:";function _8(Q){let $=N0(Q);if($.int!=null)Q8($.int);let q=[`ver=${$.ver}`,`id=${encodeURIComponent($.id)}`,`int=${encodeURIComponent($.int)}`];if($.iss!=null&&$.iss!==$.int)q.push(`iss=${encodeURIComponent($.iss)}`);if($.p!=null&&Object.keys($.p).length>0){let Y=JSON.stringify($.p);Q8(Y),q.push(`p=${encodeURIComponent(Y)}`)}let Z=P8+q.join("&");return R0(Z),Z}function W8(Q){if(!Q.startsWith(P8))throw Error("protocol meta must start with actioncodes:");let q=Q.slice(P8.length).split("&").filter(Boolean),Z=new Map;for(let W of q){let[O,F]=W.split("=",2);if(!O)continue;let L=F!=null?decodeURIComponent(F):"";Z.set(O,L)}let Y=Z.get("ver"),J=Z.get("id"),U=Z.get("int"),z=Z.get("iss"),G=Z.get("p");if(Y==null||J==null||U==null)throw Error("protocol meta missing required fields ver or id or int");let N=Number(Y);if(!Number.isInteger(N)||N<=0)throw Error("protocol meta ver must be positive integer");let K;if(G!=null&&G!=="")try{if(K=JSON.parse(G),typeof K!=="object"||K===null||Array.isArray(K))throw Error("protocol meta p must be a JSON object")}catch{throw Error("protocol meta p must be valid JSON")}let j=N0({ver:N,id:J,int:U,iss:z,p:K});if(j.int!=null)Q8(j.int);if(j.iss!=null)Q8(j.iss);if(j.p!=null)Q8(JSON.stringify(j.p));if([...Z.keys()].filter((W)=>W!=="ver"&&W!=="id"&&W!=="int"&&W!=="iss"&&W!=="p").length>0)throw Error("protocol meta contains unsupported keys");return R0(_8(j)),j}function GQ(Q){try{return W8(Q),{ok:!0}}catch($){return{ok:!1,reason:String($)}}}function N0(Q){let $=Q.id.normalize(R8).trim(),q={ver:Q.ver,id:$,int:Q.int};if(Q.int!=null)q.int=Q.int.normalize(R8).trim();if(Q.iss!=null)q.iss=Q.iss.normalize(R8).trim();if(Q.p!=null)q.p=Q.p;return q}function R0(Q){if(new TextEncoder().encode(Q).length>o)throw Error(`protocol meta exceeds ${o} bytes`)}function Q8(Q){if(new TextEncoder().encode(Q).length>o)throw Error(`protocol meta params exceed ${o} bytes`)}import W0 from"bs58";class $8{config;constructor(Q){this.config=Q}generateCode(Q,$,q){let Z=Q,Y=JSON.parse(new TextDecoder().decode(Z)),J=Y.pubkey,U=Y.windowStart,z;try{z=W0.decode(q)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let G=T8(z,Z),N=Math.max(y8,Math.min(E8,this.config.codeLength)),K=8*Math.ceil(N/2),j=I8(G,K),R=b8(j,N);return{chain:$,code:R,pubkey:J,timestamp:U,expiresAt:U+this.config.ttlMs,signature:q}}validateCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);let q=C({pubkey:Q.pubkey,windowStart:Q.timestamp});if(!Q.signature)throw X.missingRequiredField("signature");let Z;try{Z=W0.decode(Q.signature)}catch{throw X.invalidSignature("Invalid Base58 signature format")}let Y=T8(Z,q),J=Math.max(y8,Math.min(E8,this.config.codeLength)),U=I8(Y,8*Math.ceil(J/2));if(b8(U,J)!==Q.code)throw X.invalidCode()}}import{PublicKey as D0}from"@solana/web3.js";import v0 from"tweetnacl";import O0 from"bs58";class S8{walletStrategy;config;constructor(Q){this.config=Q,this.walletStrategy=new $8(Q)}generateDelegatedCode(Q,$,q,Z){return this.validateDelegationProof(Q),{...this.walletStrategy.generateCode($,q,Z),delegationProof:Q}}validateDelegatedCode(Q){let $=Date.now();if($>Q.expiresAt+(this.config.clockSkewMs??0))throw X.expiredCode(Q.code,Q.expiresAt,$);if(this.validateDelegationProof(Q.delegationProof),Q.pubkey!==Q.delegationProof.delegatedPubkey)throw X.invalidInput("delegatedPubkey",Q.delegationProof.delegatedPubkey,"Action code pubkey does not match delegated signer");if(Q.expiresAt>Q.delegationProof.expiresAt)throw X.invalidInput("expiresAt",Q.expiresAt,"Action code cannot expire after delegation proof expiration");if(!Q.delegationProof.signature)throw X.missingRequiredField("delegationProof.signature");let q=C({pubkey:Q.delegationProof.delegatedPubkey,windowStart:Q.timestamp}),Z;try{Z=O0.decode(Q.signature??"")}catch{throw X.invalidSignature("Invalid Base58 delegated signature format")}let Y=O0.decode(Q.delegationProof.delegatedPubkey);if(!v0.sign.detached.verify(q,Z,Y))throw X.invalidSignature("Delegated signature verification failed")}validateDelegationProof(Q){if(!Q.walletPubkey||typeof Q.walletPubkey!=="string")throw X.invalidInput("walletPubkey",Q.walletPubkey,"Wallet pubkey is required and must be a string");try{new D0(Q.walletPubkey)}catch{throw X.invalidInput("walletPubkey",Q.walletPubkey,"Invalid wallet pubkey format")}if(!Q.delegatedPubkey||typeof Q.delegatedPubkey!=="string")throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Delegated pubkey is required and must be a string");try{new D0(Q.delegatedPubkey)}catch{throw X.invalidInput("delegatedPubkey",Q.delegatedPubkey,"Invalid delegated pubkey format")}if(!Q.chain||typeof Q.chain!=="string")throw X.invalidInput("chain",Q.chain,"Chain is required and must be a string");if(Q.chain.length===0||Q.chain.length>50)throw X.invalidInput("chain",Q.chain,"Chain must be between 1 and 50 characters");if(!/^[a-z0-9-]+$/.test(Q.chain))throw X.invalidInput("chain",Q.chain,"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)");if(typeof Q.expiresAt!=="number"||!Number.isInteger(Q.expiresAt))throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be a valid integer timestamp");if(Q.expiresAt<=0)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time must be positive");let $=Date.now(),q=31536000000;if(Q.expiresAt>$+q)throw X.invalidInput("expiresAt",Q.expiresAt,"Expiration time is too far in the future");if(Q.expiresAt<$)throw X.expiredCode("Delegation proof has expired",Q.expiresAt,$);if(!Q.signature||typeof Q.signature!=="string")throw X.invalidInput("signature",Q.signature,"Delegation signature is required and must be a string");if(Q.signature.length===0||Q.signature.length>200)throw X.invalidInput("signature",Q.signature,"Delegation signature must be between 1 and 200 characters")}}import p from"tweetnacl";import h from"bs58";import{PublicKey as f8,Transaction as s,VersionedTransaction as q8,TransactionInstruction as f0,MessageV0 as Z8,TransactionMessage as C0}from"@solana/web3.js";import{createMemoInstruction as p0,MEMO_PROGRAM_ID as Y8}from"@solana/spl-memo";var i="solana";class J8 extends w8{normalizePubkey(Q){if(typeof Q==="string")return new f8(Q);return Q}verifyWithWallet(Q){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;try{let $=C({pubkey:Q.pubkey,windowStart:Q.timestamp}),q=this.normalizePubkey(Q.pubkey),Z=h.decode(Q.signature),Y=q.toBytes();if(Z.length!==64||Y.length!==32)return!1;return p.sign.detached.verify($,Z,Y)}catch{return!1}}verifyWithDelegation(Q){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature)return!1;let $=Q.delegationProof;if(!$.walletPubkey||!$.delegatedPubkey||!$.chain||!$.expiresAt||!$.signature)return!1;if($.chain!==i)return!1;if(Q.pubkey!==$.delegatedPubkey)return!1;if($.expiresAt<Date.now())return!1;try{let q=B8($),Z=this.normalizePubkey($.walletPubkey),Y=h.decode($.signature),J=Z.toBytes(),U=C({pubkey:$.delegatedPubkey,windowStart:Q.timestamp}),z=this.normalizePubkey($.delegatedPubkey),G=h.decode(Q.signature),N=z.toBytes();if(Y.length!==64||J.length!==32)return!1;if(G.length!==64||N.length!==32)return!1;let K=p.sign.detached.verify(q,Y,J),j=p.sign.detached.verify(U,G,N);return K&&j}catch{return!1}}verifyRevokeWithWallet(Q,$){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!$)return!1;try{let q=n({pubkey:Q.pubkey,codeHash:g(Q.code),windowStart:Q.timestamp}),Z=this.normalizePubkey(Q.pubkey),Y=h.decode($),J=Z.toBytes();if(Y.length!==64||J.length!==32)return!1;return p.sign.detached.verify(q,Y,J)}catch{return!1}}verifyRevokeWithDelegation(Q,$){if(Q.chain!==i)return!1;if(!Q.pubkey||!Q.timestamp||!Q.signature||!Q.delegationProof)return!1;let q=Q.delegationProof;if(!q.walletPubkey||!q.delegatedPubkey||!q.chain||!q.expiresAt||!q.signature)return!1;if(q.chain!==i)return!1;if(Q.pubkey!==q.delegatedPubkey)return!1;if(q.expiresAt<Date.now())return!1;try{let Z=B8(q),Y=this.normalizePubkey(q.walletPubkey),J=h.decode(q.signature),U=Y.toBytes(),z=n({pubkey:q.delegatedPubkey,codeHash:g(Q.code),windowStart:Q.timestamp}),G=this.normalizePubkey(q.delegatedPubkey),N=h.decode($),K=G.toBytes();if(J.length!==64||U.length!==32)return!1;if(N.length!==64||K.length!==32)return!1;let j=p.sign.detached.verify(Z,J,U),R=p.sign.detached.verify(z,N,K);return j&&R}catch{return!1}}static createProtocolMetaIx(Q){let $=_8(Q);return p0($)}getProtocolMeta(Q){try{let $=this.deserializeTransaction(Q);for(let q of this.getMemoInstructions($)){let Z=q.data;try{let Y=new TextDecoder().decode(Z);if(W8(Y))return Y}catch{}}return null}catch{return null}}deserializeTransaction(Q){try{let $=q8.deserialize(Buffer.from(Q,"base64"));if($.message instanceof Z8)return $;else return s.from(Buffer.from(Q,"base64"))}catch{try{return s.from(Buffer.from(Q,"base64"))}catch{throw X.invalidTransactionFormat("Invalid base64 transaction format")}}}parseMeta(Q){let $=this.getProtocolMeta(Q);if(!$)return null;return W8($)}getMemoInstructions(Q){if(Q instanceof s)return Q.instructions.filter(($)=>$.programId.equals(Y8));else{let q=Q.message;if(q instanceof Z8){let Z=[];for(let Y of q.compiledInstructions){let J=q.staticAccountKeys[Y.programIdIndex];if(J&&J.equals(Y8)){let U=Y.accountKeyIndexes.map((z)=>({pubkey:q.staticAccountKeys[z],isSigner:!1,isWritable:!1}));Z.push(new f0({keys:U,programId:J,data:Y.data}))}}return Z}return[]}}verifyTransactionMatchesCode(Q,$){let q=Date.now();if(q>Q.expiresAt)throw X.expiredCode(Q.code,Q.expiresAt,q);let Z=this.parseMeta($);if(!Z)throw X.missingMeta();if(Z.ver!==2)throw X.metaMismatch("2",String(Z.ver),"ver");let Y=g(Q.code);if(Z.id!==Y)throw X.metaMismatch(Y,Z.id,"id");if(Z.int!==Q.pubkey)throw X.metaMismatch(Q.pubkey,Z.int,"int")}verifyTransactionSignedByIntentOwner(Q){let $=this.parseMeta(Q);if(!$)throw X.missingMeta();let{int:q,iss:Z}=$;if(!q)throw X.invalidMetaFormat("Missing 'int' (intendedFor) field");let Y,J;try{Y=new f8(q)}catch{throw X.invalidPubkeyFormat(q,"Invalid public key format")}try{if(Z)J=new f8(Z)}catch{throw X.invalidPubkeyFormat(Z||"","Invalid public key format")}let U=this.deserializeTransaction(Q),z=[];if(U instanceof s){let G=!1,N=!1;if(U.signatures.forEach((K)=>{if(!K.signature)return;if(z.push(K.publicKey.toString()),K.publicKey.equals(Y))G=!0;if(Z&&K.publicKey.equals(J))N=!0}),!G)throw X.transactionNotSignedByIntendedOwner(q,z);if(Z&&!N)throw X.transactionNotSignedByIssuer(Z,z);return}if(U instanceof q8){let G=U.message;if(G instanceof Z8){let N=!1,K=!1,j=G.header.numRequiredSignatures;for(let R=0;R<j;R++){let W=G.staticAccountKeys[R];if(W){if(z.push(W.toString()),W.equals(Y))N=!0;if(Z&&W.equals(J))K=!0}}if(!N)throw X.transactionNotSignedByIntendedOwner(q,z);if(Z&&!K)throw X.transactionNotSignedByIssuer(Z,z);return}}throw X.invalidTransactionFormat("Unsupported transaction format")}verifyMessageSignedByIntentOwner(Q,$,q){try{let Z=new TextEncoder().encode(Q),Y=h.decode($),U=this.normalizePubkey(q).toBytes();if(!p.sign.detached.verify(Z,Y,U))throw X.invalidSignature("Signature verification failed")}catch(Z){if(Z instanceof Error&&Z.message.includes("Signature verification failed"))throw Z;throw X.invalidSignature("Invalid signature format")}}static async attachProtocolMeta(Q,$,q){if(new J8().getProtocolMeta(Q))throw X.invalidTransactionFormat("Transaction already contains protocol meta. Cannot attach additional protocol meta.");let J=J8.createProtocolMetaIx($);try{let U=q8.deserialize(Buffer.from(Q,"base64"));if(U.message instanceof Z8){let z=U.message,G=z.addressTableLookups&&z.addressTableLookups.length>0,N=z.staticAccountKeys.length,K=z.compiledInstructions.some((j)=>j.accountKeyIndexes.some((R)=>R>=N));if(G&&K){if(!q)throw X.invalidTransactionFormat("Connection required: Transaction uses address lookup tables and instructions reference accounts from those tables. A Solana connection is needed to resolve lookup tables and correctly recalculate account indices.");let j=[];for(let F of z.addressTableLookups)try{let L=await q.getAddressLookupTable(F.accountKey);if(L.value)j.push(L.value)}catch(L){throw X.invalidTransactionFormat(`Failed to resolve address lookup table ${F.accountKey.toString()}: ${L}`)}let R=C0.decompile(z,{addressLookupTableAccounts:j});R.instructions.push(J);let W=R.compileToV0Message(j),O=new q8(W);return O.signatures=U.signatures,Buffer.from(O.serialize()).toString("base64")}else{let j=[...z.staticAccountKeys];if(!j.some((L)=>L.equals(Y8)))j.push(Y8);let W={programIdIndex:j.findIndex((L)=>L.equals(Y8)),accountKeyIndexes:[],data:J.data},O=new Z8({header:z.header,staticAccountKeys:j,recentBlockhash:z.recentBlockhash,compiledInstructions:[...z.compiledInstructions,W],addressTableLookups:z.addressTableLookups}),F=new q8(O);return F.signatures=U.signatures,Buffer.from(F.serialize()).toString("base64")}}else{let z=s.from(Buffer.from(Q,"base64"));return z.add(J),Buffer.from(z.serialize({requireAllSignatures:!1})).toString("base64")}}catch(U){if(U instanceof X)throw U;try{let z=s.from(Buffer.from(Q,"base64"));return z.add(J),Buffer.from(z.serialize({requireAllSignatures:!1})).toString("base64")}catch{throw X.invalidTransactionFormat(`Invalid base64 transaction format: ${U}`)}}}}class A0{config;adapters={};_walletStrategy;_delegationStrategy;constructor(Q){this.config=Q;this.adapters.solana=new J8,this._walletStrategy=new $8(Q),this._delegationStrategy=new S8(Q)}getConfig(){return this.config}registerAdapter(Q,$){this.adapters[Q]=$}getAdapter(Q){return this.adapters[Q]}get adapter(){return{solana:this.adapters.solana}}get walletStrategy(){return this._walletStrategy}get delegationStrategy(){return this._delegationStrategy}async generate(Q,$,q,Z){if(!q||!H8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=m8($),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return this.walletStrategy.generateCode(Y,q,J)}else{let Y=$,J=m8(Y.delegatedPubkey),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return this.delegationStrategy.generateDelegatedCode(Y,J,q,U)}}async revoke(Q,$,q,Z){if(!q||!H8[q])throw X.invalidAdapter(q);if(!Z||typeof Z!=="function")throw X.invalidSignature("Missing signature function");if(Q==="wallet"){let Y=n({codeHash:g($.code),pubkey:$.pubkey,windowStart:$.timestamp}),J=await Z(Y,q);if(!J)throw X.invalidSignature("Missing signature over canonical message");return{...$,revokeSignature:J}}else{let Y=$,J=n({codeHash:g($.code),pubkey:Y.delegationProof.delegatedPubkey,windowStart:$.timestamp}),U=await Z(J,q);if(!U)throw X.invalidSignature("Missing delegated signature");return{...$,revokeSignature:U}}}validate(Q,$){if(Q==="wallet"){this.walletStrategy.validateCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithWallet($))throw X.invalidSignature("Wallet signature verification failed")}else{this.delegationStrategy.validateDelegatedCode($);let q=this.getAdapter($.chain);if(!q)throw X.invalidAdapter($.chain);if(!q.verifyWithDelegation($))throw X.invalidSignature("Delegation signature verification failed")}}}export{GQ as validateProtocolMetaFormat,I8 as truncateBits,H0 as sha256,B8 as serializeDelegationProof,n as serializeCanonicalRevoke,C as serializeCanonical,W8 as parseProtocolMeta,T8 as hmacSha256,$Q as hkdfSha256,m8 as getCanonicalMessageParts,b8 as digestToDigits,g as codeHash,_8 as buildProtocolMeta,qQ as base32EncodeCrockford,$8 as WalletStrategy,X0 as TransactionNotSignedByIssuerError,J0 as TransactionNotSignedByIntendedOwnerError,J8 as SolanaAdapter,H8 as SUPPORTED_CHAINS,P8 as SCHEME,P0 as ProtocolErrorCode,X as ProtocolError,R8 as PROTOCOL_NORMALIZATION,o as PROTOCOL_META_MAX_BYTES,Z0 as MissingMetaError,Y0 as MetaMismatchError,z0 as InvalidSignatureError,U0 as InvalidPubkeyFormatError,K0 as InvalidCodeFormatError,j0 as InvalidAdapterError,q0 as ExpiredCodeError,S8 as DelegationStrategy,y8 as CODE_MIN_LENGTH,E8 as CODE_MAX_LENGTH,UQ as CODE_DEFAULT_LENGTH,zQ as CODE_CHARSET_DIGITS,S0 as CANONICAL_REVOKE_MESSAGE_PREFIX,G0 as CANONICAL_MESSAGE_VERSION,_0 as CANONICAL_MESSAGE_PREFIX,w8 as BaseChainAdapter,A0 as ActionCodesProtocol,i as ADAPTER_CHAIN_NAME};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=5C4B07CE88B9A6EC64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"import { PROTOCOL_META_MAX_BYTES, PROTOCOL_NORMALIZATION } from \"../constants\";\n\n// v2 protocol meta\nexport interface ProtocolMetaFields {\n ver: 2;\n id: string; // code id (usually hex/hash)\n int: string; // intent owner who created the code\n iss?: string; // issuer of the code, if not provided, int is both issuer and code owner, otherwise int is the intent owner and iss is the code issuer\n p?: Record<string, unknown>; // optional parameters as JSON object\n}\n\nexport const SCHEME = \"actioncodes:\";\n\nexport function buildProtocolMeta(fields: ProtocolMetaFields): string {\n const norm = normalizeFields(fields);\n if (norm.int != null) guardParamSize(norm.int);\n\n const parts = [\n `ver=${norm.ver}`,\n `id=${encodeURIComponent(norm.id)}`,\n `int=${encodeURIComponent(norm.int)}`,\n ];\n \n // if iss is provided and is not the same as int, add it to the parts\n if (norm.iss != null && norm.iss !== norm.int) {\n parts.push(`iss=${encodeURIComponent(norm.iss)}`);\n }\n\n if (norm.p != null && Object.keys(norm.p).length > 0) {\n const paramsJson = JSON.stringify(norm.p);\n guardParamSize(paramsJson);\n parts.push(`p=${encodeURIComponent(paramsJson)}`);\n }\n\n const out = SCHEME + parts.join(\"&\");\n guardSize(out);\n return out;\n}\n\nexport function parseProtocolMeta(input: string): ProtocolMetaFields {\n if (!input.startsWith(SCHEME))\n throw new Error(\"protocol meta must start with actioncodes:\");\n const q = input.slice(SCHEME.length);\n const pairs = q.split(\"&\").filter(Boolean);\n const map = new Map<string, string>();\n for (const pair of pairs) {\n const [k, vRaw] = pair.split(\"=\", 2);\n if (!k) continue;\n const v = vRaw != null ? decodeURIComponent(vRaw) : \"\";\n map.set(k, v);\n }\n const verStr = map.get(\"ver\");\n const id = map.get(\"id\");\n const int = map.get(\"int\");\n const iss = map.get(\"iss\");\n const pStr = map.get(\"p\");\n if (verStr == null || id == null || int == null)\n throw new Error(\"protocol meta missing required fields ver or id or int\");\n const ver = Number(verStr);\n if (!Number.isInteger(ver) || ver <= 0)\n throw new Error(\"protocol meta ver must be positive integer\");\n\n let p: Record<string, unknown> | undefined;\n if (pStr != null && pStr !== \"\") {\n try {\n p = JSON.parse(pStr);\n if (typeof p !== \"object\" || p === null || Array.isArray(p)) {\n throw new Error(\"protocol meta p must be a JSON object\");\n }\n } catch {\n throw new Error(\"protocol meta p must be valid JSON\");\n }\n }\n\n const norm = normalizeFields({ ver: ver as 2, id, int, iss, p });\n if (norm.int != null) guardParamSize(norm.int);\n if (norm.iss != null) guardParamSize(norm.iss);\n if (norm.p != null) guardParamSize(JSON.stringify(norm.p));\n const unknownKeys = [...map.keys()].filter(\n (k) => k !== \"ver\" && k !== \"id\" && k !== \"int\" && k !== \"iss\" && k !== \"p\"\n );\n if (unknownKeys.length > 0)\n throw new Error(\"protocol meta contains unsupported keys\");\n guardSize(buildProtocolMeta(norm));\n return norm;\n}\n\nexport function validateProtocolMetaFormat(\n input: string\n): { ok: true } | { ok: false; reason: string } {\n try {\n parseProtocolMeta(input);\n return { ok: true };\n } catch (e: unknown) {\n return { ok: false, reason: String(e) };\n }\n}\n\nfunction normalizeFields(fields: ProtocolMetaFields): ProtocolMetaFields {\n const id = fields.id.normalize(PROTOCOL_NORMALIZATION).trim();\n const out: ProtocolMetaFields = { ver: fields.ver, id, int: fields.int };\n if (fields.int != null)\n out.int = fields.int.normalize(PROTOCOL_NORMALIZATION).trim();\n if (fields.iss != null)\n out.iss = fields.iss.normalize(PROTOCOL_NORMALIZATION).trim();\n if (fields.p != null) {\n // For JSON objects, we don't normalize the object itself, just ensure it's valid\n out.p = fields.p;\n }\n return out;\n}\n\nfunction guardSize(s: string): void {\n const bytes = new TextEncoder().encode(s);\n if (bytes.length > PROTOCOL_META_MAX_BYTES)\n throw new Error(`protocol meta exceeds ${PROTOCOL_META_MAX_BYTES} bytes`);\n}\n\nfunction guardParamSize(value: string): void {\n const bytes = new TextEncoder().encode(value);\n if (bytes.length > PROTOCOL_META_MAX_BYTES)\n throw new Error(\n `protocol meta params exceed ${PROTOCOL_META_MAX_BYTES} bytes`\n );\n}\n",
|
|
17
17
|
"import type { ActionCode, CodeGenerationConfig, Chain } from \"../types\";\nimport { hmacSha256, truncateBits, digestToDigits } from \"../utils/crypto\";\nimport { CODE_MAX_LENGTH, CODE_MIN_LENGTH } from \"../constants\";\nimport { serializeCanonical } from \"../utils/canonical\";\nimport { ProtocolError } from \"../errors\";\nimport bs58 from \"bs58\";\n\nexport class WalletStrategy {\n constructor(private config: CodeGenerationConfig) {}\n\n generateCode(\n canonicalMessage: Uint8Array,\n chain: Chain,\n signature: string\n ): ActionCode {\n const canonical = canonicalMessage;\n\n // Parse pubkey and windowStart from canonical message\n const decoded = JSON.parse(new TextDecoder().decode(canonical));\n const pubkey = decoded.pubkey;\n const windowStart = decoded.windowStart;\n\n // Use signature as the primary entropy source\n // Decode Base58 signature to bytes\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(signature);\n } catch {\n throw ProtocolError.invalidSignature(\"Invalid Base58 signature format\");\n }\n const digest = hmacSha256(signatureBytes, canonical);\n\n const clamped = Math.max(\n CODE_MIN_LENGTH,\n Math.min(CODE_MAX_LENGTH, this.config.codeLength)\n );\n const bitsNeeded = 8 * Math.ceil(clamped / 2);\n const truncated = truncateBits(digest, bitsNeeded);\n const code = digestToDigits(truncated, clamped);\n\n const actionCode: ActionCode = {\n chain,\n code,\n pubkey,\n timestamp: windowStart,\n expiresAt: windowStart + this.config.ttlMs,\n signature,\n };\n\n return actionCode;\n }\n\n validateCode(actionCode: ActionCode): void {\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt + (this.config.clockSkewMs ?? 0)) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const canonical = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n\n // Use same digest method as generation\n if (!actionCode.signature) {\n throw ProtocolError.missingRequiredField(\"signature\");\n }\n\n // Use signature as the primary entropy source\n // Decode Base58 signature to bytes\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(actionCode.signature);\n } catch {\n throw ProtocolError.invalidSignature(\"Invalid Base58 signature format\");\n }\n const digest = hmacSha256(signatureBytes, canonical);\n\n const clamped = Math.max(\n CODE_MIN_LENGTH,\n Math.min(CODE_MAX_LENGTH, this.config.codeLength)\n );\n const truncated = truncateBits(digest, 8 * Math.ceil(clamped / 2));\n const expected = digestToDigits(truncated, clamped);\n\n if (expected !== actionCode.code) {\n throw ProtocolError.invalidCode();\n }\n }\n}\n",
|
|
18
18
|
"import { WalletStrategy } from \"./WalletStrategy\";\nimport { serializeCanonical } from \"../utils/canonical\";\nimport { ProtocolError } from \"../errors\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\n\nimport type {\n DelegationProof,\n DelegatedActionCode,\n CodeGenerationConfig,\n Chain,\n} from \"../types\";\n\nexport class DelegationStrategy {\n private walletStrategy: WalletStrategy;\n private config: CodeGenerationConfig;\n\n constructor(config: CodeGenerationConfig) {\n this.config = config;\n this.walletStrategy = new WalletStrategy(config);\n }\n\n /**\n * Generate a delegated action code using a delegation proof and signature over message to generate code via delegated keypair\n */\n generateDelegatedCode(\n delegationProof: DelegationProof,\n canonicalMessage: Uint8Array,\n chain: Chain,\n signature: string // this is the signature over message to generate code via delegated keypair\n ): DelegatedActionCode {\n // Validate delegation proof format and expiration\n this.validateDelegationProof(delegationProof);\n\n // Generate code using existing WalletStrategy with the original canonical message\n // The signature was created over this message by the delegated keypair\n const result = this.walletStrategy.generateCode(\n canonicalMessage,\n chain,\n signature // Use signature from delegated keypair\n );\n\n // Create delegated action code\n const delegatedActionCode: DelegatedActionCode = {\n ...result,\n delegationProof: delegationProof,\n };\n\n return delegatedActionCode;\n }\n\n /**\n * Validate a delegated action code\n */\n validateDelegatedCode(\n actionCode: DelegatedActionCode,\n ): void {\n // Basic validation checks (similar to WalletStrategy.validateCode)\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt + (this.config.clockSkewMs ?? 0)) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n // Verify delegation proof is still valid\n this.validateDelegationProof(actionCode.delegationProof);\n\n // Verify the delegation proof matches the action code\n // The action code pubkey should be the delegated signer (who signed the message)\n if (actionCode.pubkey !== actionCode.delegationProof.delegatedPubkey) {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n actionCode.delegationProof.delegatedPubkey,\n \"Action code pubkey does not match delegated signer\"\n );\n }\n\n // Verify that the generated code doesn't expire after the delegation proof\n // This prevents codes from outliving their authorization\n if (actionCode.expiresAt > actionCode.delegationProof.expiresAt) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n actionCode.expiresAt,\n \"Action code cannot expire after delegation proof expiration\"\n );\n }\n\n // Verify delegated signature is present\n if (!actionCode.delegationProof.signature) {\n throw ProtocolError.missingRequiredField(\"delegationProof.signature\");\n }\n\n // Finally, verify the delegated signature against the canonical message\n // The signature was created by signing a message with the DELEGATED pubkey\n // even though the ActionCode.pubkey is the wallet owner\n const canonicalMessage = serializeCanonical({\n pubkey: actionCode.delegationProof.delegatedPubkey,\n windowStart: actionCode.timestamp,\n });\n\n // Decode and verify the delegated signature\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(actionCode.signature ?? \"\");\n } catch {\n throw ProtocolError.invalidSignature(\n \"Invalid Base58 delegated signature format\"\n );\n }\n\n // Verify the signature using the delegated keypair's public key\n const delegatedPubkeyBytes = bs58.decode(actionCode.delegationProof.delegatedPubkey);\n const isValidSignature = nacl.sign.detached.verify(\n canonicalMessage,\n signatureBytes,\n delegatedPubkeyBytes\n );\n\n if (!isValidSignature) {\n throw ProtocolError.invalidSignature(\n \"Delegated signature verification failed\"\n );\n }\n }\n\n /**\n * Validate a delegation proof with comprehensive input validation\n */\n private validateDelegationProof(delegationProof: DelegationProof): void {\n // Validate walletPubkey using Solana's PublicKey constructor\n if (\n !delegationProof.walletPubkey ||\n typeof delegationProof.walletPubkey !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"walletPubkey\",\n delegationProof.walletPubkey,\n \"Wallet pubkey is required and must be a string\"\n );\n }\n try {\n new PublicKey(delegationProof.walletPubkey);\n } catch {\n throw ProtocolError.invalidInput(\n \"walletPubkey\",\n delegationProof.walletPubkey,\n \"Invalid wallet pubkey format\"\n );\n }\n\n // Validate delegatedPubkey using Solana's PublicKey constructor\n if (\n !delegationProof.delegatedPubkey ||\n typeof delegationProof.delegatedPubkey !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n delegationProof.delegatedPubkey,\n \"Delegated pubkey is required and must be a string\"\n );\n }\n try {\n new PublicKey(delegationProof.delegatedPubkey);\n } catch {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n delegationProof.delegatedPubkey,\n \"Invalid delegated pubkey format\"\n );\n }\n\n // Validate chain\n if (!delegationProof.chain || typeof delegationProof.chain !== \"string\") {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain is required and must be a string\"\n );\n }\n if (\n delegationProof.chain.length === 0 ||\n delegationProof.chain.length > 50\n ) {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain must be between 1 and 50 characters\"\n );\n }\n if (!/^[a-z0-9-]+$/.test(delegationProof.chain)) {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)\"\n );\n }\n\n // Validate expiresAt\n if (\n typeof delegationProof.expiresAt !== \"number\" ||\n !Number.isInteger(delegationProof.expiresAt)\n ) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time must be a valid integer timestamp\"\n );\n }\n if (delegationProof.expiresAt <= 0) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time must be positive\"\n );\n }\n\n // Check for reasonable expiration bounds (not too far in the future)\n const now = Date.now();\n const maxFuture = 365 * 24 * 60 * 60 * 1000; // 1 year from now\n\n if (delegationProof.expiresAt > now + maxFuture) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time is too far in the future\"\n );\n }\n\n // Check if delegation has expired\n if (delegationProof.expiresAt < now) {\n throw ProtocolError.expiredCode(\n \"Delegation proof has expired\",\n delegationProof.expiresAt,\n now\n );\n }\n\n // Validate signature\n if (\n !delegationProof.signature ||\n typeof delegationProof.signature !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"signature\",\n delegationProof.signature,\n \"Delegation signature is required and must be a string\"\n );\n }\n if (\n delegationProof.signature.length === 0 ||\n delegationProof.signature.length > 200\n ) {\n throw ProtocolError.invalidInput(\n \"signature\",\n delegationProof.signature,\n \"Delegation signature must be between 1 and 200 characters\"\n );\n }\n // Note: Signature format validation will be done during actual verification\n }\n}\n",
|
|
19
|
-
"import nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n TransactionInstruction,\n MessageV0,\n} from \"@solana/web3.js\";\nimport { createMemoInstruction, MEMO_PROGRAM_ID } from \"@solana/spl-memo\";\nimport { BaseChainAdapter } from \"./BaseChainAdapter\";\nimport {\n buildProtocolMeta,\n parseProtocolMeta,\n type ProtocolMetaFields,\n} from \"../utils/protocolMeta\";\nimport { codeHash } from \"../utils/crypto\";\nimport type { ActionCode, DelegatedActionCode } from \"../types\";\nimport { ProtocolError } from \"../errors\";\nimport {\n serializeCanonical,\n serializeCanonicalRevoke,\n serializeDelegationProof,\n} from \"../utils/canonical\";\n\n/** Union of supported Solana txn types */\nexport type SolanaTransaction = Transaction | VersionedTransaction;\n\nexport const ADAPTER_CHAIN_NAME = \"solana\" as const;\n\nexport class SolanaAdapter extends BaseChainAdapter {\n /** Normalize pubkey input to PublicKey */\n private normalizePubkey(input: string | PublicKey): PublicKey {\n if (typeof input === \"string\") {\n return new PublicKey(input);\n }\n return input;\n }\n\n /** Verify the signature over canonical message (protocol-level) */\n verifyWithWallet(actionCode: ActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !actionCode.signature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(actionCode.signature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify delegation proof signature */\n verifyWithDelegation(delegatedActionCode: DelegatedActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n // this check if delegation correct\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n // this check if generated code correct by delegated keypair\n // The signature was created by signing a message with the DELEGATED pubkey\n const canonicalMessage = serializeCanonical({\n pubkey: proof.delegatedPubkey,\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(delegatedActionCode.signature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const canonicalMessageOk = nacl.sign.detached.verify(\n canonicalMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && canonicalMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify the signature over canonical revoke message (protocol-level) */\n verifyRevokeWithWallet(\n actionCode: ActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !revokeSignature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonicalRevoke({\n pubkey: actionCode.pubkey,\n codeHash: codeHash(actionCode.code),\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(revokeSignature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n verifyRevokeWithDelegation(\n delegatedActionCode: DelegatedActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature ||\n !delegatedActionCode.delegationProof\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n const revokeMessage = serializeCanonicalRevoke({\n pubkey: proof.delegatedPubkey, // Revoke signature is from delegated keypair\n codeHash: codeHash(delegatedActionCode.code),\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(revokeSignature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const revokeMessageOk = nacl.sign.detached.verify(\n revokeMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && revokeMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Create a Solana memo instruction carrying protocol meta (for SDK/clients) */\n static createProtocolMetaIx(\n meta: ProtocolMetaFields\n ): TransactionInstruction {\n const metaString = buildProtocolMeta(meta);\n return createMemoInstruction(metaString);\n }\n\n /** Extract protocol metadata string (memo) from a base64-encoded transaction, or null */\n getProtocolMeta(txString: string): string | null {\n try {\n const tx = this.deserializeTransaction(txString);\n for (const ix of this.getMemoInstructions(tx)) {\n const data = ix.data;\n try {\n const s = new TextDecoder().decode(data);\n // Optionally: test parse\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /** Deserialize a base64-encoded transaction string to SolanaTransaction */\n private deserializeTransaction(txString: string): SolanaTransaction {\n try {\n // Try versioned first (most common now)\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n return versionedTx;\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n return Transaction.from(Buffer.from(txString, \"base64\"));\n }\n } catch {\n try {\n // Fallback to legacy\n return Transaction.from(Buffer.from(txString, \"base64\"));\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n\n /** Get parsed ProtocolMeta object from base64-encoded transaction, or null if none or invalid */\n parseMeta(txString: string): ProtocolMetaFields | null {\n const s = this.getProtocolMeta(txString);\n if (!s) return null;\n return parseProtocolMeta(s);\n }\n\n /** List memo instructions from the transaction (legacy & versioned) */\n private getMemoInstructions(tx: SolanaTransaction): TransactionInstruction[] {\n if (tx instanceof Transaction) {\n return tx.instructions.filter((ix) =>\n ix.programId.equals(MEMO_PROGRAM_ID)\n );\n } else {\n // VersionedTransaction: inspect `message.compiledInstructions` / static keys\n const vtx = tx as VersionedTransaction;\n const msg = vtx.message;\n if (msg instanceof MessageV0) {\n const memos: TransactionInstruction[] = [];\n for (const ix of msg.compiledInstructions) {\n const pid = msg.staticAccountKeys[ix.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n // reconstruct a TransactionInstruction for inspection\n const keys = ix.accountKeyIndexes.map((i) => ({\n pubkey: msg.staticAccountKeys[i]!,\n isSigner: false,\n isWritable: false,\n }));\n memos.push(\n new TransactionInstruction({\n keys,\n programId: pid,\n data: ix.data as Buffer,\n })\n );\n }\n }\n return memos;\n }\n return [];\n }\n }\n\n /**\n * Validate that a base64-encoded transaction's memo meta aligns with the bound `actionCode`.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionMatchesCode(actionCode: ActionCode, txString: string): void {\n // Check expiration first\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n // Check version\n if (meta.ver !== 2) {\n throw ProtocolError.metaMismatch(\"2\", String(meta.ver), \"ver\");\n }\n\n // Check code ID - should be codeHash of the code, not the code itself\n const expectedCodeHash = codeHash(actionCode.code);\n if (meta.id !== expectedCodeHash) {\n throw ProtocolError.metaMismatch(expectedCodeHash, meta.id, \"id\");\n }\n\n // Check intended pubkey\n if (meta.int !== actionCode.pubkey) {\n throw ProtocolError.metaMismatch(actionCode.pubkey, meta.int, \"int\");\n }\n }\n\n /**\n * Verify that the base64-encoded transaction is signed by the \"intendedFor\" pubkey\n * as declared in the protocol meta of the transaction.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionSignedByIntentOwner(txString: string): void {\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n const intended = meta.int;\n const issuer = meta.iss;\n if (!intended) {\n throw ProtocolError.invalidMetaFormat(\n \"Missing 'int' (intendedFor) field\"\n );\n }\n\n let intendedPubkey: PublicKey;\n let issuerPubkey: PublicKey;\n try {\n intendedPubkey = new PublicKey(intended);\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n intended,\n \"Invalid public key format\"\n );\n }\n\n try {\n if (issuer) {\n issuerPubkey = new PublicKey(issuer);\n }\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n issuer || \"\",\n \"Invalid public key format\"\n );\n }\n\n const tx = this.deserializeTransaction(txString);\n const actualSigners: string[] = [];\n\n // For legacy Transaction\n if (tx instanceof Transaction) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n\n tx.signatures.forEach((sig) => {\n if (!sig.signature) return;\n actualSigners.push(sig.publicKey.toString());\n\n if (sig.publicKey.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && sig.publicKey.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n });\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n\n // For VersionedTransaction (MessageV0)\n if (tx instanceof VersionedTransaction) {\n const msg = tx.message;\n if (msg instanceof MessageV0) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n const signerCount = msg.header.numRequiredSignatures;\n for (let i = 0; i < signerCount; i++) {\n const key = msg.staticAccountKeys[i];\n if (key) {\n actualSigners.push(key.toString());\n if (key.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && key.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n }\n }\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n }\n\n throw ProtocolError.invalidTransactionFormat(\n \"Unsupported transaction format\"\n );\n }\n\n verifyMessageSignedByIntentOwner(\n message: string,\n signature: string,\n pubkey: string\n ): void {\n try {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = bs58.decode(signature);\n const pubkeyObj = this.normalizePubkey(pubkey);\n const pubBytes = pubkeyObj.toBytes();\n\n const isValid = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n pubBytes\n );\n\n if (!isValid) {\n throw ProtocolError.invalidSignature(\"Signature verification failed\");\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Signature verification failed\")\n ) {\n throw error;\n }\n throw ProtocolError.invalidSignature(\"Invalid signature format\");\n }\n }\n\n /**\n * Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.\n * Throws ProtocolError if the transaction already contains protocol meta.\n */\n static attachProtocolMeta(\n txString: string,\n meta: ProtocolMetaFields\n ): string {\n // Check if transaction already has protocol meta\n const adapter = new SolanaAdapter();\n const existingMeta = adapter.getProtocolMeta(txString);\n if (existingMeta) {\n throw ProtocolError.invalidTransactionFormat(\n \"Transaction already contains protocol meta. Cannot attach additional protocol meta.\"\n );\n }\n\n const metaIx = SolanaAdapter.createProtocolMetaIx(meta);\n\n try {\n // Try to deserialize as versioned first\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n const msg = versionedTx.message;\n\n // Extend static account keys with programId if missing\n const newStaticKeys = [...msg.staticAccountKeys];\n if (!newStaticKeys.some((k) => k.equals(MEMO_PROGRAM_ID))) {\n newStaticKeys.push(MEMO_PROGRAM_ID);\n }\n\n // Program ID index\n const programIdIndex = newStaticKeys.findIndex((k) =>\n k.equals(MEMO_PROGRAM_ID)\n );\n\n // Memo instruction as compiled instruction\n const compiledIx = {\n programIdIndex,\n accountKeyIndexes: [],\n data: metaIx.data,\n };\n\n const newMsg = new MessageV0({\n header: msg.header,\n staticAccountKeys: newStaticKeys,\n recentBlockhash: msg.recentBlockhash,\n compiledInstructions: [...msg.compiledInstructions, compiledIx],\n addressTableLookups: msg.addressTableLookups,\n });\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(newMsg);\n // Preserve existing signatures if any\n newTx.signatures = versionedTx.signatures;\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n }\n } catch {\n try {\n // Fallback to legacy transaction\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n}\n",
|
|
19
|
+
"import nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n TransactionInstruction,\n MessageV0,\n Connection,\n TransactionMessage,\n AddressLookupTableAccount,\n} from \"@solana/web3.js\";\nimport { createMemoInstruction, MEMO_PROGRAM_ID } from \"@solana/spl-memo\";\nimport { BaseChainAdapter } from \"./BaseChainAdapter\";\nimport {\n buildProtocolMeta,\n parseProtocolMeta,\n type ProtocolMetaFields,\n} from \"../utils/protocolMeta\";\nimport { codeHash } from \"../utils/crypto\";\nimport type { ActionCode, DelegatedActionCode } from \"../types\";\nimport { ProtocolError } from \"../errors\";\nimport {\n serializeCanonical,\n serializeCanonicalRevoke,\n serializeDelegationProof,\n} from \"../utils/canonical\";\n\n/** Union of supported Solana txn types */\nexport type SolanaTransaction = Transaction | VersionedTransaction;\n\nexport const ADAPTER_CHAIN_NAME = \"solana\" as const;\n\nexport class SolanaAdapter extends BaseChainAdapter {\n /** Normalize pubkey input to PublicKey */\n private normalizePubkey(input: string | PublicKey): PublicKey {\n if (typeof input === \"string\") {\n return new PublicKey(input);\n }\n return input;\n }\n\n /** Verify the signature over canonical message (protocol-level) */\n verifyWithWallet(actionCode: ActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !actionCode.signature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(actionCode.signature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify delegation proof signature */\n verifyWithDelegation(delegatedActionCode: DelegatedActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n // this check if delegation correct\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n // this check if generated code correct by delegated keypair\n // The signature was created by signing a message with the DELEGATED pubkey\n const canonicalMessage = serializeCanonical({\n pubkey: proof.delegatedPubkey,\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(delegatedActionCode.signature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const canonicalMessageOk = nacl.sign.detached.verify(\n canonicalMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && canonicalMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify the signature over canonical revoke message (protocol-level) */\n verifyRevokeWithWallet(\n actionCode: ActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !revokeSignature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonicalRevoke({\n pubkey: actionCode.pubkey,\n codeHash: codeHash(actionCode.code),\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(revokeSignature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n verifyRevokeWithDelegation(\n delegatedActionCode: DelegatedActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature ||\n !delegatedActionCode.delegationProof\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n const revokeMessage = serializeCanonicalRevoke({\n pubkey: proof.delegatedPubkey, // Revoke signature is from delegated keypair\n codeHash: codeHash(delegatedActionCode.code),\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(revokeSignature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const revokeMessageOk = nacl.sign.detached.verify(\n revokeMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && revokeMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Create a Solana memo instruction carrying protocol meta (for SDK/clients) */\n static createProtocolMetaIx(\n meta: ProtocolMetaFields\n ): TransactionInstruction {\n const metaString = buildProtocolMeta(meta);\n return createMemoInstruction(metaString);\n }\n\n /** Extract protocol metadata string (memo) from a base64-encoded transaction, or null */\n getProtocolMeta(txString: string): string | null {\n try {\n const tx = this.deserializeTransaction(txString);\n for (const ix of this.getMemoInstructions(tx)) {\n const data = ix.data;\n try {\n const s = new TextDecoder().decode(data);\n // Optionally: test parse\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /** Deserialize a base64-encoded transaction string to SolanaTransaction */\n private deserializeTransaction(txString: string): SolanaTransaction {\n try {\n // Try versioned first (most common now)\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n return versionedTx;\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n return Transaction.from(Buffer.from(txString, \"base64\"));\n }\n } catch {\n try {\n // Fallback to legacy\n return Transaction.from(Buffer.from(txString, \"base64\"));\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n\n /** Get parsed ProtocolMeta object from base64-encoded transaction, or null if none or invalid */\n parseMeta(txString: string): ProtocolMetaFields | null {\n const s = this.getProtocolMeta(txString);\n if (!s) return null;\n return parseProtocolMeta(s);\n }\n\n /** List memo instructions from the transaction (legacy & versioned) */\n private getMemoInstructions(tx: SolanaTransaction): TransactionInstruction[] {\n if (tx instanceof Transaction) {\n return tx.instructions.filter((ix) =>\n ix.programId.equals(MEMO_PROGRAM_ID)\n );\n } else {\n // VersionedTransaction: inspect `message.compiledInstructions` / static keys\n const vtx = tx as VersionedTransaction;\n const msg = vtx.message;\n if (msg instanceof MessageV0) {\n const memos: TransactionInstruction[] = [];\n for (const ix of msg.compiledInstructions) {\n const pid = msg.staticAccountKeys[ix.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n // reconstruct a TransactionInstruction for inspection\n const keys = ix.accountKeyIndexes.map((i) => ({\n pubkey: msg.staticAccountKeys[i]!,\n isSigner: false,\n isWritable: false,\n }));\n memos.push(\n new TransactionInstruction({\n keys,\n programId: pid,\n data: ix.data as Buffer,\n })\n );\n }\n }\n return memos;\n }\n return [];\n }\n }\n\n /**\n * Validate that a base64-encoded transaction's memo meta aligns with the bound `actionCode`.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionMatchesCode(actionCode: ActionCode, txString: string): void {\n // Check expiration first\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n // Check version\n if (meta.ver !== 2) {\n throw ProtocolError.metaMismatch(\"2\", String(meta.ver), \"ver\");\n }\n\n // Check code ID - should be codeHash of the code, not the code itself\n const expectedCodeHash = codeHash(actionCode.code);\n if (meta.id !== expectedCodeHash) {\n throw ProtocolError.metaMismatch(expectedCodeHash, meta.id, \"id\");\n }\n\n // Check intended pubkey\n if (meta.int !== actionCode.pubkey) {\n throw ProtocolError.metaMismatch(actionCode.pubkey, meta.int, \"int\");\n }\n }\n\n /**\n * Verify that the base64-encoded transaction is signed by the \"intendedFor\" pubkey\n * as declared in the protocol meta of the transaction.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionSignedByIntentOwner(txString: string): void {\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n const intended = meta.int;\n const issuer = meta.iss;\n if (!intended) {\n throw ProtocolError.invalidMetaFormat(\n \"Missing 'int' (intendedFor) field\"\n );\n }\n\n let intendedPubkey: PublicKey;\n let issuerPubkey: PublicKey;\n try {\n intendedPubkey = new PublicKey(intended);\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n intended,\n \"Invalid public key format\"\n );\n }\n\n try {\n if (issuer) {\n issuerPubkey = new PublicKey(issuer);\n }\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n issuer || \"\",\n \"Invalid public key format\"\n );\n }\n\n const tx = this.deserializeTransaction(txString);\n const actualSigners: string[] = [];\n\n // For legacy Transaction\n if (tx instanceof Transaction) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n\n tx.signatures.forEach((sig) => {\n if (!sig.signature) return;\n actualSigners.push(sig.publicKey.toString());\n\n if (sig.publicKey.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && sig.publicKey.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n });\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n\n // For VersionedTransaction (MessageV0)\n if (tx instanceof VersionedTransaction) {\n const msg = tx.message;\n if (msg instanceof MessageV0) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n const signerCount = msg.header.numRequiredSignatures;\n for (let i = 0; i < signerCount; i++) {\n const key = msg.staticAccountKeys[i];\n if (key) {\n actualSigners.push(key.toString());\n if (key.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && key.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n }\n }\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n }\n\n throw ProtocolError.invalidTransactionFormat(\n \"Unsupported transaction format\"\n );\n }\n\n verifyMessageSignedByIntentOwner(\n message: string,\n signature: string,\n pubkey: string\n ): void {\n try {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = bs58.decode(signature);\n const pubkeyObj = this.normalizePubkey(pubkey);\n const pubBytes = pubkeyObj.toBytes();\n\n const isValid = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n pubBytes\n );\n\n if (!isValid) {\n throw ProtocolError.invalidSignature(\"Signature verification failed\");\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Signature verification failed\")\n ) {\n throw error;\n }\n throw ProtocolError.invalidSignature(\"Invalid signature format\");\n }\n }\n\n /**\n * Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.\n * Throws ProtocolError if the transaction already contains protocol meta.\n * \n * @param txString - Base64-encoded transaction string\n * @param meta - Protocol metadata to attach\n * @param connection - Optional Solana connection. Required if transaction has address lookup tables\n * and instructions reference accounts from those tables.\n * @returns Base64-encoded transaction with protocol meta attached\n */\n static async attachProtocolMeta(\n txString: string,\n meta: ProtocolMetaFields,\n connection?: Connection\n ): Promise<string> {\n // Check if transaction already has protocol meta\n const adapter = new SolanaAdapter();\n const existingMeta = adapter.getProtocolMeta(txString);\n if (existingMeta) {\n throw ProtocolError.invalidTransactionFormat(\n \"Transaction already contains protocol meta. Cannot attach additional protocol meta.\"\n );\n }\n\n const metaIx = SolanaAdapter.createProtocolMetaIx(meta);\n\n try {\n // Try to deserialize as versioned first\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n const msg = versionedTx.message;\n\n // Check if we need to handle address lookup tables\n const hasAddressTableLookups =\n msg.addressTableLookups && msg.addressTableLookups.length > 0;\n\n // Check if any instruction references accounts beyond static account keys\n // (which would indicate they reference lookup table accounts)\n const numStaticAccounts = msg.staticAccountKeys.length;\n const referencesLookupAccounts = msg.compiledInstructions.some((ix) =>\n ix.accountKeyIndexes.some((idx) => idx >= numStaticAccounts)\n );\n\n // If we have lookup tables and instructions reference them, we need a connection\n if (hasAddressTableLookups && referencesLookupAccounts) {\n if (!connection) {\n throw ProtocolError.invalidTransactionFormat(\n \"Connection required: Transaction uses address lookup tables and instructions reference accounts from those tables. A Solana connection is needed to resolve lookup tables and correctly recalculate account indices.\"\n );\n }\n\n // Resolve address lookup tables\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n for (const lookup of msg.addressTableLookups) {\n try {\n const lookupTableAccount = await connection.getAddressLookupTable(\n lookup.accountKey\n );\n if (lookupTableAccount.value) {\n addressLookupTableAccounts.push(lookupTableAccount.value);\n }\n } catch (error) {\n throw ProtocolError.invalidTransactionFormat(\n `Failed to resolve address lookup table ${lookup.accountKey.toString()}: ${error}`\n );\n }\n }\n\n // Decompile the message with resolved lookup tables\n const decompiledMessage = TransactionMessage.decompile(msg, {\n addressLookupTableAccounts,\n });\n\n // Add memo instruction (programId will be added automatically during compilation)\n decompiledMessage.instructions.push(metaIx);\n\n // Recompile - this will correctly recalculate all account indices\n const recompiledMessage =\n decompiledMessage.compileToV0Message(addressLookupTableAccounts);\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(recompiledMessage);\n // Preserve existing signatures if any\n newTx.signatures = versionedTx.signatures;\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n } else {\n // Simple case: no lookup tables or no instructions reference them\n // Use the original simple approach\n const newStaticKeys = [...msg.staticAccountKeys];\n if (!newStaticKeys.some((k) => k.equals(MEMO_PROGRAM_ID))) {\n newStaticKeys.push(MEMO_PROGRAM_ID);\n }\n\n // Program ID index\n const programIdIndex = newStaticKeys.findIndex((k) =>\n k.equals(MEMO_PROGRAM_ID)\n );\n\n // Memo instruction as compiled instruction\n const compiledIx = {\n programIdIndex,\n accountKeyIndexes: [],\n data: metaIx.data,\n };\n\n const newMsg = new MessageV0({\n header: msg.header,\n staticAccountKeys: newStaticKeys,\n recentBlockhash: msg.recentBlockhash,\n compiledInstructions: [...msg.compiledInstructions, compiledIx],\n addressTableLookups: msg.addressTableLookups,\n });\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(newMsg);\n // Preserve existing signatures if any\n newTx.signatures = versionedTx.signatures;\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n }\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n }\n } catch (error) {\n // If it's already a ProtocolError, re-throw it\n if (error instanceof ProtocolError) {\n throw error;\n }\n\n try {\n // Fallback to legacy transaction\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n `Invalid base64 transaction format: ${error}`\n );\n }\n }\n }\n}\n",
|
|
20
20
|
"import type {\n ActionCode,\n CodeGenerationConfig,\n DelegationProof,\n DelegatedActionCode,\n Chain,\n ActionCodeRevoke,\n DelegatedActionCodeRevoke,\n} from \"./types\";\nimport type { ChainAdapter, SignFn } from \"./adapters/BaseChainAdapter\";\nimport { WalletStrategy } from \"./strategy/WalletStrategy\";\nimport { DelegationStrategy } from \"./strategy/DelegationStrategy\";\nimport { SolanaAdapter } from \"./adapters/SolanaAdapter\";\nimport { ProtocolError } from \"./errors\";\nimport { SUPPORTED_CHAINS } from \"./constants\";\nimport {\n getCanonicalMessageParts,\n serializeCanonicalRevoke,\n} from \"./utils/canonical\";\nimport { codeHash } from \"./utils/crypto\";\n\nexport class ActionCodesProtocol {\n private adapters: Record<string, ChainAdapter> = {};\n private _walletStrategy: WalletStrategy;\n private _delegationStrategy: DelegationStrategy;\n\n constructor(private readonly config: CodeGenerationConfig) {\n // Register default adapters\n this.adapters.solana = new SolanaAdapter();\n\n // Initialize strategies\n this._walletStrategy = new WalletStrategy(config);\n this._delegationStrategy = new DelegationStrategy(config);\n }\n\n public getConfig(): CodeGenerationConfig {\n return this.config;\n }\n\n /** Register a chain adapter */\n registerAdapter(chain: string, adapter: ChainAdapter): void {\n this.adapters[chain] = adapter;\n }\n\n /** Get a registered adapter */\n getAdapter(chain: string): ChainAdapter | undefined {\n return this.adapters[chain];\n }\n\n /** Typed access to specific adapters */\n get adapter() {\n return {\n solana: this.adapters.solana as unknown as SolanaAdapter,\n };\n }\n\n /** Access to strategies */\n get walletStrategy() {\n return this._walletStrategy;\n }\n\n get delegationStrategy() {\n return this._delegationStrategy;\n }\n\n // Generate code\n async generate(\n strategy: \"wallet\",\n pubkey: string,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCode>;\n async generate(\n strategy: \"delegation\",\n delegationProof: DelegationProof,\n chain: Chain,\n signFn: SignFn\n ): Promise<DelegatedActionCode>;\n async generate(\n strategy: \"wallet\" | \"delegation\",\n pubkeyOrProof: string | DelegationProof,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCode | DelegatedActionCode> {\n if (!chain || !SUPPORTED_CHAINS[chain]) {\n throw ProtocolError.invalidAdapter(chain);\n }\n\n if (!signFn || typeof signFn !== \"function\") {\n throw ProtocolError.invalidSignature(\"Missing signature function\");\n }\n\n if (strategy === \"wallet\") {\n const canonical = getCanonicalMessageParts(pubkeyOrProof as string);\n // For now we have to pass Solana as only chain\n // later we will allow to pass the chain dynamically\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be Uint8Array (canonical message)\n if (!signature) {\n throw ProtocolError.invalidSignature(\n \"Missing signature over canonical message\"\n );\n }\n return this.walletStrategy.generateCode(canonical, chain, signature);\n } else {\n const proof = pubkeyOrProof as DelegationProof;\n const canonical = getCanonicalMessageParts(proof.delegatedPubkey); // Use delegated pubkey for signing\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be DelegationProof\n if (!signature) {\n throw ProtocolError.invalidSignature(\"Missing delegated signature\");\n }\n return this.delegationStrategy.generateDelegatedCode(\n proof as DelegationProof,\n canonical,\n chain,\n signature\n );\n }\n }\n\n async revoke(\n strategy: \"wallet\",\n actionCode: ActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCodeRevoke>;\n async revoke(\n strategy: \"delegation\",\n actionCode: DelegatedActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<DelegatedActionCodeRevoke>;\n async revoke(\n strategy: \"wallet\" | \"delegation\",\n actionCode: ActionCode | DelegatedActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCodeRevoke | DelegatedActionCodeRevoke> {\n if (!chain || !SUPPORTED_CHAINS[chain]) {\n throw ProtocolError.invalidAdapter(chain);\n }\n\n if (!signFn || typeof signFn !== \"function\") {\n throw ProtocolError.invalidSignature(\"Missing signature function\");\n }\n\n if (strategy === \"wallet\") {\n const canonical = serializeCanonicalRevoke({\n codeHash: codeHash(actionCode.code),\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n // For now we have to pass Solana as only chain\n // later we will allow to pass the chain dynamically\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be Uint8Array (canonical message)\n if (!signature) {\n throw ProtocolError.invalidSignature(\n \"Missing signature over canonical message\"\n );\n }\n\n return {\n ...actionCode,\n revokeSignature: signature,\n };\n } else {\n const delegatedActionCode = actionCode as DelegatedActionCode;\n const canonical = serializeCanonicalRevoke({\n codeHash: codeHash(actionCode.code),\n pubkey: delegatedActionCode.delegationProof.delegatedPubkey, // Use delegated pubkey for signature\n windowStart: actionCode.timestamp,\n });\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be DelegationProof\n if (!signature) {\n throw ProtocolError.invalidSignature(\"Missing delegated signature\");\n }\n\n return {\n ...actionCode,\n revokeSignature: signature,\n };\n }\n }\n\n // Overloaded validateCode methods with strategy parameter\n validate(strategy: \"wallet\", actionCode: ActionCode): void;\n validate(strategy: \"delegation\", actionCode: DelegatedActionCode): void;\n validate(\n strategy: \"wallet\" | \"delegation\",\n actionCode: ActionCode | DelegatedActionCode\n ): void {\n if (strategy === \"wallet\") {\n // This will throw if validation fails\n this.walletStrategy.validateCode(actionCode as ActionCode);\n\n const adapter = this.getAdapter(actionCode.chain);\n if (!adapter) throw ProtocolError.invalidAdapter(actionCode.chain);\n\n const ok = adapter.verifyWithWallet(actionCode);\n\n if (!ok) {\n throw ProtocolError.invalidSignature(\n \"Wallet signature verification failed\"\n );\n }\n } else {\n this.delegationStrategy.validateDelegatedCode(\n actionCode as DelegatedActionCode\n );\n\n // Then verify the delegation proof signature\n const adapter = this.getAdapter(actionCode.chain);\n if (!adapter) throw ProtocolError.invalidAdapter(actionCode.chain);\n\n const ok = adapter.verifyWithDelegation(\n actionCode as DelegatedActionCode\n );\n\n if (!ok) {\n throw ProtocolError.invalidSignature(\n \"Delegation signature verification failed\"\n );\n }\n }\n }\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "5C4B07CE88B9A6EC64756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|